--- /srv/rebuilderd/tmp/rebuilderdOs4zrY/inputs/libstdc++-15-doc_15.2.0-4_all.deb +++ /srv/rebuilderd/tmp/rebuilderdOs4zrY/out/libstdc++-15-doc_15.2.0-4_all.deb ├── file list │ @@ -1,3 +1,3 @@ │ -rw-r--r-- 0 0 0 4 2025-09-11 04:56:06.000000 debian-binary │ --rw-r--r-- 0 0 0 178060 2025-09-11 04:56:06.000000 control.tar.xz │ --rw-r--r-- 0 0 0 10306984 2025-09-11 04:56:06.000000 data.tar.xz │ +-rw-r--r-- 0 0 0 178188 2025-09-11 04:56:06.000000 control.tar.xz │ +-rw-r--r-- 0 0 0 10339932 2025-09-11 04:56:06.000000 data.tar.xz ├── control.tar.xz │ ├── control.tar │ │ ├── ./md5sums │ │ │ ├── ./md5sums │ │ │ │┄ Files differ │ │ │ ├── line order │ │ │ │ @@ -452,79 +452,72 @@ │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00347_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00350.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00350_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00353.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00353.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00353_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00356.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00356.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00356_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00359.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00359_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00362.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00362.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00362_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00365.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00365_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00368.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00368.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00368_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00371.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00371_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00374.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00374_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00377.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00377.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00377_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00380.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00380_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00383.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00383.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00383_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00386.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00386.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00386_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00389.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00389.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00389_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00392.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00392_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00395.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00395.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00395_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00398.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00398.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00398_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00401.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00401_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00404.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00404_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00407.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00407.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00407_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00410.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00410.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00410_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00413.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00413_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00416.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00416.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00416_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00419.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00419.js │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00419_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00422.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00422.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00422_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00425.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00425.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00425_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00428.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00428.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00428_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00431.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00431.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00431_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00434.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00434.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00434_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00437.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00437.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00437_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00440.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00440.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00440_source.html │ │ │ │ @@ -537,316 +530,325 @@ │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00449.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00449.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00449_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00452.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00452.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00452_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00455.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00455.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00455_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00458.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00458.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00458_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00461.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00461.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00461_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00464.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00464.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00464_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00467.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00467.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00467_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00470.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00470.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00470_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00473.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00473_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00476.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00476_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00479.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00479.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00479_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00482.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00482_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00485.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00485_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00488.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00488_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00491.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00491_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00494.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00494_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00497.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00497.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00497_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00500.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00500_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00503.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00503.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00503_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00506.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00506.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00506_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00509.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00509.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00509_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00512.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00512.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00512_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00515.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00515.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00515_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00521.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00521.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00521_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00524.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00524.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00524_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00527.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00527.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00527_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00530.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00530.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00530_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00533.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00533.js │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00533_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00536.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00536_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00539.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00539_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00542.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00542_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00545.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00545.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00545_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00548.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00548_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00551.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00551_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00554.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00554.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00554_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00557.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00557.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00557_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00560.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00560.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00560_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00563.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00563_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00566.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00566.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00566_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00569.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00569_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00572.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00572.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00572_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00575.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00575.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00575_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00578.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00578_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00581.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00581.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00581_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00584.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00584.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00584_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00587.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00587_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00590.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00590_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00596.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00596_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00599.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00599_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00602.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00602_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00593.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00593.js │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00593_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00608.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00608_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00611.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00611.js │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00611_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00614.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00614.js │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00614_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00617.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00617.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00617_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00620.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00620.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00620_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00623.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00623_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00626.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00626.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00626_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00629.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00629_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00632.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00632_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00635.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00635.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00635_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00638.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00638.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00638_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00641.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00641.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00641_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00644.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00644_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00647.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00647.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00647_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00650.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00650.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00650_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00653.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00653_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00656.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00656.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00656_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00659.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00659.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00659_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00662.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00662.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00662_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00665.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00665.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00665_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00668.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00668_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00671.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00671.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00671_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00674.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00674_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00677.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00677.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00677_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00680.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00680.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00680_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00683.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00683.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00683_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00686.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00686_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00689.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00689_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00695.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00695_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00698.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00698.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00698_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00701.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00701.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00701_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00704.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00704.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00704_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00707.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00707.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00707_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00710.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00710.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00710_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00713.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00713.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00713_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00716.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00716.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00716_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00719.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00719.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00719_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00722.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00722.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00722_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00725.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00725.js │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00725_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00728.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00728.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00728_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00731.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00731.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00731_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00734.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00734.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00734_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00737.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00737.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00737_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00740.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00740_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00743.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00743.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00743_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00746.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00746.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00746_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00749.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00749_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00752.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00752.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00752_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00755.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00755.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00755_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00758.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00758.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00758_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00761.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00761.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00761_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00764.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00764.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00764_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00767.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00767.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00767_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00770.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00770_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00773.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00773_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00776.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00776_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00779.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00779.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00779_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00782.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00782.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00782_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00785.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00785_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00788.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00788_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00791.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00791_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00794.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00794.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00794_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00797.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00797.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00797_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00800.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00800.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00800_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00803.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00803.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00803_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00806.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00806_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00809_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00812.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00812_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00815.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00815.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00815_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00818.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00818_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00821.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00821_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00824.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00824_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00827.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00827.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00827_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00830.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00830_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00833.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00833_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00836.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00836.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00836_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00839.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00839.js │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00839_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00842.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00842_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00845.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00845.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00845_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00848.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00848_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00851.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00851_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00854.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00854_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00857.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00857_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00860.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00860_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00863.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00863_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00869.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00866.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00866_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00869_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00872.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00872_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00875.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00875_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00878.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00878.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00878_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00881.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00881_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00884.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00884_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00887.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00887_source.html │ │ │ │ @@ -855,30 +857,28 @@ │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00893.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00893_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00896.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00896_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00899.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00899_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00902.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00902.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00902_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00905.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00905_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00908.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00908_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00911.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00911_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00914.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00914.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00914_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00917.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00917_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00920.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00920.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00920_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00923.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00923.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00923_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00926.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00926.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00926_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00929.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00929_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00932.html │ │ │ │ @@ -893,57 +893,57 @@ │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00944.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00944.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00944_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00947.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00947.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00947_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00950.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00950.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00950_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00953.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00953.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00953_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00956.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00956.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00956_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00959.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00959.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00959_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00962.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00962_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00965.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00965.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00965_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00968.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00968.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00968_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00971.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00971.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00971_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00974.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00974.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00974_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00977.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00977.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00977_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00980.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00980.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00980_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00983.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00983.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00983_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00986.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00986.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00986_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00989.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a00989.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00989_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00992.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00992.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00992_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00995.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00995.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00995_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00998.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a00998.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a00998_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01001.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01001_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01004.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01004_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01007.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01007_source.html │ │ │ │ @@ -962,48 +962,48 @@ │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01022.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01022.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01022_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01025.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01025.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01025_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01028.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01028.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01028_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01031.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01031.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01031_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01034.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01034.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01034_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01037.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01037.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01037_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01040.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01040.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01040_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01043.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01043.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01043_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01046.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01046.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01046_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01049.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01049.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01049_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01052.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01052.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01052_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01055.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01055.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01055_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01058.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01058.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01058_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01061.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01061.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01061_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01064.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01064.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01064_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01067.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01067.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01067_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01070.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01070.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01070_source.html │ │ │ │ @@ -1016,15 +1016,14 @@ │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01079.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01079.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01079_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01082.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01082.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01082_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01085.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01085.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01085_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01088.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01088.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01088_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01091.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01091.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01091_source.html │ │ │ │ @@ -1040,206 +1039,207 @@ │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01103.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01103.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01103_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01106.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01106.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01106_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01109.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01109.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01109_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01112.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01112.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01112_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01115.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01115.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01115_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01118.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01118.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01118_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01121.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01121.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01121_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01124.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01124.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01124_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01127.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01127.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01127_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01130.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01130.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01130_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01133.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01133.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01133_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01136.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01136.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01136_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01139.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01139.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01139_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01142_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01145_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01148.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01148_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01151_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01154_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01157_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01160_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01163_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01166_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01169_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01172_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01175_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01181.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01178_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01181_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01184.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01184_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01187.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01187_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01190.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01190_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01193.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01193.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01193_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01196.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01196.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01196_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01199.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01199_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01202.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01202.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01202_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01205.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01205_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01208.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01208.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01208_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01211.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01211.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01211_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01214.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01214_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01217.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01217.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01217_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01220.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01220.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01220_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01223.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01223.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01223_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01226.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01226.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01226_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01229.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01229.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01229_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01232.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01232_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01235.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01235_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01238.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01238.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01238_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01241.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01241.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01241_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01244.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01244.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01244_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01247.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01247.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01247_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01250.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01250.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01250_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01253.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01253_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01256.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01256.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01256_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01259.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01259.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01259_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01262.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01262.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01262_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01265.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01265.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01265_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01268.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01268_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01271.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01271.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01271_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01274.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01274.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01274_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01277.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01277.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01277_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01280.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01280_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01283.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01283.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01283_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01286.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01286.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01286_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01289.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01289.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01289_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01292.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01292.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01292_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01295.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01295_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01298.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01298_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01301.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01301.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01301_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01304.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01304.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01304_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01307.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01307.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01307_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01310.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01310_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01313.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01313.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01313_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01316.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01316.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01316_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01325.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01325.js │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01325_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01346.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01346.js │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01346_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01349.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01349.js │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01349_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01364.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01364_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01322.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01322.js │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01322_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01331.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01331.js │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01331_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01337.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01337_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01355.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01355.js │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01355_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01367.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01367_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01370.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01370.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01370_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01382.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01382.js │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01382_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01388.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01388_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01379.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01379_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01385.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01385.js │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01385_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01391.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01391.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01391_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01394.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01394.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01394_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01397.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01397_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01409.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01409_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01424.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01424_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01442.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01442.js │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01442_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01445.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01445_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01433.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01433.js │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01433_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01448.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01448_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01451.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01451.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01451_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01454.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01454.js │ │ │ │ @@ -1256,46 +1256,46 @@ │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01469.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01469.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01469_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01472.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01472.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01472_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01475.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01475.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01475_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01478.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01478.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01478_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01481.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01481.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01481_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01484.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01484_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01487.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01487.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01487_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01490.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01490.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01490_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01493.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01493.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01493_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01496.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01496.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01496_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01499.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01499.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01499_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01502.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01502.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01502_source.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01508.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01508.js │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01508_source.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01505.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01505.js │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01505_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01511.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01511.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01511_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01514.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01514.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01514_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01517.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01517.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01517_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01520.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01520.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01520_source.html │ │ │ │ @@ -1306,44 +1306,44 @@ │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01526_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01529.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01529_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01532.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01532.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01532_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01535.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01535.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01535_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01538.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01538.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01538_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01541.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01541_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01544.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01544_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01547.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01547_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01550.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01550.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01550_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01553.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01553.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01553_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01556.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01556.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01556_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01559.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01559.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01559_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01562.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01562.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01562_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01565.html │ │ │ │ +usr/share/doc/gcc-15-base/libstdc++/user/a01565.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01565_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01568.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01568_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01571.html │ │ │ │ -usr/share/doc/gcc-15-base/libstdc++/user/a01571.js │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01571_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01574.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01574_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01577.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01577_source.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01580.html │ │ │ │ usr/share/doc/gcc-15-base/libstdc++/user/a01580_source.html ├── data.tar.xz │ ├── data.tar │ │ ├── file list │ │ │ @@ -186,32 +186,32 @@ │ │ │ -rw-r--r-- 0 root (0) root (0) 24047 2025-08-08 06:51:45.000000 ./usr/share/doc/gcc-15-base/libstdc++/manual/using_exceptions.html │ │ │ -rw-r--r-- 0 root (0) root (0) 38949 2025-08-08 06:51:45.000000 ./usr/share/doc/gcc-15-base/libstdc++/manual/using_headers.html │ │ │ -rw-r--r-- 0 root (0) root (0) 11874 2025-08-08 06:51:45.000000 ./usr/share/doc/gcc-15-base/libstdc++/manual/using_macros.html │ │ │ -rw-r--r-- 0 root (0) root (0) 6686 2025-08-08 06:51:45.000000 ./usr/share/doc/gcc-15-base/libstdc++/manual/using_namespaces.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5620 2025-08-08 06:51:45.000000 ./usr/share/doc/gcc-15-base/libstdc++/manual/utilities.html │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/ │ │ │ -rw-r--r-- 0 root (0) root (0) 2185 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/_formulas.tex.gz │ │ │ --rw-r--r-- 0 root (0) root (0) 2857 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/_formulas_dark.log │ │ │ +-rw-r--r-- 0 root (0) root (0) 2856 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/_formulas_dark.log │ │ │ -rw-r--r-- 0 root (0) root (0) 2200 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/_formulas_dark.tex.gz │ │ │ --rw-r--r-- 0 root (0) root (0) 2799 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00002.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16501 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00002_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2791 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00002.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14894 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00002_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 2811 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00005.html │ │ │ -rw-r--r-- 0 root (0) root (0) 20732 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00005_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2799 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00008.html │ │ │ --rw-r--r-- 0 root (0) root (0) 96815 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00008_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3569 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00011.html │ │ │ --rw-r--r-- 0 root (0) root (0) 29889 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00011_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2791 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00014.html │ │ │ --rw-r--r-- 0 root (0) root (0) 64582 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00014_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2803 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00008.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10289 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00008_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2791 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00011.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 64582 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00011_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2799 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00014.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16501 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00014_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 2799 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00017.html │ │ │ -rw-r--r-- 0 root (0) root (0) 9354 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00017_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2791 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00020.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14894 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00020_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2803 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00023.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10289 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00023_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2799 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00020.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 96815 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00020_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3569 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00023.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 29889 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00023_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 31307 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00026_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 21695 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00029.html │ │ │ -rw-r--r-- 0 root (0) root (0) 183 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00029.js │ │ │ -rw-r--r-- 0 root (0) root (0) 163611 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00029_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 26080 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00032.html │ │ │ -rw-r--r-- 0 root (0) root (0) 97 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00032.js │ │ │ -rw-r--r-- 0 root (0) root (0) 113084 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00032_source.html │ │ │ @@ -451,931 +451,931 @@ │ │ │ -rw-r--r-- 0 root (0) root (0) 12666 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00335_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 7617 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00338.html │ │ │ -rw-r--r-- 0 root (0) root (0) 36997 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00338_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4470 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00341.html │ │ │ -rw-r--r-- 0 root (0) root (0) 15534 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00341_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4969 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00344.html │ │ │ -rw-r--r-- 0 root (0) root (0) 15523 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00344_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5721 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00347.html │ │ │ --rw-r--r-- 0 root (0) root (0) 186 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00347.js │ │ │ --rw-r--r-- 0 root (0) root (0) 49351 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00347_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5084 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00350.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12293 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00350_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6748 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00353.html │ │ │ --rw-r--r-- 0 root (0) root (0) 272 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00353.js │ │ │ --rw-r--r-- 0 root (0) root (0) 53230 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00353_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6525 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00356.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9558 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00356_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3970 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00359.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17241 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00359_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7673 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00362.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15050 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00362_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3544 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00365.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12222 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00365_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7533 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00368.html │ │ │ --rw-r--r-- 0 root (0) root (0) 105 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00368.js │ │ │ --rw-r--r-- 0 root (0) root (0) 13263 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00368_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4794 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00371.html │ │ │ --rw-r--r-- 0 root (0) root (0) 212152 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00371_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 182528 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00374.html │ │ │ --rw-r--r-- 0 root (0) root (0) 96510 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00374_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3838 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00377.html │ │ │ --rw-r--r-- 0 root (0) root (0) 120857 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00377_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14228 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00380.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37863 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00380_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 127942 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00383.html │ │ │ --rw-r--r-- 0 root (0) root (0) 103897 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00383_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35679 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00386.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 75250 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00347.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3594 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00347.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 309414 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00347_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3838 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00350.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 120857 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00350_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14172 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00353.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 476 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00353.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 90038 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00353_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14874 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00356.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 738 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00356.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 73399 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00356_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5573 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00359.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 123337 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00359_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 30946 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00362.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6073 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00362.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 99245 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00362_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 18989 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00365.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 136851 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00365_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14228 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00368.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37863 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00368_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4028 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00374.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 46401 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00374_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 48404 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00377.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5907 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00377.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 276768 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00377_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7673 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00380.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15050 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00380_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 19366 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00383.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 476 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00383.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 181674 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00383_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 44833 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00386.html │ │ │ -rw-r--r-- 0 root (0) root (0) 177 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00386.js │ │ │ --rw-r--r-- 0 root (0) root (0) 477781 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00386_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 44833 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00389.html │ │ │ --rw-r--r-- 0 root (0) root (0) 177 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00389.js │ │ │ --rw-r--r-- 0 root (0) root (0) 552466 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00389_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4028 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00392.html │ │ │ --rw-r--r-- 0 root (0) root (0) 46401 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00392_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6029 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00395.html │ │ │ --rw-r--r-- 0 root (0) root (0) 170 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00395.js │ │ │ --rw-r--r-- 0 root (0) root (0) 25480 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00395_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5846 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00398.html │ │ │ --rw-r--r-- 0 root (0) root (0) 319 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00398.js │ │ │ --rw-r--r-- 0 root (0) root (0) 20559 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00398_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6928 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00401.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35083 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00401_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12049 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00404.html │ │ │ --rw-r--r-- 0 root (0) root (0) 104120 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00404_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4379 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00407.html │ │ │ --rw-r--r-- 0 root (0) root (0) 56401 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00407_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15128 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00410.html │ │ │ --rw-r--r-- 0 root (0) root (0) 307 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00410.js │ │ │ --rw-r--r-- 0 root (0) root (0) 446116 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00410_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10121 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00413.html │ │ │ --rw-r--r-- 0 root (0) root (0) 483024 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00413_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11048 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00416.html │ │ │ --rw-r--r-- 0 root (0) root (0) 277 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00416.js │ │ │ --rw-r--r-- 0 root (0) root (0) 61499 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00416_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14172 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00419.html │ │ │ --rw-r--r-- 0 root (0) root (0) 476 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00419.js │ │ │ --rw-r--r-- 0 root (0) root (0) 90038 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00419_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17644 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00422.html │ │ │ --rw-r--r-- 0 root (0) root (0) 547 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00422.js │ │ │ --rw-r--r-- 0 root (0) root (0) 247819 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00422_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 19366 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00425.html │ │ │ --rw-r--r-- 0 root (0) root (0) 476 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00425.js │ │ │ --rw-r--r-- 0 root (0) root (0) 181674 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00425_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17779 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00428.html │ │ │ --rw-r--r-- 0 root (0) root (0) 547 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00428.js │ │ │ --rw-r--r-- 0 root (0) root (0) 234310 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00428_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 18391 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00431.html │ │ │ --rw-r--r-- 0 root (0) root (0) 547 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00431.js │ │ │ --rw-r--r-- 0 root (0) root (0) 268134 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00431_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13906 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00434.html │ │ │ --rw-r--r-- 0 root (0) root (0) 242 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00434.js │ │ │ --rw-r--r-- 0 root (0) root (0) 348237 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00434_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12807 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00437.html │ │ │ --rw-r--r-- 0 root (0) root (0) 612 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00437.js │ │ │ --rw-r--r-- 0 root (0) root (0) 496039 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00437_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11527 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00440.html │ │ │ --rw-r--r-- 0 root (0) root (0) 476 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00440.js │ │ │ --rw-r--r-- 0 root (0) root (0) 467090 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00440_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8837 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00443.html │ │ │ --rw-r--r-- 0 root (0) root (0) 85 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00443.js │ │ │ --rw-r--r-- 0 root (0) root (0) 320544 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00443_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6005 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00446.html │ │ │ --rw-r--r-- 0 root (0) root (0) 209 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00446.js │ │ │ --rw-r--r-- 0 root (0) root (0) 67774 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00446_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6830 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00449.html │ │ │ --rw-r--r-- 0 root (0) root (0) 251 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00449.js │ │ │ --rw-r--r-- 0 root (0) root (0) 46496 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00449_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10360 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00452.html │ │ │ --rw-r--r-- 0 root (0) root (0) 284 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00452.js │ │ │ --rw-r--r-- 0 root (0) root (0) 149260 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00452_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6720 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00455.html │ │ │ --rw-r--r-- 0 root (0) root (0) 28703 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00455_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4803 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00458.html │ │ │ --rw-r--r-- 0 root (0) root (0) 65060 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00458_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 48404 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00461.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5907 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00461.js │ │ │ --rw-r--r-- 0 root (0) root (0) 276768 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00461_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4293 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00464.html │ │ │ --rw-r--r-- 0 root (0) root (0) 67041 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00464_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16853 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00467.html │ │ │ --rw-r--r-- 0 root (0) root (0) 485 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00467.js │ │ │ --rw-r--r-- 0 root (0) root (0) 364938 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00467_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 33659 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00470.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2024 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00470.js │ │ │ --rw-r--r-- 0 root (0) root (0) 144567 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00470_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4236 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00476.html │ │ │ --rw-r--r-- 0 root (0) root (0) 43611 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00476_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3029 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00479.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8478 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00479_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3839 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00482.html │ │ │ --rw-r--r-- 0 root (0) root (0) 93449 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00482_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4371 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00485.html │ │ │ --rw-r--r-- 0 root (0) root (0) 55998 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00485_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5564 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00488.html │ │ │ --rw-r--r-- 0 root (0) root (0) 96776 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00488_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4666 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00491.html │ │ │ --rw-r--r-- 0 root (0) root (0) 99625 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00491_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3843 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00494.html │ │ │ --rw-r--r-- 0 root (0) root (0) 43796 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00494_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8866 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00497.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1714 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00497.js │ │ │ --rw-r--r-- 0 root (0) root (0) 64279 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00497_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3835 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00500.html │ │ │ --rw-r--r-- 0 root (0) root (0) 89382 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00500_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4335 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00503.html │ │ │ --rw-r--r-- 0 root (0) root (0) 47732 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00503_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12798 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00506.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2872 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00506.js │ │ │ --rw-r--r-- 0 root (0) root (0) 41592 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00506_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 30946 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00509.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6073 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00509.js │ │ │ --rw-r--r-- 0 root (0) root (0) 99245 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00509_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5573 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00512.html │ │ │ --rw-r--r-- 0 root (0) root (0) 123337 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00512_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 53300 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00515.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2434 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00515.js │ │ │ --rw-r--r-- 0 root (0) root (0) 645393 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00515_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 42987 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00521.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3355 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00521.js │ │ │ --rw-r--r-- 0 root (0) root (0) 1296303 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00521_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7939 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00524.html │ │ │ --rw-r--r-- 0 root (0) root (0) 328 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00524.js │ │ │ --rw-r--r-- 0 root (0) root (0) 36332 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00524_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9196 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00527.html │ │ │ --rw-r--r-- 0 root (0) root (0) 614 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00527.js │ │ │ --rw-r--r-- 0 root (0) root (0) 50195 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00527_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3541 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00530.html │ │ │ --rw-r--r-- 0 root (0) root (0) 26387 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00530_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5981 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00533.html │ │ │ --rw-r--r-- 0 root (0) root (0) 93 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00533.js │ │ │ --rw-r--r-- 0 root (0) root (0) 94591 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00533_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5002 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00536.html │ │ │ --rw-r--r-- 0 root (0) root (0) 75744 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00536_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3044 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00542.html │ │ │ --rw-r--r-- 0 root (0) root (0) 36846 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00542_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7454 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00545.html │ │ │ --rw-r--r-- 0 root (0) root (0) 53475 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00545_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9765 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00548.html │ │ │ --rw-r--r-- 0 root (0) root (0) 116187 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00548_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4023 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00551.html │ │ │ --rw-r--r-- 0 root (0) root (0) 51389 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00551_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15722 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00554.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1207 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00554.js │ │ │ --rw-r--r-- 0 root (0) root (0) 44744 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00554_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4898 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00557.html │ │ │ --rw-r--r-- 0 root (0) root (0) 360310 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00557_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7532 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00560.html │ │ │ --rw-r--r-- 0 root (0) root (0) 312 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00560.js │ │ │ --rw-r--r-- 0 root (0) root (0) 411804 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00560_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7932 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00563.html │ │ │ --rw-r--r-- 0 root (0) root (0) 256296 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00563_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 28104 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00566.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1319 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00566.js │ │ │ --rw-r--r-- 0 root (0) root (0) 587457 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00566_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13340 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00569.html │ │ │ --rw-r--r-- 0 root (0) root (0) 121797 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00569_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8018 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00572.html │ │ │ --rw-r--r-- 0 root (0) root (0) 170 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00572.js │ │ │ --rw-r--r-- 0 root (0) root (0) 81354 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00572_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5136 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00575.html │ │ │ --rw-r--r-- 0 root (0) root (0) 141 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00575.js │ │ │ --rw-r--r-- 0 root (0) root (0) 172728 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00575_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5940 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00578.html │ │ │ --rw-r--r-- 0 root (0) root (0) 123944 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00578_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7664 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00581.html │ │ │ --rw-r--r-- 0 root (0) root (0) 162 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00581.js │ │ │ --rw-r--r-- 0 root (0) root (0) 237583 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00581_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 34121 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00584.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1993 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00584.js │ │ │ --rw-r--r-- 0 root (0) root (0) 237747 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00584_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4043 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00587.html │ │ │ --rw-r--r-- 0 root (0) root (0) 50823 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00587_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3580 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00590.html │ │ │ --rw-r--r-- 0 root (0) root (0) 256274 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00590_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4033 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00596.html │ │ │ --rw-r--r-- 0 root (0) root (0) 51836 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00596_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3990 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00599.html │ │ │ --rw-r--r-- 0 root (0) root (0) 38262 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00599_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4803 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00602.html │ │ │ --rw-r--r-- 0 root (0) root (0) 205657 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00602_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7202 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00617.html │ │ │ --rw-r--r-- 0 root (0) root (0) 93 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00617.js │ │ │ --rw-r--r-- 0 root (0) root (0) 91032 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00617_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12524 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00620.html │ │ │ --rw-r--r-- 0 root (0) root (0) 565 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00620.js │ │ │ --rw-r--r-- 0 root (0) root (0) 388698 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00620_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3004 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00623.html │ │ │ --rw-r--r-- 0 root (0) root (0) 26300 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00623_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5001 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00626.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13568 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00626_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 29809 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00629.html │ │ │ --rw-r--r-- 0 root (0) root (0) 260223 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00629_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5123 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00632.html │ │ │ --rw-r--r-- 0 root (0) root (0) 772479 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00632_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6136 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00635.html │ │ │ --rw-r--r-- 0 root (0) root (0) 556 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00635.js │ │ │ --rw-r--r-- 0 root (0) root (0) 156713 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00635_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 65388 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00638.html │ │ │ --rw-r--r-- 0 root (0) root (0) 335 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00638.js │ │ │ --rw-r--r-- 0 root (0) root (0) 740758 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00638_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 75250 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00641.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3594 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00641.js │ │ │ --rw-r--r-- 0 root (0) root (0) 309414 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00641_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5493 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00644.html │ │ │ --rw-r--r-- 0 root (0) root (0) 22364 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00644_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 552466 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00386_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12524 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00389.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 565 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00389.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 388698 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00389_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4033 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00392.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 51836 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00392_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4379 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00395.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 56401 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00395_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6830 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00398.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 251 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00398.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 46496 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00398_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4803 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00401.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 205657 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00401_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4431 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00404.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 152509 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00404_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7533 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00407.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 105 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00407.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 13263 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00407_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 33659 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00410.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2024 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00410.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 144567 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00410_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 138446 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00413.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 369780 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00413_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16853 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00416.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 485 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00416.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 364938 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00416_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4794 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00422.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 212152 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00422_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15190 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00425.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 73023 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00425_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11336 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00428.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16681 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00428_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4803 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00431.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 65060 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00431_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15097 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00434.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 120375 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00434_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15128 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00437.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 307 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00437.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 446116 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00437_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 42987 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00440.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3355 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00440.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 1296303 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00440_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8018 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00443.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 170 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00443.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 81354 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00443_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4088 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00446.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 102 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00446.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 25048 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00446_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15716 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00449.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 622 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00449.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 48828 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00449_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 55208 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00452.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1629 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00452.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 870802 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00452_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14758 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00455.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 847 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00455.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 328086 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00455_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12807 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00458.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 612 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00458.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 496039 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00458_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5493 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00461.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 22364 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00461_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17644 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00464.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 547 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00464.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 247819 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00464_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3541 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00467.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 26387 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00467_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4236 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00470.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 43611 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00470_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3004 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00473.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 26300 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00473_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4898 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00476.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 360310 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00476_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8095 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00479.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 263 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00479.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 170632 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00479_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3835 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00482.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 89382 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00482_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 182528 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00485.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 96510 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00485_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7454 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00488.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 53475 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00488_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 127942 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00491.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 103897 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00491_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4666 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00497.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 99625 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00497_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5002 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00500.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 75744 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00500_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7202 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00503.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 93 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00503.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 91032 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00503_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12017 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00506.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 77 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00506.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 55786 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00506_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3520 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00509.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16387 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00509_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8866 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00512.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1714 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00512.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 64279 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00512_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8837 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00515.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 85 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00515.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 320544 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00515_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13269 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00521.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 934 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00521.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 237039 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00521_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14312 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00524_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5846 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00527.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 319 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00527.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 20559 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00527_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21423 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00530.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1165 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00530.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 272283 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00530_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3031 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00536.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 109977 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00536_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4766 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00539.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 189852 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00539_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4293 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00542.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 67041 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00542_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 34121 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00545.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1993 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00545.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 237747 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00545_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 32263 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00548.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 178033 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00548_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3990 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00551.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 38262 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00551_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6720 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00554.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 28703 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00554_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 24568 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00557.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 942 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00557.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 95841 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00557_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27170 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00560.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 310 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00560.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 277103 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00560_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5146 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00566.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 171 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00566.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 23272 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00566_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3970 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00569.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17241 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00569_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35679 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00572.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 177 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00572.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 477781 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00572_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3020 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00575.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8434 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00575_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4371 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00578.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 55998 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00578_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4769 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00581.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 155 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00581.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 179111 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00581_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 24706 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00584.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1715 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00584.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 155257 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00584_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6988 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00587.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 47403 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00587_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 29809 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00590.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 260223 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00590_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5981 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00593.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 93 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00593.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 94591 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00593_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7932 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00608.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 256296 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00608_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5721 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00611.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 186 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00611.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 49351 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00611_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12092 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00614.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 103 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00614.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 57499 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00614_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10121 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00617.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 483024 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00617_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6928 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00620.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35083 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00620_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4815 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00623.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 38825 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00623_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7354 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00626.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 251 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00626.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 53085 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00626_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2996 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00629.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 78302 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00629_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 36133 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00632.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 58532 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00632_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5136 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00635.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 141 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00635.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 172728 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00635_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3022 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00638.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 144348 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00638_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4023 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00641.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 51389 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00641_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5564 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00644.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 96776 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00644_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 8241 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00647.html │ │ │ -rw-r--r-- 0 root (0) root (0) 167 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00647.js │ │ │ -rw-r--r-- 0 root (0) root (0) 187097 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00647_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 55208 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00650.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1629 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00650.js │ │ │ --rw-r--r-- 0 root (0) root (0) 870802 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00650_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4815 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00653.html │ │ │ --rw-r--r-- 0 root (0) root (0) 38825 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00653_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5052 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00656.html │ │ │ --rw-r--r-- 0 root (0) root (0) 110098 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00656_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15190 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00659.html │ │ │ --rw-r--r-- 0 root (0) root (0) 73023 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00659_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17566 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00662.html │ │ │ --rw-r--r-- 0 root (0) root (0) 73785 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00662_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3499 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00665.html │ │ │ --rw-r--r-- 0 root (0) root (0) 62453 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00665_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3536 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00668.html │ │ │ --rw-r--r-- 0 root (0) root (0) 29053 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00668_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 18087 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00671.html │ │ │ --rw-r--r-- 0 root (0) root (0) 496 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00671.js │ │ │ --rw-r--r-- 0 root (0) root (0) 57763 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00671_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11617 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00674.html │ │ │ --rw-r--r-- 0 root (0) root (0) 48901 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00674_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37456 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00677_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 24090 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00680.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1102 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00680.js │ │ │ --rw-r--r-- 0 root (0) root (0) 242536 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00680_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4379 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00683.html │ │ │ --rw-r--r-- 0 root (0) root (0) 102 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00683.js │ │ │ --rw-r--r-- 0 root (0) root (0) 85552 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00683_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15097 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00686.html │ │ │ --rw-r--r-- 0 root (0) root (0) 120375 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00686_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 32263 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00689.html │ │ │ --rw-r--r-- 0 root (0) root (0) 178033 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00689_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 138446 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00695.html │ │ │ --rw-r--r-- 0 root (0) root (0) 369780 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00695_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4431 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00698.html │ │ │ --rw-r--r-- 0 root (0) root (0) 152509 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00698_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13269 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00701.html │ │ │ --rw-r--r-- 0 root (0) root (0) 934 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00701.js │ │ │ --rw-r--r-- 0 root (0) root (0) 237039 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00701_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7040 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00704.html │ │ │ --rw-r--r-- 0 root (0) root (0) 323 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00704.js │ │ │ --rw-r--r-- 0 root (0) root (0) 26574 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00704_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4088 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00707.html │ │ │ --rw-r--r-- 0 root (0) root (0) 102 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00707.js │ │ │ --rw-r--r-- 0 root (0) root (0) 25048 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00707_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21423 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00710.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1165 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00710.js │ │ │ --rw-r--r-- 0 root (0) root (0) 272283 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00710_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 24568 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00713.html │ │ │ --rw-r--r-- 0 root (0) root (0) 942 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00713.js │ │ │ --rw-r--r-- 0 root (0) root (0) 95841 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00713_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14874 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00716.html │ │ │ --rw-r--r-- 0 root (0) root (0) 738 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00716.js │ │ │ --rw-r--r-- 0 root (0) root (0) 73399 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00716_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12092 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00719.html │ │ │ --rw-r--r-- 0 root (0) root (0) 103 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00719.js │ │ │ --rw-r--r-- 0 root (0) root (0) 57499 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00719_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14490 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00722.html │ │ │ --rw-r--r-- 0 root (0) root (0) 165 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00722.js │ │ │ --rw-r--r-- 0 root (0) root (0) 44680 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00722_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27170 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00728.html │ │ │ --rw-r--r-- 0 root (0) root (0) 310 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00728.js │ │ │ --rw-r--r-- 0 root (0) root (0) 277103 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00728_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11456 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00731.html │ │ │ --rw-r--r-- 0 root (0) root (0) 320 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00731.js │ │ │ --rw-r--r-- 0 root (0) root (0) 53657 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00731_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 127256 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00734.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2093 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00734.js │ │ │ --rw-r--r-- 0 root (0) root (0) 394779 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00734_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 186506 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00737.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10313 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00737.js │ │ │ --rw-r--r-- 0 root (0) root (0) 1024937 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00737_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3005 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00740.html │ │ │ --rw-r--r-- 0 root (0) root (0) 28655 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00740_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4935 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00743.html │ │ │ --rw-r--r-- 0 root (0) root (0) 85867 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00743_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 29695 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00746.html │ │ │ --rw-r--r-- 0 root (0) root (0) 163 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00746.js │ │ │ --rw-r--r-- 0 root (0) root (0) 153561 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00746_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3048 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00749.html │ │ │ --rw-r--r-- 0 root (0) root (0) 101203 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00749_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5679 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00752.html │ │ │ --rw-r--r-- 0 root (0) root (0) 392 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00752.js │ │ │ --rw-r--r-- 0 root (0) root (0) 38135 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00752_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4766 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00755.html │ │ │ --rw-r--r-- 0 root (0) root (0) 189852 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00755_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3031 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00758.html │ │ │ --rw-r--r-- 0 root (0) root (0) 109977 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00758_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 141721 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00761.html │ │ │ --rw-r--r-- 0 root (0) root (0) 669972 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00761_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 32173 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00764.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2238 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00764.js │ │ │ --rw-r--r-- 0 root (0) root (0) 83653 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00764_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7354 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00767.html │ │ │ --rw-r--r-- 0 root (0) root (0) 251 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00767.js │ │ │ --rw-r--r-- 0 root (0) root (0) 53085 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00767_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6988 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00770.html │ │ │ --rw-r--r-- 0 root (0) root (0) 47403 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00770_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 36133 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00773.html │ │ │ --rw-r--r-- 0 root (0) root (0) 58532 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00773_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2996 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00776.html │ │ │ --rw-r--r-- 0 root (0) root (0) 78302 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00776_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 24706 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00779.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1715 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00779.js │ │ │ --rw-r--r-- 0 root (0) root (0) 155257 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00779_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15716 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00782.html │ │ │ --rw-r--r-- 0 root (0) root (0) 622 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00782.js │ │ │ --rw-r--r-- 0 root (0) root (0) 48828 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00782_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4727 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00785.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17990 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00785_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3520 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00788.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16387 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00788_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3022 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00791.html │ │ │ --rw-r--r-- 0 root (0) root (0) 144348 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00791_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4769 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00794.html │ │ │ --rw-r--r-- 0 root (0) root (0) 155 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00794.js │ │ │ --rw-r--r-- 0 root (0) root (0) 179111 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00794_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12137 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00797.html │ │ │ --rw-r--r-- 0 root (0) root (0) 92 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00797.js │ │ │ --rw-r--r-- 0 root (0) root (0) 32588 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00797_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12017 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00800.html │ │ │ --rw-r--r-- 0 root (0) root (0) 77 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00800.js │ │ │ --rw-r--r-- 0 root (0) root (0) 55786 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00800_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14283 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00803.html │ │ │ --rw-r--r-- 0 root (0) root (0) 24001 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00803_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11527 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00650.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 476 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00650.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 467090 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00650_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14283 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00653.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 24001 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00653_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 18391 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00656.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 547 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00656.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 268134 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00656_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9196 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00659.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 614 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00659.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 50195 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00659_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7040 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00662.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 323 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00662.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 26574 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00662_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13906 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00665.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 242 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00665.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 348237 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00665_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5052 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00668.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 110098 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00668_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6136 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00671.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 556 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00671.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 156713 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00671_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3048 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00674.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 101203 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00674_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7532 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00677.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 312 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00677.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 411804 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00677_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 53300 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00680.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2434 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00680.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 645393 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00680_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4335 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00683.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 47732 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00683_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5084 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00686.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12293 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00686_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4043 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00689.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 50823 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00689_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5123 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00695.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 772479 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00695_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5679 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00698.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 392 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00698.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 38135 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00698_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 29695 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00701.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 163 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00701.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 153561 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00701_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11456 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00704.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 320 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00704.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 53657 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00704_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6029 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00707.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 170 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00707.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 25480 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00707_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3499 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00710.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 62453 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00710_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6748 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00713.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 272 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00713.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 53230 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00713_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4299 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00716.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 54289 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00716_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3029 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00719.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8478 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00719_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7939 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00722.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 328 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00722.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 36332 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00722_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 28104 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00725.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1319 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00725.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 587457 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00725_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14490 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00728.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 165 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00728.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 44680 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00728_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3044 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00731.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 36846 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00731_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6840 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00734.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 105437 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00734_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3843 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00737.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 43796 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00737_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5001 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00740.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13568 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00740_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 186506 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00743.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10313 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00743.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 1024937 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00743_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12798 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00746.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2872 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00746.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 41592 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00746_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4935 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00749.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 85867 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00749_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 127256 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00752.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2093 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00752.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 394779 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00752_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12137 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00755.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 92 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00755.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 32588 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00755_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 18087 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00758.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 496 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00758.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 57763 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00758_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11048 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00761.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 277 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00761.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 61499 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00761_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4379 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00764.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 102 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00764.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 85552 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00764_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3536 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00767.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 29053 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00767_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9765 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00770.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 116187 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00770_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3544 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00773.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12222 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00773_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3005 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00776.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 28655 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00776_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12049 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00779.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 104120 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00779_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17779 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00782.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 547 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00782.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 234310 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00782_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 141721 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00785.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 669972 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00785_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3839 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00788.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 93449 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00788_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37456 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00791_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7664 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00794.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 162 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00794.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 237583 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00794_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5940 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00797.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 123944 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00797_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 32173 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00800.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2238 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00800.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 83653 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00800_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10360 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00803.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 284 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00803.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 149260 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00803_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3539 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00806.html │ │ │ -rw-r--r-- 0 root (0) root (0) 48796 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00806_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14312 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00809_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6840 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00812.html │ │ │ --rw-r--r-- 0 root (0) root (0) 105437 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00812_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8095 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00815.html │ │ │ --rw-r--r-- 0 root (0) root (0) 263 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00815.js │ │ │ --rw-r--r-- 0 root (0) root (0) 170632 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00815_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11336 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00818.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16681 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00818_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 18989 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00821.html │ │ │ --rw-r--r-- 0 root (0) root (0) 136851 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00821_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3020 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00824.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8434 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00824_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14758 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00827.html │ │ │ --rw-r--r-- 0 root (0) root (0) 847 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00827.js │ │ │ --rw-r--r-- 0 root (0) root (0) 328086 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00827_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4299 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00833.html │ │ │ --rw-r--r-- 0 root (0) root (0) 54289 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00833_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5146 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00836.html │ │ │ --rw-r--r-- 0 root (0) root (0) 171 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00836.js │ │ │ --rw-r--r-- 0 root (0) root (0) 23272 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00836_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 139716 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00842_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 139710 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00845_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 45517 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00848_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 28165 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00851_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 355295 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00854.html │ │ │ --rw-r--r-- 0 root (0) root (0) 286740 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00854_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2859 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00857_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3640 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00860.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15799 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00860_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3656 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00863.html │ │ │ --rw-r--r-- 0 root (0) root (0) 29163 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00863_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4324 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00869.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21530 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00869_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7629 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00872.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21411 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00872_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4782 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00875.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11478 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00875_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4566 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00878.html │ │ │ --rw-r--r-- 0 root (0) root (0) 100 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00878.js │ │ │ --rw-r--r-- 0 root (0) root (0) 13383 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00878_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3629 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00881.html │ │ │ --rw-r--r-- 0 root (0) root (0) 26083 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00881_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3632 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00884.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35370 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00884_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3021 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00887.html │ │ │ --rw-r--r-- 0 root (0) root (0) 22003 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00887_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3033 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00890.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13296 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00890_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3021 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00893.html │ │ │ --rw-r--r-- 0 root (0) root (0) 54369 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00893_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6355 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00896.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27936 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00896_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3120 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00899.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7891 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00899_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13873 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00902.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11749 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00902_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6735 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00905.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8869 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00905_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6615 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00908.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17020 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00908_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3640 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00911.html │ │ │ --rw-r--r-- 0 root (0) root (0) 18935 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00911_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4117 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00914.html │ │ │ --rw-r--r-- 0 root (0) root (0) 64 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00914.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14705 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00914_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17566 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00812.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 73785 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00812_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15722 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00815.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1207 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00815.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 44744 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00815_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13340 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00818.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 121797 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00818_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11617 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00821.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 48901 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00821_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6525 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00824.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9558 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00824_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6005 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00827.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 209 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00827.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 67774 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00827_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4727 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00830.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17990 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00830_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3580 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00833.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 256274 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00833_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 65388 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00836.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 335 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00836.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 740758 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00836_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 24090 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00839.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1102 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00839.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 242536 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00839_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3021 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00842.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 22003 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00842_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4117 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00845.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 64 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00845.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14705 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00845_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6355 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00848.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27936 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00848_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3120 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00851.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7891 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00851_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 28165 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00854_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4782 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00857.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11478 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00857_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3033 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00860.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13296 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00860_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 139716 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00863_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3021 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00866.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 54369 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00866_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 45517 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00869_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6735 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00872.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8869 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00872_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3640 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00878.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15799 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00878_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13873 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00881.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11749 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00881_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4324 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00884.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21530 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00884_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6615 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00887.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17020 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00887_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3629 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00890.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 26083 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00890_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7629 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00893.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21411 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00893_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3656 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00896.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 29163 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00896_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 355295 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00899.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 286740 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00899_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4566 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00902.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 100 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00902.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 13383 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00902_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3640 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00905.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 18935 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00905_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3632 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00908.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35370 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00908_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 139710 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00911_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2859 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00914_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4162 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00917.html │ │ │ -rw-r--r-- 0 root (0) root (0) 27338 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00917_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3036 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00920.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13064 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00920_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6270 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00923.html │ │ │ --rw-r--r-- 0 root (0) root (0) 166 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00923.js │ │ │ --rw-r--r-- 0 root (0) root (0) 35928 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00923_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4302 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00926.html │ │ │ --rw-r--r-- 0 root (0) root (0) 74 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00926.js │ │ │ --rw-r--r-- 0 root (0) root (0) 66437 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00926_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4302 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00920.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 74 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00920.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 66437 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00920_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3036 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00923.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13064 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00923_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6270 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00926.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 166 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00926.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 35928 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00926_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 11126 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00929.html │ │ │ -rw-r--r-- 0 root (0) root (0) 75701 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00929_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 11086 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00932.html │ │ │ -rw-r--r-- 0 root (0) root (0) 72461 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00932_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 6144 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00935.html │ │ │ -rw-r--r-- 0 root (0) root (0) 33772 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00935_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14128 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00938.html │ │ │ --rw-r--r-- 0 root (0) root (0) 96 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00938.js │ │ │ --rw-r--r-- 0 root (0) root (0) 133253 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00938_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4917 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00941.html │ │ │ --rw-r--r-- 0 root (0) root (0) 19934 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00941_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4044 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00944.html │ │ │ --rw-r--r-- 0 root (0) root (0) 105 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00944.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34608 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00944_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4302 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00947.html │ │ │ --rw-r--r-- 0 root (0) root (0) 171 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00947.js │ │ │ --rw-r--r-- 0 root (0) root (0) 41308 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00947_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4829 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00950.html │ │ │ --rw-r--r-- 0 root (0) root (0) 33841 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00950_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5184 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00953.html │ │ │ --rw-r--r-- 0 root (0) root (0) 381 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00953.js │ │ │ --rw-r--r-- 0 root (0) root (0) 31340 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00953_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4877 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00956.html │ │ │ --rw-r--r-- 0 root (0) root (0) 19369 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00956_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8327 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00959.html │ │ │ --rw-r--r-- 0 root (0) root (0) 190 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00959.js │ │ │ --rw-r--r-- 0 root (0) root (0) 100628 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00959_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 30721 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00962.html │ │ │ --rw-r--r-- 0 root (0) root (0) 97232 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00962_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5184 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00938.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 381 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00938.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 31340 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00938_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8699 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00941.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 97434 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00941_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4041 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00944.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 138 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00944.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 28728 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00944_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14764 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00947.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 106 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00947.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 141017 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00947_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 68087 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00950.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1361 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00950.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 88865 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00950_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4829 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00953.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 33841 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00953_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8327 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00956.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 190 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00956.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 100628 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00956_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4302 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00959.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 171 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00959.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 41308 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00959_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4877 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00962.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 19369 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00962_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 18397 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00965.html │ │ │ -rw-r--r-- 0 root (0) root (0) 347 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00965.js │ │ │ -rw-r--r-- 0 root (0) root (0) 220913 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00965_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4041 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00968.html │ │ │ --rw-r--r-- 0 root (0) root (0) 138 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00968.js │ │ │ --rw-r--r-- 0 root (0) root (0) 28728 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00968_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4954 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00971.html │ │ │ --rw-r--r-- 0 root (0) root (0) 241 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00971.js │ │ │ --rw-r--r-- 0 root (0) root (0) 67070 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00971_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14223 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00974.html │ │ │ --rw-r--r-- 0 root (0) root (0) 101 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00974.js │ │ │ --rw-r--r-- 0 root (0) root (0) 131964 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00974_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14764 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00977.html │ │ │ --rw-r--r-- 0 root (0) root (0) 106 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00977.js │ │ │ --rw-r--r-- 0 root (0) root (0) 141017 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00977_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14669 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00980.html │ │ │ --rw-r--r-- 0 root (0) root (0) 101 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00980.js │ │ │ --rw-r--r-- 0 root (0) root (0) 162978 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00980_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 68087 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00983.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1361 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00983.js │ │ │ --rw-r--r-- 0 root (0) root (0) 88865 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00983_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21830 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00986.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1318 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00986.js │ │ │ --rw-r--r-- 0 root (0) root (0) 63252 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00986_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 25461 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00989.html │ │ │ --rw-r--r-- 0 root (0) root (0) 196 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00989.js │ │ │ --rw-r--r-- 0 root (0) root (0) 81786 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00989_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8699 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00992.html │ │ │ --rw-r--r-- 0 root (0) root (0) 97434 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00992_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37586 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00995.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27379 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00995_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10640 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00998.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13564 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00998_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10640 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00968.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13564 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00968_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14128 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00971.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 96 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00971.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 133253 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00971_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 25461 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00974.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 196 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00974.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 81786 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00974_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4044 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00977.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 105 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00977.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34608 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00977_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4917 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00980.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 19934 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00980_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4954 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00983.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 241 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00983.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 67070 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00983_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 30721 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00986.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 97232 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00986_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37586 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00989.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27379 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00989_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14223 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00992.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 101 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00992.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 131964 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00992_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21830 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00995.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1318 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00995.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 63252 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00995_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14669 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00998.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 101 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00998.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 162978 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a00998_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5298 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01001.html │ │ │ -rw-r--r-- 0 root (0) root (0) 14864 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01001_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 50444 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01004.html │ │ │ -rw-r--r-- 0 root (0) root (0) 375734 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01004_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 14274 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01007.html │ │ │ -rw-r--r-- 0 root (0) root (0) 135249 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01007_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6663 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01010.html │ │ │ --rw-r--r-- 0 root (0) root (0) 203 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01010.js │ │ │ --rw-r--r-- 0 root (0) root (0) 58193 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01010_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5135 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01013.html │ │ │ --rw-r--r-- 0 root (0) root (0) 194 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01013.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34463 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01013_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10552 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01016.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3298 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01016.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34812 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01016_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8894 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01019.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1255 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01019.js │ │ │ --rw-r--r-- 0 root (0) root (0) 44167 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01019_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9694 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01022.html │ │ │ --rw-r--r-- 0 root (0) root (0) 590 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01022.js │ │ │ --rw-r--r-- 0 root (0) root (0) 48943 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01022_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8442 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01025.html │ │ │ --rw-r--r-- 0 root (0) root (0) 172 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01025.js │ │ │ --rw-r--r-- 0 root (0) root (0) 92426 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01025_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8298 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01028.html │ │ │ --rw-r--r-- 0 root (0) root (0) 79321 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01028_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5109 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01031.html │ │ │ --rw-r--r-- 0 root (0) root (0) 181 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01031.js │ │ │ --rw-r--r-- 0 root (0) root (0) 32003 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01031_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9518 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01034.html │ │ │ --rw-r--r-- 0 root (0) root (0) 836 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01034.js │ │ │ --rw-r--r-- 0 root (0) root (0) 114840 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01034_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4035 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01037.html │ │ │ --rw-r--r-- 0 root (0) root (0) 82 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01037.js │ │ │ --rw-r--r-- 0 root (0) root (0) 26886 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01037_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6308 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01040.html │ │ │ --rw-r--r-- 0 root (0) root (0) 286 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01040.js │ │ │ --rw-r--r-- 0 root (0) root (0) 36817 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01040_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5379 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01043.html │ │ │ --rw-r--r-- 0 root (0) root (0) 193 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01043.js │ │ │ --rw-r--r-- 0 root (0) root (0) 35924 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01043_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7300 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01046.html │ │ │ --rw-r--r-- 0 root (0) root (0) 366 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01046.js │ │ │ --rw-r--r-- 0 root (0) root (0) 79604 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01046_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6163 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01049.html │ │ │ --rw-r--r-- 0 root (0) root (0) 299 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01049.js │ │ │ --rw-r--r-- 0 root (0) root (0) 44117 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01049_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3005 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01052.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10443 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01052_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4629 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01055.html │ │ │ --rw-r--r-- 0 root (0) root (0) 119 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01055.js │ │ │ --rw-r--r-- 0 root (0) root (0) 26868 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01055_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4696 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01058.html │ │ │ --rw-r--r-- 0 root (0) root (0) 132 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01058.js │ │ │ --rw-r--r-- 0 root (0) root (0) 22961 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01058_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4638 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01061.html │ │ │ --rw-r--r-- 0 root (0) root (0) 125 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01061.js │ │ │ --rw-r--r-- 0 root (0) root (0) 22831 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01061_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 38827 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01064.html │ │ │ --rw-r--r-- 0 root (0) root (0) 41100 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01064_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7825 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01067.html │ │ │ --rw-r--r-- 0 root (0) root (0) 790 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01067.js │ │ │ --rw-r--r-- 0 root (0) root (0) 98386 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01067_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37409 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01070.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2542 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01070.js │ │ │ --rw-r--r-- 0 root (0) root (0) 355300 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01070_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7825 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01073.html │ │ │ --rw-r--r-- 0 root (0) root (0) 371 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01073.js │ │ │ --rw-r--r-- 0 root (0) root (0) 105650 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01073_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7951 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01076.html │ │ │ --rw-r--r-- 0 root (0) root (0) 455 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01076.js │ │ │ --rw-r--r-- 0 root (0) root (0) 48661 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01076_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8183 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01079.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1311 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01079.js │ │ │ --rw-r--r-- 0 root (0) root (0) 175079 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01079_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5960 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01082.html │ │ │ --rw-r--r-- 0 root (0) root (0) 258 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01082.js │ │ │ --rw-r--r-- 0 root (0) root (0) 32973 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01082_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4420 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01085.html │ │ │ --rw-r--r-- 0 root (0) root (0) 248 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01085.js │ │ │ --rw-r--r-- 0 root (0) root (0) 37044 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01085_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9675 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01088.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1564 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01088.js │ │ │ --rw-r--r-- 0 root (0) root (0) 79303 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01088_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4899 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01091.html │ │ │ --rw-r--r-- 0 root (0) root (0) 116 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01091.js │ │ │ --rw-r--r-- 0 root (0) root (0) 24126 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01091_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5283 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01094.html │ │ │ --rw-r--r-- 0 root (0) root (0) 399 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01094.js │ │ │ --rw-r--r-- 0 root (0) root (0) 43136 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01094_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7090 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01097.html │ │ │ --rw-r--r-- 0 root (0) root (0) 344 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01097.js │ │ │ --rw-r--r-- 0 root (0) root (0) 71376 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01097_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14310 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01100.html │ │ │ --rw-r--r-- 0 root (0) root (0) 849 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01100.js │ │ │ --rw-r--r-- 0 root (0) root (0) 19523 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01100_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14310 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01010.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 849 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01010.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 19523 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01010_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9694 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01013.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 590 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01013.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 48943 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01013_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5379 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01016.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 193 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01016.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 35924 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01016_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4638 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01019.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 125 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01019.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 22831 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01019_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 183964 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01022.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 165 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01022.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 426769 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01022_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10552 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01025.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3298 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01025.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34812 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01025_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9518 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01028.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 836 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01028.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 114840 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01028_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8298 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01031.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 79321 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01031_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4899 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01034.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 116 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01034.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 24126 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01034_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8183 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01037.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1311 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01037.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 175079 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01037_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10842 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01040.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 575 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01040.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 15208 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01040_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 38827 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01043.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 41100 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01043_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 47255 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01046.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 95407 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01046_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13968 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01049.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1422 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01049.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 89308 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01049_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9675 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01052.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1564 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01052.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 79303 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01052_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7825 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01055.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 790 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01055.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 98386 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01055_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5135 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01058.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 194 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01058.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34463 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01058_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4370 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01061.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 94 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01061.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14471 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01061_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8894 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01064.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1255 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01064.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 44167 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01064_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5109 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01067.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 181 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01067.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 32003 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01067_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6308 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01070.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 286 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01070.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 36817 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01070_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5960 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01073.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 258 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01073.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 32973 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01073_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4035 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01076.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 82 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01076.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 26886 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01076_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8442 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01079.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 172 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01079.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 92426 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01079_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6663 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01082.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 203 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01082.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 58193 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01082_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3005 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01085.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10443 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01085_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4420 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01088.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 248 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01088.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 37044 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01088_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7300 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01091.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 366 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01091.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 79604 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01091_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4696 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01094.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 132 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01094.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 22961 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01094_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7951 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01097.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 455 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01097.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 48661 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01097_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7974 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01100.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 436 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01100.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 96089 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01100_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5271 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01103.html │ │ │ -rw-r--r-- 0 root (0) root (0) 186 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01103.js │ │ │ -rw-r--r-- 0 root (0) root (0) 18657 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01103_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10842 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01106.html │ │ │ --rw-r--r-- 0 root (0) root (0) 575 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01106.js │ │ │ --rw-r--r-- 0 root (0) root (0) 15208 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01106_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4370 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01109.html │ │ │ --rw-r--r-- 0 root (0) root (0) 94 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01109.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14471 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01109_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3048 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01112.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9659 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01112_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13968 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01115.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1422 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01115.js │ │ │ --rw-r--r-- 0 root (0) root (0) 89308 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01115_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7974 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01118.html │ │ │ --rw-r--r-- 0 root (0) root (0) 436 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01118.js │ │ │ --rw-r--r-- 0 root (0) root (0) 96089 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01118_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 47255 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01121.html │ │ │ --rw-r--r-- 0 root (0) root (0) 95407 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01121_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 183964 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01124.html │ │ │ --rw-r--r-- 0 root (0) root (0) 165 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01124.js │ │ │ --rw-r--r-- 0 root (0) root (0) 426769 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01124_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6477 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01127.html │ │ │ --rw-r--r-- 0 root (0) root (0) 94 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01127.js │ │ │ --rw-r--r-- 0 root (0) root (0) 49924 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01127_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5030 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01130.html │ │ │ --rw-r--r-- 0 root (0) root (0) 44439 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01130_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6163 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01106.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 299 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01106.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 44117 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01106_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3048 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01109.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9659 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01109_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4629 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01112.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 119 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01112.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 26868 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01112_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5283 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01115.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 399 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01115.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 43136 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01115_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7825 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01118.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 371 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01118.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 105650 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01118_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7090 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01121.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 344 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01121.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 71376 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01121_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37409 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01124.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2542 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01124.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 355300 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01124_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5030 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01127.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 44439 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01127_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6477 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01130.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 94 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01130.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 49924 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01130_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 19204 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01133.html │ │ │ -rw-r--r-- 0 root (0) root (0) 71 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01133.js │ │ │ -rw-r--r-- 0 root (0) root (0) 39355 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01133_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 15580 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01136.html │ │ │ -rw-r--r-- 0 root (0) root (0) 799 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01136.js │ │ │ -rw-r--r-- 0 root (0) root (0) 151667 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01136_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 284529 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01139.html │ │ │ -rw-r--r-- 0 root (0) root (0) 286 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01139.js │ │ │ -rw-r--r-- 0 root (0) root (0) 66971 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01139_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 364537 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01142_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 936372 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01145_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 300760 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01148_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 141285 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01151_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27318 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01154_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 87636 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01157_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 257217 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01160_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 336150 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01163_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 57739 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01166_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 68554 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01169_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 486907 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01172_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 940669 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01175_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3083 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01181.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13153 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01181_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 940669 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01145_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3083 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01148.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13153 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01148_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 364537 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01151_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 300760 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01154_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 141285 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01157_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 68554 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01160_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 87636 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01163_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 936372 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01166_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27318 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01169_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 336150 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01172_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 486907 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01175_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 257217 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01178_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 57739 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01181_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 30885 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01184.html │ │ │ -rw-r--r-- 0 root (0) root (0) 76333 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01184_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4661 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01187.html │ │ │ -rw-r--r-- 0 root (0) root (0) 14312 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01187_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3544 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01190.html │ │ │ --rw-r--r-- 0 root (0) root (0) 32433 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01190_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12430 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01193.html │ │ │ --rw-r--r-- 0 root (0) root (0) 547 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01193.js │ │ │ --rw-r--r-- 0 root (0) root (0) 136934 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01193_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37476 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01196.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2420 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01196.js │ │ │ --rw-r--r-- 0 root (0) root (0) 583544 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01196_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10335 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01199.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17532 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01199_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16493 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01202.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1207 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01202.js │ │ │ --rw-r--r-- 0 root (0) root (0) 170901 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01202_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5179 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01205.html │ │ │ --rw-r--r-- 0 root (0) root (0) 24221 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01205_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4006 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01208.html │ │ │ --rw-r--r-- 0 root (0) root (0) 59580 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01208_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3981 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01211.html │ │ │ --rw-r--r-- 0 root (0) root (0) 34589 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01211_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3556 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01214.html │ │ │ --rw-r--r-- 0 root (0) root (0) 85289 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01214_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7965 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01217.html │ │ │ --rw-r--r-- 0 root (0) root (0) 252874 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01217_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4081 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01220.html │ │ │ --rw-r--r-- 0 root (0) root (0) 103 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01220.js │ │ │ --rw-r--r-- 0 root (0) root (0) 115438 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01220_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5179 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01223.html │ │ │ --rw-r--r-- 0 root (0) root (0) 77 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01223.js │ │ │ --rw-r--r-- 0 root (0) root (0) 51651 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01223_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6361 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01226.html │ │ │ --rw-r--r-- 0 root (0) root (0) 184 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01226.js │ │ │ --rw-r--r-- 0 root (0) root (0) 38286 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01226_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8661 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01229.html │ │ │ --rw-r--r-- 0 root (0) root (0) 429 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01229.js │ │ │ --rw-r--r-- 0 root (0) root (0) 126763 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01229_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4028 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01232.html │ │ │ --rw-r--r-- 0 root (0) root (0) 38252 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01232_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5147 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01235.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37134 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01235_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3962 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01238.html │ │ │ --rw-r--r-- 0 root (0) root (0) 85 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01238.js │ │ │ --rw-r--r-- 0 root (0) root (0) 15460 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01238_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3982 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01241.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35097 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01241_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6071 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01244.html │ │ │ --rw-r--r-- 0 root (0) root (0) 235 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01244.js │ │ │ --rw-r--r-- 0 root (0) root (0) 96068 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01244_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11741 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01247.html │ │ │ --rw-r--r-- 0 root (0) root (0) 783 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01247.js │ │ │ --rw-r--r-- 0 root (0) root (0) 184710 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01247_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 65951 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01250.html │ │ │ --rw-r--r-- 0 root (0) root (0) 98 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01250.js │ │ │ --rw-r--r-- 0 root (0) root (0) 85609 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01250_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5295 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01253.html │ │ │ --rw-r--r-- 0 root (0) root (0) 44181 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01253_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 28724 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01256.html │ │ │ --rw-r--r-- 0 root (0) root (0) 517 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01256.js │ │ │ --rw-r--r-- 0 root (0) root (0) 107490 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01256_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6307 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01259.html │ │ │ --rw-r--r-- 0 root (0) root (0) 73 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01259.js │ │ │ --rw-r--r-- 0 root (0) root (0) 48583 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01259_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10335 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01190.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17532 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01190_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3982 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01193.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35097 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01193_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6307 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01196.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 73 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01196.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 48583 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01196_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4028 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01199.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 38252 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01199_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37476 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01202.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2420 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01202.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 583544 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01202_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3544 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01205.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 32433 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01205_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6071 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01208.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 235 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01208.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 96068 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01208_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5179 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01211.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 77 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01211.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 51651 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01211_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3467 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01214.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 23127 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01214_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11741 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01217.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 783 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01217.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 184710 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01217_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6361 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01220.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 184 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01220.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 38286 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01220_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 65951 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01223.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 98 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01223.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 85609 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01223_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5147 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01226.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37134 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01226_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3962 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01229.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 85 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01229.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 15460 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01229_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3981 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01232.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 34589 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01232_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9307 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01235.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21543 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01235_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16493 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01238.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1207 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01238.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 170901 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01238_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4081 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01241.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 103 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01241.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 115438 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01241_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8661 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01244.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 429 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01244.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 126763 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01244_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3556 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01247.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 85289 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01247_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5179 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01250.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 24221 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01250_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4006 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01253.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 59580 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01253_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7965 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01256.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 252874 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01256_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 28724 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01259.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 517 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01259.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 107490 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01259_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 9215 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01262.html │ │ │ -rw-r--r-- 0 root (0) root (0) 254 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01262.js │ │ │ -rw-r--r-- 0 root (0) root (0) 23602 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01262_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9307 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01265.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21543 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01265_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3467 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01268.html │ │ │ --rw-r--r-- 0 root (0) root (0) 23127 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01268_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11430 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01271.html │ │ │ --rw-r--r-- 0 root (0) root (0) 382 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01271.js │ │ │ --rw-r--r-- 0 root (0) root (0) 75992 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01271_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7474 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01274.html │ │ │ --rw-r--r-- 0 root (0) root (0) 137 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01274.js │ │ │ --rw-r--r-- 0 root (0) root (0) 31698 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01274_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16200 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01277.html │ │ │ --rw-r--r-- 0 root (0) root (0) 116 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01277.js │ │ │ --rw-r--r-- 0 root (0) root (0) 92000 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01277_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4070 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01280.html │ │ │ --rw-r--r-- 0 root (0) root (0) 31833 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01280_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4408 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01283.html │ │ │ --rw-r--r-- 0 root (0) root (0) 185 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01283.js │ │ │ --rw-r--r-- 0 root (0) root (0) 32559 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01283_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27114 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01286.html │ │ │ --rw-r--r-- 0 root (0) root (0) 887 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01286.js │ │ │ --rw-r--r-- 0 root (0) root (0) 126105 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01286_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6803 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01289.html │ │ │ --rw-r--r-- 0 root (0) root (0) 19647 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01289_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10190 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01292.html │ │ │ --rw-r--r-- 0 root (0) root (0) 173563 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01292_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7937 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01295.html │ │ │ --rw-r--r-- 0 root (0) root (0) 28283 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01295_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12430 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01265.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 547 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01265.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 136934 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01265_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5295 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01268.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 44181 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01268_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10190 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01271.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 173563 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01271_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4408 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01274.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 185 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01274.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 32559 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01274_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27114 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01277.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 887 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01277.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 126105 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01277_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6803 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01280.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 19647 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01280_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4070 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01283.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 31833 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01283_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11430 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01286.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 382 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01286.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 75992 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01286_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16200 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01289.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 116 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01289.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 92000 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01289_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7474 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01292.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 137 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01292.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 31698 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01292_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3131 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01295.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 54618 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01295_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 7664 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01298.html │ │ │ -rw-r--r-- 0 root (0) root (0) 41705 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01298_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3126 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01301.html │ │ │ --rw-r--r-- 0 root (0) root (0) 31157 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01301_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9726 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01304.html │ │ │ --rw-r--r-- 0 root (0) root (0) 660 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01304.js │ │ │ --rw-r--r-- 0 root (0) root (0) 40270 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01304_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8375 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01307.html │ │ │ --rw-r--r-- 0 root (0) root (0) 549 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01307.js │ │ │ --rw-r--r-- 0 root (0) root (0) 31274 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01307_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3131 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01310.html │ │ │ --rw-r--r-- 0 root (0) root (0) 54618 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01310_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 23221 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01313.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1823 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01313.js │ │ │ --rw-r--r-- 0 root (0) root (0) 80485 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01313_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4165 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01316.html │ │ │ --rw-r--r-- 0 root (0) root (0) 98 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01316.js │ │ │ --rw-r--r-- 0 root (0) root (0) 17088 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01316_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4280 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01325.html │ │ │ --rw-r--r-- 0 root (0) root (0) 89 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01325.js │ │ │ --rw-r--r-- 0 root (0) root (0) 39194 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01325_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4608 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01346.html │ │ │ --rw-r--r-- 0 root (0) root (0) 199 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01346.js │ │ │ --rw-r--r-- 0 root (0) root (0) 17471 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01346_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4934 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01349.html │ │ │ --rw-r--r-- 0 root (0) root (0) 308 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01349.js │ │ │ --rw-r--r-- 0 root (0) root (0) 18255 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01349_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11063 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01364.html │ │ │ --rw-r--r-- 0 root (0) root (0) 57839 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01364_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4165 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01301.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 98 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01301.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 17088 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01301_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 23221 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01304.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1823 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01304.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 80485 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01304_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3126 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01307.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 31157 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01307_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7937 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01310.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 28283 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01310_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9726 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01313.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 660 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01313.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 40270 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01313_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8375 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01316.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 549 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01316.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 31274 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01316_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4608 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01322.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 199 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01322.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 17471 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01322_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4280 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01331.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 89 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01331.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 39194 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01331_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11063 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01337.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 57839 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01337_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4934 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01355.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 308 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01355.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 18255 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01355_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 6647 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01367.html │ │ │ -rw-r--r-- 0 root (0) root (0) 23865 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01367_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 10689 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01370.html │ │ │ -rw-r--r-- 0 root (0) root (0) 117 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01370.js │ │ │ -rw-r--r-- 0 root (0) root (0) 39097 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01370_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9312 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01382.html │ │ │ --rw-r--r-- 0 root (0) root (0) 384 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01382.js │ │ │ --rw-r--r-- 0 root (0) root (0) 57562 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01382_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10651 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01388.html │ │ │ --rw-r--r-- 0 root (0) root (0) 74020 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01388_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4329 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01391.html │ │ │ --rw-r--r-- 0 root (0) root (0) 112 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01391.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14465 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01391_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4624 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01394.html │ │ │ --rw-r--r-- 0 root (0) root (0) 211 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01394.js │ │ │ --rw-r--r-- 0 root (0) root (0) 24143 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01394_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3274 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01397.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12902 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01397_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3287 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01424.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16040 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01424_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4367 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01442.html │ │ │ --rw-r--r-- 0 root (0) root (0) 98 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01442.js │ │ │ --rw-r--r-- 0 root (0) root (0) 16489 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01442_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3276 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01445.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16367 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01445_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11866 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01448.html │ │ │ --rw-r--r-- 0 root (0) root (0) 113754 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01448_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4632 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01451.html │ │ │ --rw-r--r-- 0 root (0) root (0) 199 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01451.js │ │ │ --rw-r--r-- 0 root (0) root (0) 21568 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01451_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4249 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01454.html │ │ │ --rw-r--r-- 0 root (0) root (0) 94 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01454.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14863 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01454_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10651 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01379.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 74020 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01379_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9312 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01385.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 384 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01385.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 57562 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01385_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4624 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01391.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 211 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01391.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 24143 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01391_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4329 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01394.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 112 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01394.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14465 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01394_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3287 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01397.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16040 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01397_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3274 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01409.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12902 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01409_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11866 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01424.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 113754 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01424_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4367 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01433.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 98 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01433.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 16489 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01433_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3276 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01448.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16367 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01448_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4249 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01451.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 94 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01451.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14863 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01451_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4632 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01454.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 199 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01454.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 21568 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01454_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3293 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01457.html │ │ │ -rw-r--r-- 0 root (0) root (0) 15071 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01457_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11890 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01460.html │ │ │ --rw-r--r-- 0 root (0) root (0) 117015 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01460_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3348 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01463.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10402 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01463_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4270 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01466.html │ │ │ --rw-r--r-- 0 root (0) root (0) 85 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01466.js │ │ │ --rw-r--r-- 0 root (0) root (0) 18425 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01466_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4279 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01469.html │ │ │ --rw-r--r-- 0 root (0) root (0) 83 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01469.js │ │ │ --rw-r--r-- 0 root (0) root (0) 15315 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01469_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4273 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01472.html │ │ │ --rw-r--r-- 0 root (0) root (0) 86 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01472.js │ │ │ --rw-r--r-- 0 root (0) root (0) 17613 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01472_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4244 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01475.html │ │ │ --rw-r--r-- 0 root (0) root (0) 80 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01475.js │ │ │ --rw-r--r-- 0 root (0) root (0) 16044 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01475_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9652 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01478.html │ │ │ --rw-r--r-- 0 root (0) root (0) 390 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01478.js │ │ │ --rw-r--r-- 0 root (0) root (0) 52527 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01478_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14217 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01481.html │ │ │ --rw-r--r-- 0 root (0) root (0) 466 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01481.js │ │ │ --rw-r--r-- 0 root (0) root (0) 56318 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01481_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3260 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01484.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11260 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01484_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4256 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01487.html │ │ │ --rw-r--r-- 0 root (0) root (0) 92 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01487.js │ │ │ --rw-r--r-- 0 root (0) root (0) 12813 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01487_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4317 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01490.html │ │ │ --rw-r--r-- 0 root (0) root (0) 105 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01490.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14615 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01490_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3348 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01460.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10402 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01460_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11890 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01463.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 117015 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01463_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4244 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01466.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 80 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01466.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 16044 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01466_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14217 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01469.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 466 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01469.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 56318 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01469_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4317 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01472.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 105 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01472.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14615 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01472_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3248 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01475.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11244 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01475_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3292 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01478.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11908 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01478_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4256 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01481.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 92 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01481.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 12813 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01481_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3296 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01484.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11921 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01484_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3260 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01487.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11260 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01487_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4273 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01490.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 86 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01490.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 17613 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01490_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4322 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01493.html │ │ │ -rw-r--r-- 0 root (0) root (0) 106 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01493.js │ │ │ -rw-r--r-- 0 root (0) root (0) 18876 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01493_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3248 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01496.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11244 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01496_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3292 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01499.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11908 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01499_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3296 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01502.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11921 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01502_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6779 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01508.html │ │ │ --rw-r--r-- 0 root (0) root (0) 142 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01508.js │ │ │ --rw-r--r-- 0 root (0) root (0) 50895 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01508_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9650 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01511.html │ │ │ --rw-r--r-- 0 root (0) root (0) 120 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01511.js │ │ │ --rw-r--r-- 0 root (0) root (0) 59795 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01511_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3791 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01514.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12231 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01514_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4279 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01496.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 83 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01496.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 15315 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01496_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9652 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01499.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 390 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01499.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 52527 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01499_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4270 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01502.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 85 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01502.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 18425 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01502_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6779 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01505.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 142 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01505.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 50895 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01505_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3791 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01511.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12231 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01511_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9650 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01514.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 120 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01514.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 59795 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01514_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4302 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01517.html │ │ │ -rw-r--r-- 0 root (0) root (0) 85 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01517.js │ │ │ -rw-r--r-- 0 root (0) root (0) 18684 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01517_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4645 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01520.html │ │ │ -rw-r--r-- 0 root (0) root (0) 189 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01520.js │ │ │ -rw-r--r-- 0 root (0) root (0) 17654 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01520_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 10173 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01523.html │ │ │ -rw-r--r-- 0 root (0) root (0) 155 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01523.js │ │ │ -rw-r--r-- 0 root (0) root (0) 91191 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01523_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 9133 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01526.html │ │ │ -rw-r--r-- 0 root (0) root (0) 34406 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01526_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3239 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01529.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11592 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01529_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3234 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01529.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37521 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01529_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 6775 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01532.html │ │ │ -rw-r--r-- 0 root (0) root (0) 118 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01532.js │ │ │ -rw-r--r-- 0 root (0) root (0) 35373 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01532_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3234 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01535.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37521 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01535_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16993 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01538.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1411 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01538.js │ │ │ --rw-r--r-- 0 root (0) root (0) 221252 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01538_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16993 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01535.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1411 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01535.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 221252 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01535_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3239 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01538.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11592 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01538_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 11089 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01541.html │ │ │ -rw-r--r-- 0 root (0) root (0) 96802 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01541_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3258 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01544.html │ │ │ -rw-r--r-- 0 root (0) root (0) 68829 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01544_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 10927 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01547.html │ │ │ -rw-r--r-- 0 root (0) root (0) 42817 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01547_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4227 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01550.html │ │ │ --rw-r--r-- 0 root (0) root (0) 88 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01550.js │ │ │ --rw-r--r-- 0 root (0) root (0) 39397 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01550_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7707 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01553.html │ │ │ --rw-r--r-- 0 root (0) root (0) 32820 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01553_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4271 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01556.html │ │ │ --rw-r--r-- 0 root (0) root (0) 83 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01556.js │ │ │ --rw-r--r-- 0 root (0) root (0) 18309 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01556_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4295 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01559.html │ │ │ --rw-r--r-- 0 root (0) root (0) 86 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01559.js │ │ │ --rw-r--r-- 0 root (0) root (0) 35066 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01559_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4292 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01562.html │ │ │ --rw-r--r-- 0 root (0) root (0) 85 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01562.js │ │ │ --rw-r--r-- 0 root (0) root (0) 32564 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01562_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3304 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01565.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35221 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01565_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3289 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01568.html │ │ │ --rw-r--r-- 0 root (0) root (0) 30151 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01568_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4432 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01571.html │ │ │ --rw-r--r-- 0 root (0) root (0) 128 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01571.js │ │ │ --rw-r--r-- 0 root (0) root (0) 17868 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01571_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7707 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01550.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 32820 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01550_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4227 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01553.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 88 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01553.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 39397 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01553_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4292 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01556.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 85 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01556.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 32564 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01556_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4271 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01559.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 83 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01559.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 18309 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01559_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4295 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01562.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 86 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01562.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 35066 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01562_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4432 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01565.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 128 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01565.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 17868 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01565_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3304 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01568.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35221 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01568_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3289 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01571.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 30151 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01571_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3317 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01574.html │ │ │ -rw-r--r-- 0 root (0) root (0) 45540 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01574_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3313 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01577.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15861 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01577_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3365 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01580.html │ │ │ --rw-r--r-- 0 root (0) root (0) 32940 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01580_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10969 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01583.html │ │ │ --rw-r--r-- 0 root (0) root (0) 47674 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01583_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3239 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01586.html │ │ │ --rw-r--r-- 0 root (0) root (0) 39985 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01586_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3365 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01577.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 32940 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01577_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3313 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01580.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15861 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01580_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3239 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01583.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 39985 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01583_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10969 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01586.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 47674 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01586_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 13096 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01589.html │ │ │ -rw-r--r-- 0 root (0) root (0) 55743 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01589_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4346 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01592.html │ │ │ -rw-r--r-- 0 root (0) root (0) 130 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01592.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13526 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01592_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6666 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01601.html │ │ │ --rw-r--r-- 0 root (0) root (0) 126 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01601.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34618 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01601_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4341 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01601.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 129 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01601.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14778 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01601_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3353 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01604.html │ │ │ -rw-r--r-- 0 root (0) root (0) 17083 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01604_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4341 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01607.html │ │ │ --rw-r--r-- 0 root (0) root (0) 129 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01607.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14778 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01607_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6666 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01607.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 126 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01607.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34618 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01607_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4299 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01610.html │ │ │ -rw-r--r-- 0 root (0) root (0) 90 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01610.js │ │ │ -rw-r--r-- 0 root (0) root (0) 17921 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01610_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3310 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01613.html │ │ │ -rw-r--r-- 0 root (0) root (0) 25596 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01613_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3414 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01616.html │ │ │ -rw-r--r-- 0 root (0) root (0) 23563 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/a01616_source.html │ │ │ @@ -8005,58 +8005,58 @@ │ │ │ -rw-r--r-- 0 root (0) root (0) 153 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/nav_f.png │ │ │ -rw-r--r-- 0 root (0) root (0) 169 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/nav_fd.png │ │ │ -rw-r--r-- 0 root (0) root (0) 95 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/nav_g.png │ │ │ -rw-r--r-- 0 root (0) root (0) 98 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/nav_h.png │ │ │ -rw-r--r-- 0 root (0) root (0) 114 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/nav_hd.png │ │ │ -rw-r--r-- 0 root (0) root (0) 2167 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtree.css │ │ │ -rw-r--r-- 0 root (0) root (0) 15935 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtree.js │ │ │ --rw-r--r-- 0 root (0) root (0) 5159 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreedata.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 5152 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreedata.js │ │ │ -rw-r--r-- 0 root (0) root (0) 9655 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex0.js │ │ │ --rw-r--r-- 0 root (0) root (0) 10891 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex1.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 12053 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex1.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15607 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex10.js │ │ │ -rw-r--r-- 0 root (0) root (0) 16536 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex11.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13590 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex12.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15160 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex13.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14224 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex14.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15038 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex15.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15178 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex16.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15174 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex17.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15122 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex18.js │ │ │ -rw-r--r-- 0 root (0) root (0) 12660 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex19.js │ │ │ --rw-r--r-- 0 root (0) root (0) 13446 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex2.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 10834 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex2.js │ │ │ -rw-r--r-- 0 root (0) root (0) 11689 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex20.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13726 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex21.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15017 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex22.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13944 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex23.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15110 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex24.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14920 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex25.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14706 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex26.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14781 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex27.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13658 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex28.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13022 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex29.js │ │ │ --rw-r--r-- 0 root (0) root (0) 11181 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex3.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 12622 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex3.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15234 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex30.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14785 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex31.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15311 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex32.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14743 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex33.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13831 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex34.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14232 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex35.js │ │ │ -rw-r--r-- 0 root (0) root (0) 12834 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex36.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13151 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex37.js │ │ │ -rw-r--r-- 0 root (0) root (0) 12716 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex38.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13454 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex39.js │ │ │ --rw-r--r-- 0 root (0) root (0) 12345 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex4.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 12294 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex4.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13867 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex40.js │ │ │ -rw-r--r-- 0 root (0) root (0) 12585 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex41.js │ │ │ -rw-r--r-- 0 root (0) root (0) 12600 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex42.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13834 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex43.js │ │ │ -rw-r--r-- 0 root (0) root (0) 8566 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex44.js │ │ │ -rw-r--r-- 0 root (0) root (0) 8644 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex45.js │ │ │ -rw-r--r-- 0 root (0) root (0) 7690 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex46.js │ │ │ --rw-r--r-- 0 root (0) root (0) 10266 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex5.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 10326 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex5.js │ │ │ -rw-r--r-- 0 root (0) root (0) 12209 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex6.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15031 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex7.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14569 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex8.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13801 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/navtreeindex9.js │ │ │ -rw-r--r-- 0 root (0) root (0) 123 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/open.png │ │ │ -rw-r--r-- 0 root (0) root (0) 2935 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/pages.html │ │ │ -rw-r--r-- 0 root (0) root (0) 696 2025-09-11 04:56:06.000000 ./usr/share/doc/gcc-15-base/libstdc++/user/plus.svg │ │ ├── ./usr/share/doc/gcc-15-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 2025.9.11) 11 SEP 2025 07:05 │ │ │ +This is pdfTeX, Version 3.141592653-2.6-1.40.28 (TeX Live 2025/Debian) (preloaded format=latex 2025.10.4) 4 OCT 2025 11:59 │ │ │ entering extended mode │ │ │ restricted \write18 enabled. │ │ │ %&-line parsing enabled. │ │ │ **_formulas_dark │ │ │ (./_formulas_dark.tex │ │ │ LaTeX2e <2025-06-01> patch level 1 │ │ │ L3 programming layer <2025-07-19> │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00002.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stdlib.h File Reference │ │ │ +libstdc++: fenv.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,27 +45,27 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
stdlib.h File Reference
│ │ │ +
fenv.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │

Detailed Description

│ │ │

This is a Standard C++ Library header.

│ │ │ │ │ │ -

Definition in file stdlib.h.

│ │ │ +

Definition in file fenv.h.

│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,8 +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_. │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is a Standard C++ Library header. │ │ │ │ -Definition in file _s_t_d_l_i_b_._h. │ │ │ │ - * _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.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00002_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stdlib.h Source File │ │ │ +libstdc++: fenv.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,20 +45,20 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
stdlib.h
│ │ │ +
fenv.h
│ │ │
│ │ │
│ │ │ Go to the documentation of this file.
1// -*- C++ -*- compatibility header.
│ │ │
2
│ │ │ -
3// Copyright (C) 2002-2025 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2007-2025 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
│ │ │ @@ -72,86 +72,84 @@ │ │ │
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
│ │ │ - │ │ │ -
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:968
│ │ │ - │ │ │ - │ │ │ +
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-2025 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2007-2025 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,81 +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 _s_t_d_:_:_a_t___q_u_i_c_k___e_x_i_t; │ │ │ │ -44# endif │ │ │ │ -45# ifdef _GLIBCXX_HAVE_QUICK_EXIT │ │ │ │ -46 using _s_t_d_:_:_q_u_i_c_k___e_x_i_t; │ │ │ │ -47# endif │ │ │ │ -48# if _GLIBCXX_USE_C99_STDLIB │ │ │ │ -49 using _s_t_d_:_:___E_x_i_t; │ │ │ │ -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 _s_t_d_:_:_m_b_l_e_n; │ │ │ │ -71using _s_t_d_:_:_m_b_s_t_o_w_c_s; │ │ │ │ -72using _s_t_d_:_:_m_b_t_o_w_c; │ │ │ │ -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 │ │ │ │ -_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_8 │ │ │ │ -_s_t_d_:_:_a_u_t_o___p_t_r___r_e_f │ │ │ │ -DDeeffiinniittiioonn _a_u_t_o___p_t_r_._h_:_4_9 │ │ │ │ -_c_s_t_d_l_i_b │ │ │ │ - * _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.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00005_source.html │ │ │ @@ -163,15 +163,15 @@ │ │ │
109#endif
│ │ │
110
│ │ │
111#endif // C++26
│ │ │
112
│ │ │
113#endif // _GLIBCXX_STDCKDINT_H
│ │ │ │ │ │
GNU extensions for public use.
│ │ │ - │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,8 @@ │ │ │ │ libstdc++ │ │ │ │ -_M_a_c_r_o_s │ │ │ │ -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_. │ │ │ │ ********** 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. │ │ │ │ + * _m_a_t_h_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00011_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stdatomic.h Source File │ │ │ +libstdc++: math.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,20 +45,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-2025 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
│ │ │ @@ -72,145 +72,258 @@ │ │ │
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
│ │ │ - │ │ │ -
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
│ │ │ - │ │ │ - │ │ │ -
memory_order
Enumeration for memory_order.
Definition atomic_base.h:66
│ │ │ -
atomic<bool>
Definition atomic:72
│ │ │ -
Explicit specialization for char.
Definition atomic:718
│ │ │ -
Explicit specialization for signed char.
Definition atomic:741
│ │ │ -
Explicit specialization for unsigned char.
Definition atomic:764
│ │ │ -
Explicit specialization for short.
Definition atomic:787
│ │ │ -
Explicit specialization for unsigned short.
Definition atomic:810
│ │ │ -
Explicit specialization for int.
Definition atomic:833
│ │ │ -
Explicit specialization for unsigned int.
Definition atomic:856
│ │ │ -
Explicit specialization for long.
Definition atomic:879
│ │ │ -
Explicit specialization for unsigned long.
Definition atomic:902
│ │ │ -
Explicit specialization for long long.
Definition atomic:925
│ │ │ -
Explicit specialization for unsigned long long.
Definition atomic:948
│ │ │ -
Explicit specialization for wchar_t.
Definition atomic:971
│ │ │ -
Explicit specialization for char16_t.
Definition atomic:1020
│ │ │ -
Explicit specialization for char32_t.
Definition atomic:1044
│ │ │ -
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:1197
│ │ │ +
complex< _Tp > log(const complex< _Tp > &)
Return complex natural logarithm of z.
Definition complex:1162
│ │ │ +
complex< _Tp > tan(const complex< _Tp > &)
Return complex tangent of z.
Definition complex:1298
│ │ │ +
_Tp abs(const complex< _Tp > &)
Return magnitude of z.
Definition complex:968
│ │ │ +
complex< _Tp > exp(const complex< _Tp > &)
Return complex base e exponential of z.
Definition complex:1135
│ │ │ +
complex< _Tp > cosh(const complex< _Tp > &)
Return complex hyperbolic cosine of z.
Definition complex:1109
│ │ │ +
complex< _Tp > tanh(const complex< _Tp > &)
Return complex hyperbolic tangent of z.
Definition complex:1326
│ │ │ +
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:1227
│ │ │ +
complex< _Tp > cos(const complex< _Tp > &)
Return complex cosine of z.
Definition complex:1079
│ │ │ +
complex< _Tp > sqrt(const complex< _Tp > &)
Return complex square root of z.
Definition complex:1271
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type sph_bessel(unsigned int __n, _Tp __x)
Definition specfun.h:1100
│ │ │ +
long double sph_bessell(unsigned int __n, long double __x)
Definition specfun.h:1081
│ │ │ +
float betaf(float __a, float __b)
Definition specfun.h:310
│ │ │ +
long double expintl(long double __x)
Definition specfun.h:852
│ │ │ +
float cyl_bessel_jf(float __nu, float __x)
Definition specfun.h:548
│ │ │ +
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_k(_Tpnu __nu, _Tp __x)
Definition specfun.h:631
│ │ │ +
float ellint_3f(float __k, float __nu, float __phi)
Return the incomplete elliptic integral of the third kind for float argument.
Definition specfun.h:790
│ │ │ +
long double legendrel(unsigned int __l, long double __x)
Definition specfun.h:985
│ │ │ +
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:461
│ │ │ +
long double riemann_zetal(long double __s)
Definition specfun.h:1030
│ │ │ +
float cyl_bessel_kf(float __nu, float __x)
Definition specfun.h:594
│ │ │ +
float comp_ellint_2f(float __k)
Definition specfun.h:404
│ │ │ +
long double hermitel(unsigned int __n, long double __x)
Definition specfun.h:893
│ │ │ +
__gnu_cxx::__promote_2< _Tp, _Tpp >::__type ellint_1(_Tp __k, _Tpp __phi)
Definition specfun.h:727
│ │ │ +
long double sph_legendrel(unsigned int __l, unsigned int __m, long double __theta)
Definition specfun.h:1126
│ │ │ +
float ellint_1f(float __k, float __phi)
Definition specfun.h:694
│ │ │ +
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_neumann(_Tpnu __nu, _Tp __x)
Definition specfun.h:679
│ │ │ +
float assoc_legendref(unsigned int __l, unsigned int __m, float __x)
Definition specfun.h:265
│ │ │ +
long double sph_neumannl(unsigned int __n, long double __x)
Definition specfun.h:1172
│ │ │ +
long double comp_ellint_2l(long double __k)
Definition specfun.h:414
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type comp_ellint_2(_Tp __k)
Definition specfun.h:436
│ │ │ +
float sph_besself(unsigned int __n, float __x)
Definition specfun.h:1071
│ │ │ +
long double assoc_legendrel(unsigned int __l, unsigned int __m, long double __x)
Definition specfun.h:274
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type legendre(unsigned int __l, _Tp __x)
Definition specfun.h:1005
│ │ │ +
float expintf(float __x)
Definition specfun.h:842
│ │ │ +
float ellint_2f(float __k, float __phi)
Return the incomplete elliptic integral of the second kind for float argument.
Definition specfun.h:742
│ │ │ +
__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:828
│ │ │ +
long double ellint_2l(long double __k, long double __phi)
Return the incomplete elliptic integral of the second kind .
Definition specfun.h:752
│ │ │ +
float cyl_neumannf(float __nu, float __x)
Definition specfun.h:646
│ │ │ +
__gnu_cxx::__promote_2< _Tpa, _Tpb >::__type beta(_Tpa __a, _Tpb __b)
Definition specfun.h:341
│ │ │ +
long double comp_ellint_1l(long double __k)
Definition specfun.h:366
│ │ │ +
float comp_ellint_3f(float __k, float __nu)
Return the complete elliptic integral of the third kind for float modulus k.
Definition specfun.h:451
│ │ │ +
float sph_neumannf(unsigned int __n, float __x)
Definition specfun.h:1162
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type expint(_Tp __x)
Definition specfun.h:868
│ │ │ +
long double ellint_1l(long double __k, long double __phi)
Definition specfun.h:704
│ │ │ +
float comp_ellint_1f(float __k)
Definition specfun.h:356
│ │ │ +
long double betal(long double __a, long double __b)
Definition specfun.h:320
│ │ │ +
float hermitef(unsigned int __n, float __x)
Definition specfun.h:883
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type riemann_zeta(_Tp __s)
Definition specfun.h:1056
│ │ │ +
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:800
│ │ │ +
float sph_legendref(unsigned int __l, unsigned int __m, float __theta)
Definition specfun.h:1115
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type sph_neumann(unsigned int __n, _Tp __x)
Definition specfun.h:1191
│ │ │ +
float cyl_bessel_if(float __nu, float __x)
Definition specfun.h:502
│ │ │ +
long double laguerrel(unsigned int __n, long double __x)
Definition specfun.h:941
│ │ │ +
long double cyl_bessel_il(long double __nu, long double __x)
Definition specfun.h:512
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type assoc_laguerre(unsigned int __n, unsigned int __m, _Tp __x)
Definition specfun.h:250
│ │ │ +
__gnu_cxx::__promote_2< _Tp, _Tpn >::__type comp_ellint_3(_Tp __k, _Tpn __nu)
Definition specfun.h:487
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type sph_legendre(unsigned int __l, unsigned int __m, _Tp __theta)
Definition specfun.h:1147
│ │ │ +
long double cyl_bessel_kl(long double __nu, long double __x)
Definition specfun.h:604
│ │ │ +
long double assoc_laguerrel(unsigned int __n, unsigned int __m, long double __x)
Definition specfun.h:214
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type hermite(unsigned int __n, _Tp __x)
Definition specfun.h:916
│ │ │ +
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_j(_Tpnu __nu, _Tp __x)
Definition specfun.h:579
│ │ │ +
float laguerref(unsigned int __n, float __x)
Definition specfun.h:931
│ │ │ +
long double cyl_bessel_jl(long double __nu, long double __x)
Definition specfun.h:558
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type comp_ellint_1(_Tp __k)
Definition specfun.h:389
│ │ │ +
__gnu_cxx::__promote_2< _Tp, _Tpp >::__type ellint_2(_Tp __k, _Tpp __phi)
Definition specfun.h:775
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type laguerre(unsigned int __n, _Tp __x)
Definition specfun.h:960
│ │ │ +
float legendref(unsigned int __l, float __x)
Definition specfun.h:975
│ │ │ +
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_i(_Tpnu __nu, _Tp __x)
Definition specfun.h:533
│ │ │ +
__gnu_cxx::__promote< _Tp >::__type assoc_legendre(unsigned int __l, unsigned int __m, _Tp __x)
Definition specfun.h:296
│ │ │ +
float assoc_laguerref(unsigned int __n, unsigned int __m, float __x)
Definition specfun.h:204
│ │ │ +
long double cyl_neumannl(long double __nu, long double __x)
Definition specfun.h:656
│ │ │ +
float riemann_zetaf(float __s)
Definition specfun.h:1020
│ │ │ + │ │ │ + │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── 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-2025 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,172 +21,427 @@ │ │ │ │ 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 _s_t_d_:_:_a_t_o_m_i_c___c_h_a_r_8___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_:_:_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_<_ _b_o_o_l_ _> │ │ │ │ -atomic │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_7_2 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c_<_ _c_h_a_r_ _> │ │ │ │ -Explicit specialization for char. │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_7_1_8 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c_<_ _s_i_g_n_e_d_ _c_h_a_r_ _> │ │ │ │ -Explicit specialization for signed char. │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_7_4_1 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c_<_ _u_n_s_i_g_n_e_d_ _c_h_a_r_ _> │ │ │ │ -Explicit specialization for unsigned char. │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_7_6_4 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c_<_ _s_h_o_r_t_ _> │ │ │ │ -Explicit specialization for short. │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_7_8_7 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c_<_ _u_n_s_i_g_n_e_d_ _s_h_o_r_t_ _> │ │ │ │ -Explicit specialization for unsigned short. │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_8_1_0 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c_<_ _i_n_t_ _> │ │ │ │ -Explicit specialization for int. │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_8_3_3 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c_<_ _u_n_s_i_g_n_e_d_ _i_n_t_ _> │ │ │ │ -Explicit specialization for unsigned int. │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_8_5_6 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c_<_ _l_o_n_g_ _> │ │ │ │ -Explicit specialization for long. │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_8_7_9 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c_<_ _u_n_s_i_g_n_e_d_ _l_o_n_g_ _> │ │ │ │ -Explicit specialization for unsigned long. │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_9_0_2 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c_<_ _l_o_n_g_ _l_o_n_g_ _> │ │ │ │ -Explicit specialization for long long. │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_9_2_5 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c_<_ _u_n_s_i_g_n_e_d_ _l_o_n_g_ _l_o_n_g_ _> │ │ │ │ -Explicit specialization for unsigned long long. │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_9_4_8 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c_<_ _w_c_h_a_r___t_ _> │ │ │ │ -Explicit specialization for wchar_t. │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_9_7_1 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c_<_ _c_h_a_r_1_6___t_ _> │ │ │ │ -Explicit specialization for char16_t. │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_2_0 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c_<_ _c_h_a_r_3_2___t_ _> │ │ │ │ -Explicit specialization for char32_t. │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_4_4 │ │ │ │ -_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 │ │ │ │ +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 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 _s_t_d_:_:_n_e_x_t_t_o_w_a_r_d; │ │ │ │ +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 │ │ │ │ +_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_7 │ │ │ │ +_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_6_2 │ │ │ │ +_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_8 │ │ │ │ +_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_8 │ │ │ │ +_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_5 │ │ │ │ +_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_9 │ │ │ │ +_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_6 │ │ │ │ +_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_7 │ │ │ │ +_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_9 │ │ │ │ +_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_7_1 │ │ │ │ +_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_0 │ │ │ │ +_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_1 │ │ │ │ +_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_0 │ │ │ │ +_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_2 │ │ │ │ +_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_8 │ │ │ │ +_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_1 │ │ │ │ +_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_0 │ │ │ │ +_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_5 │ │ │ │ +_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_1 │ │ │ │ +_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_0 │ │ │ │ +_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_4 │ │ │ │ +_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_4 │ │ │ │ +_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_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_7 │ │ │ │ +_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_6 │ │ │ │ +_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_4 │ │ │ │ +_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_7_9 │ │ │ │ +_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_5 │ │ │ │ +_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_2 │ │ │ │ +_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_4 │ │ │ │ +_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_6 │ │ │ │ +_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_1 │ │ │ │ +_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_4 │ │ │ │ +_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_5 │ │ │ │ +_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_2 │ │ │ │ +_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_2 │ │ │ │ +_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_8 │ │ │ │ +_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_2 │ │ │ │ +_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_6 │ │ │ │ +_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_1 │ │ │ │ +_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_6 │ │ │ │ +_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_1 │ │ │ │ +_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_2 │ │ │ │ +_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_8 │ │ │ │ +_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_4 │ │ │ │ +_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_6 │ │ │ │ +_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_0 │ │ │ │ +_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_3 │ │ │ │ +_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_6 │ │ │ │ +_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_0 │ │ │ │ +_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_5 │ │ │ │ +_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_1 │ │ │ │ +_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_2 │ │ │ │ +_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_1 │ │ │ │ +_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_2 │ │ │ │ +_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_0 │ │ │ │ +_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_7 │ │ │ │ +_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_7 │ │ │ │ +_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_4 │ │ │ │ +_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_4 │ │ │ │ +_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_6 │ │ │ │ +_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_7_9 │ │ │ │ +_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_1 │ │ │ │ +_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_8 │ │ │ │ +_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_8_9 │ │ │ │ +_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_5 │ │ │ │ +_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_0 │ │ │ │ +_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_5 │ │ │ │ +_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_3 │ │ │ │ +_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_6 │ │ │ │ +_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_4 │ │ │ │ +_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_6 │ │ │ │ +_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_0 │ │ │ │ _s_t_d_:_:_a_u_t_o___p_t_r___r_e_f │ │ │ │ DDeeffiinniittiioonn _a_u_t_o___p_t_r_._h_:_4_9 │ │ │ │ - * _s_t_d_a_t_o_m_i_c_._h │ │ │ │ +_c_m_a_t_h │ │ │ │ + * _m_a_t_h_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00014.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: math.h File Reference │ │ │ +libstdc++: stdlib.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,27 +45,27 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
math.h File Reference
│ │ │ +
stdlib.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │

Detailed Description

│ │ │

This is a Standard C++ Library header.

│ │ │ │ │ │ -

Definition in file math.h.

│ │ │ +

Definition in file stdlib.h.

│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,8 +1,8 @@ │ │ │ │ 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_. │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is a Standard C++ Library header. │ │ │ │ -Definition in file _m_a_t_h_._h. │ │ │ │ - * _m_a_t_h_._h │ │ │ │ +Definition in file _s_t_d_l_i_b_._h. │ │ │ │ + * _s_t_d_l_i_b_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00014_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: math.h Source File │ │ │ +libstdc++: stdlib.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
math.h
│ │ │ +
stdlib.h
│ │ │
│ │ │
│ │ │ Go to the documentation of this file.
1// -*- C++ -*- compatibility header.
│ │ │
2
│ │ │
3// Copyright (C) 2002-2025 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │ @@ -72,258 +72,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:1197
│ │ │ -
complex< _Tp > log(const complex< _Tp > &)
Return complex natural logarithm of z.
Definition complex:1162
│ │ │ -
complex< _Tp > tan(const complex< _Tp > &)
Return complex tangent of z.
Definition complex:1298
│ │ │ +
38using std::abort;
│ │ │ +
39using std::atexit;
│ │ │ +
40using std::exit;
│ │ │ +
41#if __cplusplus >= 201103L
│ │ │ +
42# ifdef _GLIBCXX_HAVE_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:968
│ │ │ -
complex< _Tp > exp(const complex< _Tp > &)
Return complex base e exponential of z.
Definition complex:1135
│ │ │ -
complex< _Tp > cosh(const complex< _Tp > &)
Return complex hyperbolic cosine of z.
Definition complex:1109
│ │ │ -
complex< _Tp > tanh(const complex< _Tp > &)
Return complex hyperbolic tangent of z.
Definition complex:1326
│ │ │ -
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:1227
│ │ │ -
complex< _Tp > cos(const complex< _Tp > &)
Return complex cosine of z.
Definition complex:1079
│ │ │ -
complex< _Tp > sqrt(const complex< _Tp > &)
Return complex square root of z.
Definition complex:1271
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type sph_bessel(unsigned int __n, _Tp __x)
Definition specfun.h:1100
│ │ │ -
long double sph_bessell(unsigned int __n, long double __x)
Definition specfun.h:1081
│ │ │ -
float betaf(float __a, float __b)
Definition specfun.h:310
│ │ │ -
long double expintl(long double __x)
Definition specfun.h:852
│ │ │ -
float cyl_bessel_jf(float __nu, float __x)
Definition specfun.h:548
│ │ │ -
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_k(_Tpnu __nu, _Tp __x)
Definition specfun.h:631
│ │ │ -
float ellint_3f(float __k, float __nu, float __phi)
Return the incomplete elliptic integral of the third kind for float argument.
Definition specfun.h:790
│ │ │ -
long double legendrel(unsigned int __l, long double __x)
Definition specfun.h:985
│ │ │ -
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:461
│ │ │ -
long double riemann_zetal(long double __s)
Definition specfun.h:1030
│ │ │ -
float cyl_bessel_kf(float __nu, float __x)
Definition specfun.h:594
│ │ │ -
float comp_ellint_2f(float __k)
Definition specfun.h:404
│ │ │ -
long double hermitel(unsigned int __n, long double __x)
Definition specfun.h:893
│ │ │ -
__gnu_cxx::__promote_2< _Tp, _Tpp >::__type ellint_1(_Tp __k, _Tpp __phi)
Definition specfun.h:727
│ │ │ -
long double sph_legendrel(unsigned int __l, unsigned int __m, long double __theta)
Definition specfun.h:1126
│ │ │ -
float ellint_1f(float __k, float __phi)
Definition specfun.h:694
│ │ │ -
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_neumann(_Tpnu __nu, _Tp __x)
Definition specfun.h:679
│ │ │ -
float assoc_legendref(unsigned int __l, unsigned int __m, float __x)
Definition specfun.h:265
│ │ │ -
long double sph_neumannl(unsigned int __n, long double __x)
Definition specfun.h:1172
│ │ │ -
long double comp_ellint_2l(long double __k)
Definition specfun.h:414
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type comp_ellint_2(_Tp __k)
Definition specfun.h:436
│ │ │ -
float sph_besself(unsigned int __n, float __x)
Definition specfun.h:1071
│ │ │ -
long double assoc_legendrel(unsigned int __l, unsigned int __m, long double __x)
Definition specfun.h:274
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type legendre(unsigned int __l, _Tp __x)
Definition specfun.h:1005
│ │ │ -
float expintf(float __x)
Definition specfun.h:842
│ │ │ -
float ellint_2f(float __k, float __phi)
Return the incomplete elliptic integral of the second kind for float argument.
Definition specfun.h:742
│ │ │ -
__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:828
│ │ │ -
long double ellint_2l(long double __k, long double __phi)
Return the incomplete elliptic integral of the second kind .
Definition specfun.h:752
│ │ │ -
float cyl_neumannf(float __nu, float __x)
Definition specfun.h:646
│ │ │ -
__gnu_cxx::__promote_2< _Tpa, _Tpb >::__type beta(_Tpa __a, _Tpb __b)
Definition specfun.h:341
│ │ │ -
long double comp_ellint_1l(long double __k)
Definition specfun.h:366
│ │ │ -
float comp_ellint_3f(float __k, float __nu)
Return the complete elliptic integral of the third kind for float modulus k.
Definition specfun.h:451
│ │ │ -
float sph_neumannf(unsigned int __n, float __x)
Definition specfun.h:1162
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type expint(_Tp __x)
Definition specfun.h:868
│ │ │ -
long double ellint_1l(long double __k, long double __phi)
Definition specfun.h:704
│ │ │ -
float comp_ellint_1f(float __k)
Definition specfun.h:356
│ │ │ -
long double betal(long double __a, long double __b)
Definition specfun.h:320
│ │ │ -
float hermitef(unsigned int __n, float __x)
Definition specfun.h:883
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type riemann_zeta(_Tp __s)
Definition specfun.h:1056
│ │ │ -
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:800
│ │ │ -
float sph_legendref(unsigned int __l, unsigned int __m, float __theta)
Definition specfun.h:1115
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type sph_neumann(unsigned int __n, _Tp __x)
Definition specfun.h:1191
│ │ │ -
float cyl_bessel_if(float __nu, float __x)
Definition specfun.h:502
│ │ │ -
long double laguerrel(unsigned int __n, long double __x)
Definition specfun.h:941
│ │ │ -
long double cyl_bessel_il(long double __nu, long double __x)
Definition specfun.h:512
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type assoc_laguerre(unsigned int __n, unsigned int __m, _Tp __x)
Definition specfun.h:250
│ │ │ -
__gnu_cxx::__promote_2< _Tp, _Tpn >::__type comp_ellint_3(_Tp __k, _Tpn __nu)
Definition specfun.h:487
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type sph_legendre(unsigned int __l, unsigned int __m, _Tp __theta)
Definition specfun.h:1147
│ │ │ -
long double cyl_bessel_kl(long double __nu, long double __x)
Definition specfun.h:604
│ │ │ -
long double assoc_laguerrel(unsigned int __n, unsigned int __m, long double __x)
Definition specfun.h:214
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type hermite(unsigned int __n, _Tp __x)
Definition specfun.h:916
│ │ │ -
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_j(_Tpnu __nu, _Tp __x)
Definition specfun.h:579
│ │ │ -
float laguerref(unsigned int __n, float __x)
Definition specfun.h:931
│ │ │ -
long double cyl_bessel_jl(long double __nu, long double __x)
Definition specfun.h:558
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type comp_ellint_1(_Tp __k)
Definition specfun.h:389
│ │ │ -
__gnu_cxx::__promote_2< _Tp, _Tpp >::__type ellint_2(_Tp __k, _Tpp __phi)
Definition specfun.h:775
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type laguerre(unsigned int __n, _Tp __x)
Definition specfun.h:960
│ │ │ -
float legendref(unsigned int __l, float __x)
Definition specfun.h:975
│ │ │ -
__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_i(_Tpnu __nu, _Tp __x)
Definition specfun.h:533
│ │ │ -
__gnu_cxx::__promote< _Tp >::__type assoc_legendre(unsigned int __l, unsigned int __m, _Tp __x)
Definition specfun.h:296
│ │ │ -
float assoc_laguerref(unsigned int __n, unsigned int __m, float __x)
Definition specfun.h:204
│ │ │ -
long double cyl_neumannl(long double __nu, long double __x)
Definition specfun.h:656
│ │ │ -
float riemann_zetaf(float __s)
Definition specfun.h:1020
│ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── 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-2025 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,427 +21,81 @@ │ │ │ │ 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 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 _s_t_d_:_:_n_e_x_t_t_o_w_a_r_d; │ │ │ │ -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 │ │ │ │ -_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_7 │ │ │ │ -_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_6_2 │ │ │ │ -_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_8 │ │ │ │ +38using std::abort; │ │ │ │ +39using std::atexit; │ │ │ │ +40using std::exit; │ │ │ │ +41#if __cplusplus >= 201103L │ │ │ │ +42# ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT │ │ │ │ +43 using _s_t_d_:_:_a_t___q_u_i_c_k___e_x_i_t; │ │ │ │ +44# endif │ │ │ │ +45# ifdef _GLIBCXX_HAVE_QUICK_EXIT │ │ │ │ +46 using _s_t_d_:_:_q_u_i_c_k___e_x_i_t; │ │ │ │ +47# endif │ │ │ │ +48# if _GLIBCXX_USE_C99_STDLIB │ │ │ │ +49 using _s_t_d_:_:___E_x_i_t; │ │ │ │ +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 _s_t_d_:_:_m_b_l_e_n; │ │ │ │ +71using _s_t_d_:_:_m_b_s_t_o_w_c_s; │ │ │ │ +72using _s_t_d_:_:_m_b_t_o_w_c; │ │ │ │ +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 │ │ │ │ _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_8 │ │ │ │ -_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_5 │ │ │ │ -_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_9 │ │ │ │ -_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_6 │ │ │ │ -_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_7 │ │ │ │ -_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_9 │ │ │ │ -_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_7_1 │ │ │ │ -_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_0 │ │ │ │ -_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_1 │ │ │ │ -_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_0 │ │ │ │ -_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_2 │ │ │ │ -_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_8 │ │ │ │ -_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_1 │ │ │ │ -_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_0 │ │ │ │ -_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_5 │ │ │ │ -_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_1 │ │ │ │ -_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_0 │ │ │ │ -_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_4 │ │ │ │ -_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_4 │ │ │ │ -_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_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_7 │ │ │ │ -_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_6 │ │ │ │ -_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_4 │ │ │ │ -_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_7_9 │ │ │ │ -_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_5 │ │ │ │ -_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_2 │ │ │ │ -_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_4 │ │ │ │ -_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_6 │ │ │ │ -_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_1 │ │ │ │ -_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_4 │ │ │ │ -_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_5 │ │ │ │ -_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_2 │ │ │ │ -_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_2 │ │ │ │ -_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_8 │ │ │ │ -_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_2 │ │ │ │ -_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_6 │ │ │ │ -_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_1 │ │ │ │ -_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_6 │ │ │ │ -_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_1 │ │ │ │ -_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_2 │ │ │ │ -_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_8 │ │ │ │ -_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_4 │ │ │ │ -_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_6 │ │ │ │ -_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_0 │ │ │ │ -_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_3 │ │ │ │ -_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_6 │ │ │ │ -_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_0 │ │ │ │ -_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_5 │ │ │ │ -_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_1 │ │ │ │ -_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_2 │ │ │ │ -_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_1 │ │ │ │ -_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_2 │ │ │ │ -_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_0 │ │ │ │ -_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_7 │ │ │ │ -_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_7 │ │ │ │ -_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_4 │ │ │ │ -_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_4 │ │ │ │ -_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_6 │ │ │ │ -_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_7_9 │ │ │ │ -_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_1 │ │ │ │ -_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_8 │ │ │ │ -_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_8_9 │ │ │ │ -_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_5 │ │ │ │ -_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_0 │ │ │ │ -_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_5 │ │ │ │ -_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_3 │ │ │ │ -_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_6 │ │ │ │ -_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_4 │ │ │ │ -_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_6 │ │ │ │ -_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_0 │ │ │ │ _s_t_d_:_:_a_u_t_o___p_t_r___r_e_f │ │ │ │ DDeeffiinniittiioonn _a_u_t_o___p_t_r_._h_:_4_9 │ │ │ │ -_c_m_a_t_h │ │ │ │ - * _m_a_t_h_._h │ │ │ │ +_c_s_t_d_l_i_b │ │ │ │ + * _s_t_d_l_i_b_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00017_source.html │ │ │ @@ -79,27 +79,27 @@ │ │ │
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
│ │ │ - │ │ │ + │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,8 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -complex.h File Reference │ │ │ │ +_M_a_c_r_o_s │ │ │ │ +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.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00023_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: complex.h Source File │ │ │ +libstdc++: stdatomic.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,20 +45,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-2025 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
│ │ │ @@ -72,46 +72,145 @@ │ │ │
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
│ │ │ + │ │ │ +
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
│ │ │ + │ │ │ + │ │ │ +
memory_order
Enumeration for memory_order.
Definition atomic_base.h:66
│ │ │ +
atomic<bool>
Definition atomic:72
│ │ │ +
Explicit specialization for char.
Definition atomic:718
│ │ │ +
Explicit specialization for signed char.
Definition atomic:741
│ │ │ +
Explicit specialization for unsigned char.
Definition atomic:764
│ │ │ +
Explicit specialization for short.
Definition atomic:787
│ │ │ +
Explicit specialization for unsigned short.
Definition atomic:810
│ │ │ +
Explicit specialization for int.
Definition atomic:833
│ │ │ +
Explicit specialization for unsigned int.
Definition atomic:856
│ │ │ +
Explicit specialization for long.
Definition atomic:879
│ │ │ +
Explicit specialization for unsigned long.
Definition atomic:902
│ │ │ +
Explicit specialization for long long.
Definition atomic:925
│ │ │ +
Explicit specialization for unsigned long long.
Definition atomic:948
│ │ │ +
Explicit specialization for wchar_t.
Definition atomic:971
│ │ │ +
Explicit specialization for char16_t.
Definition atomic:1020
│ │ │ +
Explicit specialization for char32_t.
Definition atomic:1044
│ │ │ +
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-2025 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,172 @@ │ │ │ │ 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_+_+_c_o_n_f_i_g_._h │ │ │ │ -_c_o_m_p_l_e_x │ │ │ │ - * _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 _s_t_d_:_:_a_t_o_m_i_c___c_h_a_r_8___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_:_:_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_<_ _b_o_o_l_ _> │ │ │ │ +atomic │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_7_2 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c_<_ _c_h_a_r_ _> │ │ │ │ +Explicit specialization for char. │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_7_1_8 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c_<_ _s_i_g_n_e_d_ _c_h_a_r_ _> │ │ │ │ +Explicit specialization for signed char. │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_7_4_1 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c_<_ _u_n_s_i_g_n_e_d_ _c_h_a_r_ _> │ │ │ │ +Explicit specialization for unsigned char. │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_7_6_4 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c_<_ _s_h_o_r_t_ _> │ │ │ │ +Explicit specialization for short. │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_7_8_7 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c_<_ _u_n_s_i_g_n_e_d_ _s_h_o_r_t_ _> │ │ │ │ +Explicit specialization for unsigned short. │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_8_1_0 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c_<_ _i_n_t_ _> │ │ │ │ +Explicit specialization for int. │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_8_3_3 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c_<_ _u_n_s_i_g_n_e_d_ _i_n_t_ _> │ │ │ │ +Explicit specialization for unsigned int. │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_8_5_6 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c_<_ _l_o_n_g_ _> │ │ │ │ +Explicit specialization for long. │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_8_7_9 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c_<_ _u_n_s_i_g_n_e_d_ _l_o_n_g_ _> │ │ │ │ +Explicit specialization for unsigned long. │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_9_0_2 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c_<_ _l_o_n_g_ _l_o_n_g_ _> │ │ │ │ +Explicit specialization for long long. │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_9_2_5 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c_<_ _u_n_s_i_g_n_e_d_ _l_o_n_g_ _l_o_n_g_ _> │ │ │ │ +Explicit specialization for unsigned long long. │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_9_4_8 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c_<_ _w_c_h_a_r___t_ _> │ │ │ │ +Explicit specialization for wchar_t. │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_9_7_1 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c_<_ _c_h_a_r_1_6___t_ _> │ │ │ │ +Explicit specialization for char16_t. │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_2_0 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c_<_ _c_h_a_r_3_2___t_ _> │ │ │ │ +Explicit specialization for char32_t. │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_4_4 │ │ │ │ +_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_u_t_o___p_t_r___r_e_f │ │ │ │ +DDeeffiinniittiioonn _a_u_t_o___p_t_r_._h_:_4_9 │ │ │ │ + * _s_t_d_a_t_o_m_i_c_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00032_source.html │ │ │ @@ -98,18 +98,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
│ │ │ @@ -766,23 +766,23 @@ │ │ │
712}
│ │ │
713#endif // __cplusplus
│ │ │
714
│ │ │
715#pragma GCC visibility pop
│ │ │
716
│ │ │
717#endif // __CXXABI_H
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │
ISO C++ entities toplevel namespace is std.
│ │ │
GNU extensions for public use.
│ │ │ -
constexpr _Iterator __base(_Iterator __it)
│ │ │ +
constexpr _Iterator __base(_Iterator __it)
│ │ │
Part of RTTI.
Definition typeinfo:94
│ │ │ -
Base class for all library exceptions.
Definition exception.h:62
│ │ │ +
Base class for all library exceptions.
Definition exception.h:62
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,931 +1,17 @@ │ │ │ │ libstdc++ │ │ │ │ -_N_a_m_e_s_p_a_c_e_s | _M_a_c_r_o_s | _F_u_n_c_t_i_o_n_s │ │ │ │ -valarray_after.h File Reference │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ +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 │ │ │ │   │ │ │ │ -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) │ │ │ │ -  │ │ │ │ -FFuunnccttiioonnss │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Abs, │ │ │ │ - _Expr, ___D_o_m >, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_a_b_s (_c_o_n_s_t _Expr< ___D_o_m, _t_y_p_e_n_a_m_e │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Abs, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_a_b_s (_c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Acos, │ │ │ │ - _Expr, ___D_o_m >, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_a_c_o_s (_c_o_n_s_t _Expr< ___D_o_m, _t_y_p_e_n_a_m_e │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Acos, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_a_c_o_s (_c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Asin, │ │ │ │ - _Expr, ___D_o_m >, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_a_s_i_n (_c_o_n_s_t _Expr< ___D_o_m, _t_y_p_e_n_a_m_e │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Asin, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_a_s_i_n (_c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Atan, │ │ │ │ - _Expr, ___D_o_m >, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_a_t_a_n (_c_o_n_s_t _Expr< ___D_o_m, _t_y_p_e_n_a_m_e │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Atan, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_a_t_a_n (_c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::_Atan2, │ │ │ │ -_Expr, _Constant, ___D_o_m, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_a_t_a_n_2 (_c_o_n_s_t _Expr< ___D_o_m, _t_y_p_e_n_a_m_e │ │ │ │ -value_type >, _t_y_p_e_n_a_m_e _Dom::value_type _Dom::value_type > &__e, _c_o_n_s_t _t_y_p_e_n_a_m_e │ │ │ │ - >  _Dom::value_type &__t) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::_Atan2, _s_t_d_:_:_a_t_a_n_2 (_c_o_n_s_t _Expr< ___D_o_m, _t_y_p_e_n_a_m_e │ │ │ │ -_Expr, _ValArray, ___D_o_m, _t_y_p_e_n_a_m_e _Dom:: _Dom::value_type > &__e, _c_o_n_s_t │ │ │ │ -value_type >, _t_y_p_e_n_a_m_e _Dom::value_type _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e _Dom::value_type > │ │ │ │ - >  &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m_1 , _c_l_a_s_s ___D_o_m_2 > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::_Atan2, _s_t_d_:_:_a_t_a_n_2 (_c_o_n_s_t _Expr< ___D_o_m_1, │ │ │ │ - _Expr, _Expr, ___D_o_m_1, ___D_o_m_2 >, _t_y_p_e_n_a_m_e _t_y_p_e_n_a_m_e _Dom1::value_type > &_____e_1, │ │ │ │ - _Dom1::value_type >  _c_o_n_s_t _Expr< ___D_o_m_2, _t_y_p_e_n_a_m_e _Dom2:: │ │ │ │ - value_type > &_____e_2) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::_Atan2, │ │ │ │ - _Constant, _Expr, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_a_t_a_n_2 (_c_o_n_s_t _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - value_type, ___D_o_m >, _t_y_p_e_n_a_m_e _Dom:: value_type &__t, _c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - value_type >  _t_y_p_e_n_a_m_e _Dom::value_type > &__e) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::_Atan2, _s_t_d_:_:_a_t_a_n_2 (_c_o_n_s_t _t_y_p_e_n_a_m_e _v_a_l_a_r_r_a_y< │ │ │ │ - _Constant, _ValArray, _Tp, _Tp >, _Tp _Tp >::value_type &__t, _c_o_n_s_t _v_a_l_a_r_r_a_y< │ │ │ │ - >  _Tp > &_____v) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::_Atan2, _s_t_d_:_:_a_t_a_n_2 (_c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp > &_____v, │ │ │ │ - _ValArray, _Constant, _Tp, _Tp >, _Tp _c_o_n_s_t _t_y_p_e_n_a_m_e _v_a_l_a_r_r_a_y< _Tp >:: │ │ │ │ - >  value_type &__t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::_Atan2, │ │ │ │ - _ValArray, _ValArray, _Tp, _Tp >, _Tp _s_t_d_:_:_a_t_a_n_2 (_c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp > &_____v, │ │ │ │ - >  _c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp > &_____w) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::_Atan2, │ │ │ │ - _ValArray, _Expr, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_a_t_a_n_2 (_c_o_n_s_t _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e │ │ │ │ - value_type, ___D_o_m >, _t_y_p_e_n_a_m_e _Dom:: _Dom::valarray > &_____v, _c_o_n_s_t _Expr< │ │ │ │ - value_type >  ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type > &__e) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Cos, │ │ │ │ - _Expr, ___D_o_m >, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_c_o_s (_c_o_n_s_t _Expr< ___D_o_m, _t_y_p_e_n_a_m_e │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Cos, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_c_o_s (_c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Cosh, │ │ │ │ - _Expr, ___D_o_m >, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_c_o_s_h (_c_o_n_s_t _Expr< ___D_o_m, _t_y_p_e_n_a_m_e │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Cosh, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_c_o_s_h (_c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Exp, │ │ │ │ - _Expr, ___D_o_m >, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_e_x_p (_c_o_n_s_t _Expr< ___D_o_m, _t_y_p_e_n_a_m_e │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Exp, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_e_x_p (_c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Log, │ │ │ │ - _Expr, ___D_o_m >, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_l_o_g (_c_o_n_s_t _Expr< ___D_o_m, _t_y_p_e_n_a_m_e │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Log, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_l_o_g (_c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Log10, │ │ │ │ - _Expr, ___D_o_m >, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_l_o_g_1_0 (_c_o_n_s_t _Expr< ___D_o_m, _t_y_p_e_n_a_m_e │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Log10, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_l_o_g_1_0 (_c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ -__not_equal_to, _Expr, _ValArray, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e _s_t_d_:_:_o_p_e_r_a_t_o_r_!_= (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - __fun< _s_t_r_u_c_t std::__not_equal_to, _t_y_p_e_n_a_m_e _Dom::value_type > &__e, _c_o_n_s_t │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >:: _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e _Dom::value_type > │ │ │ │ - result_type >  &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ -__not_equal_to, _Expr, _Constant, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e │ │ │ │ - __fun< _s_t_r_u_c_t std::__not_equal_to, _s_t_d_:_:_o_p_e_r_a_t_o_r_!_= (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - result_type >  _t_y_p_e_n_a_m_e _Dom::value_type &__t) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m_1 , _c_l_a_s_s ___D_o_m_2 > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __not_equal_to, _Expr, _Expr, ___D_o_m_1, _s_t_d_:_:_o_p_e_r_a_t_o_r_!_= (_c_o_n_s_t _Expr< ___D_o_m_1, │ │ │ │ - ___D_o_m_2 >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom1::value_type > &_____v, │ │ │ │ - __not_equal_to, _t_y_p_e_n_a_m_e _Dom1:: _c_o_n_s_t _Expr< ___D_o_m_2, _t_y_p_e_n_a_m_e _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &_____w) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __not_equal_to, _Constant, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_!_= (_c_o_n_s_t _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - __not_equal_to, _t_y_p_e_n_a_m_e _Dom:: value_type &__t, _c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - value_type >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __not_equal_to, _ValArray, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, _s_t_d_:_:_o_p_e_r_a_t_o_r_!_= (_c_o_n_s_t _v_a_l_a_r_r_a_y< │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - __not_equal_to, _t_y_p_e_n_a_m_e _Dom:: _Expr< ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ -_Expr< _BinClos< _s_t_r_u_c_t std::__modulus, │ │ │ │ -_Expr, _ValArray, ___D_o_m, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_% (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - value_type >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t _t_y_p_e_n_a_m_e _Dom::value_type > &__e, _c_o_n_s_t │ │ │ │ - std::__modulus, _t_y_p_e_n_a_m_e _Dom:: _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e _Dom::value_type > │ │ │ │ - value_type >::result_type >  &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ -_Expr< _BinClos< _s_t_r_u_c_t std::__modulus, │ │ │ │ -_Expr, _Constant, ___D_o_m, _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - value_type >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t _s_t_d_:_:_o_p_e_r_a_t_o_r_% (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - std::__modulus, _t_y_p_e_n_a_m_e _Dom:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - value_type >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type &__t) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m_1 , _c_l_a_s_s ___D_o_m_2 > │ │ │ │ -_Expr< _BinClos< _s_t_r_u_c_t std::__modulus, _s_t_d_:_:_o_p_e_r_a_t_o_r_% (_c_o_n_s_t _Expr< ___D_o_m_1, │ │ │ │ - _Expr, _Expr, ___D_o_m_1, ___D_o_m_2 >, _t_y_p_e_n_a_m_e _t_y_p_e_n_a_m_e _Dom1::value_type > &_____v, │ │ │ │ - __fun< _s_t_r_u_c_t std::__modulus, _t_y_p_e_n_a_m_e _c_o_n_s_t _Expr< ___D_o_m_2, _t_y_p_e_n_a_m_e _Dom2:: │ │ │ │ - _Dom1::value_type >::result_type >  value_type > &_____w) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ -_Expr< _BinClos< _s_t_r_u_c_t std::__modulus, │ │ │ │ - _Constant, _Expr, _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - value_type, ___D_o_m >, _t_y_p_e_n_a_m_e __fun< _s_t_d_:_:_o_p_e_r_a_t_o_r_% (_c_o_n_s_t _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - _s_t_r_u_c_t std::__modulus, _t_y_p_e_n_a_m_e _Dom:: value_type &__t, _c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - value_type >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ -_Expr< _BinClos< _s_t_r_u_c_t std::__modulus, │ │ │ │ - _ValArray, _Expr, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_% (_c_o_n_s_t _v_a_l_a_r_r_a_y< │ │ │ │ - value_type, ___D_o_m >, _t_y_p_e_n_a_m_e __fun< _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - _s_t_r_u_c_t std::__modulus, _t_y_p_e_n_a_m_e _Dom:: _Expr< ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __bitwise_and, _Expr, _ValArray, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e _s_t_d_:_:_o_p_e_r_a_t_o_r_& (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - __fun< _s_t_r_u_c_t std::__bitwise_and, _t_y_p_e_n_a_m_e _Dom::value_type > &__e, _c_o_n_s_t │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >:: _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e _Dom::value_type > │ │ │ │ - result_type >  &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __bitwise_and, _Expr, _Constant, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e │ │ │ │ - __fun< _s_t_r_u_c_t std::__bitwise_and, _s_t_d_:_:_o_p_e_r_a_t_o_r_& (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - result_type >  _t_y_p_e_n_a_m_e _Dom::value_type &__t) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m_1 , _c_l_a_s_s ___D_o_m_2 > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __bitwise_and, _Expr, _Expr, ___D_o_m_1, _s_t_d_:_:_o_p_e_r_a_t_o_r_& (_c_o_n_s_t _Expr< ___D_o_m_1, │ │ │ │ - ___D_o_m_2 >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom1::value_type > &_____v, │ │ │ │ - __bitwise_and, _t_y_p_e_n_a_m_e _Dom1:: _c_o_n_s_t _Expr< ___D_o_m_2, _t_y_p_e_n_a_m_e _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &_____w) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __bitwise_and, _Constant, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_& (_c_o_n_s_t _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - __bitwise_and, _t_y_p_e_n_a_m_e _Dom:: value_type &__t, _c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - value_type >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __bitwise_and, _ValArray, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, _s_t_d_:_:_o_p_e_r_a_t_o_r_& (_c_o_n_s_t _v_a_l_a_r_r_a_y< │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - __bitwise_and, _t_y_p_e_n_a_m_e _Dom:: _Expr< ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __logical_and, _Expr, _ValArray, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e _s_t_d_:_:_o_p_e_r_a_t_o_r_&_& (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - __fun< _s_t_r_u_c_t std::__logical_and, _t_y_p_e_n_a_m_e _Dom::value_type > &__e, _c_o_n_s_t │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >:: _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e _Dom::value_type > │ │ │ │ - result_type >  &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __logical_and, _Expr, _Constant, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e │ │ │ │ - __fun< _s_t_r_u_c_t std::__logical_and, _s_t_d_:_:_o_p_e_r_a_t_o_r_&_& (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - result_type >  _t_y_p_e_n_a_m_e _Dom::value_type &__t) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m_1 , _c_l_a_s_s ___D_o_m_2 > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __logical_and, _Expr, _Expr, ___D_o_m_1, _s_t_d_:_:_o_p_e_r_a_t_o_r_&_& (_c_o_n_s_t _Expr< ___D_o_m_1, │ │ │ │ - ___D_o_m_2 >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom1::value_type > &_____v, │ │ │ │ - __logical_and, _t_y_p_e_n_a_m_e _Dom1:: _c_o_n_s_t _Expr< ___D_o_m_2, _t_y_p_e_n_a_m_e _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &_____w) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __logical_and, _Constant, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_&_& (_c_o_n_s_t _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - __logical_and, _t_y_p_e_n_a_m_e _Dom:: value_type &__t, _c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - value_type >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __logical_and, _ValArray, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, _s_t_d_:_:_o_p_e_r_a_t_o_r_&_& (_c_o_n_s_t _v_a_l_a_r_r_a_y< │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - __logical_and, _t_y_p_e_n_a_m_e _Dom:: _Expr< ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __multiplies, _Expr, _ValArray, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e _s_t_d_:_:_o_p_e_r_a_t_o_r_* (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - __fun< _s_t_r_u_c_t std::__multiplies, _t_y_p_e_n_a_m_e _Dom::value_type > &__e, _c_o_n_s_t │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >:: _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e _Dom::value_type > │ │ │ │ - result_type >  &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __multiplies, _Expr, _Constant, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e │ │ │ │ - __fun< _s_t_r_u_c_t std::__multiplies, _s_t_d_:_:_o_p_e_r_a_t_o_r_* (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - result_type >  _t_y_p_e_n_a_m_e _Dom::value_type &__t) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m_1 , _c_l_a_s_s ___D_o_m_2 > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __multiplies, _Expr, _Expr, ___D_o_m_1, _s_t_d_:_:_o_p_e_r_a_t_o_r_* (_c_o_n_s_t _Expr< ___D_o_m_1, │ │ │ │ - ___D_o_m_2 >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom1::value_type > &_____v, │ │ │ │ - __multiplies, _t_y_p_e_n_a_m_e _Dom1:: _c_o_n_s_t _Expr< ___D_o_m_2, _t_y_p_e_n_a_m_e _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &_____w) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __multiplies, _Constant, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_* (_c_o_n_s_t _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ -__multiplies, _t_y_p_e_n_a_m_e _Dom::value_type value_type &__t, _c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __multiplies, _ValArray, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, _s_t_d_:_:_o_p_e_r_a_t_o_r_* (_c_o_n_s_t _v_a_l_a_r_r_a_y< │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ -__multiplies, _t_y_p_e_n_a_m_e _Dom::value_type _Expr< ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type │ │ │ │ - >::result_type >  > &__e) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::__plus, │ │ │ │ -_Expr, _ValArray, ___D_o_m, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_+ (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - value_type >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t _t_y_p_e_n_a_m_e _Dom::value_type > &__e, _c_o_n_s_t │ │ │ │ - std::__plus, _t_y_p_e_n_a_m_e _Dom::value_type _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e _Dom::value_type > │ │ │ │ - >::result_type >  &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::__plus, │ │ │ │ -_Expr, _Constant, ___D_o_m, _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - value_type >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t _s_t_d_:_:_o_p_e_r_a_t_o_r_+ (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - std::__plus, _t_y_p_e_n_a_m_e _Dom::value_type _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type &__t) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m_1 , _c_l_a_s_s ___D_o_m_2 > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::__plus, _s_t_d_:_:_o_p_e_r_a_t_o_r_+ (_c_o_n_s_t _Expr< ___D_o_m_1, │ │ │ │ - _Expr, _Expr, ___D_o_m_1, ___D_o_m_2 >, _t_y_p_e_n_a_m_e _t_y_p_e_n_a_m_e _Dom1::value_type > &_____v, │ │ │ │ - __fun< _s_t_r_u_c_t std::__plus, _t_y_p_e_n_a_m_e _c_o_n_s_t _Expr< ___D_o_m_2, _t_y_p_e_n_a_m_e _Dom2:: │ │ │ │ - _Dom1::value_type >::result_type >  value_type > &_____w) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::__plus, │ │ │ │ - _Constant, _Expr, _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - value_type, ___D_o_m >, _t_y_p_e_n_a_m_e __fun< _s_t_d_:_:_o_p_e_r_a_t_o_r_+ (_c_o_n_s_t _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - _s_t_r_u_c_t std::__plus, _t_y_p_e_n_a_m_e _Dom:: value_type &__t, _c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - value_type >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::__plus, │ │ │ │ - _ValArray, _Expr, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_+ (_c_o_n_s_t _v_a_l_a_r_r_a_y< │ │ │ │ - value_type, ___D_o_m >, _t_y_p_e_n_a_m_e __fun< _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - _s_t_r_u_c_t std::__plus, _t_y_p_e_n_a_m_e _Dom:: _Expr< ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::__minus, │ │ │ │ -_Expr, _ValArray, ___D_o_m, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_- (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - value_type >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t _t_y_p_e_n_a_m_e _Dom::value_type > &__e, _c_o_n_s_t │ │ │ │ -std::__minus, _t_y_p_e_n_a_m_e _Dom::value_type _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e _Dom::value_type > │ │ │ │ - >::result_type >  &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::__minus, │ │ │ │ -_Expr, _Constant, ___D_o_m, _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - value_type >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t _s_t_d_:_:_o_p_e_r_a_t_o_r_- (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ -std::__minus, _t_y_p_e_n_a_m_e _Dom::value_type _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type &__t) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m_1 , _c_l_a_s_s ___D_o_m_2 > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::__minus, _s_t_d_:_:_o_p_e_r_a_t_o_r_- (_c_o_n_s_t _Expr< ___D_o_m_1, │ │ │ │ - _Expr, _Expr, ___D_o_m_1, ___D_o_m_2 >, _t_y_p_e_n_a_m_e _t_y_p_e_n_a_m_e _Dom1::value_type > &_____v, │ │ │ │ - __fun< _s_t_r_u_c_t std::__minus, _t_y_p_e_n_a_m_e _c_o_n_s_t _Expr< ___D_o_m_2, _t_y_p_e_n_a_m_e _Dom2:: │ │ │ │ - _Dom1::value_type >::result_type >  value_type > &_____w) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::__minus, │ │ │ │ - _Constant, _Expr, _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - value_type, ___D_o_m >, _t_y_p_e_n_a_m_e __fun< _s_t_d_:_:_o_p_e_r_a_t_o_r_- (_c_o_n_s_t _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - _s_t_r_u_c_t std::__minus, _t_y_p_e_n_a_m_e _Dom:: value_type &__t, _c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - value_type >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::__minus, │ │ │ │ - _ValArray, _Expr, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_- (_c_o_n_s_t _v_a_l_a_r_r_a_y< │ │ │ │ - value_type, ___D_o_m >, _t_y_p_e_n_a_m_e __fun< _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - _s_t_r_u_c_t std::__minus, _t_y_p_e_n_a_m_e _Dom:: _Expr< ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ -_Expr< _BinClos< _s_t_r_u_c_t std::__divides, │ │ │ │ -_Expr, _ValArray, ___D_o_m, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_/ (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - value_type >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t _t_y_p_e_n_a_m_e _Dom::value_type > &__e, _c_o_n_s_t │ │ │ │ - std::__divides, _t_y_p_e_n_a_m_e _Dom:: _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e _Dom::value_type > │ │ │ │ - value_type >::result_type >  &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ -_Expr< _BinClos< _s_t_r_u_c_t std::__divides, │ │ │ │ -_Expr, _Constant, ___D_o_m, _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - value_type >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t _s_t_d_:_:_o_p_e_r_a_t_o_r_/ (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - std::__divides, _t_y_p_e_n_a_m_e _Dom:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - value_type >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type &__t) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m_1 , _c_l_a_s_s ___D_o_m_2 > │ │ │ │ -_Expr< _BinClos< _s_t_r_u_c_t std::__divides, _s_t_d_:_:_o_p_e_r_a_t_o_r_/ (_c_o_n_s_t _Expr< ___D_o_m_1, │ │ │ │ - _Expr, _Expr, ___D_o_m_1, ___D_o_m_2 >, _t_y_p_e_n_a_m_e _t_y_p_e_n_a_m_e _Dom1::value_type > &_____v, │ │ │ │ - __fun< _s_t_r_u_c_t std::__divides, _t_y_p_e_n_a_m_e _c_o_n_s_t _Expr< ___D_o_m_2, _t_y_p_e_n_a_m_e _Dom2:: │ │ │ │ - _Dom1::value_type >::result_type >  value_type > &_____w) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ -_Expr< _BinClos< _s_t_r_u_c_t std::__divides, │ │ │ │ - _Constant, _Expr, _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - value_type, ___D_o_m >, _t_y_p_e_n_a_m_e __fun< _s_t_d_:_:_o_p_e_r_a_t_o_r_/ (_c_o_n_s_t _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - _s_t_r_u_c_t std::__divides, _t_y_p_e_n_a_m_e _Dom:: value_type &__t, _c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - value_type >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ -_Expr< _BinClos< _s_t_r_u_c_t std::__divides, │ │ │ │ - _ValArray, _Expr, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_/ (_c_o_n_s_t _v_a_l_a_r_r_a_y< │ │ │ │ - value_type, ___D_o_m >, _t_y_p_e_n_a_m_e __fun< _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - _s_t_r_u_c_t std::__divides, _t_y_p_e_n_a_m_e _Dom:: _Expr< ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::__less, │ │ │ │ -_Expr, _ValArray, ___D_o_m, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_< (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - value_type >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t _t_y_p_e_n_a_m_e _Dom::value_type > &__e, _c_o_n_s_t │ │ │ │ - std::__less, _t_y_p_e_n_a_m_e _Dom::value_type _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e _Dom::value_type > │ │ │ │ - >::result_type >  &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::__less, │ │ │ │ -_Expr, _Constant, ___D_o_m, _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - value_type >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t _s_t_d_:_:_o_p_e_r_a_t_o_r_< (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - std::__less, _t_y_p_e_n_a_m_e _Dom::value_type _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type &__t) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m_1 , _c_l_a_s_s ___D_o_m_2 > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::__less, _s_t_d_:_:_o_p_e_r_a_t_o_r_< (_c_o_n_s_t _Expr< ___D_o_m_1, │ │ │ │ - _Expr, _Expr, ___D_o_m_1, ___D_o_m_2 >, _t_y_p_e_n_a_m_e _t_y_p_e_n_a_m_e _Dom1::value_type > &_____v, │ │ │ │ - __fun< _s_t_r_u_c_t std::__less, _t_y_p_e_n_a_m_e _c_o_n_s_t _Expr< ___D_o_m_2, _t_y_p_e_n_a_m_e _Dom2:: │ │ │ │ - _Dom1::value_type >::result_type >  value_type > &_____w) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::__less, │ │ │ │ - _Constant, _Expr, _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - value_type, ___D_o_m >, _t_y_p_e_n_a_m_e __fun< _s_t_d_:_:_o_p_e_r_a_t_o_r_< (_c_o_n_s_t _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - _s_t_r_u_c_t std::__less, _t_y_p_e_n_a_m_e _Dom:: value_type &__t, _c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - value_type >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::__less, │ │ │ │ - _ValArray, _Expr, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_< (_c_o_n_s_t _v_a_l_a_r_r_a_y< │ │ │ │ - value_type, ___D_o_m >, _t_y_p_e_n_a_m_e __fun< _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - _s_t_r_u_c_t std::__less, _t_y_p_e_n_a_m_e _Dom:: _Expr< ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __shift_left, _Expr, _ValArray, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e _s_t_d_:_:_o_p_e_r_a_t_o_r_<_< (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - __fun< _s_t_r_u_c_t std::__shift_left, _t_y_p_e_n_a_m_e _Dom::value_type > &__e, _c_o_n_s_t │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >:: _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e _Dom::value_type > │ │ │ │ - result_type >  &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __shift_left, _Expr, _Constant, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e │ │ │ │ - __fun< _s_t_r_u_c_t std::__shift_left, _s_t_d_:_:_o_p_e_r_a_t_o_r_<_< (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - result_type >  _t_y_p_e_n_a_m_e _Dom::value_type &__t) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m_1 , _c_l_a_s_s ___D_o_m_2 > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __shift_left, _Expr, _Expr, ___D_o_m_1, _s_t_d_:_:_o_p_e_r_a_t_o_r_<_< (_c_o_n_s_t _Expr< ___D_o_m_1, │ │ │ │ - ___D_o_m_2 >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom1::value_type > &_____v, │ │ │ │ - __shift_left, _t_y_p_e_n_a_m_e _Dom1:: _c_o_n_s_t _Expr< ___D_o_m_2, _t_y_p_e_n_a_m_e _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &_____w) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __shift_left, _Constant, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_<_< (_c_o_n_s_t _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ -__shift_left, _t_y_p_e_n_a_m_e _Dom::value_type value_type &__t, _c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __shift_left, _ValArray, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, _s_t_d_:_:_o_p_e_r_a_t_o_r_<_< (_c_o_n_s_t _v_a_l_a_r_r_a_y< │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ -__shift_left, _t_y_p_e_n_a_m_e _Dom::value_type _Expr< ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type │ │ │ │ - >::result_type >  > &__e) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __less_equal, _Expr, _ValArray, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e _s_t_d_:_:_o_p_e_r_a_t_o_r_<_= (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - __fun< _s_t_r_u_c_t std::__less_equal, _t_y_p_e_n_a_m_e _Dom::value_type > &__e, _c_o_n_s_t │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >:: _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e _Dom::value_type > │ │ │ │ - result_type >  &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __less_equal, _Expr, _Constant, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e │ │ │ │ - __fun< _s_t_r_u_c_t std::__less_equal, _s_t_d_:_:_o_p_e_r_a_t_o_r_<_= (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - result_type >  _t_y_p_e_n_a_m_e _Dom::value_type &__t) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m_1 , _c_l_a_s_s ___D_o_m_2 > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __less_equal, _Expr, _Expr, ___D_o_m_1, _s_t_d_:_:_o_p_e_r_a_t_o_r_<_= (_c_o_n_s_t _Expr< ___D_o_m_1, │ │ │ │ - ___D_o_m_2 >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom1::value_type > &_____v, │ │ │ │ - __less_equal, _t_y_p_e_n_a_m_e _Dom1:: _c_o_n_s_t _Expr< ___D_o_m_2, _t_y_p_e_n_a_m_e _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &_____w) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __less_equal, _Constant, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_<_= (_c_o_n_s_t _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ -__less_equal, _t_y_p_e_n_a_m_e _Dom::value_type value_type &__t, _c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __less_equal, _ValArray, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, _s_t_d_:_:_o_p_e_r_a_t_o_r_<_= (_c_o_n_s_t _v_a_l_a_r_r_a_y< │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ -__less_equal, _t_y_p_e_n_a_m_e _Dom::value_type _Expr< ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type │ │ │ │ - >::result_type >  > &__e) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __equal_to, _Expr, _ValArray, ___D_o_m, _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e _t_y_p_e_n_a_m_e _Dom::value_type > &__e, _c_o_n_s_t │ │ │ │ -__fun< _s_t_r_u_c_t std::__equal_to, _t_y_p_e_n_a_m_e _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e _Dom::value_type > │ │ │ │ - _Dom::value_type >::result_type >  &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __equal_to, _Expr, _Constant, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ -__fun< _s_t_r_u_c_t std::__equal_to, _t_y_p_e_n_a_m_e _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - _Dom::value_type >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type &__t) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m_1 , _c_l_a_s_s ___D_o_m_2 > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __equal_to, _Expr, _Expr, ___D_o_m_1, ___D_o_m_2 _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (_c_o_n_s_t _Expr< ___D_o_m_1, │ │ │ │ - >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom1::value_type > &_____v, │ │ │ │ - __equal_to, _t_y_p_e_n_a_m_e _Dom1::value_type _c_o_n_s_t _Expr< ___D_o_m_2, _t_y_p_e_n_a_m_e _Dom2:: │ │ │ │ - >::result_type >  value_type > &_____w) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __equal_to, _Constant, _Expr, _t_y_p_e_n_a_m_e │ │ │ │ - _Dom::value_type, ___D_o_m >, _t_y_p_e_n_a_m_e _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (_c_o_n_s_t _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ -__fun< _s_t_r_u_c_t std::__equal_to, _t_y_p_e_n_a_m_e value_type &__t, _c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - _Dom::value_type >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __equal_to, _ValArray, _Expr, _t_y_p_e_n_a_m_e _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (_c_o_n_s_t _v_a_l_a_r_r_a_y< │ │ │ │ - _Dom::value_type, ___D_o_m >, _t_y_p_e_n_a_m_e _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ -__fun< _s_t_r_u_c_t std::__equal_to, _t_y_p_e_n_a_m_e _Expr< ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type │ │ │ │ - _Dom::value_type >::result_type >  > &__e) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ -_Expr< _BinClos< _s_t_r_u_c_t std::__greater, │ │ │ │ -_Expr, _ValArray, ___D_o_m, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_> (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - value_type >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t _t_y_p_e_n_a_m_e _Dom::value_type > &__e, _c_o_n_s_t │ │ │ │ - std::__greater, _t_y_p_e_n_a_m_e _Dom:: _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e _Dom::value_type > │ │ │ │ - value_type >::result_type >  &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ -_Expr< _BinClos< _s_t_r_u_c_t std::__greater, │ │ │ │ -_Expr, _Constant, ___D_o_m, _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - value_type >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t _s_t_d_:_:_o_p_e_r_a_t_o_r_> (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - std::__greater, _t_y_p_e_n_a_m_e _Dom:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - value_type >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type &__t) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m_1 , _c_l_a_s_s ___D_o_m_2 > │ │ │ │ -_Expr< _BinClos< _s_t_r_u_c_t std::__greater, _s_t_d_:_:_o_p_e_r_a_t_o_r_> (_c_o_n_s_t _Expr< ___D_o_m_1, │ │ │ │ - _Expr, _Expr, ___D_o_m_1, ___D_o_m_2 >, _t_y_p_e_n_a_m_e _t_y_p_e_n_a_m_e _Dom1::value_type > &_____v, │ │ │ │ - __fun< _s_t_r_u_c_t std::__greater, _t_y_p_e_n_a_m_e _c_o_n_s_t _Expr< ___D_o_m_2, _t_y_p_e_n_a_m_e _Dom2:: │ │ │ │ - _Dom1::value_type >::result_type >  value_type > &_____w) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ -_Expr< _BinClos< _s_t_r_u_c_t std::__greater, │ │ │ │ - _Constant, _Expr, _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - value_type, ___D_o_m >, _t_y_p_e_n_a_m_e __fun< _s_t_d_:_:_o_p_e_r_a_t_o_r_> (_c_o_n_s_t _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - _s_t_r_u_c_t std::__greater, _t_y_p_e_n_a_m_e _Dom:: value_type &__t, _c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - value_type >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ -_Expr< _BinClos< _s_t_r_u_c_t std::__greater, │ │ │ │ - _ValArray, _Expr, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_> (_c_o_n_s_t _v_a_l_a_r_r_a_y< │ │ │ │ - value_type, ___D_o_m >, _t_y_p_e_n_a_m_e __fun< _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - _s_t_r_u_c_t std::__greater, _t_y_p_e_n_a_m_e _Dom:: _Expr< ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __greater_equal, _Expr, _ValArray, │ │ │ │ - ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type >, _s_t_d_:_:_o_p_e_r_a_t_o_r_>_= (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom::value_type > &__e, _c_o_n_s_t │ │ │ │ - __greater_equal, _t_y_p_e_n_a_m_e _Dom:: _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e _Dom::value_type > │ │ │ │ - value_type >::result_type >  &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __greater_equal, _Expr, _Constant, │ │ │ │ - ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type >, │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_>_= (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - __greater_equal, _t_y_p_e_n_a_m_e _Dom:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - value_type >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type &__t) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m_1 , _c_l_a_s_s ___D_o_m_2 > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __greater_equal, _Expr, _Expr, ___D_o_m_1, _s_t_d_:_:_o_p_e_r_a_t_o_r_>_= (_c_o_n_s_t _Expr< ___D_o_m_1, │ │ │ │ - ___D_o_m_2 >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom1::value_type > &_____v, │ │ │ │ - __greater_equal, _t_y_p_e_n_a_m_e _Dom1:: _c_o_n_s_t _Expr< ___D_o_m_2, _t_y_p_e_n_a_m_e _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &_____w) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __greater_equal, _Constant, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_>_= (_c_o_n_s_t _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - __greater_equal, _t_y_p_e_n_a_m_e _Dom:: value_type &__t, _c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - value_type >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __greater_equal, _ValArray, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, _s_t_d_:_:_o_p_e_r_a_t_o_r_>_= (_c_o_n_s_t _v_a_l_a_r_r_a_y< │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - __greater_equal, _t_y_p_e_n_a_m_e _Dom:: _Expr< ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __shift_right, _Expr, _ValArray, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e _s_t_d_:_:_o_p_e_r_a_t_o_r_>_> (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - __fun< _s_t_r_u_c_t std::__shift_right, _t_y_p_e_n_a_m_e _Dom::value_type > &__e, _c_o_n_s_t │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >:: _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e _Dom::value_type > │ │ │ │ - result_type >  &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __shift_right, _Expr, _Constant, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e │ │ │ │ - __fun< _s_t_r_u_c_t std::__shift_right, _s_t_d_:_:_o_p_e_r_a_t_o_r_>_> (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - result_type >  _t_y_p_e_n_a_m_e _Dom::value_type &__t) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m_1 , _c_l_a_s_s ___D_o_m_2 > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __shift_right, _Expr, _Expr, ___D_o_m_1, _s_t_d_:_:_o_p_e_r_a_t_o_r_>_> (_c_o_n_s_t _Expr< ___D_o_m_1, │ │ │ │ - ___D_o_m_2 >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom1::value_type > &_____v, │ │ │ │ - __shift_right, _t_y_p_e_n_a_m_e _Dom1:: _c_o_n_s_t _Expr< ___D_o_m_2, _t_y_p_e_n_a_m_e _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &_____w) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __shift_right, _Constant, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_>_> (_c_o_n_s_t _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - __shift_right, _t_y_p_e_n_a_m_e _Dom:: value_type &__t, _c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - value_type >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __shift_right, _ValArray, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, _s_t_d_:_:_o_p_e_r_a_t_o_r_>_> (_c_o_n_s_t _v_a_l_a_r_r_a_y< │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - __shift_right, _t_y_p_e_n_a_m_e _Dom:: _Expr< ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __bitwise_xor, _Expr, _ValArray, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e _s_t_d_:_:_o_p_e_r_a_t_o_r_^ (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - __fun< _s_t_r_u_c_t std::__bitwise_xor, _t_y_p_e_n_a_m_e _Dom::value_type > &__e, _c_o_n_s_t │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >:: _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e _Dom::value_type > │ │ │ │ - result_type >  &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __bitwise_xor, _Expr, _Constant, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e │ │ │ │ - __fun< _s_t_r_u_c_t std::__bitwise_xor, _s_t_d_:_:_o_p_e_r_a_t_o_r_^ (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - result_type >  _t_y_p_e_n_a_m_e _Dom::value_type &__t) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m_1 , _c_l_a_s_s ___D_o_m_2 > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __bitwise_xor, _Expr, _Expr, ___D_o_m_1, _s_t_d_:_:_o_p_e_r_a_t_o_r_^ (_c_o_n_s_t _Expr< ___D_o_m_1, │ │ │ │ - ___D_o_m_2 >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom1::value_type > &_____v, │ │ │ │ - __bitwise_xor, _t_y_p_e_n_a_m_e _Dom1:: _c_o_n_s_t _Expr< ___D_o_m_2, _t_y_p_e_n_a_m_e _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &_____w) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __bitwise_xor, _Constant, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_^ (_c_o_n_s_t _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - __bitwise_xor, _t_y_p_e_n_a_m_e _Dom:: value_type &__t, _c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - value_type >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __bitwise_xor, _ValArray, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, _s_t_d_:_:_o_p_e_r_a_t_o_r_^ (_c_o_n_s_t _v_a_l_a_r_r_a_y< │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - __bitwise_xor, _t_y_p_e_n_a_m_e _Dom:: _Expr< ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __bitwise_or, _Expr, _ValArray, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e _s_t_d_:_:_o_p_e_r_a_t_o_r_| (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - __fun< _s_t_r_u_c_t std::__bitwise_or, _t_y_p_e_n_a_m_e _Dom::value_type > &__e, _c_o_n_s_t │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >:: _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e _Dom::value_type > │ │ │ │ - result_type >  &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __bitwise_or, _Expr, _Constant, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e │ │ │ │ - __fun< _s_t_r_u_c_t std::__bitwise_or, _s_t_d_:_:_o_p_e_r_a_t_o_r_| (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - result_type >  _t_y_p_e_n_a_m_e _Dom::value_type &__t) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m_1 , _c_l_a_s_s ___D_o_m_2 > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __bitwise_or, _Expr, _Expr, ___D_o_m_1, _s_t_d_:_:_o_p_e_r_a_t_o_r_| (_c_o_n_s_t _Expr< ___D_o_m_1, │ │ │ │ - ___D_o_m_2 >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom1::value_type > &_____v, │ │ │ │ - __bitwise_or, _t_y_p_e_n_a_m_e _Dom1:: _c_o_n_s_t _Expr< ___D_o_m_2, _t_y_p_e_n_a_m_e _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &_____w) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __bitwise_or, _Constant, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_| (_c_o_n_s_t _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ -__bitwise_or, _t_y_p_e_n_a_m_e _Dom::value_type value_type &__t, _c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __bitwise_or, _ValArray, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, _s_t_d_:_:_o_p_e_r_a_t_o_r_| (_c_o_n_s_t _v_a_l_a_r_r_a_y< │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ -__bitwise_or, _t_y_p_e_n_a_m_e _Dom::value_type _Expr< ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type │ │ │ │ - >::result_type >  > &__e) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __logical_or, _Expr, _ValArray, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e _s_t_d_:_:_o_p_e_r_a_t_o_r_|_| (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - __fun< _s_t_r_u_c_t std::__logical_or, _t_y_p_e_n_a_m_e _Dom::value_type > &__e, _c_o_n_s_t │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >:: _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e _Dom::value_type > │ │ │ │ - result_type >  &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __logical_or, _Expr, _Constant, ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >, _t_y_p_e_n_a_m_e │ │ │ │ - __fun< _s_t_r_u_c_t std::__logical_or, _s_t_d_:_:_o_p_e_r_a_t_o_r_|_| (_c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type >:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ - result_type >  _t_y_p_e_n_a_m_e _Dom::value_type &__t) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m_1 , _c_l_a_s_s ___D_o_m_2 > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __logical_or, _Expr, _Expr, ___D_o_m_1, _s_t_d_:_:_o_p_e_r_a_t_o_r_|_| (_c_o_n_s_t _Expr< ___D_o_m_1, │ │ │ │ - ___D_o_m_2 >, _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom1::value_type > &_____v, │ │ │ │ - __logical_or, _t_y_p_e_n_a_m_e _Dom1:: _c_o_n_s_t _Expr< ___D_o_m_2, _t_y_p_e_n_a_m_e _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &_____w) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __logical_or, _Constant, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_|_| (_c_o_n_s_t _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ -__logical_or, _t_y_p_e_n_a_m_e _Dom::value_type value_type &__t, _c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - >::result_type >  _t_y_p_e_n_a_m_e _Dom::value_type > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std:: │ │ │ │ - __logical_or, _ValArray, _Expr, │ │ │ │ - _t_y_p_e_n_a_m_e _Dom::value_type, ___D_o_m >, _s_t_d_:_:_o_p_e_r_a_t_o_r_|_| (_c_o_n_s_t _v_a_l_a_r_r_a_y< │ │ │ │ - _t_y_p_e_n_a_m_e __fun< _s_t_r_u_c_t std:: _t_y_p_e_n_a_m_e _Dom::value_type > &_____v, _c_o_n_s_t │ │ │ │ -__logical_or, _t_y_p_e_n_a_m_e _Dom::value_type _Expr< ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type │ │ │ │ - >::result_type >  > &__e) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::_Pow, │ │ │ │ -_Expr, _Constant, ___D_o_m, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_p_o_w (_c_o_n_s_t _Expr< ___D_o_m, _t_y_p_e_n_a_m_e │ │ │ │ -value_type >, _t_y_p_e_n_a_m_e _Dom::value_type _Dom::value_type > &__e, _c_o_n_s_t _t_y_p_e_n_a_m_e │ │ │ │ - >  _Dom::value_type &__t) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::_Pow, _s_t_d_:_:_p_o_w (_c_o_n_s_t _Expr< ___D_o_m, _t_y_p_e_n_a_m_e │ │ │ │ -_Expr, _ValArray, ___D_o_m, _t_y_p_e_n_a_m_e _Dom:: _Dom::value_type > &__e, _c_o_n_s_t │ │ │ │ -value_type >, _t_y_p_e_n_a_m_e _Dom::value_type _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e _Dom::value_type > │ │ │ │ - >  &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m_1 , _c_l_a_s_s ___D_o_m_2 > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::_Pow, _s_t_d_:_:_p_o_w (_c_o_n_s_t _Expr< ___D_o_m_1, _t_y_p_e_n_a_m_e │ │ │ │ - _Expr, _Expr, ___D_o_m_1, ___D_o_m_2 >, _t_y_p_e_n_a_m_e _Dom1::value_type > &_____e_1, _c_o_n_s_t _Expr< │ │ │ │ - _Dom1::value_type >  ___D_o_m_2, _t_y_p_e_n_a_m_e _Dom2::value_type > │ │ │ │ - &_____e_2) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::_Pow, │ │ │ │ - _Constant, _Expr, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_p_o_w (_c_o_n_s_t _t_y_p_e_n_a_m_e _Dom:: │ │ │ │ - value_type, ___D_o_m >, _t_y_p_e_n_a_m_e _Dom:: value_type &__t, _c_o_n_s_t _Expr< ___D_o_m, │ │ │ │ - value_type >  _t_y_p_e_n_a_m_e _Dom::value_type > &__e) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::_Pow, _s_t_d_:_:_p_o_w (_c_o_n_s_t _t_y_p_e_n_a_m_e _v_a_l_a_r_r_a_y< _Tp │ │ │ │ - _Constant, _ValArray, _Tp, _Tp >, _Tp >::value_type &__t, _c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp │ │ │ │ - >  > &_____v) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::_Pow, _s_t_d_:_:_p_o_w (_c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp > &_____v, │ │ │ │ - _ValArray, _Constant, _Tp, _Tp >, _Tp _c_o_n_s_t _t_y_p_e_n_a_m_e _v_a_l_a_r_r_a_y< _Tp >:: │ │ │ │ - >  value_type &__t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::_Pow, │ │ │ │ - _ValArray, _ValArray, _Tp, _Tp >, _Tp _s_t_d_:_:_p_o_w (_c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp > &_____v, │ │ │ │ - >  _c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp > &_____w) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _BinClos< _s_t_r_u_c_t std::_Pow, │ │ │ │ - _ValArray, _Expr, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_p_o_w (_c_o_n_s_t _v_a_l_a_r_r_a_y< _t_y_p_e_n_a_m_e │ │ │ │ - value_type, ___D_o_m >, _t_y_p_e_n_a_m_e _Dom:: _Dom::valarray > &_____v, _c_o_n_s_t _Expr< │ │ │ │ - value_type >  ___D_o_m, _t_y_p_e_n_a_m_e _Dom::value_type > &__e) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Sin, │ │ │ │ - _Expr, ___D_o_m >, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_s_i_n (_c_o_n_s_t _Expr< ___D_o_m, _t_y_p_e_n_a_m_e │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Sin, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_s_i_n (_c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Sinh, │ │ │ │ - _Expr, ___D_o_m >, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_s_i_n_h (_c_o_n_s_t _Expr< ___D_o_m, _t_y_p_e_n_a_m_e │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Sinh, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_s_i_n_h (_c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Sqrt, │ │ │ │ - _Expr, ___D_o_m >, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_s_q_r_t (_c_o_n_s_t _Expr< ___D_o_m, _t_y_p_e_n_a_m_e │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Sqrt, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_s_q_r_t (_c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Tan, │ │ │ │ - _Expr, ___D_o_m >, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_t_a_n (_c_o_n_s_t _Expr< ___D_o_m, _t_y_p_e_n_a_m_e │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Tan, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_t_a_n (_c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp > &_____v) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___D_o_m > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Tanh, │ │ │ │ - _Expr, ___D_o_m >, _t_y_p_e_n_a_m_e _Dom:: _s_t_d_:_:_t_a_n_h (_c_o_n_s_t _Expr< ___D_o_m, _t_y_p_e_n_a_m_e │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Expr< _UnClos< _s_t_r_u_c_t std::_Tanh, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_t_a_n_h (_c_o_n_s_t _v_a_l_a_r_r_a_y< _Tp > &_____v) │ │ │ │ -  │ │ │ │ ********** 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. │ │ │ │ -********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? __DDEEFFIINNEE__EEXXPPRR__BBIINNAARRYY__FFUUNNCCTTIIOONN ********** │ │ │ │ -#define _DEFINE_EXPR_BINARY_FUNCTION (   _Fun, │ │ │ │ -   _UFun  │ │ │ │ - ) │ │ │ │ -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 (   _Op, │ │ │ │ -   _Name  │ │ │ │ - ) │ │ │ │ -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 (   _Name, │ │ │ │ -   _UName  │ │ │ │ - ) │ │ │ │ -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 (   _Op, │ │ │ │ -   _Name  │ │ │ │ - ) │ │ │ │ -Definition at line _3_2_7 of file _v_a_l_a_r_r_a_y___a_f_t_e_r_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _u_n_i_q_u_e___l_o_c_k_._h. │ │ │ │ * _b_i_t_s │ │ │ │ - * _v_a_l_a_r_r_a_y___a_f_t_e_r_._h │ │ │ │ + * _u_n_i_q_u_e___l_o_c_k_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00374_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: valarray_after.h Source File │ │ │ +libstdc++: unique_lock.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,20 +45,20 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
valarray_after.h
│ │ │ +
unique_lock.h
│ │ │
│ │ │
│ │ │ -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// std::unique_lock implementation -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 1997-2025 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2008-2025 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
│ │ │ @@ -72,556 +72,268 @@ │ │ │
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/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@cmla.ens-cachan.fr>
│ │ │ -
31
│ │ │ -
32#ifndef _VALARRAY_AFTER_H
│ │ │ -
33#define _VALARRAY_AFTER_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
│ │ │ -
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) {}
│ │ │ -
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) {}
│ │ │ +
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>
│ │ │ +
│ │ │ + │ │ │ +
63 {
│ │ │ +
64 public:
│ │ │ +
65 typedef _Mutex mutex_type;
│ │ │ +
66
│ │ │ +
67 unique_lock() noexcept
│ │ │ +
68 : _M_device(0), _M_owns(false)
│ │ │ +
69 { }
│ │ │ +
70
│ │ │ + │ │ │ +
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 value_type
│ │ │ -
80 operator[] (size_t __i) const
│ │ │ -
81 { return _M_array._M_data[_M_index[__i]]; }
│ │ │ +
79 unique_lock(mutex_type& __m, defer_lock_t) noexcept
│ │ │ +
80 : _M_device(std::__addressof(__m)), _M_owns(false)
│ │ │ +
81 { }
│ │ │
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 };
│ │ │ + │ │ │ +
84 unique_lock(mutex_type& __m, try_to_lock_t)
│ │ │ +
85 : _M_device(std::__addressof(__m)), _M_owns(_M_device->try_lock())
│ │ │ +
86 { }
│ │ │ +
87
│ │ │ + │ │ │ +
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>
│ │ │ + │ │ │ +
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 _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
│ │ │ -
167 {
│ │ │ -
168 public:
│ │ │ -
169 typedef _Tp value_type;
│ │ │ -
170
│ │ │ -
171 _Expr(const _Clos&);
│ │ │ -
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;
│ │ │ -
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;
│ │ │ +
103 template<typename _Rep, typename _Period>
│ │ │ +
104 [[__nodiscard__]]
│ │ │ +
105 unique_lock(mutex_type& __m,
│ │ │ + │ │ │ +
107 : _M_device(std::__addressof(__m)),
│ │ │ +
108 _M_owns(_M_device->try_lock_for(__rtime))
│ │ │ +
109 { }
│ │ │ +
110
│ │ │ + │ │ │ +
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 _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
│ │ │ + │ │ │ +
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 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]; }
│ │ │ -
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 */
│ │ │ -
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
│ │ │ +
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
│ │ │ +
│ │ │ + │ │ │ +
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.
│ │ │ -
constexpr auto size(const _Container &__cont) noexcept(noexcept(__cont.size())) -> decltype(__cont.size())
Return the size of a container.
│ │ │ +
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:218
│ │ │ +
Try to acquire ownership of the mutex without blocking.
Definition std_mutex.h:221
│ │ │ +
Assume the calling thread has already obtained mutex ownership and manage it.
Definition std_mutex.h:225
│ │ │ +
A movable scoped lock type.
Definition unique_lock.h:63
│ │ │ +
void swap(unique_lock< _Mutex > &__x, unique_lock< _Mutex > &__y) noexcept
Swap overload for unique_lock objects.
│ │ │ + │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -valarray_after.h │ │ │ │ +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 _Meta class. │ │ │ │ +1// std::unique_lock implementation -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 1997-2025 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2008-2025 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,561 +21,280 @@ │ │ │ │ 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/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_AFTER_H │ │ │ │ -33#define _VALARRAY_AFTER_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 │ │ │ │ -43namespace __detail │ │ │ │ -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) {} │ │ │ │ -56 │ │ │ │ -57 value_type │ │ │ │ -58 operator[] (size_t __i) const │ │ │ │ -59 { return _M_expr[_M_index[__i]]; } │ │ │ │ -60 │ │ │ │ -61 size_t │ │ │ │ -62 _s_i_z_e () 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> > │ │ │ │ -72 { │ │ │ │ -73 public: │ │ │ │ -74 typedef _Tp value_type; │ │ │ │ -75 │ │ │ │ -76 _GBase (_Array<_Tp> __a, const valarray& __i) │ │ │ │ -77 : _M_array (__a), _M_index(__i) {} │ │ │ │ +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 _u_n_i_q_u_e___l_o_c_k │ │ │ │ +63 { │ │ │ │ +64 public: │ │ │ │ +65 typedef ___M_u_t_e_x mutex_type; │ │ │ │ +66 │ │ │ │ +67 _u_n_i_q_u_e___l_o_c_k() noexcept │ │ │ │ +68 : _M_device(0), _M_owns(false) │ │ │ │ +69 { } │ │ │ │ +70 │ │ │ │ +71 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +72 explicit _u_n_i_q_u_e___l_o_c_k(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 value_type │ │ │ │ -80 operator[] (size_t __i) const │ │ │ │ -81 { return _M_array._M_data[_M_index[__i]]; } │ │ │ │ +79 _u_n_i_q_u_e___l_o_c_k(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 size_t │ │ │ │ -84 _s_i_z_e () 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 }; │ │ │ │ +83 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +84 _u_n_i_q_u_e___l_o_c_k(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 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +89 _u_n_i_q_u_e___l_o_c_k(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 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +97 _u_n_i_q_u_e___l_o_c_k(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_>& _____a_t_i_m_e) │ │ │ │ +99 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____m)), │ │ │ │ +100 _M_owns(_M_device->try_lock_until(_____a_t_i_m_e)) │ │ │ │ +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 _s_i_z_e() 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 │ │ │ │ -167 { │ │ │ │ -168 public: │ │ │ │ -169 typedef _Tp value_type; │ │ │ │ -170 │ │ │ │ -171 _Expr(const _Clos&); │ │ │ │ -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 _o_p_e_r_a_t_o_r_+() const; │ │ │ │ -183 │ │ │ │ -184 _Expr<_UnClos<__negate, std::_Expr, _Clos>, value_type> │ │ │ │ -185 _o_p_e_r_a_t_o_r_-() const; │ │ │ │ -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 _s_i_z_e() const; │ │ │ │ -194 value_type sum() const; │ │ │ │ +103 template │ │ │ │ +104 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +105 _u_n_i_q_u_e___l_o_c_k(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_>& _____r_t_i_m_e) │ │ │ │ +107 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____m)), │ │ │ │ +108 _M_owns(_M_device->try_lock_for(_____r_t_i_m_e)) │ │ │ │ +109 { } │ │ │ │ +110 │ │ │ │ +111 _~_u_n_i_q_u_e___l_o_c_k() │ │ │ │ +112 { │ │ │ │ +113 if (_M_owns) │ │ │ │ +114 unlock(); │ │ │ │ +115 } │ │ │ │ +116 │ │ │ │ +117 _u_n_i_q_u_e___l_o_c_k(const _u_n_i_q_u_e___l_o_c_k&) = delete; │ │ │ │ +118 _u_n_i_q_u_e___l_o_c_k& operator=(const _u_n_i_q_u_e___l_o_c_k&) = delete; │ │ │ │ +119 │ │ │ │ +120 _u_n_i_q_u_e___l_o_c_k(_u_n_i_q_u_e___l_o_c_k&& _____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 _u_n_i_q_u_e___l_o_c_k& operator=(_u_n_i_q_u_e___l_o_c_k&& _____u) noexcept │ │ │ │ +128 { │ │ │ │ +129 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +130 // 4172. unique_lock self-move-assignment is broken │ │ │ │ +131 _u_n_i_q_u_e___l_o_c_k(_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_>& _____a_t_i_m_e) │ │ │ │ +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(_____a_t_i_m_e); │ │ │ │ +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_>& _____r_t_i_m_e) │ │ │ │ +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(_____r_t_i_m_e); │ │ │ │ +192 return _M_owns; │ │ │ │ +193 } │ │ │ │ +194 } │ │ │ │ 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]; } │ │ │ │ -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 */ │ │ │ │ -_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 minus y. │ │ │ │ -DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_4_0_4 │ │ │ │ -_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 plus y. │ │ │ │ -DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_3_7_4 │ │ │ │ +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(_u_n_i_q_u_e___l_o_c_k& _____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* _____r_e_t = _M_device; │ │ │ │ +219 _M_device = 0; │ │ │ │ +220 _M_owns = false; │ │ │ │ +221 return _____r_e_t; │ │ │ │ +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 _m_u_t_e_x() 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(_u_n_i_q_u_e___l_o_c_k_<___M_u_t_e_x_>& __x, _u_n_i_q_u_e___l_o_c_k_<___M_u_t_e_x_>& __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_:_:_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_:_:_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_:_:_m_u_t_e_x │ │ │ │ +DDeeffiinniittiioonn _s_t_d___m_u_t_e_x_._h_:_9_9 │ │ │ │ +_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_1_8 │ │ │ │ +_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_2_1 │ │ │ │ +_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_2_5 │ │ │ │ +_s_t_d_:_:_u_n_i_q_u_e___l_o_c_k │ │ │ │ +A movable scoped lock type. │ │ │ │ +DDeeffiinniittiioonn _u_n_i_q_u_e___l_o_c_k_._h_:_6_3 │ │ │ │ +_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_:_:_a_u_t_o___p_t_r___r_e_f │ │ │ │ +DDeeffiinniittiioonn _a_u_t_o___p_t_r_._h_:_4_9 │ │ │ │ * _b_i_t_s │ │ │ │ - * _v_a_l_a_r_r_a_y___a_f_t_e_r_._h │ │ │ │ + * _u_n_i_q_u_e___l_o_c_k_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00377.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: valarray_before.h File Reference │ │ │ +libstdc++: specfun.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -46,36 +46,249 @@ │ │ │ /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ │ │ │ $(document).ready(function(){initNavTree('a00377.html',''); initResizable(); }); │ │ │ /* @license-end */ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -Namespaces
│ │ │ -
valarray_before.h File Reference
│ │ │ +Namespaces | │ │ │ +Macros | │ │ │ +Functions
│ │ │ +
specfun.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ Namespaces

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

│ │ │ +Functions

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 specfun.h.

│ │ │ +

Macro Definition Documentation

│ │ │ + │ │ │ +

◆ __glibcxx_want_math_spec_funcs

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_want_math_spec_funcs
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 35 of file specfun.h.

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

◆ __glibcxx_want_math_special_functions

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_want_math_special_functions
│ │ │ +
│ │ │ │ │ │ -

Definition in file valarray_before.h.

│ │ │ -
│ │ │ +

Definition at line 36 of file specfun.h.

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

Go to the source code of this file.

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

│ │ │ Namespaces

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

│ │ │ Macros

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

│ │ │ 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)
 
│ │ │ +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 <valarray>.

│ │ │ +

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

│ │ │ │ │ │ -

Definition in file valarray_array.tcc.

│ │ │ +

Definition in file cxxabi_init_exception.h.

│ │ │

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ _VALARRAY_ARRAY_TCC

│ │ │ + │ │ │ +

◆ _GLIBCXX_CDTOR_CALLABI

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

Definition at line 33 of file valarray_array.tcc.

│ │ │ +

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,66 +1,37 @@ │ │ │ │ libstdc++ │ │ │ │ _N_a_m_e_s_p_a_c_e_s | _M_a_c_r_o_s | _F_u_n_c_t_i_o_n_s │ │ │ │ -valarray_array.tcc 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_. │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │   │ │ │ │ MMaaccrrooss │ │ │ │ -#define  ___V_A_L_A_R_R_A_Y___A_R_R_A_Y___T_C_C │ │ │ │ +#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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ -_v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ -_v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ -_v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ -_v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ -_v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n, _Array< │ │ │ │ - _Tp > __a) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ -_v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n, _Array< │ │ │ │ - _Tp > __a, _Array< bool > _____m) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ -_v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n, _Array< │ │ │ │ - _Tp > __a, _Array< size_t > __i) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ -_v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n, _Array< │ │ │ │ - _Tp > __a, size_t _____s) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ -_v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ -_v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (_c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t │ │ │ │ - __n, _Array< _Tp > __a) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ -_v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Array< _Tp > __a, size_t __n, _Array< bool > _____m, │ │ │ │ - _c_o_n_s_t _Tp &__t) │ │ │ │ + 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 _v_a_l_a_r_r_a_y___a_r_r_a_y_._t_c_c. │ │ │ │ +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 ********** │ │ │ │ -********** _?◆_? __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. │ │ │ │ +********** _?◆_? __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. │ │ │ │ * _b_i_t_s │ │ │ │ - * _v_a_l_a_r_r_a_y___a_r_r_a_y_._t_c_c │ │ │ │ + * _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.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00380_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: valarray_array.tcc Source File │ │ │ +libstdc++: cxxabi_init_exception.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,266 +45,107 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
valarray_array.tcc
│ │ │ +
cxxabi_init_exception.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// ABI Support -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 1997-2025 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2016-2025 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/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@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 }
│ │ │ +
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
│ │ │ -
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 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 */
│ │ │ +
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;
│ │ │ +
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.
│ │ │ +
Part of RTTI.
Definition typeinfo:94
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,252 +1,95 @@ │ │ │ │ libstdc++ │ │ │ │ -valarray_array.tcc │ │ │ │ +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// The template and inlines for the -*- C++ -*- internal _Array helper class. │ │ │ │ +1// ABI Support -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 1997-2025 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2016-2025 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/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 │ │ │ │ -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 } │ │ │ │ +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 type_info; │ │ │ │ +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) │ │ │ │ -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 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; │ │ │ │ -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 */ │ │ │ │ +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; │ │ │ │ +69 │ │ │ │ +70 // Initialize exception (this is a GNU extension) │ │ │ │ +71 __cxa_refcounted_exception* │ │ │ │ +72 __cxa_init_primary_exception(void *__object, _s_t_d_:_:_t_y_p_e___i_n_f_o *__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 │ │ │ │ +_c_+_+_c_o_n_f_i_g_._h │ │ │ │ _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 │ │ │ │ * _b_i_t_s │ │ │ │ - * _v_a_l_a_r_r_a_y___a_r_r_a_y_._t_c_c │ │ │ │ + * _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.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00383.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: valarray_array.h File Reference │ │ │ +libstdc++: stl_queue.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -46,533 +46,93 @@ │ │ │ /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ │ │ │ $(document).ready(function(){initNavTree('a00383.html',''); initResizable(); }); │ │ │ /* @license-end */ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ +Classes | │ │ │ Namespaces | │ │ │ -Macros | │ │ │ Functions
│ │ │ -
valarray_array.h File Reference
│ │ │ +
stl_queue.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ +Classes

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

│ │ │ Namespaces

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)
 
void std::__valarray_release_memory (void *__p)
 
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 , 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< _Seqstd::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 <valarray>.

│ │ │ - │ │ │ -

Definition in file valarray_array.h.

│ │ │ -

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ _DEFINE_ARRAY_FUNCTION

│ │ │ +

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

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

Definition at line 452 of file valarray_array.h.

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

Definition in file stl_queue.h.

│ │ │ +
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,633 +1,98 @@ │ │ │ │ libstdc++ │ │ │ │ -_N_a_m_e_s_p_a_c_e_s | _M_a_c_r_o_s | _F_u_n_c_t_i_o_n_s │ │ │ │ -valarray_array.h File Reference │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _F_u_n_c_t_i_o_n_s │ │ │ │ +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_:_:_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 │ │ │ │   │ │ │ │ -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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, size_t __n, size_t │ │ │ │ - _____s_1, _Array< _Tp > __b, size_t _____s_2) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > _____s_r_c, size_t __n, _Array< │ │ │ │ - size_t > __i, _Array< _Tp > _____d_s_t, _Array< size_t > __j) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_c_o_n_s_t _Tp *_____r_e_s_t_r_i_c_t____ __a, _Tp │ │ │ │ - *_____r_e_s_t_r_i_c_t____ __b, size_t __n, size_t _____s) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_c_o_n_s_t _Tp *_____r_e_s_t_r_i_c_t____ __a, _c_o_n_s_t │ │ │ │ - size_t *_____r_e_s_t_r_i_c_t____ __i, _Tp *_____r_e_s_t_r_i_c_t____ __b, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_c_o_n_s_t _Tp *_____r_e_s_t_r_i_c_t____ __a, size_t __n, │ │ │ │ - _Tp *_____r_e_s_t_r_i_c_t____ __b) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_c_o_n_s_t _Tp *_____r_e_s_t_r_i_c_t____ __a, size_t __n, │ │ │ │ - _Tp *_____r_e_s_t_r_i_c_t____ __b, _c_o_n_s_t size_t *_____r_e_s_t_r_i_c_t____ __i) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_c_o_n_s_t _Tp *_____r_e_s_t_r_i_c_t____ __a, size_t __n, │ │ │ │ - size_t _____s, _Tp *_____r_e_s_t_r_i_c_t____ __b) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_c_o_n_s_t _Tp *_____r_e_s_t_r_i_c_t____ _____s_r_c, size_t │ │ │ │ - __n, _c_o_n_s_t size_t *_____r_e_s_t_r_i_c_t____ __i, _Tp *_____r_e_s_t_r_i_c_t____ _____d_s_t, │ │ │ │ - _c_o_n_s_t size_t *_____r_e_s_t_r_i_c_t____ __j) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_c_o_n_s_t _Tp *_____r_e_s_t_r_i_c_t____ _____s_r_c, size_t │ │ │ │ - __n, size_t _____s_1, _Tp *_____r_e_s_t_r_i_c_t____ _____d_s_t, size_t _____s_2) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (_c_o_n_s_t _Tp *__b, _c_o_n_s_t _Tp │ │ │ │ - *__e, _Tp *_____r_e_s_t_r_i_c_t____ _____o) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (_c_o_n_s_t _Tp *_____r_e_s_t_r_i_c_t____ __a, │ │ │ │ - _c_o_n_s_t size_t *_____r_e_s_t_r_i_c_t____ __i, _Tp *_____r_e_s_t_r_i_c_t____ _____o, size_t │ │ │ │ - __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (_c_o_n_s_t _Tp *_____r_e_s_t_r_i_c_t____ __a, │ │ │ │ - size_t __n, size_t _____s, _Tp *_____r_e_s_t_r_i_c_t____ _____o) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Tp &__t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Array< _Tp > __a, size_t __n, _c_o_n_s_t _Tp │ │ │ │ - &__t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Array< _Tp > __a, size_t __n, size_t │ │ │ │ - _____s, _c_o_n_s_t _Tp &__t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Tp *_____r_e_s_t_r_i_c_t____ __a, _c_o_n_s_t size_t │ │ │ │ - *_____r_e_s_t_r_i_c_t____ __i, size_t __n, _c_o_n_s_t _Tp &__t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Tp *_____r_e_s_t_r_i_c_t____ __a, size_t __n, _c_o_n_s_t │ │ │ │ - _Tp &__t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Tp *_____r_e_s_t_r_i_c_t____ __a, size_t __n, │ │ │ │ - size_t _____s, _c_o_n_s_t _Tp &__t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Tp │ │ │ │ - __t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _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<_t_y_p_e_n_a_m_e ___T_a > │ │ │ │ -_Ta::value_type  _s_t_d_:_:_____v_a_l_a_r_r_a_y___m_a_x (_c_o_n_s_t ___T_a &__a) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e ___T_a > │ │ │ │ -_Ta::value_type  _s_t_d_:_:_____v_a_l_a_r_r_a_y___m_i_n (_c_o_n_s_t ___T_a &__a) │ │ │ │ -  │ │ │ │ - _v_o_i_d  _s_t_d_:_:_____v_a_l_a_r_r_a_y___r_e_l_e_a_s_e___m_e_m_o_r_y (_v_o_i_d *__p) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Tp  _s_t_d_:_:_____v_a_l_a_r_r_a_y___s_u_m (_c_o_n_s_t _Tp *__f, _c_o_n_s_t _Tp *_____l) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t │ │ │ │ - __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t │ │ │ │ - _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Tp &__t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t │ │ │ │ - _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Tp &__t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t │ │ │ │ - __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t │ │ │ │ - _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Tp &__t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t │ │ │ │ - _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Tp &__t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< │ │ │ │ - ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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, │ │ │ │ - _c_o_n_s_t _Tp &__t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, │ │ │ │ - _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t │ │ │ │ - _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Tp &__t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t │ │ │ │ - _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Tp &__t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, _c_o_n_s_t _Expr< │ │ │ │ - ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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, │ │ │ │ - _c_o_n_s_t _Tp &__t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, │ │ │ │ - _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t │ │ │ │ - _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Tp &__t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t │ │ │ │ - __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t │ │ │ │ - _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Tp &__t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _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<_t_y_p_e_n_a_m_e _Tp , _c_l_a_s_s ___D_o_m > │ │ │ │ - _v_o_i_d  _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, _c_o_n_s_t _Expr< ___D_o_m, _Tp > &__e, size_t __n) │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___S_e_q > │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_!_= (_c_o_n_s_t _q_u_e_u_e< _Tp, ___S_e_q │ │ │ │ + > &__x, _c_o_n_s_t _q_u_e_u_e< _Tp, ___S_e_q > &__y) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___S_e_q > │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_< (_c_o_n_s_t _q_u_e_u_e< _Tp, ___S_e_q │ │ │ │ + > &__x, _c_o_n_s_t _q_u_e_u_e< _Tp, ___S_e_q > &__y) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___S_e_q > │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_<_= (_c_o_n_s_t _q_u_e_u_e< _Tp, ___S_e_q │ │ │ │ + > &__x, _c_o_n_s_t _q_u_e_u_e< _Tp, ___S_e_q > &__y) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , three_way_comparable _Seq> │ │ │ │ + _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 >  _s_t_d_:_:_o_p_e_r_a_t_o_r_<_=_> (_c_o_n_s_t _q_u_e_u_e< _Tp, │ │ │ │ + ___S_e_q > &__x, _c_o_n_s_t _q_u_e_u_e< _Tp, ___S_e_q > │ │ │ │ + &__y) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___S_e_q > │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (_c_o_n_s_t _q_u_e_u_e< _Tp, ___S_e_q │ │ │ │ + > &__x, _c_o_n_s_t _q_u_e_u_e< _Tp, ___S_e_q > &__y) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___S_e_q > │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_> (_c_o_n_s_t _q_u_e_u_e< _Tp, ___S_e_q │ │ │ │ + > &__x, _c_o_n_s_t _q_u_e_u_e< _Tp, ___S_e_q > &__y) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___S_e_q > │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_>_= (_c_o_n_s_t _q_u_e_u_e< _Tp, ___S_e_q │ │ │ │ + > &__x, _c_o_n_s_t _q_u_e_u_e< _Tp, ___S_e_q > &__y) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Compare , _t_y_p_e_n_a_m_e _Container , _t_y_p_e_n_a_m_e = │ │ │ │ +_RequireNotAllocator<_Compare>, _t_y_p_e_n_a_m_e = _RequireNotAllocator<_Container>> │ │ │ │ +   ssttdd::::pprriioorriittyy__qquueeuuee (_Compare, │ │ │ │ + _Container) -> _p_r_i_o_r_i_t_y___q_u_e_u_e< _t_y_p_e_n_a_m_e │ │ │ │ + _Container::value_type, _Container, │ │ │ │ + _Compare > │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Compare , _t_y_p_e_n_a_m_e _Container , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , │ │ │ │ +_t_y_p_e_n_a_m_e = _RequireNotAllocator<_Compare>, _t_y_p_e_n_a_m_e = │ │ │ │ +_RequireNotAllocator<_Container>> │ │ │ │ +   ssttdd::::pprriioorriittyy__qquueeuuee (_Compare, │ │ │ │ + _Container, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ + > _p_r_i_o_r_i_t_y___q_u_e_u_e< _t_y_p_e_n_a_m_e _Container:: │ │ │ │ + value_type, _Container, _Compare > │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___V_a_l_T = typename │ │ │ │ +iterator_traits<_InputIterator>::value_type, _t_y_p_e_n_a_m_e _Compare = less<_ValT>, │ │ │ │ +_t_y_p_e_n_a_m_e _Container = vector<_ValT>, _t_y_p_e_n_a_m_e = │ │ │ │ +_RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = _RequireNotAllocator<_Compare>, │ │ │ │ +_t_y_p_e_n_a_m_e = _RequireNotAllocator<_Container>> │ │ │ │ +   ssttdd::::pprriioorriittyy__qquueeuuee (___I_n_p_u_t_I_t_e_r_a_t_o_r, │ │ │ │ + ___I_n_p_u_t_I_t_e_r_a_t_o_r, _Compare=_Compare(), │ │ │ │ + _Container=_Container()) - │ │ │ │ + > _p_r_i_o_r_i_t_y___q_u_e_u_e< ___V_a_l_T, _Container, │ │ │ │ + _Compare > │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Container , _t_y_p_e_n_a_m_e = _RequireNotAllocator<_Container>> │ │ │ │ +   ssttdd::::qquueeuuee (_Container) -> _q_u_e_u_e< │ │ │ │ + _t_y_p_e_n_a_m_e _Container::value_type, │ │ │ │ + _Container > │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Container , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ +_RequireNotAllocator<_Container>> │ │ │ │ +   ssttdd::::qquueeuuee (_Container, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ + > _q_u_e_u_e< _t_y_p_e_n_a_m_e _Container:: │ │ │ │ + value_type, _Container > │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e _Sequence , _t_y_p_e_n_a_m_e _Compare > │ │ │ │ + _e_n_a_b_l_e___i_f< __and_< _____i_s___s_w_a_p_p_a_b_l_e< _s_t_d_:_:_s_w_a_p (_p_r_i_o_r_i_t_y___q_u_e_u_e< _Tp, │ │ │ │ +_Sequence >, _____i_s___s_w_a_p_p_a_b_l_e< _Compare > _Sequence, _Compare > &__x, │ │ │ │ + >::value >::type  _p_r_i_o_r_i_t_y___q_u_e_u_e< _Tp, _Sequence, │ │ │ │ + _Compare > &__y) noexcept(noexcept │ │ │ │ + (__x.swap(__y))) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___S_e_q > │ │ │ │ + _e_n_a_b_l_e___i_f< _____i_s___s_w_a_p_p_a_b_l_e< ___S_e_q >:: _s_t_d_:_:_s_w_a_p (_q_u_e_u_e< _Tp, ___S_e_q > &__x, │ │ │ │ + value >::type  _q_u_e_u_e< _Tp, ___S_e_q > &__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 _v_a_l_a_r_r_a_y___a_r_r_a_y_._h. │ │ │ │ -********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? __DDEEFFIINNEE__AARRRRAAYY__FFUUNNCCTTIIOONN ********** │ │ │ │ -#define _DEFINE_ARRAY_FUNCTION (   _Op, │ │ │ │ -   _Name  │ │ │ │ - ) │ │ │ │ -Definition at line _4_5_2 of 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_t_l___q_u_e_u_e_._h. │ │ │ │ * _b_i_t_s │ │ │ │ - * _v_a_l_a_r_r_a_y___a_r_r_a_y_._h │ │ │ │ + * _s_t_l___q_u_e_u_e_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00383_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: valarray_array.h Source File │ │ │ +libstdc++: stl_queue.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,20 +45,20 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
valarray_array.h
│ │ │ +
stl_queue.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// Queue implementation -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 1997-2025 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2001-2025 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
│ │ │ @@ -71,620 +71,1056 @@ │ │ │
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_array.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@DPTMaths.ENS-Cachan.Fr>
│ │ │ -
31
│ │ │ -
32#ifndef _VALARRAY_ARRAY_H
│ │ │ -
33#define _VALARRAY_ARRAY_H 1
│ │ │ -
34
│ │ │ -
35#ifdef _GLIBCXX_SYSHDR
│ │ │ -
36#pragma GCC system_header
│ │ │ -
37#endif
│ │ │ -
38
│ │ │ -
39#include <bits/c++config.h>
│ │ │ - │ │ │ -
41#include <cstdlib>
│ │ │ -
42#include <new>
│ │ │ -
43
│ │ │ -
44namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
45{
│ │ │ -
46_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
47
│ │ │ -
48 //
│ │ │ -
49 // Helper functions on raw pointers
│ │ │ -
50 //
│ │ │ -
51
│ │ │ -
52 // We get memory the old fashioned way
│ │ │ -
53 template<typename _Tp>
│ │ │ -
54 _Tp*
│ │ │ -
55 __valarray_get_storage(size_t) __attribute__((__malloc__));
│ │ │ -
56
│ │ │ -
57 template<typename _Tp>
│ │ │ -
58 inline _Tp*
│ │ │ -
59 __valarray_get_storage(size_t __n)
│ │ │ -
60 { return static_cast<_Tp*>(operator new(__n * sizeof(_Tp))); }
│ │ │ -
61
│ │ │ -
62 // Return memory to the system
│ │ │ -
63 inline void
│ │ │ -
64 __valarray_release_memory(void* __p)
│ │ │ -
65 { operator delete(__p); }
│ │ │ -
66
│ │ │ -
67 // Turn raw-memory into an array of _Tp filled with _Tp().
│ │ │ -
68 // This is used in `valarray<T> v(n);` and in `valarray<T>::shift(n)`.
│ │ │ -
69 template<typename _Tp>
│ │ │ -
70 inline void
│ │ │ -
71 __valarray_default_construct(_Tp* __b, _Tp* __e)
│ │ │ -
72 {
│ │ │ -
73 if _GLIBCXX17_CONSTEXPR (__is_trivial(_Tp))
│ │ │ -
74 __builtin_memset(__b, 0, (__e - __b) * sizeof(_Tp));
│ │ │ -
75 else
│ │ │ -
76 while (__b != __e)
│ │ │ -
77 ::new(static_cast<void*>(__b++)) _Tp();
│ │ │ -
78 }
│ │ │ -
79
│ │ │ -
80 // Turn a raw-memory into an array of _Tp filled with __t
│ │ │ -
81 // This is the required in valarray<T> v(n, t). Also
│ │ │ -
82 // used in valarray<>::resize().
│ │ │ -
83 template<typename _Tp>
│ │ │ -
84 inline void
│ │ │ -
85 __valarray_fill_construct(_Tp* __b, _Tp* __e, const _Tp __t)
│ │ │ -
86 {
│ │ │ -
87 while (__b != __e)
│ │ │ -
88 ::new(static_cast<void*>(__b++)) _Tp(__t);
│ │ │ -
89 }
│ │ │ -
90
│ │ │ -
91 // copy-construct raw array [__o, *) from plain array [__b, __e)
│ │ │ -
92 template<typename _Tp>
│ │ │ -
93 inline void
│ │ │ -
94 __valarray_copy_construct(const _Tp* __b, const _Tp* __e,
│ │ │ -
95 _Tp* __restrict__ __o)
│ │ │ -
96 {
│ │ │ -
97 if _GLIBCXX17_CONSTEXPR (__is_trivial(_Tp))
│ │ │ -
98 {
│ │ │ -
99 if (__b)
│ │ │ -
100 __builtin_memcpy(__o, __b, (__e - __b) * sizeof(_Tp));
│ │ │ -
101 }
│ │ │ -
102 else
│ │ │ -
103 while (__b != __e)
│ │ │ -
104 ::new(static_cast<void*>(__o++)) _Tp(*__b++);
│ │ │ -
105 }
│ │ │ -
106
│ │ │ -
107 // copy-construct raw array [__o, *) from strided array __a[<__n : __s>]
│ │ │ -
108 template<typename _Tp>
│ │ │ -
109 inline void
│ │ │ -
110 __valarray_copy_construct (const _Tp* __restrict__ __a, size_t __n,
│ │ │ -
111 size_t __s, _Tp* __restrict__ __o)
│ │ │ -
112 {
│ │ │ -
113 if _GLIBCXX17_CONSTEXPR (__is_trivial(_Tp))
│ │ │ -
114 while (__n--)
│ │ │ -
115 {
│ │ │ -
116 *__o++ = *__a;
│ │ │ -
117 __a += __s;
│ │ │ -
118 }
│ │ │ -
119 else
│ │ │ -
120 while (__n--)
│ │ │ -
121 {
│ │ │ -
122 new(__o++) _Tp(*__a);
│ │ │ -
123 __a += __s;
│ │ │ -
124 }
│ │ │ -
125 }
│ │ │ -
126
│ │ │ -
127 // copy-construct raw array [__o, *) from indexed array __a[__i[<__n>]]
│ │ │ -
128 template<typename _Tp>
│ │ │ -
129 inline void
│ │ │ -
130 __valarray_copy_construct (const _Tp* __restrict__ __a,
│ │ │ -
131 const size_t* __restrict__ __i,
│ │ │ -
132 _Tp* __restrict__ __o, size_t __n)
│ │ │ -
133 {
│ │ │ -
134 if (__is_trivial(_Tp))
│ │ │ -
135 while (__n--)
│ │ │ -
136 *__o++ = __a[*__i++];
│ │ │ -
137 else
│ │ │ -
138 while (__n--)
│ │ │ -
139 new (__o++) _Tp(__a[*__i++]);
│ │ │ -
140 }
│ │ │ -
141
│ │ │ -
142 // Do the necessary cleanup when we're done with arrays.
│ │ │ -
143 template<typename _Tp>
│ │ │ -
144 inline void
│ │ │ -
145 __valarray_destroy_elements(_Tp* __b, _Tp* __e)
│ │ │ -
146 {
│ │ │ -
147 if (!__is_trivial(_Tp))
│ │ │ -
148 while (__b != __e)
│ │ │ -
149 {
│ │ │ -
150 __b->~_Tp();
│ │ │ -
151 ++__b;
│ │ │ -
152 }
│ │ │ -
153 }
│ │ │ -
154
│ │ │ -
155 // Fill a plain array __a[<__n>] with __t
│ │ │ -
156 template<typename _Tp>
│ │ │ -
157 inline void
│ │ │ -
158 __valarray_fill(_Tp* __restrict__ __a, size_t __n, const _Tp& __t)
│ │ │ -
159 {
│ │ │ -
160 while (__n--)
│ │ │ -
161 *__a++ = __t;
│ │ │ -
162 }
│ │ │ -
163
│ │ │ -
164 // fill strided array __a[<__n-1 : __s>] with __t
│ │ │ -
165 template<typename _Tp>
│ │ │ -
166 inline void
│ │ │ -
167 __valarray_fill(_Tp* __restrict__ __a, size_t __n,
│ │ │ -
168 size_t __s, const _Tp& __t)
│ │ │ -
169 {
│ │ │ -
170 for (size_t __i = 0; __i < __n; ++__i, __a += __s)
│ │ │ -
171 *__a = __t;
│ │ │ -
172 }
│ │ │ -
173
│ │ │ -
174 // fill indirect array __a[__i[<__n>]] with __i
│ │ │ -
175 template<typename _Tp>
│ │ │ -
176 inline void
│ │ │ -
177 __valarray_fill(_Tp* __restrict__ __a, const size_t* __restrict__ __i,
│ │ │ -
178 size_t __n, const _Tp& __t)
│ │ │ -
179 {
│ │ │ -
180 for (size_t __j = 0; __j < __n; ++__j, ++__i)
│ │ │ -
181 __a[*__i] = __t;
│ │ │ -
182 }
│ │ │ -
183
│ │ │ -
184 // copy plain array __a[<__n>] in __b[<__n>]
│ │ │ -
185 // For non-fundamental types, it is wrong to say 'memcpy()'
│ │ │ -
186 template<typename _Tp, bool>
│ │ │ -
187 struct _Array_copier
│ │ │ -
188 {
│ │ │ -
189 inline static void
│ │ │ -
190 _S_do_it(const _Tp* __restrict__ __a, size_t __n, _Tp* __restrict__ __b)
│ │ │ -
191 {
│ │ │ -
192 while(__n--)
│ │ │ -
193 *__b++ = *__a++;
│ │ │ -
194 }
│ │ │ -
195 };
│ │ │ -
196
│ │ │ -
197 template<typename _Tp>
│ │ │ -
198 struct _Array_copier<_Tp, true>
│ │ │ -
199 {
│ │ │ -
200 inline static void
│ │ │ -
201 _S_do_it(const _Tp* __restrict__ __a, size_t __n, _Tp* __restrict__ __b)
│ │ │ -
202 {
│ │ │ -
203 if (__n != 0)
│ │ │ -
204 __builtin_memcpy(__b, __a, __n * sizeof (_Tp));
│ │ │ -
205 }
│ │ │ -
206 };
│ │ │ -
207
│ │ │ -
208 // Copy a plain array __a[<__n>] into a play array __b[<>]
│ │ │ -
209 template<typename _Tp>
│ │ │ -
210 inline void
│ │ │ -
211 __valarray_copy(const _Tp* __restrict__ __a, size_t __n,
│ │ │ -
212 _Tp* __restrict__ __b)
│ │ │ -
213 {
│ │ │ -
214 _Array_copier<_Tp, __is_trivial(_Tp)>::_S_do_it(__a, __n, __b);
│ │ │ -
215 }
│ │ │ -
216
│ │ │ -
217 // Copy strided array __a[<__n : __s>] in plain __b[<__n>]
│ │ │ -
218 template<typename _Tp>
│ │ │ -
219 inline void
│ │ │ -
220 __valarray_copy(const _Tp* __restrict__ __a, size_t __n, size_t __s,
│ │ │ -
221 _Tp* __restrict__ __b)
│ │ │ -
222 {
│ │ │ -
223 for (size_t __i = 0; __i < __n; ++__i, ++__b, __a += __s)
│ │ │ -
224 *__b = *__a;
│ │ │ -
225 }
│ │ │ -
226
│ │ │ -
227 // Copy a plain array __a[<__n>] into a strided array __b[<__n : __s>]
│ │ │ -
228 template<typename _Tp>
│ │ │ -
229 inline void
│ │ │ -
230 __valarray_copy(const _Tp* __restrict__ __a, _Tp* __restrict__ __b,
│ │ │ -
231 size_t __n, size_t __s)
│ │ │ -
232 {
│ │ │ -
233 for (size_t __i = 0; __i < __n; ++__i, ++__a, __b += __s)
│ │ │ -
234 *__b = *__a;
│ │ │ -
235 }
│ │ │ -
236
│ │ │ -
237 // Copy strided array __src[<__n : __s1>] into another
│ │ │ -
238 // strided array __dst[< : __s2>]. Their sizes must match.
│ │ │ -
239 template<typename _Tp>
│ │ │ -
240 inline void
│ │ │ -
241 __valarray_copy(const _Tp* __restrict__ __src, size_t __n, size_t __s1,
│ │ │ -
242 _Tp* __restrict__ __dst, size_t __s2)
│ │ │ -
243 {
│ │ │ -
244 for (size_t __i = 0; __i < __n; ++__i)
│ │ │ -
245 __dst[__i * __s2] = __src[__i * __s1];
│ │ │ -
246 }
│ │ │ -
247
│ │ │ -
248 // Copy an indexed array __a[__i[<__n>]] in plain array __b[<__n>]
│ │ │ -
249 template<typename _Tp>
│ │ │ -
250 inline void
│ │ │ -
251 __valarray_copy(const _Tp* __restrict__ __a,
│ │ │ -
252 const size_t* __restrict__ __i,
│ │ │ -
253 _Tp* __restrict__ __b, size_t __n)
│ │ │ -
254 {
│ │ │ -
255 for (size_t __j = 0; __j < __n; ++__j, ++__b, ++__i)
│ │ │ -
256 *__b = __a[*__i];
│ │ │ -
257 }
│ │ │ -
258
│ │ │ -
259 // Copy a plain array __a[<__n>] in an indexed array __b[__i[<__n>]]
│ │ │ -
260 template<typename _Tp>
│ │ │ -
261 inline void
│ │ │ -
262 __valarray_copy(const _Tp* __restrict__ __a, size_t __n,
│ │ │ -
263 _Tp* __restrict__ __b, const size_t* __restrict__ __i)
│ │ │ -
264 {
│ │ │ -
265 for (size_t __j = 0; __j < __n; ++__j, ++__a, ++__i)
│ │ │ -
266 __b[*__i] = *__a;
│ │ │ -
267 }
│ │ │ -
268
│ │ │ -
269 // Copy the __n first elements of an indexed array __src[<__i>] into
│ │ │ -
270 // another indexed array __dst[<__j>].
│ │ │ -
271 template<typename _Tp>
│ │ │ -
272 inline void
│ │ │ -
273 __valarray_copy(const _Tp* __restrict__ __src, size_t __n,
│ │ │ -
274 const size_t* __restrict__ __i,
│ │ │ -
275 _Tp* __restrict__ __dst, const size_t* __restrict__ __j)
│ │ │ -
276 {
│ │ │ -
277 for (size_t __k = 0; __k < __n; ++__k)
│ │ │ -
278 __dst[*__j++] = __src[*__i++];
│ │ │ -
279 }
│ │ │ -
280
│ │ │ -
281 //
│ │ │ -
282 // Compute the sum of elements in range [__f, __l) which must not be empty.
│ │ │ -
283 // This is a naive algorithm. It suffers from cancelling.
│ │ │ -
284 // In the future try to specialize for _Tp = float, double, long double
│ │ │ -
285 // using a more accurate algorithm.
│ │ │ -
286 //
│ │ │ -
287 template<typename _Tp>
│ │ │ -
288 inline _Tp
│ │ │ -
289 __valarray_sum(const _Tp* __f, const _Tp* __l)
│ │ │ -
290 {
│ │ │ -
291 _Tp __r = *__f++;
│ │ │ -
292 while (__f != __l)
│ │ │ -
293 __r += *__f++;
│ │ │ -
294 return __r;
│ │ │ -
295 }
│ │ │ -
296
│ │ │ -
297 // Compute the min/max of an array-expression
│ │ │ -
298 template<typename _Ta>
│ │ │ -
299 inline typename _Ta::value_type
│ │ │ -
300 __valarray_min(const _Ta& __a)
│ │ │ -
301 {
│ │ │ -
302 size_t __s = __a.size();
│ │ │ -
303 typedef typename _Ta::value_type _Value_type;
│ │ │ -
304 _Value_type __r = __s == 0 ? _Value_type() : __a[0];
│ │ │ -
305 for (size_t __i = 1; __i < __s; ++__i)
│ │ │ -
306 {
│ │ │ -
307 _Value_type __t = __a[__i];
│ │ │ -
308 if (__t < __r)
│ │ │ -
309 __r = __t;
│ │ │ -
310 }
│ │ │ -
311 return __r;
│ │ │ -
312 }
│ │ │ -
313
│ │ │ -
314 template<typename _Ta>
│ │ │ -
315 inline typename _Ta::value_type
│ │ │ -
316 __valarray_max(const _Ta& __a)
│ │ │ -
317 {
│ │ │ -
318 size_t __s = __a.size();
│ │ │ -
319 typedef typename _Ta::value_type _Value_type;
│ │ │ -
320 _Value_type __r = __s == 0 ? _Value_type() : __a[0];
│ │ │ -
321 for (size_t __i = 1; __i < __s; ++__i)
│ │ │ -
322 {
│ │ │ -
323 _Value_type __t = __a[__i];
│ │ │ -
324 if (__t > __r)
│ │ │ -
325 __r = __t;
│ │ │ -
326 }
│ │ │ -
327 return __r;
│ │ │ -
328 }
│ │ │ -
329
│ │ │ -
330 //
│ │ │ -
331 // Helper class _Array, first layer of valarray abstraction.
│ │ │ -
332 // All operations on valarray should be forwarded to this class
│ │ │ -
333 // whenever possible. -- gdr
│ │ │ -
334 //
│ │ │ -
335
│ │ │ -
336 template<typename _Tp>
│ │ │ -
337 struct _Array
│ │ │ -
338 {
│ │ │ -
339 explicit _Array(_Tp* const __restrict__);
│ │ │ -
340 explicit _Array(const valarray<_Tp>&);
│ │ │ -
341 _Array(const _Tp* __restrict__, size_t);
│ │ │ -
342
│ │ │ -
343 _Tp* begin() const;
│ │ │ -
344
│ │ │ -
345 _Tp* const __restrict__ _M_data;
│ │ │ -
346 };
│ │ │ -
347
│ │ │ -
348
│ │ │ -
349 // Copy-construct plain array __b[<__n>] from indexed array __a[__i[<__n>]]
│ │ │ -
350 template<typename _Tp>
│ │ │ -
351 inline void
│ │ │ -
352 __valarray_copy_construct(_Array<_Tp> __a, _Array<size_t> __i,
│ │ │ -
353 _Array<_Tp> __b, size_t __n)
│ │ │ -
354 { std::__valarray_copy_construct(__a._M_data, __i._M_data,
│ │ │ -
355 __b._M_data, __n); }
│ │ │ -
356
│ │ │ -
357 // Copy-construct plain array __b[<__n>] from strided array __a[<__n : __s>]
│ │ │ -
358 template<typename _Tp>
│ │ │ -
359 inline void
│ │ │ -
360 __valarray_copy_construct(_Array<_Tp> __a, size_t __n, size_t __s,
│ │ │ -
361 _Array<_Tp> __b)
│ │ │ -
362 { std::__valarray_copy_construct(__a._M_data, __n, __s, __b._M_data); }
│ │ │ -
363
│ │ │ -
364 template<typename _Tp>
│ │ │ -
365 inline void
│ │ │ -
366 __valarray_fill (_Array<_Tp> __a, size_t __n, const _Tp& __t)
│ │ │ -
367 { std::__valarray_fill(__a._M_data, __n, __t); }
│ │ │ -
368
│ │ │ -
369 template<typename _Tp>
│ │ │ -
370 inline void
│ │ │ -
371 __valarray_fill(_Array<_Tp> __a, size_t __n, size_t __s, const _Tp& __t)
│ │ │ -
372 { std::__valarray_fill(__a._M_data, __n, __s, __t); }
│ │ │ -
373
│ │ │ -
374 template<typename _Tp>
│ │ │ -
375 inline void
│ │ │ -
376 __valarray_fill(_Array<_Tp> __a, _Array<size_t> __i,
│ │ │ -
377 size_t __n, const _Tp& __t)
│ │ │ -
378 { std::__valarray_fill(__a._M_data, __i._M_data, __n, __t); }
│ │ │ -
379
│ │ │ -
380 // Copy a plain array __a[<__n>] into a play array __b[<>]
│ │ │ -
381 template<typename _Tp>
│ │ │ -
382 inline void
│ │ │ -
383 __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b)
│ │ │ -
384 { std::__valarray_copy(__a._M_data, __n, __b._M_data); }
│ │ │ -
385
│ │ │ -
386 // Copy strided array __a[<__n : __s>] in plain __b[<__n>]
│ │ │ -
387 template<typename _Tp>
│ │ │ -
388 inline void
│ │ │ -
389 __valarray_copy(_Array<_Tp> __a, size_t __n, size_t __s, _Array<_Tp> __b)
│ │ │ -
390 { std::__valarray_copy(__a._M_data, __n, __s, __b._M_data); }
│ │ │ -
391
│ │ │ -
392 // Copy a plain array __a[<__n>] into a strided array __b[<__n : __s>]
│ │ │ -
393 template<typename _Tp>
│ │ │ -
394 inline void
│ │ │ -
395 __valarray_copy(_Array<_Tp> __a, _Array<_Tp> __b, size_t __n, size_t __s)
│ │ │ -
396 { __valarray_copy(__a._M_data, __b._M_data, __n, __s); }
│ │ │ -
397
│ │ │ -
398 // Copy strided array __src[<__n : __s1>] into another
│ │ │ -
399 // strided array __dst[< : __s2>]. Their sizes must match.
│ │ │ -
400 template<typename _Tp>
│ │ │ -
401 inline void
│ │ │ -
402 __valarray_copy(_Array<_Tp> __a, size_t __n, size_t __s1,
│ │ │ -
403 _Array<_Tp> __b, size_t __s2)
│ │ │ -
404 { std::__valarray_copy(__a._M_data, __n, __s1, __b._M_data, __s2); }
│ │ │ -
405
│ │ │ -
406 // Copy an indexed array __a[__i[<__n>]] in plain array __b[<__n>]
│ │ │ -
407 template<typename _Tp>
│ │ │ -
408 inline void
│ │ │ -
409 __valarray_copy(_Array<_Tp> __a, _Array<size_t> __i,
│ │ │ -
410 _Array<_Tp> __b, size_t __n)
│ │ │ -
411 { std::__valarray_copy(__a._M_data, __i._M_data, __b._M_data, __n); }
│ │ │ +
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 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
│ │ │ +
250 size_type
│ │ │ +
│ │ │ +
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
│ │ │ + │ │ │ +
368#else
│ │ │ + │ │ │ +
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>>
│ │ │ +
386 queue(_Container) -> queue<typename _Container::value_type, _Container>;
│ │ │ +
387
│ │ │ +
388 template<typename _Container, typename _Allocator,
│ │ │ +
389 typename = _RequireNotAllocator<_Container>>
│ │ │ +
390 queue(_Container, _Allocator)
│ │ │ +
391 -> queue<typename _Container::value_type, _Container>;
│ │ │ +
392
│ │ │ +
393#ifdef __glibcxx_adaptor_iterator_pair_constructor
│ │ │ +
394 template<typename _InputIterator,
│ │ │ +
395 typename _ValT
│ │ │ +
396 = typename iterator_traits<_InputIterator>::value_type,
│ │ │ +
397 typename = _RequireInputIter<_InputIterator>>
│ │ │ +
398 queue(_InputIterator, _InputIterator) -> queue<_ValT>;
│ │ │ +
399
│ │ │ +
400 template<typename _InputIterator, typename _Allocator,
│ │ │ +
401 typename _ValT
│ │ │ +
402 = typename iterator_traits<_InputIterator>::value_type,
│ │ │ +
403 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
404 typename = _RequireAllocator<_Allocator>>
│ │ │ +
405 queue(_InputIterator, _InputIterator, _Allocator)
│ │ │ +
406 -> queue<_ValT, deque<_ValT, _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 // Copy a plain array __a[<__n>] in an indexed array __b[__i[<__n>]]
│ │ │ -
414 template<typename _Tp>
│ │ │ -
415 inline void
│ │ │ -
416 __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b,
│ │ │ -
417 _Array<size_t> __i)
│ │ │ -
418 { std::__valarray_copy(__a._M_data, __n, __b._M_data, __i._M_data); }
│ │ │ -
419
│ │ │ -
420 // Copy the __n first elements of an indexed array __src[<__i>] into
│ │ │ -
421 // another indexed array __dst[<__j>].
│ │ │ -
422 template<typename _Tp>
│ │ │ -
423 inline void
│ │ │ -
424 __valarray_copy(_Array<_Tp> __src, size_t __n, _Array<size_t> __i,
│ │ │ -
425 _Array<_Tp> __dst, _Array<size_t> __j)
│ │ │ -
426 {
│ │ │ -
427 std::__valarray_copy(__src._M_data, __n, __i._M_data,
│ │ │ -
428 __dst._M_data, __j._M_data);
│ │ │ -
429 }
│ │ │ -
430
│ │ │ -
431 template<typename _Tp>
│ │ │ -
432 inline
│ │ │ -
433 _Array<_Tp>::_Array(_Tp* const __restrict__ __p)
│ │ │ -
434 : _M_data (__p) {}
│ │ │ -
435
│ │ │ -
436 template<typename _Tp>
│ │ │ -
437 inline
│ │ │ -
438 _Array<_Tp>::_Array(const valarray<_Tp>& __v)
│ │ │ -
439 : _M_data (__v._M_data) {}
│ │ │ -
440
│ │ │ -
441 template<typename _Tp>
│ │ │ -
442 inline
│ │ │ -
443 _Array<_Tp>::_Array(const _Tp* __restrict__ __b, size_t __s)
│ │ │ -
444 : _M_data(__valarray_get_storage<_Tp>(__s))
│ │ │ -
445 { std::__valarray_copy_construct(__b, __s, _M_data); }
│ │ │ -
446
│ │ │ -
447 template<typename _Tp>
│ │ │ -
448 inline _Tp*
│ │ │ -
449 _Array<_Tp>::begin () const
│ │ │ -
450 { return _M_data; }
│ │ │ -
451
│ │ │ -
452#define _DEFINE_ARRAY_FUNCTION(_Op, _Name) \
│ │ │ -
453 template<typename _Tp> \
│ │ │ -
454 inline void \
│ │ │ -
455 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, const _Tp& __t) \
│ │ │ -
456 { \
│ │ │ -
457 for (_Tp* __p = __a._M_data; __p < __a._M_data + __n; ++__p) \
│ │ │ -
458 *__p _Op##= __t; \
│ │ │ -
459 } \
│ │ │ -
460 \
│ │ │ -
461 template<typename _Tp> \
│ │ │ -
462 inline void \
│ │ │ -
463 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b) \
│ │ │ -
464 { \
│ │ │ -
465 _Tp* __p = __a._M_data; \
│ │ │ -
466 for (_Tp* __q = __b._M_data; __q < __b._M_data + __n; ++__p, ++__q) \
│ │ │ -
467 *__p _Op##= *__q; \
│ │ │ -
468 } \
│ │ │ -
469 \
│ │ │ -
470 template<typename _Tp, class _Dom> \
│ │ │ -
471 void \
│ │ │ -
472 _Array_augmented_##_Name(_Array<_Tp> __a, \
│ │ │ -
473 const _Expr<_Dom, _Tp>& __e, size_t __n) \
│ │ │ -
474 { \
│ │ │ -
475 _Tp* __p(__a._M_data); \
│ │ │ -
476 for (size_t __i = 0; __i < __n; ++__i, ++__p) \
│ │ │ -
477 *__p _Op##= __e[__i]; \
│ │ │ -
478 } \
│ │ │ -
479 \
│ │ │ -
480 template<typename _Tp> \
│ │ │ -
481 inline void \
│ │ │ -
482 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, size_t __s, \
│ │ │ -
483 _Array<_Tp> __b) \
│ │ │ -
484 { \
│ │ │ -
485 _Tp* __q(__b._M_data); \
│ │ │ -
486 for (_Tp* __p = __a._M_data; __p < __a._M_data + __s * __n; \
│ │ │ -
487 __p += __s, ++__q) \
│ │ │ -
488 *__p _Op##= *__q; \
│ │ │ -
489 } \
│ │ │ -
490 \
│ │ │ -
491 template<typename _Tp> \
│ │ │ -
492 inline void \
│ │ │ -
493 _Array_augmented_##_Name(_Array<_Tp> __a, _Array<_Tp> __b, \
│ │ │ -
494 size_t __n, size_t __s) \
│ │ │ -
495 { \
│ │ │ -
496 _Tp* __q(__b._M_data); \
│ │ │ -
497 for (_Tp* __p = __a._M_data; __p < __a._M_data + __n; \
│ │ │ -
498 ++__p, __q += __s) \
│ │ │ -
499 *__p _Op##= *__q; \
│ │ │ -
500 } \
│ │ │ -
501 \
│ │ │ -
502 template<typename _Tp, class _Dom> \
│ │ │ -
503 void \
│ │ │ -
504 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __s, \
│ │ │ -
505 const _Expr<_Dom, _Tp>& __e, size_t __n) \
│ │ │ -
506 { \
│ │ │ -
507 _Tp* __p(__a._M_data); \
│ │ │ -
508 for (size_t __i = 0; __i < __n; ++__i, __p += __s) \
│ │ │ -
509 *__p _Op##= __e[__i]; \
│ │ │ -
510 } \
│ │ │ -
511 \
│ │ │ -
512 template<typename _Tp> \
│ │ │ -
513 inline void \
│ │ │ -
514 _Array_augmented_##_Name(_Array<_Tp> __a, _Array<size_t> __i, \
│ │ │ -
515 _Array<_Tp> __b, size_t __n) \
│ │ │ -
516 { \
│ │ │ -
517 _Tp* __q(__b._M_data); \
│ │ │ -
518 for (size_t* __j = __i._M_data; __j < __i._M_data + __n; \
│ │ │ -
519 ++__j, ++__q) \
│ │ │ -
520 __a._M_data[*__j] _Op##= *__q; \
│ │ │ -
521 } \
│ │ │ -
522 \
│ │ │ -
523 template<typename _Tp> \
│ │ │ -
524 inline void \
│ │ │ -
525 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, \
│ │ │ -
526 _Array<_Tp> __b, _Array<size_t> __i) \
│ │ │ -
527 { \
│ │ │ -
528 _Tp* __p(__a._M_data); \
│ │ │ -
529 for (size_t* __j = __i._M_data; __j<__i._M_data + __n; \
│ │ │ -
530 ++__j, ++__p) \
│ │ │ -
531 *__p _Op##= __b._M_data[*__j]; \
│ │ │ -
532 } \
│ │ │ -
533 \
│ │ │ -
534 template<typename _Tp, class _Dom> \
│ │ │ -
535 void \
│ │ │ -
536 _Array_augmented_##_Name(_Array<_Tp> __a, _Array<size_t> __i, \
│ │ │ -
537 const _Expr<_Dom, _Tp>& __e, size_t __n) \
│ │ │ -
538 { \
│ │ │ -
539 size_t* __j(__i._M_data); \
│ │ │ -
540 for (size_t __k = 0; __k<__n; ++__k, ++__j) \
│ │ │ -
541 __a._M_data[*__j] _Op##= __e[__k]; \
│ │ │ -
542 } \
│ │ │ -
543 \
│ │ │ -
544 template<typename _Tp> \
│ │ │ -
545 void \
│ │ │ -
546 _Array_augmented_##_Name(_Array<_Tp> __a, _Array<bool> __m, \
│ │ │ -
547 _Array<_Tp> __b, size_t __n) \
│ │ │ -
548 { \
│ │ │ -
549 bool* __ok(__m._M_data); \
│ │ │ -
550 _Tp* __p(__a._M_data); \
│ │ │ -
551 for (_Tp* __q = __b._M_data; __q < __b._M_data + __n; \
│ │ │ -
552 ++__q, ++__ok, ++__p) \
│ │ │ -
553 { \
│ │ │ -
554 while (! *__ok) \
│ │ │ -
555 { \
│ │ │ -
556 ++__ok; \
│ │ │ -
557 ++__p; \
│ │ │ -
558 } \
│ │ │ -
559 *__p _Op##= *__q; \
│ │ │ -
560 } \
│ │ │ -
561 } \
│ │ │ -
562 \
│ │ │ -
563 template<typename _Tp> \
│ │ │ -
564 void \
│ │ │ -
565 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, \
│ │ │ -
566 _Array<_Tp> __b, _Array<bool> __m) \
│ │ │ -
567 { \
│ │ │ -
568 bool* __ok(__m._M_data); \
│ │ │ -
569 _Tp* __q(__b._M_data); \
│ │ │ -
570 for (_Tp* __p = __a._M_data; __p < __a._M_data + __n; \
│ │ │ -
571 ++__p, ++__ok, ++__q) \
│ │ │ -
572 { \
│ │ │ -
573 while (! *__ok) \
│ │ │ -
574 { \
│ │ │ -
575 ++__ok; \
│ │ │ -
576 ++__q; \
│ │ │ -
577 } \
│ │ │ -
578 *__p _Op##= *__q; \
│ │ │ -
579 } \
│ │ │ -
580 } \
│ │ │ -
581 \
│ │ │ -
582 template<typename _Tp, class _Dom> \
│ │ │ -
583 void \
│ │ │ -
584 _Array_augmented_##_Name(_Array<_Tp> __a, _Array<bool> __m, \
│ │ │ -
585 const _Expr<_Dom, _Tp>& __e, size_t __n) \
│ │ │ -
586 { \
│ │ │ -
587 bool* __ok(__m._M_data); \
│ │ │ -
588 _Tp* __p(__a._M_data); \
│ │ │ -
589 for (size_t __i = 0; __i < __n; ++__i, ++__ok, ++__p) \
│ │ │ -
590 { \
│ │ │ -
591 while (! *__ok) \
│ │ │ -
592 { \
│ │ │ -
593 ++__ok; \
│ │ │ -
594 ++__p; \
│ │ │ -
595 } \
│ │ │ -
596 *__p _Op##= __e[__i]; \
│ │ │ -
597 } \
│ │ │ -
598 }
│ │ │ -
599
│ │ │ -
600 _DEFINE_ARRAY_FUNCTION(+, __plus)
│ │ │ -
601 _DEFINE_ARRAY_FUNCTION(-, __minus)
│ │ │ -
602 _DEFINE_ARRAY_FUNCTION(*, __multiplies)
│ │ │ -
603 _DEFINE_ARRAY_FUNCTION(/, __divides)
│ │ │ -
604 _DEFINE_ARRAY_FUNCTION(%, __modulus)
│ │ │ -
605 _DEFINE_ARRAY_FUNCTION(^, __bitwise_xor)
│ │ │ -
606 _DEFINE_ARRAY_FUNCTION(|, __bitwise_or)
│ │ │ -
607 _DEFINE_ARRAY_FUNCTION(&, __bitwise_and)
│ │ │ -
608 _DEFINE_ARRAY_FUNCTION(<<, __shift_left)
│ │ │ -
609 _DEFINE_ARRAY_FUNCTION(>>, __shift_right)
│ │ │ -
610
│ │ │ -
611#undef _DEFINE_ARRAY_FUNCTION
│ │ │ +
413 template<ranges::input_range _Rg, __allocator_like _Alloc>
│ │ │ +
414 queue(from_range_t, _Rg&&, _Alloc)
│ │ │ +
415 -> queue<ranges::range_value_t<_Rg>,
│ │ │ +
416 deque<ranges::range_value_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]]
│ │ │ +
487 inline compare_three_way_result_t<_Seq>
│ │ │ +
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
│ │ │ +
497 typename enable_if<__is_swappable<_Seq>::value>::type
│ │ │ +
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
│ │ │ + │ │ │ +
609 is_default_constructible<_Seq>>::value>::type>
│ │ │ +
│ │ │ + │ │ │ +
611 : c(), comp() { }
│ │ │ +
│ │ │
612
│ │ │ -
613_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
614} // namespace
│ │ │ -
615
│ │ │ -
616# include <bits/valarray_array.tcc>
│ │ │ +
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#endif /* _ARRAY_H */
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
_Tp * begin(valarray< _Tp > &__va) noexcept
Return an iterator pointing to the first element of the valarray.
Definition valarray:1229
│ │ │ +
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,
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
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,
│ │ │ + │ │ │ + │ │ │ +
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,
│ │ │ + │ │ │ +
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,
│ │ │ + │ │ │ +
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,
│ │ │ + │ │ │ +
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,
│ │ │ + │ │ │ +
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
│ │ │ +
813 size_type
│ │ │ +
│ │ │ +
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
│ │ │ + │ │ │ +
899#else
│ │ │ + │ │ │ +
901#endif
│ │ │ + │ │ │ +
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)
│ │ │ +
922 -> priority_queue<typename _Container::value_type, _Container, _Compare>;
│ │ │ +
923
│ │ │ +
924 template<typename _InputIterator, typename _ValT
│ │ │ +
925 = typename iterator_traits<_InputIterator>::value_type,
│ │ │ +
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())
│ │ │ +
933 -> priority_queue<_ValT, _Container, _Compare>;
│ │ │ +
934
│ │ │ +
935 template<typename _Compare, typename _Container, typename _Allocator,
│ │ │ +
936 typename = _RequireNotAllocator<_Compare>,
│ │ │ +
937 typename = _RequireNotAllocator<_Container>>
│ │ │ +
938 priority_queue(_Compare, _Container, _Allocator)
│ │ │ +
939 -> priority_queue<typename _Container::value_type, _Container, _Compare>;
│ │ │ +
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())
│ │ │ +
947 -> priority_queue<ranges::range_value_t<_Rg>,
│ │ │ +
948 vector<ranges::range_value_t<_Rg>, _Alloc>,
│ │ │ +
949 _Compare>;
│ │ │ +
950
│ │ │ +
951 template<ranges::input_range _Rg, __allocator_like _Alloc>
│ │ │ +
952 priority_queue(from_range_t, _Rg&&, _Alloc)
│ │ │ +
953 -> priority_queue<ranges::range_value_t<_Rg>,
│ │ │ +
954 vector<ranges::range_value_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
│ │ │ +
965 typename enable_if<__and_<__is_swappable<_Sequence>,
│ │ │ +
966 __is_swappable<_Compare>>::value>::type
│ │ │ +
967#else
│ │ │ +
968 void
│ │ │ +
969#endif
│ │ │ +
970 swap(priority_queue<_Tp, _Sequence, _Compare>& __x,
│ │ │ +
971 priority_queue<_Tp, _Sequence, _Compare>& __y)
│ │ │ +
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.
│ │ │ - │ │ │ + │ │ │ +
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
│ │ │ + │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -valarray_array.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// The template and inlines for the -*- C++ -*- internal _Array helper class. │ │ │ │ +1// Queue implementation -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 1997-2025 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2001-2025 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,616 +21,1059 @@ │ │ │ │ 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 │ │ │ │ -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_ARRAY_H │ │ │ │ -33#define _VALARRAY_ARRAY_H 1 │ │ │ │ -34 │ │ │ │ -35#ifdef _GLIBCXX_SYSHDR │ │ │ │ -36#pragma GCC system_header │ │ │ │ -37#endif │ │ │ │ -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 <_c_s_t_d_l_i_b> │ │ │ │ -42#include <_n_e_w> │ │ │ │ -43 │ │ │ │ -44namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -45{ │ │ │ │ -46_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -47 │ │ │ │ -48 // │ │ │ │ -49 // Helper functions on raw pointers │ │ │ │ -50 // │ │ │ │ -51 │ │ │ │ -52 // We get memory the old fashioned way │ │ │ │ -53 template │ │ │ │ -54 _Tp* │ │ │ │ -55 __valarray_get_storage(size_t) __attribute__((__malloc__)); │ │ │ │ -56 │ │ │ │ -57 template │ │ │ │ -58 inline _Tp* │ │ │ │ -59 __valarray_get_storage(size_t __n) │ │ │ │ -60 { return static_cast<_Tp*>(operator new(__n * sizeof(_Tp))); } │ │ │ │ -61 │ │ │ │ -62 // Return memory to the system │ │ │ │ -63 inline void │ │ │ │ -64 __valarray_release_memory(void* __p) │ │ │ │ -65 { operator delete(__p); } │ │ │ │ -66 │ │ │ │ -67 // Turn raw-memory into an array of _Tp filled with _Tp(). │ │ │ │ -68 // This is used in `valarray v(n);` and in `valarray::shift(n)`. │ │ │ │ -69 template │ │ │ │ -70 inline void │ │ │ │ -71 __valarray_default_construct(_Tp* __b, _Tp* __e) │ │ │ │ -72 { │ │ │ │ -73 if _GLIBCXX17_CONSTEXPR (__is_trivial(_Tp)) │ │ │ │ -74 __builtin_memset(__b, 0, (__e - __b) * sizeof(_Tp)); │ │ │ │ -75 else │ │ │ │ -76 while (__b != __e) │ │ │ │ -77 ::new(static_cast(__b++)) _Tp(); │ │ │ │ -78 } │ │ │ │ -79 │ │ │ │ -80 // Turn a raw-memory into an array of _Tp filled with __t │ │ │ │ -81 // This is the required in valarray v(n, t). Also │ │ │ │ -82 // used in valarray<>::resize(). │ │ │ │ -83 template │ │ │ │ -84 inline void │ │ │ │ -85 __valarray_fill_construct(_Tp* __b, _Tp* __e, const _Tp __t) │ │ │ │ -86 { │ │ │ │ -87 while (__b != __e) │ │ │ │ -88 ::new(static_cast(__b++)) _Tp(__t); │ │ │ │ -89 } │ │ │ │ -90 │ │ │ │ -91 // copy-construct raw array [__o, *) from plain array [__b, __e) │ │ │ │ -92 template │ │ │ │ -93 inline void │ │ │ │ -94 __valarray_copy_construct(const _Tp* __b, const _Tp* __e, │ │ │ │ -95 _Tp* __restrict__ __o) │ │ │ │ -96 { │ │ │ │ -97 if _GLIBCXX17_CONSTEXPR (__is_trivial(_Tp)) │ │ │ │ -98 { │ │ │ │ -99 if (__b) │ │ │ │ -100 __builtin_memcpy(__o, __b, (__e - __b) * sizeof(_Tp)); │ │ │ │ -101 } │ │ │ │ -102 else │ │ │ │ -103 while (__b != __e) │ │ │ │ -104 ::new(static_cast(__o++)) _Tp(*__b++); │ │ │ │ -105 } │ │ │ │ -106 │ │ │ │ -107 // copy-construct raw array [__o, *) from strided array __a[<__n : __s>] │ │ │ │ -108 template │ │ │ │ -109 inline void │ │ │ │ -110 __valarray_copy_construct (const _Tp* __restrict__ __a, size_t __n, │ │ │ │ -111 size_t __s, _Tp* __restrict__ __o) │ │ │ │ -112 { │ │ │ │ -113 if _GLIBCXX17_CONSTEXPR (__is_trivial(_Tp)) │ │ │ │ -114 while (__n--) │ │ │ │ -115 { │ │ │ │ -116 *__o++ = *__a; │ │ │ │ -117 __a += __s; │ │ │ │ -118 } │ │ │ │ -119 else │ │ │ │ -120 while (__n--) │ │ │ │ -121 { │ │ │ │ -122 new(__o++) _Tp(*__a); │ │ │ │ -123 __a += __s; │ │ │ │ -124 } │ │ │ │ -125 } │ │ │ │ -126 │ │ │ │ -127 // copy-construct raw array [__o, *) from indexed array __a[__i[<__n>]] │ │ │ │ -128 template │ │ │ │ -129 inline void │ │ │ │ -130 __valarray_copy_construct (const _Tp* __restrict__ __a, │ │ │ │ -131 const size_t* __restrict__ __i, │ │ │ │ -132 _Tp* __restrict__ __o, size_t __n) │ │ │ │ -133 { │ │ │ │ -134 if (__is_trivial(_Tp)) │ │ │ │ -135 while (__n--) │ │ │ │ -136 *__o++ = __a[*__i++]; │ │ │ │ -137 else │ │ │ │ -138 while (__n--) │ │ │ │ -139 new (__o++) _Tp(__a[*__i++]); │ │ │ │ -140 } │ │ │ │ -141 │ │ │ │ -142 // Do the necessary cleanup when we're done with arrays. │ │ │ │ -143 template │ │ │ │ -144 inline void │ │ │ │ -145 __valarray_destroy_elements(_Tp* __b, _Tp* __e) │ │ │ │ -146 { │ │ │ │ -147 if (!__is_trivial(_Tp)) │ │ │ │ -148 while (__b != __e) │ │ │ │ -149 { │ │ │ │ -150 __b->~_Tp(); │ │ │ │ -151 ++__b; │ │ │ │ -152 } │ │ │ │ -153 } │ │ │ │ -154 │ │ │ │ -155 // Fill a plain array __a[<__n>] with __t │ │ │ │ -156 template │ │ │ │ -157 inline void │ │ │ │ -158 __valarray_fill(_Tp* __restrict__ __a, size_t __n, const _Tp& __t) │ │ │ │ -159 { │ │ │ │ -160 while (__n--) │ │ │ │ -161 *__a++ = __t; │ │ │ │ -162 } │ │ │ │ -163 │ │ │ │ -164 // fill strided array __a[<__n-1 : __s>] with __t │ │ │ │ -165 template │ │ │ │ -166 inline void │ │ │ │ -167 __valarray_fill(_Tp* __restrict__ __a, size_t __n, │ │ │ │ -168 size_t __s, const _Tp& __t) │ │ │ │ -169 { │ │ │ │ -170 for (size_t __i = 0; __i < __n; ++__i, __a += __s) │ │ │ │ -171 *__a = __t; │ │ │ │ -172 } │ │ │ │ -173 │ │ │ │ -174 // fill indirect array __a[__i[<__n>]] with __i │ │ │ │ -175 template │ │ │ │ -176 inline void │ │ │ │ -177 __valarray_fill(_Tp* __restrict__ __a, const size_t* __restrict__ __i, │ │ │ │ -178 size_t __n, const _Tp& __t) │ │ │ │ -179 { │ │ │ │ -180 for (size_t __j = 0; __j < __n; ++__j, ++__i) │ │ │ │ -181 __a[*__i] = __t; │ │ │ │ -182 } │ │ │ │ -183 │ │ │ │ -184 // copy plain array __a[<__n>] in __b[<__n>] │ │ │ │ -185 // For non-fundamental types, it is wrong to say 'memcpy()' │ │ │ │ -186 template │ │ │ │ -187 struct _Array_copier │ │ │ │ -188 { │ │ │ │ -189 inline static void │ │ │ │ -190 _S_do_it(const _Tp* __restrict__ __a, size_t __n, _Tp* __restrict__ __b) │ │ │ │ -191 { │ │ │ │ -192 while(__n--) │ │ │ │ -193 *__b++ = *__a++; │ │ │ │ -194 } │ │ │ │ -195 }; │ │ │ │ -196 │ │ │ │ -197 template │ │ │ │ -198 struct _Array_copier<_Tp, true> │ │ │ │ -199 { │ │ │ │ -200 inline static void │ │ │ │ -201 _S_do_it(const _Tp* __restrict__ __a, size_t __n, _Tp* __restrict__ __b) │ │ │ │ -202 { │ │ │ │ -203 if (__n != 0) │ │ │ │ -204 __builtin_memcpy(__b, __a, __n * sizeof (_Tp)); │ │ │ │ -205 } │ │ │ │ -206 }; │ │ │ │ -207 │ │ │ │ -208 // Copy a plain array __a[<__n>] into a play array __b[<>] │ │ │ │ -209 template │ │ │ │ -210 inline void │ │ │ │ -211 __valarray_copy(const _Tp* __restrict__ __a, size_t __n, │ │ │ │ -212 _Tp* __restrict__ __b) │ │ │ │ -213 { │ │ │ │ -214 _Array_copier<_Tp, __is_trivial(_Tp)>::_S_do_it(__a, __n, __b); │ │ │ │ -215 } │ │ │ │ -216 │ │ │ │ -217 // Copy strided array __a[<__n : __s>] in plain __b[<__n>] │ │ │ │ -218 template │ │ │ │ -219 inline void │ │ │ │ -220 __valarray_copy(const _Tp* __restrict__ __a, size_t __n, size_t __s, │ │ │ │ -221 _Tp* __restrict__ __b) │ │ │ │ -222 { │ │ │ │ -223 for (size_t __i = 0; __i < __n; ++__i, ++__b, __a += __s) │ │ │ │ -224 *__b = *__a; │ │ │ │ -225 } │ │ │ │ -226 │ │ │ │ -227 // Copy a plain array __a[<__n>] into a strided array __b[<__n : __s>] │ │ │ │ -228 template │ │ │ │ -229 inline void │ │ │ │ -230 __valarray_copy(const _Tp* __restrict__ __a, _Tp* __restrict__ __b, │ │ │ │ -231 size_t __n, size_t __s) │ │ │ │ -232 { │ │ │ │ -233 for (size_t __i = 0; __i < __n; ++__i, ++__a, __b += __s) │ │ │ │ -234 *__b = *__a; │ │ │ │ -235 } │ │ │ │ -236 │ │ │ │ -237 // Copy strided array __src[<__n : __s1>] into another │ │ │ │ -238 // strided array __dst[< : __s2>]. Their sizes must match. │ │ │ │ -239 template │ │ │ │ -240 inline void │ │ │ │ -241 __valarray_copy(const _Tp* __restrict__ __src, size_t __n, size_t __s1, │ │ │ │ -242 _Tp* __restrict__ __dst, size_t __s2) │ │ │ │ -243 { │ │ │ │ -244 for (size_t __i = 0; __i < __n; ++__i) │ │ │ │ -245 __dst[__i * __s2] = __src[__i * __s1]; │ │ │ │ -246 } │ │ │ │ +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 ___S_e_q_u_e_n_c_e___v_a_l_u_e___t_y_p_e; │ │ │ │ +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, ___S_e_q_u_e_n_c_e___v_a_l_u_e___t_y_p_e, _SameTypeConcept) │ │ │ │ +115#endif │ │ │ │ +116 │ │ │ │ +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>::type; │ │ │ │ +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>::type> │ │ │ │ +_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(_s_t_d::_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(_s_t_d::_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>(_s_t_d::_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>(_s_t_d::_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 // Copy an indexed array __a[__i[<__n>]] in plain array __b[<__n>] │ │ │ │ -249 template │ │ │ │ -250 inline void │ │ │ │ -251 __valarray_copy(const _Tp* __restrict__ __a, │ │ │ │ -252 const size_t* __restrict__ __i, │ │ │ │ -253 _Tp* __restrict__ __b, size_t __n) │ │ │ │ -254 { │ │ │ │ -255 for (size_t __j = 0; __j < __n; ++__j, ++__b, ++__i) │ │ │ │ -256 *__b = __a[*__i]; │ │ │ │ -257 } │ │ │ │ -258 │ │ │ │ -259 // Copy a plain array __a[<__n>] in an indexed array __b[__i[<__n>]] │ │ │ │ -260 template │ │ │ │ -261 inline void │ │ │ │ -262 __valarray_copy(const _Tp* __restrict__ __a, size_t __n, │ │ │ │ -263 _Tp* __restrict__ __b, const size_t* __restrict__ __i) │ │ │ │ -264 { │ │ │ │ -265 for (size_t __j = 0; __j < __n; ++__j, ++__a, ++__i) │ │ │ │ -266 __b[*__i] = *__a; │ │ │ │ -267 } │ │ │ │ -268 │ │ │ │ -269 // Copy the __n first elements of an indexed array __src[<__i>] into │ │ │ │ -270 // another indexed array __dst[<__j>]. │ │ │ │ -271 template │ │ │ │ -272 inline void │ │ │ │ -273 __valarray_copy(const _Tp* __restrict__ __src, size_t __n, │ │ │ │ -274 const size_t* __restrict__ __i, │ │ │ │ -275 _Tp* __restrict__ __dst, const size_t* __restrict__ __j) │ │ │ │ -276 { │ │ │ │ -277 for (size_t __k = 0; __k < __n; ++__k) │ │ │ │ -278 __dst[*__j++] = __src[*__i++]; │ │ │ │ -279 } │ │ │ │ -280 │ │ │ │ -281 // │ │ │ │ -282 // Compute the sum of elements in range [__f, __l) which must not be empty. │ │ │ │ -283 // This is a naive algorithm. It suffers from cancelling. │ │ │ │ -284 // In the future try to specialize for _Tp = float, double, long double │ │ │ │ -285 // using a more accurate algorithm. │ │ │ │ -286 // │ │ │ │ -287 template │ │ │ │ -288 inline _Tp │ │ │ │ -289 __valarray_sum(const _Tp* __f, const _Tp* __l) │ │ │ │ -290 { │ │ │ │ -291 _Tp __r = *__f++; │ │ │ │ -292 while (__f != __l) │ │ │ │ -293 __r += *__f++; │ │ │ │ -294 return __r; │ │ │ │ -295 } │ │ │ │ -296 │ │ │ │ -297 // Compute the min/max of an array-expression │ │ │ │ -298 template │ │ │ │ -299 inline typename _Ta::value_type │ │ │ │ -300 __valarray_min(const _Ta& __a) │ │ │ │ -301 { │ │ │ │ -302 size_t __s = __a.size(); │ │ │ │ -303 typedef typename _Ta::value_type _Value_type; │ │ │ │ -304 _Value_type __r = __s == 0 ? _Value_type() : __a[0]; │ │ │ │ -305 for (size_t __i = 1; __i < __s; ++__i) │ │ │ │ -306 { │ │ │ │ -307 _Value_type __t = __a[__i]; │ │ │ │ -308 if (__t < __r) │ │ │ │ -309 __r = __t; │ │ │ │ -310 } │ │ │ │ -311 return __r; │ │ │ │ -312 } │ │ │ │ -313 │ │ │ │ -314 template │ │ │ │ -315 inline typename _Ta::value_type │ │ │ │ -316 __valarray_max(const _Ta& __a) │ │ │ │ -317 { │ │ │ │ -318 size_t __s = __a.size(); │ │ │ │ -319 typedef typename _Ta::value_type _Value_type; │ │ │ │ -320 _Value_type __r = __s == 0 ? _Value_type() : __a[0]; │ │ │ │ -321 for (size_t __i = 1; __i < __s; ++__i) │ │ │ │ -322 { │ │ │ │ -323 _Value_type __t = __a[__i]; │ │ │ │ -324 if (__t > __r) │ │ │ │ -325 __r = __t; │ │ │ │ -326 } │ │ │ │ -327 return __r; │ │ │ │ -328 } │ │ │ │ -329 │ │ │ │ -330 // │ │ │ │ -331 // Helper class _Array, first layer of valarray abstraction. │ │ │ │ -332 // All operations on valarray should be forwarded to this class │ │ │ │ -333 // whenever possible. -- gdr │ │ │ │ -334 // │ │ │ │ -335 │ │ │ │ -336 template │ │ │ │ -337 struct _Array │ │ │ │ -338 { │ │ │ │ -339 explicit _Array(_Tp* const __restrict__); │ │ │ │ -340 explicit _Array(const valarray<_Tp>&); │ │ │ │ -341 _Array(const _Tp* __restrict__, size_t); │ │ │ │ -342 │ │ │ │ -343 _Tp* _b_e_g_i_n() const; │ │ │ │ +248 /** Returns the number of elements in the %queue. */ │ │ │ │ +249 _GLIBCXX_NODISCARD │ │ │ │ +250 size_type │ │ │ │ +_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(value_type&& __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 _Tp* const __restrict__ _M_data; │ │ │ │ -346 }; │ │ │ │ -347 │ │ │ │ -348 │ │ │ │ -349 // Copy-construct plain array __b[<__n>] from indexed array __a[__i[<__n>]] │ │ │ │ -350 template │ │ │ │ -351 inline void │ │ │ │ -352 __valarray_copy_construct(_Array<_Tp> __a, _Array __i, │ │ │ │ -353 _Array<_Tp> __b, size_t __n) │ │ │ │ -354 { std::__valarray_copy_construct(__a._M_data, __i._M_data, │ │ │ │ -355 __b._M_data, __n); } │ │ │ │ -356 │ │ │ │ -357 // Copy-construct plain array __b[<__n>] from strided array __a[<__n : │ │ │ │ -__s>] │ │ │ │ -358 template │ │ │ │ -359 inline void │ │ │ │ -360 __valarray_copy_construct(_Array<_Tp> __a, size_t __n, size_t __s, │ │ │ │ -361 _Array<_Tp> __b) │ │ │ │ -362 { std::__valarray_copy_construct(__a._M_data, __n, __s, __b._M_data); } │ │ │ │ -363 │ │ │ │ -364 template │ │ │ │ -365 inline void │ │ │ │ -366 __valarray_fill (_Array<_Tp> __a, size_t __n, const _Tp& __t) │ │ │ │ -367 { std::__valarray_fill(__a._M_data, __n, __t); } │ │ │ │ -368 │ │ │ │ -369 template │ │ │ │ -370 inline void │ │ │ │ -371 __valarray_fill(_Array<_Tp> __a, size_t __n, size_t __s, const _Tp& __t) │ │ │ │ -372 { std::__valarray_fill(__a._M_data, __n, __s, __t); } │ │ │ │ -373 │ │ │ │ -374 template │ │ │ │ -375 inline void │ │ │ │ -376 __valarray_fill(_Array<_Tp> __a, _Array __i, │ │ │ │ -377 size_t __n, const _Tp& __t) │ │ │ │ -378 { std::__valarray_fill(__a._M_data, __i._M_data, __n, __t); } │ │ │ │ -379 │ │ │ │ -380 // Copy a plain array __a[<__n>] into a play array __b[<>] │ │ │ │ -381 template │ │ │ │ -382 inline void │ │ │ │ -383 __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b) │ │ │ │ -384 { std::__valarray_copy(__a._M_data, __n, __b._M_data); } │ │ │ │ -385 │ │ │ │ -386 // Copy strided array __a[<__n : __s>] in plain __b[<__n>] │ │ │ │ -387 template │ │ │ │ -388 inline void │ │ │ │ -389 __valarray_copy(_Array<_Tp> __a, size_t __n, size_t __s, _Array<_Tp> __b) │ │ │ │ -390 { std::__valarray_copy(__a._M_data, __n, __s, __b._M_data); } │ │ │ │ -391 │ │ │ │ -392 // Copy a plain array __a[<__n>] into a strided array __b[<__n : __s>] │ │ │ │ -393 template │ │ │ │ -394 inline void │ │ │ │ -395 __valarray_copy(_Array<_Tp> __a, _Array<_Tp> __b, size_t __n, size_t __s) │ │ │ │ -396 { __valarray_copy(__a._M_data, __b._M_data, __n, __s); } │ │ │ │ -397 │ │ │ │ -398 // Copy strided array __src[<__n : __s1>] into another │ │ │ │ -399 // strided array __dst[< : __s2>]. Their sizes must match. │ │ │ │ -400 template │ │ │ │ -401 inline void │ │ │ │ -402 __valarray_copy(_Array<_Tp> __a, size_t __n, size_t __s1, │ │ │ │ -403 _Array<_Tp> __b, size_t __s2) │ │ │ │ -404 { std::__valarray_copy(__a._M_data, __n, __s1, __b._M_data, __s2); } │ │ │ │ -405 │ │ │ │ -406 // Copy an indexed array __a[__i[<__n>]] in plain array __b[<__n>] │ │ │ │ -407 template │ │ │ │ -408 inline void │ │ │ │ -409 __valarray_copy(_Array<_Tp> __a, _Array __i, │ │ │ │ -410 _Array<_Tp> __b, size_t __n) │ │ │ │ -411 { std::__valarray_copy(__a._M_data, __i._M_data, __b._M_data, __n); } │ │ │ │ +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(_____i_s___n_o_t_h_r_o_w___s_w_a_p_p_a_b_l_e_<___S_e_q_u_e_n_c_e_>_:_:_v_a_l_u_e) │ │ │ │ +368#else │ │ │ │ +369 noexcept(_____i_s___n_o_t_h_r_o_w___s_w_a_p_p_a_b_l_e_<___T_p_>_:_:_v_a_l_u_e) │ │ │ │ +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 queue(_Container) -> queue; │ │ │ │ +387 │ │ │ │ +388 template> │ │ │ │ +390 queue(_Container, _Allocator) │ │ │ │ +391 -> queue; │ │ │ │ +392 │ │ │ │ +393#ifdef __glibcxx_adaptor_iterator_pair_constructor │ │ │ │ +394 template::value_type, │ │ │ │ +397 typename = _RequireInputIter<_InputIterator>> │ │ │ │ +398 queue(_InputIterator, _InputIterator) -> queue<_ValT>; │ │ │ │ +399 │ │ │ │ +400 template::value_type, │ │ │ │ +403 typename = _RequireInputIter<_InputIterator>, │ │ │ │ +404 typename = _RequireAllocator<_Allocator>> │ │ │ │ +405 queue(_InputIterator, _InputIterator, _Allocator) │ │ │ │ +406 -> queue<_ValT, deque<_ValT, _Allocator>>; │ │ │ │ +407#endif │ │ │ │ +408 │ │ │ │ +409#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +410 template │ │ │ │ +411 queue(from_range_t, _Rg&&) -> queue>; │ │ │ │ 412 │ │ │ │ -413 // Copy a plain array __a[<__n>] in an indexed array __b[__i[<__n>]] │ │ │ │ -414 template │ │ │ │ -415 inline void │ │ │ │ -416 __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b, │ │ │ │ -417 _Array __i) │ │ │ │ -418 { std::__valarray_copy(__a._M_data, __n, __b._M_data, __i._M_data); } │ │ │ │ +413 template │ │ │ │ +414 queue(from_range_t, _Rg&&, _Alloc) │ │ │ │ +415 -> queue, │ │ │ │ +416 deque, _Alloc>>; │ │ │ │ +417#endif │ │ │ │ +418#endif │ │ │ │ 419 │ │ │ │ -420 // Copy the __n first elements of an indexed array __src[<__i>] into │ │ │ │ -421 // another indexed array __dst[<__j>]. │ │ │ │ -422 template │ │ │ │ -423 inline void │ │ │ │ -424 __valarray_copy(_Array<_Tp> __src, size_t __n, _Array __i, │ │ │ │ -425 _Array<_Tp> __dst, _Array __j) │ │ │ │ -426 { │ │ │ │ -427 std::__valarray_copy(__src._M_data, __n, __i._M_data, │ │ │ │ -428 __dst._M_data, __j._M_data); │ │ │ │ -429 } │ │ │ │ -430 │ │ │ │ -431 template │ │ │ │ -432 inline │ │ │ │ -433 _Array<_Tp>::_Array(_Tp* const __restrict__ __p) │ │ │ │ -434 : _M_data (__p) {} │ │ │ │ -435 │ │ │ │ -436 template │ │ │ │ -437 inline │ │ │ │ -438 _Array<_Tp>::_Array(const valarray<_Tp>& __v) │ │ │ │ -439 : _M_data (__v._M_data) {} │ │ │ │ -440 │ │ │ │ -441 template │ │ │ │ -442 inline │ │ │ │ -443 _Array<_Tp>::_Array(const _Tp* __restrict__ __b, size_t __s) │ │ │ │ -444 : _M_data(__valarray_get_storage<_Tp>(__s)) │ │ │ │ -445 { std::__valarray_copy_construct(__b, __s, _M_data); } │ │ │ │ -446 │ │ │ │ -447 template │ │ │ │ -448 inline _Tp* │ │ │ │ -449 _Array<_Tp>::begin () const │ │ │ │ -450 { return _M_data; } │ │ │ │ -451 │ │ │ │ -452#define _DEFINE_ARRAY_FUNCTION(_Op, _Name) \ │ │ │ │ -453 template \ │ │ │ │ -454 inline void \ │ │ │ │ -455 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, const _Tp& __t) \ │ │ │ │ -456 { \ │ │ │ │ -457 for (_Tp* __p = __a._M_data; __p < __a._M_data + __n; ++__p) \ │ │ │ │ -458 *__p _Op##= __t; \ │ │ │ │ -459 } \ │ │ │ │ -460 \ │ │ │ │ -461 template \ │ │ │ │ -462 inline void \ │ │ │ │ -463 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b) \ │ │ │ │ -464 { \ │ │ │ │ -465 _Tp* __p = __a._M_data; \ │ │ │ │ -466 for (_Tp* __q = __b._M_data; __q < __b._M_data + __n; ++__p, ++__q) \ │ │ │ │ -467 *__p _Op##= *__q; \ │ │ │ │ -468 } \ │ │ │ │ -469 \ │ │ │ │ -470 template \ │ │ │ │ -471 void \ │ │ │ │ -472 _Array_augmented_##_Name(_Array<_Tp> __a, \ │ │ │ │ -473 const _Expr<_Dom, _Tp>& __e, size_t __n) \ │ │ │ │ -474 { \ │ │ │ │ -475 _Tp* __p(__a._M_data); \ │ │ │ │ -476 for (size_t __i = 0; __i < __n; ++__i, ++__p) \ │ │ │ │ -477 *__p _Op##= __e[__i]; \ │ │ │ │ -478 } \ │ │ │ │ -479 \ │ │ │ │ -480 template \ │ │ │ │ -481 inline void \ │ │ │ │ -482 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, size_t __s, \ │ │ │ │ -483 _Array<_Tp> __b) \ │ │ │ │ -484 { \ │ │ │ │ -485 _Tp* __q(__b._M_data); \ │ │ │ │ -486 for (_Tp* __p = __a._M_data; __p < __a._M_data + __s * __n; \ │ │ │ │ -487 __p += __s, ++__q) \ │ │ │ │ -488 *__p _Op##= *__q; \ │ │ │ │ -489 } \ │ │ │ │ -490 \ │ │ │ │ -491 template \ │ │ │ │ -492 inline void \ │ │ │ │ -493 _Array_augmented_##_Name(_Array<_Tp> __a, _Array<_Tp> __b, \ │ │ │ │ -494 size_t __n, size_t __s) \ │ │ │ │ -495 { \ │ │ │ │ -496 _Tp* __q(__b._M_data); \ │ │ │ │ -497 for (_Tp* __p = __a._M_data; __p < __a._M_data + __n; \ │ │ │ │ -498 ++__p, __q += __s) \ │ │ │ │ -499 *__p _Op##= *__q; \ │ │ │ │ -500 } \ │ │ │ │ -501 \ │ │ │ │ -502 template \ │ │ │ │ -503 void \ │ │ │ │ -504 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __s, \ │ │ │ │ -505 const _Expr<_Dom, _Tp>& __e, size_t __n) \ │ │ │ │ -506 { \ │ │ │ │ -507 _Tp* __p(__a._M_data); \ │ │ │ │ -508 for (size_t __i = 0; __i < __n; ++__i, __p += __s) \ │ │ │ │ -509 *__p _Op##= __e[__i]; \ │ │ │ │ -510 } \ │ │ │ │ -511 \ │ │ │ │ -512 template \ │ │ │ │ -513 inline void \ │ │ │ │ -514 _Array_augmented_##_Name(_Array<_Tp> __a, _Array __i, \ │ │ │ │ -515 _Array<_Tp> __b, size_t __n) \ │ │ │ │ -516 { \ │ │ │ │ -517 _Tp* __q(__b._M_data); \ │ │ │ │ -518 for (size_t* __j = __i._M_data; __j < __i._M_data + __n; \ │ │ │ │ -519 ++__j, ++__q) \ │ │ │ │ -520 __a._M_data[*__j] _Op##= *__q; \ │ │ │ │ -521 } \ │ │ │ │ -522 \ │ │ │ │ -523 template \ │ │ │ │ -524 inline void \ │ │ │ │ -525 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, \ │ │ │ │ -526 _Array<_Tp> __b, _Array __i) \ │ │ │ │ -527 { \ │ │ │ │ -528 _Tp* __p(__a._M_data); \ │ │ │ │ -529 for (size_t* __j = __i._M_data; __j<__i._M_data + __n; \ │ │ │ │ -530 ++__j, ++__p) \ │ │ │ │ -531 *__p _Op##= __b._M_data[*__j]; \ │ │ │ │ -532 } \ │ │ │ │ -533 \ │ │ │ │ -534 template \ │ │ │ │ -535 void \ │ │ │ │ -536 _Array_augmented_##_Name(_Array<_Tp> __a, _Array __i, \ │ │ │ │ -537 const _Expr<_Dom, _Tp>& __e, size_t __n) \ │ │ │ │ -538 { \ │ │ │ │ -539 size_t* __j(__i._M_data); \ │ │ │ │ -540 for (size_t __k = 0; __k<__n; ++__k, ++__j) \ │ │ │ │ -541 __a._M_data[*__j] _Op##= __e[__k]; \ │ │ │ │ -542 } \ │ │ │ │ -543 \ │ │ │ │ -544 template \ │ │ │ │ -545 void \ │ │ │ │ -546 _Array_augmented_##_Name(_Array<_Tp> __a, _Array __m, \ │ │ │ │ -547 _Array<_Tp> __b, size_t __n) \ │ │ │ │ -548 { \ │ │ │ │ -549 bool* __ok(__m._M_data); \ │ │ │ │ -550 _Tp* __p(__a._M_data); \ │ │ │ │ -551 for (_Tp* __q = __b._M_data; __q < __b._M_data + __n; \ │ │ │ │ -552 ++__q, ++__ok, ++__p) \ │ │ │ │ -553 { \ │ │ │ │ -554 while (! *__ok) \ │ │ │ │ -555 { \ │ │ │ │ -556 ++__ok; \ │ │ │ │ -557 ++__p; \ │ │ │ │ -558 } \ │ │ │ │ -559 *__p _Op##= *__q; \ │ │ │ │ -560 } \ │ │ │ │ -561 } \ │ │ │ │ -562 \ │ │ │ │ -563 template \ │ │ │ │ -564 void \ │ │ │ │ -565 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, \ │ │ │ │ -566 _Array<_Tp> __b, _Array __m) \ │ │ │ │ -567 { \ │ │ │ │ -568 bool* __ok(__m._M_data); \ │ │ │ │ -569 _Tp* __q(__b._M_data); \ │ │ │ │ -570 for (_Tp* __p = __a._M_data; __p < __a._M_data + __n; \ │ │ │ │ -571 ++__p, ++__ok, ++__q) \ │ │ │ │ -572 { \ │ │ │ │ -573 while (! *__ok) \ │ │ │ │ -574 { \ │ │ │ │ -575 ++__ok; \ │ │ │ │ -576 ++__q; \ │ │ │ │ -577 } \ │ │ │ │ -578 *__p _Op##= *__q; \ │ │ │ │ -579 } \ │ │ │ │ -580 } \ │ │ │ │ -581 \ │ │ │ │ -582 template \ │ │ │ │ -583 void \ │ │ │ │ -584 _Array_augmented_##_Name(_Array<_Tp> __a, _Array __m, \ │ │ │ │ -585 const _Expr<_Dom, _Tp>& __e, size_t __n) \ │ │ │ │ -586 { \ │ │ │ │ -587 bool* __ok(__m._M_data); \ │ │ │ │ -588 _Tp* __p(__a._M_data); \ │ │ │ │ -589 for (size_t __i = 0; __i < __n; ++__i, ++__ok, ++__p) \ │ │ │ │ -590 { \ │ │ │ │ -591 while (! *__ok) \ │ │ │ │ -592 { \ │ │ │ │ -593 ++__ok; \ │ │ │ │ -594 ++__p; \ │ │ │ │ -595 } \ │ │ │ │ -596 *__p _Op##= __e[__i]; \ │ │ │ │ -597 } \ │ │ │ │ -598 } │ │ │ │ -599 │ │ │ │ -600 _DEFINE_ARRAY_FUNCTION(+, __plus) │ │ │ │ -601 _DEFINE_ARRAY_FUNCTION(-, __minus) │ │ │ │ -602 _DEFINE_ARRAY_FUNCTION(*, __multiplies) │ │ │ │ -603 _DEFINE_ARRAY_FUNCTION(/, __divides) │ │ │ │ -604 _DEFINE_ARRAY_FUNCTION(%, __modulus) │ │ │ │ -605 _DEFINE_ARRAY_FUNCTION(^, __bitwise_xor) │ │ │ │ -606 _DEFINE_ARRAY_FUNCTION(|, __bitwise_or) │ │ │ │ -607 _DEFINE_ARRAY_FUNCTION(&, __bitwise_and) │ │ │ │ -608 _DEFINE_ARRAY_FUNCTION(<<, __shift_left) │ │ │ │ -609 _DEFINE_ARRAY_FUNCTION(>>, __shift_right) │ │ │ │ -610 │ │ │ │ -611#undef _DEFINE_ARRAY_FUNCTION │ │ │ │ +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 compare_three_way_result_t<_Seq> │ │ │ │ +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 enable_if<__is_swappable<_Seq>::value>::type │ │ │ │ +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 │ │ │ │ +506 struct uses_allocator, _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 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 ___S_e_q_u_e_n_c_e___v_a_l_u_e___t_y_p_e; │ │ │ │ +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, ___S_e_q_u_e_n_c_e___v_a_l_u_e___t_y_p_e, _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>::type; │ │ │ │ +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>::type> │ │ │ │ +_6_1_0 _p_r_i_o_r_i_t_y___q_u_e_u_e() │ │ │ │ +611 : c(), comp() { } │ │ │ │ 612 │ │ │ │ -613_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -614} // namespace │ │ │ │ -615 │ │ │ │ -616# include <_b_i_t_s_/_v_a_l_a_r_r_a_y___a_r_r_a_y_._t_c_c> │ │ │ │ +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#endif /* _ARRAY_H */ │ │ │ │ -_n_e_w │ │ │ │ -_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 │ │ │ │ -_c_+_+_c_o_n_f_i_g_._h │ │ │ │ -_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 │ │ │ │ +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(_s_t_d::_m_o_v_e(__q.c)), comp(_s_t_d::_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(_s_t_d::_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(_s_t_d::_m_o_v_e(__q.c), __a), comp(_s_t_d::_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(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __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(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __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(_s_t_d::_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>(_s_t_d::_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>(_s_t_d::_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>(_s_t_d::_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 size_type │ │ │ │ +_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(value_type&& __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& _____p_q) │ │ │ │ +896 noexcept(__and_< │ │ │ │ +897#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 │ │ │ │ +898 _____i_s___n_o_t_h_r_o_w___s_w_a_p_p_a_b_l_e_<___S_e_q_u_e_n_c_e_>, │ │ │ │ +899#else │ │ │ │ +900 _____i_s___n_o_t_h_r_o_w___s_w_a_p_p_a_b_l_e_<___T_p_>, │ │ │ │ +901#endif │ │ │ │ +902 _____i_s___n_o_t_h_r_o_w___s_w_a_p_p_a_b_l_e_<___C_o_m_p_a_r_e_> │ │ │ │ +903 >::value) │ │ │ │ +904 { │ │ │ │ +905 using std::swap; │ │ │ │ +906 swap(c, _____p_q.c); │ │ │ │ +907 swap(comp, _____p_q.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 priority_queue(_Compare, _Container) │ │ │ │ +922 -> priority_queue; │ │ │ │ +923 │ │ │ │ +924 template::value_type, │ │ │ │ +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()) │ │ │ │ +933 -> priority_queue<_ValT, _Container, _Compare>; │ │ │ │ +934 │ │ │ │ +935 template, │ │ │ │ +937 typename = _RequireNotAllocator<_Container>> │ │ │ │ +938 priority_queue(_Compare, _Container, _Allocator) │ │ │ │ +939 -> priority_queue; │ │ │ │ +940 │ │ │ │ +941#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +942 template>, │ │ │ │ +944 __allocator_like _Alloc = _s_t_d_:_:_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_>>> │ │ │ │ +945 priority_queue(from_range_t, _Rg&&, _Compare = _Compare(), │ │ │ │ +946 _Alloc = _Alloc()) │ │ │ │ +947 -> priority_queue, │ │ │ │ +948 vector, _Alloc>, │ │ │ │ +949 _Compare>; │ │ │ │ +950 │ │ │ │ +951 template │ │ │ │ +952 priority_queue(from_range_t, _Rg&&, _Alloc) │ │ │ │ +953 -> priority_queue, │ │ │ │ +954 vector, _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 enable_if<__and_<__is_swappable<_Sequence>, │ │ │ │ +966 __is_swappable<_Compare>>::value>::type │ │ │ │ +967#else │ │ │ │ +968 void │ │ │ │ +969#endif │ │ │ │ +970 swap(priority_queue<_Tp, _Sequence, _Compare>& __x, │ │ │ │ +971 priority_queue<_Tp, _Sequence, _Compare>& __y) │ │ │ │ +972 noexcept(noexcept(__x.swap(__y))) │ │ │ │ +973 { __x.swap(__y); } │ │ │ │ +974 │ │ │ │ +975 template │ │ │ │ +977 struct uses_allocator, _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 */ │ │ │ │ +_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. │ │ │ │ -_c_s_t_d_l_i_b │ │ │ │ +_s_t_d_:_:_i_s___s_a_m_e │ │ │ │ +is_same │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_5_4_0 │ │ │ │ +_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_:_:_a_u_t_o___p_t_r___r_e_f │ │ │ │ +DDeeffiinniittiioonn _a_u_t_o___p_t_r_._h_:_4_9 │ │ │ │ * _b_i_t_s │ │ │ │ - * _v_a_l_a_r_r_a_y___a_r_r_a_y_._h │ │ │ │ + * _s_t_l___q_u_e_u_e_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00386.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: unordered_set.h File Reference │ │ │ +libstdc++: unordered_map.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -50,118 +50,134 @@ │ │ │
│ │ │
│ │ │
│ │ │ Classes | │ │ │ Namespaces | │ │ │ Typedefs | │ │ │ Functions
│ │ │ -
unordered_set.h File Reference
│ │ │ +
unordered_map.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ Classes

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

│ │ │ 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 = _Hashtable< _Value, _Value, _Alloc, __detail::_Identity, _Pred, _Hash, __detail::_Mod_range_hashing, __detail::_Default_ranged_hash, __detail::_Prime_rehash_policy, _Tr >
 
template<bool _Cache>
using std::__umset_traits = __detail::_Hashtable_traits< _Cache, true, false >
 
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 = _Hashtable< _Value, _Value, _Alloc, __detail::_Identity, _Pred, _Hash, __detail::_Mod_range_hashing, __detail::_Default_ranged_hash, __detail::_Prime_rehash_policy, _Tr >
 
template<bool _Cache>
using std::__uset_traits = __detail::_Hashtable_traits< _Cache, true, true >
 
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 = _Hashtable< _Key, std::pair< const _Key, _Tp >, _Alloc, __detail::_Select1st, _Pred, _Hash, __detail::_Mod_range_hashing, __detail::_Default_ranged_hash, __detail::_Prime_rehash_policy, _Tr >
 
template<bool _Cache>
using std::__umap_traits = __detail::_Hashtable_traits< _Cache, false, true >
 
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 = _Hashtable< _Key, std::pair< const _Key, _Tp >, _Alloc, __detail::_Select1st, _Pred, _Hash, __detail::_Mod_range_hashing, __detail::_Default_ranged_hash, __detail::_Prime_rehash_policy, _Tr >
 
template<bool _Cache>
using std::__ummap_traits = __detail::_Hashtable_traits< _Cache, false, false >
 
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ 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<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_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 >
 
│ │ │ +
 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_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 >, 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 >
 
│ │ │ +
 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_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 >
 
│ │ │ +
 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_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 >, 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 >
 
 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 <unordered_set>.

│ │ │ +

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 unordered_set.h.

│ │ │ +

Definition in file unordered_map.h.

│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,160 +1,196 @@ │ │ │ │ libstdc++ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _T_y_p_e_d_e_f_s | _F_u_n_c_t_i_o_n_s │ │ │ │ -unordered_set.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_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___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___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___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<_t_y_p_e_n_a_m_e _Value , _t_y_p_e_n_a_m_e ___H_a_s_h = hash<_Value>, _t_y_p_e_n_a_m_e ___P_r_e_d = │ │ │ │ -std::equal_to<_Value>, _t_y_p_e_n_a_m_e _Alloc = std::allocator<_Value>, _t_y_p_e_n_a_m_e ___T_r = │ │ │ │ -__umset_traits<__cache_default<_Value, _Hash>::value>> │ │ │ │ -_u_s_i_n_g  _s_t_d_:_:_____u_m_s_e_t___h_a_s_h_t_a_b_l_e = _Hashtable< _Value, _Value, _Alloc, __detail:: │ │ │ │ - _Identity, ___P_r_e_d, ___H_a_s_h, __detail::_Mod_range_hashing, __detail:: │ │ │ │ - _Default_ranged_hash, __detail::_Prime_rehash_policy, ___T_r > │ │ │ │ +template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___H_a_s_h = hash<_Key>, _t_y_p_e_n_a_m_e │ │ │ │ +___P_r_e_d = std::equal_to<_Key>, _t_y_p_e_n_a_m_e _Alloc = std::allocator >, _t_y_p_e_n_a_m_e ___T_r = __umap_traits<__cache_default<_Key, _Hash>:: │ │ │ │ +value>> │ │ │ │ +_u_s_i_n_g  _s_t_d_:_:_____u_m_a_p___h_a_s_h_t_a_b_l_e = _Hashtable< ___K_e_y, _s_t_d_:_:_p_a_i_r< _c_o_n_s_t ___K_e_y, _Tp >, │ │ │ │ + _Alloc, __detail::_Select1st, ___P_r_e_d, ___H_a_s_h, __detail:: │ │ │ │ + _Mod_range_hashing, __detail::_Default_ranged_hash, __detail:: │ │ │ │ + _Prime_rehash_policy, ___T_r > │ │ │ │   │ │ │ │ template │ │ │ │ -_u_s_i_n_g  _s_t_d_:_:_____u_m_s_e_t___t_r_a_i_t_s = __detail::_Hashtable_traits< ___C_a_c_h_e, _t_r_u_e, _f_a_l_s_e > │ │ │ │ +_u_s_i_n_g  _s_t_d_:_:_____u_m_a_p___t_r_a_i_t_s = __detail::_Hashtable_traits< ___C_a_c_h_e, _f_a_l_s_e, _t_r_u_e > │ │ │ │   │ │ │ │ -template<_t_y_p_e_n_a_m_e _Value , _t_y_p_e_n_a_m_e ___H_a_s_h = hash<_Value>, _t_y_p_e_n_a_m_e ___P_r_e_d = │ │ │ │ -std::equal_to<_Value>, _t_y_p_e_n_a_m_e _Alloc = std::allocator<_Value>, _t_y_p_e_n_a_m_e ___T_r = │ │ │ │ -__uset_traits<__cache_default<_Value, _Hash>::value>> │ │ │ │ -_u_s_i_n_g  _s_t_d_:_:_____u_s_e_t___h_a_s_h_t_a_b_l_e = _Hashtable< _Value, _Value, _Alloc, __detail:: │ │ │ │ - _Identity, ___P_r_e_d, ___H_a_s_h, __detail::_Mod_range_hashing, __detail:: │ │ │ │ - _Default_ranged_hash, __detail::_Prime_rehash_policy, ___T_r > │ │ │ │ +template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___H_a_s_h = hash<_Key>, _t_y_p_e_n_a_m_e │ │ │ │ +___P_r_e_d = std::equal_to<_Key>, _t_y_p_e_n_a_m_e _Alloc = std::allocator >, _t_y_p_e_n_a_m_e ___T_r = __ummap_traits<__cache_default<_Key, _Hash>:: │ │ │ │ +value>> │ │ │ │ +_u_s_i_n_g  _s_t_d_:_:_____u_m_m_a_p___h_a_s_h_t_a_b_l_e = _Hashtable< ___K_e_y, _s_t_d_:_:_p_a_i_r< _c_o_n_s_t ___K_e_y, _Tp >, │ │ │ │ + _Alloc, __detail::_Select1st, ___P_r_e_d, ___H_a_s_h, __detail:: │ │ │ │ + _Mod_range_hashing, __detail::_Default_ranged_hash, __detail:: │ │ │ │ + _Prime_rehash_policy, ___T_r > │ │ │ │   │ │ │ │ template │ │ │ │ -_u_s_i_n_g  _s_t_d_:_:_____u_s_e_t___t_r_a_i_t_s = __detail::_Hashtable_traits< ___C_a_c_h_e, _t_r_u_e, _t_r_u_e > │ │ │ │ +_u_s_i_n_g  _s_t_d_:_:_____u_m_m_a_p___t_r_a_i_t_s = __detail::_Hashtable_traits< ___C_a_c_h_e, _f_a_l_s_e, _f_a_l_s_e │ │ │ │ + > │ │ │ │   │ │ │ │ FFuunnccttiioonnss │ │ │ │ -template<_c_l_a_s_s _Value , _c_l_a_s_s ___H_a_s_h , _c_l_a_s_s ___P_r_e_d , _c_l_a_s_s _Alloc > │ │ │ │ -bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (_c_o_n_s_t _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t< _Value, ___H_a_s_h, ___P_r_e_d, _Alloc > │ │ │ │ - &__x, _c_o_n_s_t _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t< _Value, ___H_a_s_h, ___P_r_e_d, _Alloc > &__y) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s _Value , _c_l_a_s_s ___H_a_s_h , _c_l_a_s_s ___P_r_e_d , _c_l_a_s_s _Alloc > │ │ │ │ -bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (_c_o_n_s_t _u_n_o_r_d_e_r_e_d___s_e_t< _Value, ___H_a_s_h, ___P_r_e_d, _Alloc > │ │ │ │ - &__x, _c_o_n_s_t _u_n_o_r_d_e_r_e_d___s_e_t< _Value, ___H_a_s_h, ___P_r_e_d, _Alloc > &__y) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s _Value , _c_l_a_s_s ___H_a_s_h , _c_l_a_s_s ___P_r_e_d , _c_l_a_s_s _Alloc > │ │ │ │ -_v_o_i_d  _s_t_d_:_:_s_w_a_p (_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t< _Value, ___H_a_s_h, ___P_r_e_d, _Alloc > &__x, │ │ │ │ - _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t< _Value, ___H_a_s_h, ___P_r_e_d, _Alloc > &__y) noexcept │ │ │ │ +template<_c_l_a_s_s ___K_e_y , _c_l_a_s_s _Tp , _c_l_a_s_s ___H_a_s_h , _c_l_a_s_s ___P_r_e_d , _c_l_a_s_s _Alloc > │ │ │ │ +bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (_c_o_n_s_t _u_n_o_r_d_e_r_e_d___m_a_p< ___K_e_y, _Tp, ___H_a_s_h, ___P_r_e_d, _Alloc > │ │ │ │ + &__x, _c_o_n_s_t _u_n_o_r_d_e_r_e_d___m_a_p< ___K_e_y, _Tp, ___H_a_s_h, ___P_r_e_d, _Alloc > &__y) │ │ │ │ +  │ │ │ │ +template<_c_l_a_s_s ___K_e_y , _c_l_a_s_s _Tp , _c_l_a_s_s ___H_a_s_h , _c_l_a_s_s ___P_r_e_d , _c_l_a_s_s _Alloc > │ │ │ │ +bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (_c_o_n_s_t _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< ___K_e_y, _Tp, ___H_a_s_h, ___P_r_e_d, │ │ │ │ + _Alloc > &__x, _c_o_n_s_t _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< ___K_e_y, _Tp, ___H_a_s_h, ___P_r_e_d, _Alloc │ │ │ │ + > &__y) │ │ │ │ +  │ │ │ │ +template<_c_l_a_s_s ___K_e_y , _c_l_a_s_s _Tp , _c_l_a_s_s ___H_a_s_h , _c_l_a_s_s ___P_r_e_d , _c_l_a_s_s _Alloc > │ │ │ │ +_v_o_i_d  _s_t_d_:_:_s_w_a_p (_u_n_o_r_d_e_r_e_d___m_a_p< ___K_e_y, _Tp, ___H_a_s_h, ___P_r_e_d, _Alloc > &__x, │ │ │ │ + _u_n_o_r_d_e_r_e_d___m_a_p< ___K_e_y, _Tp, ___H_a_s_h, ___P_r_e_d, _Alloc > &__y) noexcept(noexcept │ │ │ │ + (__x.swap(__y))) │ │ │ │ +  │ │ │ │ +template<_c_l_a_s_s ___K_e_y , _c_l_a_s_s _Tp , _c_l_a_s_s ___H_a_s_h , _c_l_a_s_s ___P_r_e_d , _c_l_a_s_s _Alloc > │ │ │ │ +_v_o_i_d  _s_t_d_:_:_s_w_a_p (_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< ___K_e_y, _Tp, ___H_a_s_h, ___P_r_e_d, _Alloc > &__x, │ │ │ │ + _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< ___K_e_y, _Tp, ___H_a_s_h, ___P_r_e_d, _Alloc > &__y) noexcept │ │ │ │ (noexcept(__x.swap(__y))) │ │ │ │   │ │ │ │ -template<_c_l_a_s_s _Value , _c_l_a_s_s ___H_a_s_h , _c_l_a_s_s ___P_r_e_d , _c_l_a_s_s _Alloc > │ │ │ │ -_v_o_i_d  _s_t_d_:_:_s_w_a_p (_u_n_o_r_d_e_r_e_d___s_e_t< _Value, ___H_a_s_h, ___P_r_e_d, _Alloc > &__x, │ │ │ │ - _u_n_o_r_d_e_r_e_d___s_e_t< _Value, ___H_a_s_h, ___P_r_e_d, _Alloc > &__y) noexcept(noexcept │ │ │ │ - (__x.swap(__y))) │ │ │ │ +template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ +_RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = _RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ + > _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 >, __iter_val_t< │ │ │ │ + ___I_n_p_u_t_I_t_e_r_a_t_o_r >, _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 > >, _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 > >, ___A_l_l_o_c_a_t_o_r > │ │ │ │   │ │ │ │ template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ _RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiisseett (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, │ │ │ │ - _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t< int >::size_type, ___A_l_l_o_c_a_t_o_r) -> _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 >::value_type, _h_a_s_h< _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 >::value_type >, _e_q_u_a_l___t_o< _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 >::value_type >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, _t_y_p_e_n_a_m_e │ │ │ │ + _u_n_o_r_d_e_r_e_d___m_a_p< int, int >::size_type, ___A_l_l_o_c_a_t_o_r) -> _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 >, __iter_val_t< ___I_n_p_u_t_I_t_e_r_a_t_o_r >, _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 > >, _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 │ │ │ │ + > >, ___A_l_l_o_c_a_t_o_r > │ │ │ │   │ │ │ │ template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___H_a_s_h , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , │ │ │ │ _t_y_p_e_n_a_m_e = _RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = │ │ │ │ _RequireNotAllocatorOrIntegral<_Hash>, _t_y_p_e_n_a_m_e = │ │ │ │ _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiisseett (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, │ │ │ │ - _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t< int >::size_type, ___H_a_s_h, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ - > _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 >:: │ │ │ │ - value_type, ___H_a_s_h, _e_q_u_a_l___t_o< _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 >:: │ │ │ │ - value_type >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___H_a_s_h = hash::value_type>, _t_y_p_e_n_a_m_e ___P_r_e_d = │ │ │ │ -equal_to::value_type>, _t_y_p_e_n_a_m_e │ │ │ │ -___A_l_l_o_c_a_t_o_r = allocator::value_type>, │ │ │ │ -_t_y_p_e_n_a_m_e = _RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, _t_y_p_e_n_a_m_e │ │ │ │ + _u_n_o_r_d_e_r_e_d___m_a_p< int, int >::size_type, ___H_a_s_h, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ + > _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 >, __iter_val_t< │ │ │ │ + ___I_n_p_u_t_I_t_e_r_a_t_o_r >, ___H_a_s_h, _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 > >, │ │ │ │ + ___A_l_l_o_c_a_t_o_r > │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___H_a_s_h = │ │ │ │ +hash<__iter_key_t<_InputIterator>>, _t_y_p_e_n_a_m_e ___P_r_e_d = │ │ │ │ +equal_to<__iter_key_t<_InputIterator>>, _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r = │ │ │ │ +allocator<__iter_to_alloc_t<_InputIterator>>, _t_y_p_e_n_a_m_e = │ │ │ │ +_RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = │ │ │ │ _RequireNotAllocatorOrIntegral<_Hash>, _t_y_p_e_n_a_m_e = _RequireNotAllocator<_Pred>, │ │ │ │ _t_y_p_e_n_a_m_e = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiisseett (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, │ │ │ │ - _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t< int >::size_type={}, ___H_a_s_h=___H_a_s_h(), ___P_r_e_d=___P_r_e_d(), │ │ │ │ - ___A_l_l_o_c_a_t_o_r=___A_l_l_o_c_a_t_o_r()) -> _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 >::value_type, ___H_a_s_h, ___P_r_e_d, ___A_l_l_o_c_a_t_o_r > │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiisseett (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _Tp >, _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t< int │ │ │ │ - >::size_type, ___A_l_l_o_c_a_t_o_r) -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t< _Tp, _h_a_s_h< _Tp >, │ │ │ │ - _e_q_u_a_l___t_o< _Tp >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, _t_y_p_e_n_a_m_e │ │ │ │ + _u_n_o_r_d_e_r_e_d___m_a_p< int, int >::size_type={}, ___H_a_s_h=___H_a_s_h(), ___P_r_e_d=___P_r_e_d(), │ │ │ │ + ___A_l_l_o_c_a_t_o_r=___A_l_l_o_c_a_t_o_r()) -> _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 │ │ │ │ + >, __iter_val_t< ___I_n_p_u_t_I_t_e_r_a_t_o_r >, ___H_a_s_h, ___P_r_e_d, ___A_l_l_o_c_a_t_o_r > │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ +_RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< ___K_e_y, _Tp > >, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ + > _u_n_o_r_d_e_r_e_d___m_a_p< ___K_e_y, _Tp, _h_a_s_h< ___K_e_y >, _e_q_u_a_l___t_o< ___K_e_y >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ +_RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< ___K_e_y, _Tp > >, _t_y_p_e_n_a_m_e │ │ │ │ + _u_n_o_r_d_e_r_e_d___m_a_p< int, int >::size_type, ___A_l_l_o_c_a_t_o_r) -> _u_n_o_r_d_e_r_e_d___m_a_p< ___K_e_y, │ │ │ │ + _Tp, _h_a_s_h< ___K_e_y >, _e_q_u_a_l___t_o< ___K_e_y >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___H_a_s_h , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , │ │ │ │ +_t_y_p_e_n_a_m_e = _RequireNotAllocatorOrIntegral<_Hash>, _t_y_p_e_n_a_m_e = │ │ │ │ +_RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< ___K_e_y, _Tp > >, _t_y_p_e_n_a_m_e │ │ │ │ + _u_n_o_r_d_e_r_e_d___m_a_p< int, int >::size_type, ___H_a_s_h, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ + > _u_n_o_r_d_e_r_e_d___m_a_p< ___K_e_y, _Tp, ___H_a_s_h, _e_q_u_a_l___t_o< ___K_e_y >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___H_a_s_h = hash<_Key>, _t_y_p_e_n_a_m_e │ │ │ │ +___P_r_e_d = equal_to<_Key>, _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r = allocator>, │ │ │ │ +_t_y_p_e_n_a_m_e = _RequireNotAllocatorOrIntegral<_Hash>, _t_y_p_e_n_a_m_e = │ │ │ │ +_RequireNotAllocator<_Pred>, _t_y_p_e_n_a_m_e = _RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< ___K_e_y, _Tp > >, _t_y_p_e_n_a_m_e │ │ │ │ + _u_n_o_r_d_e_r_e_d___m_a_p< int, int >::size_type={}, ___H_a_s_h=___H_a_s_h(), ___P_r_e_d=___P_r_e_d(), │ │ │ │ + ___A_l_l_o_c_a_t_o_r=___A_l_l_o_c_a_t_o_r()) -> _u_n_o_r_d_e_r_e_d___m_a_p< ___K_e_y, _Tp, ___H_a_s_h, ___P_r_e_d, │ │ │ │ + ___A_l_l_o_c_a_t_o_r > │ │ │ │   │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___H_a_s_h , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiisseett (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _Tp >, _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t< int │ │ │ │ - >::size_type, ___H_a_s_h, ___A_l_l_o_c_a_t_o_r) -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t< _Tp, ___H_a_s_h, │ │ │ │ - _e_q_u_a_l___t_o< _Tp >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___H_a_s_h = hash<_Tp>, _t_y_p_e_n_a_m_e ___P_r_e_d = │ │ │ │ -equal_to<_Tp>, _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r = allocator<_Tp>, _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, _t_y_p_e_n_a_m_e = _RequireNotAllocator<_Pred>, │ │ │ │ -_t_y_p_e_n_a_m_e = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiisseett (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _Tp >, _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t< int │ │ │ │ - >::size_type={}, ___H_a_s_h=___H_a_s_h(), ___P_r_e_d=___P_r_e_d(), ___A_l_l_o_c_a_t_o_r=___A_l_l_o_c_a_t_o_r()) - │ │ │ │ - > _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t< _Tp, ___H_a_s_h, ___P_r_e_d, ___A_l_l_o_c_a_t_o_r > │ │ │ │ +template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ +_RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = _RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ + > _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 >, __iter_val_t< │ │ │ │ + ___I_n_p_u_t_I_t_e_r_a_t_o_r >, _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 > >, _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 > >, ___A_l_l_o_c_a_t_o_r > │ │ │ │   │ │ │ │ template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ _RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__sseett (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, _u_n_o_r_d_e_r_e_d___s_e_t< int │ │ │ │ - >::size_type, ___A_l_l_o_c_a_t_o_r) -> _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 >::value_type, _h_a_s_h< _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 >::value_type >, _e_q_u_a_l___t_o< _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 >::value_type >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, │ │ │ │ + _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< int, int >::size_type, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ + > _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 >, __iter_val_t< │ │ │ │ + ___I_n_p_u_t_I_t_e_r_a_t_o_r >, _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 > >, _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 > >, ___A_l_l_o_c_a_t_o_r > │ │ │ │   │ │ │ │ template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___H_a_s_h , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , │ │ │ │ _t_y_p_e_n_a_m_e = _RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = │ │ │ │ _RequireNotAllocatorOrIntegral<_Hash>, _t_y_p_e_n_a_m_e = │ │ │ │ _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__sseett (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, _u_n_o_r_d_e_r_e_d___s_e_t< int │ │ │ │ - >::size_type, ___H_a_s_h, ___A_l_l_o_c_a_t_o_r) -> _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 >::value_type, ___H_a_s_h, _e_q_u_a_l___t_o< _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 >::value_type >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___H_a_s_h = hash::value_type>, _t_y_p_e_n_a_m_e ___P_r_e_d = │ │ │ │ -equal_to::value_type>, _t_y_p_e_n_a_m_e │ │ │ │ -___A_l_l_o_c_a_t_o_r = allocator::value_type>, │ │ │ │ -_t_y_p_e_n_a_m_e = _RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, _t_y_p_e_n_a_m_e = _RequireNotAllocator<_Pred>, │ │ │ │ -_t_y_p_e_n_a_m_e = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__sseett (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, _u_n_o_r_d_e_r_e_d___s_e_t< int │ │ │ │ - >::size_type={}, ___H_a_s_h=___H_a_s_h(), ___P_r_e_d=___P_r_e_d(), ___A_l_l_o_c_a_t_o_r=___A_l_l_o_c_a_t_o_r()) - │ │ │ │ - > _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 >::value_type, │ │ │ │ - ___H_a_s_h, ___P_r_e_d, ___A_l_l_o_c_a_t_o_r > │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__sseett (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _Tp >, _u_n_o_r_d_e_r_e_d___s_e_t< int >:: │ │ │ │ - size_type, ___A_l_l_o_c_a_t_o_r) -> _u_n_o_r_d_e_r_e_d___s_e_t< _Tp, _h_a_s_h< _Tp >, _e_q_u_a_l___t_o< _Tp │ │ │ │ - >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___H_a_s_h , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__sseett (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _Tp >, _u_n_o_r_d_e_r_e_d___s_e_t< int >:: │ │ │ │ - size_type, ___H_a_s_h, ___A_l_l_o_c_a_t_o_r) -> _u_n_o_r_d_e_r_e_d___s_e_t< _Tp, ___H_a_s_h, _e_q_u_a_l___t_o< _Tp │ │ │ │ - >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___H_a_s_h = hash<_Tp>, _t_y_p_e_n_a_m_e ___P_r_e_d = │ │ │ │ -equal_to<_Tp>, _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r = allocator<_Tp>, _t_y_p_e_n_a_m_e = │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, │ │ │ │ + _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< int, int >::size_type, ___H_a_s_h, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ + > _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 >, __iter_val_t< │ │ │ │ + ___I_n_p_u_t_I_t_e_r_a_t_o_r >, ___H_a_s_h, _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 > >, │ │ │ │ + ___A_l_l_o_c_a_t_o_r > │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___H_a_s_h = │ │ │ │ +hash<__iter_key_t<_InputIterator>>, _t_y_p_e_n_a_m_e ___P_r_e_d = │ │ │ │ +equal_to<__iter_key_t<_InputIterator>>, _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r = │ │ │ │ +allocator<__iter_to_alloc_t<_InputIterator>>, _t_y_p_e_n_a_m_e = │ │ │ │ +_RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = │ │ │ │ _RequireNotAllocatorOrIntegral<_Hash>, _t_y_p_e_n_a_m_e = _RequireNotAllocator<_Pred>, │ │ │ │ _t_y_p_e_n_a_m_e = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__sseett (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _Tp >, _u_n_o_r_d_e_r_e_d___s_e_t< int >:: │ │ │ │ - size_type={}, ___H_a_s_h=___H_a_s_h(), ___P_r_e_d=___P_r_e_d(), ___A_l_l_o_c_a_t_o_r=___A_l_l_o_c_a_t_o_r()) - │ │ │ │ - > _u_n_o_r_d_e_r_e_d___s_e_t< _Tp, ___H_a_s_h, ___P_r_e_d, ___A_l_l_o_c_a_t_o_r > │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, │ │ │ │ + _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< int, int >::size_type={}, ___H_a_s_h=___H_a_s_h(), ___P_r_e_d=___P_r_e_d │ │ │ │ + (), ___A_l_l_o_c_a_t_o_r=___A_l_l_o_c_a_t_o_r()) -> _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 >, __iter_val_t< ___I_n_p_u_t_I_t_e_r_a_t_o_r >, ___H_a_s_h, ___P_r_e_d, │ │ │ │ + ___A_l_l_o_c_a_t_o_r > │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ +_RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< ___K_e_y, _Tp > >, │ │ │ │ + ___A_l_l_o_c_a_t_o_r) -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< ___K_e_y, _Tp, _h_a_s_h< ___K_e_y >, _e_q_u_a_l___t_o< │ │ │ │ + ___K_e_y >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ +_RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< ___K_e_y, _Tp > >, │ │ │ │ + _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< int, int >::size_type, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ + > _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< ___K_e_y, _Tp, _h_a_s_h< ___K_e_y >, _e_q_u_a_l___t_o< ___K_e_y >, │ │ │ │ + ___A_l_l_o_c_a_t_o_r > │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___H_a_s_h , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , │ │ │ │ +_t_y_p_e_n_a_m_e = _RequireNotAllocatorOrIntegral<_Hash>, _t_y_p_e_n_a_m_e = │ │ │ │ +_RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< ___K_e_y, _Tp > >, │ │ │ │ + _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< int, int >::size_type, ___H_a_s_h, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ + > _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< ___K_e_y, _Tp, ___H_a_s_h, _e_q_u_a_l___t_o< ___K_e_y >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___H_a_s_h = hash<_Key>, _t_y_p_e_n_a_m_e │ │ │ │ +___P_r_e_d = equal_to<_Key>, _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r = allocator>, │ │ │ │ +_t_y_p_e_n_a_m_e = _RequireNotAllocatorOrIntegral<_Hash>, _t_y_p_e_n_a_m_e = │ │ │ │ +_RequireNotAllocator<_Pred>, _t_y_p_e_n_a_m_e = _RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< ___K_e_y, _Tp > >, │ │ │ │ + _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< int, int >::size_type={}, ___H_a_s_h=___H_a_s_h(), ___P_r_e_d=___P_r_e_d │ │ │ │ + (), ___A_l_l_o_c_a_t_o_r=___A_l_l_o_c_a_t_o_r()) -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< ___K_e_y, _Tp, ___H_a_s_h, │ │ │ │ + ___P_r_e_d, ___A_l_l_o_c_a_t_o_r > │ │ │ │   │ │ │ │ ********** 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 _u_n_o_r_d_e_r_e_d___m_a_p_._h. │ │ │ │ * _b_i_t_s │ │ │ │ - * _u_n_o_r_d_e_r_e_d___s_e_t_._h │ │ │ │ + * _u_n_o_r_d_e_r_e_d___m_a_p_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00386.js │ │ │ ├── js-beautify {} │ │ │ │ @@ -1,4 +1,4 @@ │ │ │ │ var a00386 = [ │ │ │ │ - ["__umset_traits", "a00386.html#a82ea41b760d4cfe35fb4ce095415a24a", null], │ │ │ │ - ["__uset_traits", "a00386.html#a39fcc5869a652c651d6911a64a020e21", null] │ │ │ │ + ["__umap_traits", "a00386.html#a84b02064179c0ef21d0189a7bf15803b", null], │ │ │ │ + ["__ummap_traits", "a00386.html#a1a55f2ace43a0a61a859367d227d245f", null] │ │ │ │ ]; │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00386_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: unordered_set.h Source File │ │ │ +libstdc++: unordered_map.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,18 +45,18 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
unordered_set.h
│ │ │ +
unordered_map.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// unordered_set implementation -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// unordered_map implementation -*- C++ -*-
│ │ │
2
│ │ │
3// Copyright (C) 2010-2025 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)
│ │ │ @@ -72,2528 +72,2907 @@ │ │ │
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 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_set}
│ │ │ +
27 * Do not attempt to use it directly. @headername{unordered_map}
│ │ │
28 */
│ │ │
29
│ │ │ -
30#ifndef _UNORDERED_SET_H
│ │ │ -
31#define _UNORDERED_SET_H
│ │ │ +
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
│ │ │ +
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.
│ │ │ +
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.
│ │ │ +
46 /// Base types for unordered_map.
│ │ │
47 template<bool _Cache>
│ │ │ -
48 using __uset_traits = __detail::_Hashtable_traits<_Cache, true, true>;
│ │ │ +
48 using __umap_traits = __detail::_Hashtable_traits<_Cache, false, true>;
│ │ │
49
│ │ │ -
50 template<typename _Value,
│ │ │ -
51 typename _Hash = hash<_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>,
│ │ │ - │ │ │ -
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>
│ │ │ +
50 template<typename _Key,
│ │ │ +
51 typename _Tp,
│ │ │ +
52 typename _Hash = hash<_Key>,
│ │ │ +
53 typename _Pred = std::equal_to<_Key>,
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
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>,
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
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<_Value>.
│ │ │ +
95 * @tparam _Pred Predicate function object type, defaults
│ │ │ +
96 * to equal_to<_Value>.
│ │ │ +
97 * @tparam _Alloc Allocator type, defaults to
│ │ │ +
98 * std::allocator<std::pair<const _Key, _Tp>>.
│ │ │
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 {
│ │ │ - │ │ │ -
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>
│ │ │ -
│ │ │ - │ │ │ -
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.
│ │ │ - │ │ │ +
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 {
│ │ │ + │ │ │ +
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>
│ │ │ +
│ │ │ + │ │ │ +
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 /**
│ │ │ -
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 */
│ │ │ - │ │ │ -
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 */
│ │ │ - │ │ │ -
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 template<typename _InputIterator>
│ │ │ -
249 unordered_set(_InputIterator __first, _InputIterator __last,
│ │ │ -
250 size_type __n,
│ │ │ -
251 const allocator_type& __a)
│ │ │ -
252 : unordered_set(__first, __last, __n, hasher(), key_equal(), __a)
│ │ │ -
253 { }
│ │ │ -
254
│ │ │ -
255 template<typename _InputIterator>
│ │ │ -
256 unordered_set(_InputIterator __first, _InputIterator __last,
│ │ │ -
257 size_type __n, const hasher& __hf,
│ │ │ -
258 const allocator_type& __a)
│ │ │ -
259 : unordered_set(__first, __last, __n, __hf, key_equal(), __a)
│ │ │ -
260 { }
│ │ │ -
261
│ │ │ -
262 unordered_set(initializer_list<value_type> __l,
│ │ │ -
263 size_type __n,
│ │ │ -
264 const allocator_type& __a)
│ │ │ -
265 : unordered_set(__l, __n, hasher(), key_equal(), __a)
│ │ │ -
266 { }
│ │ │ +
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 */
│ │ │ + │ │ │ +
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 */
│ │ │ + │ │ │ +
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 template<typename _InputIterator>
│ │ │ +
255 unordered_map(_InputIterator __first, _InputIterator __last,
│ │ │ +
256 size_type __n,
│ │ │ +
257 const allocator_type& __a)
│ │ │ +
258 : unordered_map(__first, __last, __n, hasher(), key_equal(), __a)
│ │ │ +
259 { }
│ │ │ +
260
│ │ │ +
261 template<typename _InputIterator>
│ │ │ +
262 unordered_map(_InputIterator __first, _InputIterator __last,
│ │ │ +
263 size_type __n, const hasher& __hf,
│ │ │ +
264 const allocator_type& __a)
│ │ │ +
265 : unordered_map(__first, __last, __n, __hf, key_equal(), __a)
│ │ │ +
266 { }
│ │ │
267
│ │ │ -
268 unordered_set(initializer_list<value_type> __l,
│ │ │ -
269 size_type __n, const hasher& __hf,
│ │ │ -
270 const allocator_type& __a)
│ │ │ -
271 : unordered_set(__l, __n, __hf, key_equal(), __a)
│ │ │ +
268 unordered_map(initializer_list<value_type> __l,
│ │ │ +
269 size_type __n,
│ │ │ +
270 const allocator_type& __a)
│ │ │ +
271 : unordered_map(__l, __n, hasher(), key_equal(), __a)
│ │ │
272 { }
│ │ │
273
│ │ │ -
274#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
275 /**
│ │ │ -
276 * @brief Builds an %unordered_set from a range.
│ │ │ -
277 * @since C++23
│ │ │ -
278 * @param __rg An input range of elements that can be converted to
│ │ │ -
279 * the set's value type.
│ │ │ -
280 * @param __n Minimal initial number of buckets.
│ │ │ -
281 * @param __hf A hash functor.
│ │ │ -
282 * @param __eql A key equality functor.
│ │ │ -
283 * @param __a An allocator object.
│ │ │ -
284 *
│ │ │ -
285 * Create an %unordered_set consisting of copies of the elements in the
│ │ │ -
286 * range. This is linear in N (where N is `std::ranges::size(__rg)`).
│ │ │ -
287 */
│ │ │ -
288 template<__detail::__container_compatible_range<_Value> _Rg>
│ │ │ -
289 unordered_set(from_range_t, _Rg&& __rg,
│ │ │ -
290 size_type __n = 0,
│ │ │ -
291 const hasher& __hf = hasher(),
│ │ │ -
292 const key_equal& __eql = key_equal(),
│ │ │ -
293 const allocator_type& __a = allocator_type())
│ │ │ -
294 : _M_h(__n, __hf, __eql, __a)
│ │ │ -
295 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
296
│ │ │ -
297 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
298 // 2713. More missing allocator-extended constructors for unordered container
│ │ │ -
299 template<__detail::__container_compatible_range<_Value> _Rg>
│ │ │ -
300 unordered_set(from_range_t, _Rg&& __rg, const allocator_type& __a)
│ │ │ -
301 : _M_h(0, hasher(), key_equal(), __a)
│ │ │ -
302 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
303
│ │ │ -
304 template<__detail::__container_compatible_range<_Value> _Rg>
│ │ │ -
305 unordered_set(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ -
306 const allocator_type& __a)
│ │ │ -
307 : _M_h(__n, hasher(), key_equal(), __a)
│ │ │ +
274 unordered_map(initializer_list<value_type> __l,
│ │ │ +
275 size_type __n, const hasher& __hf,
│ │ │ +
276 const allocator_type& __a)
│ │ │ +
277 : unordered_map(__l, __n, __hf, key_equal(), __a)
│ │ │ +
278 { }
│ │ │ +
279
│ │ │ +
280#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
281 /**
│ │ │ +
282 * @brief Builds an %unordered_map from a range.
│ │ │ +
283 * @since C++23
│ │ │ +
284 * @param __rg An input range of elements that can be converted to
│ │ │ +
285 * the maps's value type.
│ │ │ +
286 * @param __n Minimal initial number of buckets.
│ │ │ +
287 * @param __hf A hash functor.
│ │ │ +
288 * @param __eql A key equality functor.
│ │ │ +
289 * @param __a An allocator object.
│ │ │ +
290 *
│ │ │ +
291 * Create an %unordered_map consisting of copies of the elements in the
│ │ │ +
292 * range. This is linear in N (where N is `std::ranges::size(__rg)`).
│ │ │ +
293 */
│ │ │ +
294 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ +
295 unordered_map(from_range_t, _Rg&& __rg,
│ │ │ +
296 size_type __n = 0,
│ │ │ +
297 const hasher& __hf = hasher(),
│ │ │ +
298 const key_equal& __eql = key_equal(),
│ │ │ +
299 const allocator_type& __a = allocator_type())
│ │ │ +
300 : _M_h(__n, __hf, __eql, __a)
│ │ │ +
301 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ +
302
│ │ │ +
303 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
304 // 2713. More missing allocator-extended constructors for unordered containers
│ │ │ +
305 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ +
306 unordered_map(from_range_t, _Rg&& __rg, const allocator_type& __a)
│ │ │ +
307 : _M_h(0, hasher(), key_equal(), __a)
│ │ │
308 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │
309
│ │ │ -
310 template<__detail::__container_compatible_range<_Value> _Rg>
│ │ │ -
311 unordered_set(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ -
312 const hasher& __hf, const allocator_type& __a)
│ │ │ -
313 : _M_h(__n, __hf, key_equal(), __a)
│ │ │ +
310 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ +
311 unordered_map(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ +
312 const allocator_type& __a)
│ │ │ +
313 : _M_h(__n, hasher(), key_equal(), __a)
│ │ │
314 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
315#endif
│ │ │ -
316
│ │ │ -
317 /// Copy assignment operator.
│ │ │ - │ │ │ -
319 operator=(const unordered_set&) = default;
│ │ │ -
320
│ │ │ -
321 /// Move assignment operator.
│ │ │ - │ │ │ - │ │ │ -
324
│ │ │ -
325 /**
│ │ │ -
326 * @brief %Unordered_set list assignment operator.
│ │ │ -
327 * @param __l An initializer_list.
│ │ │ -
328 *
│ │ │ -
329 * This function fills an %unordered_set with copies of the elements in
│ │ │ -
330 * the initializer list @a __l.
│ │ │ -
331 *
│ │ │ -
332 * Note that the assignment completely changes the %unordered_set and
│ │ │ -
333 * that the resulting %unordered_set's size is the same as the number
│ │ │ -
334 * of elements assigned.
│ │ │ -
335 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
338 {
│ │ │ -
339 _M_h = __l;
│ │ │ -
340 return *this;
│ │ │ -
341 }
│ │ │ -
│ │ │ -
342
│ │ │ -
343 /// Returns the allocator object used by the %unordered_set.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
346 { return _M_h.get_allocator(); }
│ │ │ -
│ │ │ -
347
│ │ │ -
348 // size and capacity:
│ │ │ -
349
│ │ │ -
350 /// Returns true if the %unordered_set is empty.
│ │ │ -
351 _GLIBCXX_NODISCARD bool
│ │ │ -
│ │ │ -
352 empty() const noexcept
│ │ │ -
353 { return _M_h.empty(); }
│ │ │ -
│ │ │ -
354
│ │ │ -
355 /// Returns the size of the %unordered_set.
│ │ │ - │ │ │ -
│ │ │ -
357 size() const noexcept
│ │ │ -
358 { return _M_h.size(); }
│ │ │ -
│ │ │ -
359
│ │ │ -
360 /// Returns the maximum size of the %unordered_set.
│ │ │ - │ │ │ -
│ │ │ -
362 max_size() const noexcept
│ │ │ -
363 { return _M_h.max_size(); }
│ │ │ -
│ │ │ -
364
│ │ │ -
365 // iterators.
│ │ │ -
366
│ │ │ -
367 ///@{
│ │ │ -
368 /**
│ │ │ -
369 * Returns a read-only (constant) iterator that points to the first
│ │ │ -
370 * element in the %unordered_set.
│ │ │ -
371 */
│ │ │ - │ │ │ -
│ │ │ -
373 begin() noexcept
│ │ │ -
374 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
375
│ │ │ - │ │ │ -
│ │ │ -
377 begin() const noexcept
│ │ │ -
378 { return _M_h.begin(); }
│ │ │ +
315
│ │ │ +
316 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ +
317 unordered_map(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ +
318 const hasher& __hf, const allocator_type& __a)
│ │ │ +
319 : _M_h(__n, __hf, key_equal(), __a)
│ │ │ +
320 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ +
321#endif
│ │ │ +
322
│ │ │ +
323 /// Copy assignment operator.
│ │ │ + │ │ │ +
325 operator=(const unordered_map&) = default;
│ │ │ +
326
│ │ │ +
327 /// Move assignment operator.
│ │ │ + │ │ │ + │ │ │ +
330
│ │ │ +
331 /**
│ │ │ +
332 * @brief %Unordered_map list assignment operator.
│ │ │ +
333 * @param __l An initializer_list.
│ │ │ +
334 *
│ │ │ +
335 * This function fills an %unordered_map with copies of the elements in
│ │ │ +
336 * the initializer list @a __l.
│ │ │ +
337 *
│ │ │ +
338 * Note that the assignment completely changes the %unordered_map and
│ │ │ +
339 * that the resulting %unordered_map's size is the same as the number
│ │ │ +
340 * of elements assigned.
│ │ │ +
341 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
344 {
│ │ │ +
345 _M_h = __l;
│ │ │ +
346 return *this;
│ │ │ +
347 }
│ │ │ +
│ │ │ +
348
│ │ │ +
349 /// Returns the allocator object used by the %unordered_map.
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
352 { return _M_h.get_allocator(); }
│ │ │ +
│ │ │ +
353
│ │ │ +
354 // size and capacity:
│ │ │ +
355
│ │ │ +
356 /// Returns true if the %unordered_map is empty.
│ │ │ +
357 _GLIBCXX_NODISCARD bool
│ │ │ +
│ │ │ +
358 empty() const noexcept
│ │ │ +
359 { return _M_h.empty(); }
│ │ │ +
│ │ │ +
360
│ │ │ +
361 /// Returns the size of the %unordered_map.
│ │ │ + │ │ │ +
│ │ │ +
363 size() const noexcept
│ │ │ +
364 { return _M_h.size(); }
│ │ │ +
│ │ │ +
365
│ │ │ +
366 /// Returns the maximum size of the %unordered_map.
│ │ │ + │ │ │ +
│ │ │ +
368 max_size() const noexcept
│ │ │ +
369 { return _M_h.max_size(); }
│ │ │ +
│ │ │ +
370
│ │ │ +
371 // iterators.
│ │ │ +
372
│ │ │ +
373 /**
│ │ │ +
374 * Returns a read/write iterator that points to the first element in the
│ │ │ +
375 * %unordered_map.
│ │ │ +
376 */
│ │ │ + │ │ │ +
│ │ │ +
378 begin() noexcept
│ │ │ +
379 { return _M_h.begin(); }
│ │ │
│ │ │ -
379 ///@}
│ │ │ -
380
│ │ │ +
380
│ │ │
381 ///@{
│ │ │
382 /**
│ │ │ -
383 * Returns a read-only (constant) iterator that points one past the last
│ │ │ -
384 * element in the %unordered_set.
│ │ │ +
383 * Returns a read-only (constant) iterator that points to the first
│ │ │ +
384 * element in the %unordered_map.
│ │ │
385 */
│ │ │ - │ │ │ + │ │ │
│ │ │ -
387 end() noexcept
│ │ │ -
388 { return _M_h.end(); }
│ │ │ +
387 begin() const noexcept
│ │ │ +
388 { return _M_h.begin(); }
│ │ │
│ │ │
389
│ │ │ - │ │ │ + │ │ │
│ │ │ -
391 end() const noexcept
│ │ │ -
392 { return _M_h.end(); }
│ │ │ +
391 cbegin() const noexcept
│ │ │ +
392 { return _M_h.begin(); }
│ │ │
│ │ │
393 ///@}
│ │ │
394
│ │ │
395 /**
│ │ │ -
396 * Returns a read-only (constant) iterator that points to the first
│ │ │ -
397 * element in the %unordered_set.
│ │ │ +
396 * Returns a read/write iterator that points one past the last element in
│ │ │ +
397 * the %unordered_map.
│ │ │
398 */
│ │ │ - │ │ │ + │ │ │
│ │ │ -
400 cbegin() const noexcept
│ │ │ -
401 { return _M_h.begin(); }
│ │ │ +
400 end() noexcept
│ │ │ +
401 { return _M_h.end(); }
│ │ │
│ │ │
402
│ │ │ -
403 /**
│ │ │ -
404 * Returns a read-only (constant) iterator that points one past the last
│ │ │ -
405 * element in the %unordered_set.
│ │ │ -
406 */
│ │ │ - │ │ │ -
│ │ │ -
408 cend() const noexcept
│ │ │ -
409 { return _M_h.end(); }
│ │ │ -
│ │ │ -
410
│ │ │ -
411 // modifiers.
│ │ │ -
412
│ │ │ -
413 /**
│ │ │ -
414 * @brief Attempts to build and insert an element into the
│ │ │ -
415 * %unordered_set.
│ │ │ -
416 * @param __args Arguments used to generate an element.
│ │ │ -
417 * @return A pair, of which the first element is an iterator that points
│ │ │ -
418 * to the possibly inserted element, and the second is a bool
│ │ │ -
419 * that is true if the element was actually inserted.
│ │ │ -
420 *
│ │ │ -
421 * This function attempts to build and insert an element into the
│ │ │ -
422 * %unordered_set. An %unordered_set relies on unique keys and thus an
│ │ │ -
423 * element is only inserted if it is not already present in the
│ │ │ -
424 * %unordered_set.
│ │ │ -
425 *
│ │ │ -
426 * Insertion requires amortized constant time.
│ │ │ -
427 */
│ │ │ -
428 template<typename... _Args>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
431 { return _M_h.emplace(std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
432
│ │ │ -
433 /**
│ │ │ -
434 * @brief Attempts to insert an element into the %unordered_set.
│ │ │ -
435 * @param __pos An iterator that serves as a hint as to where the
│ │ │ -
436 * element should be inserted.
│ │ │ -
437 * @param __args Arguments used to generate the element to be
│ │ │ -
438 * inserted.
│ │ │ -
439 * @return An iterator that points to the element with key equivalent to
│ │ │ -
440 * the one generated from @a __args (may or may not be the
│ │ │ -
441 * element itself).
│ │ │ -
442 *
│ │ │ -
443 * This function is not concerned about whether the insertion took place,
│ │ │ -
444 * and thus does not return a boolean like the single-argument emplace()
│ │ │ -
445 * does. Note that the first parameter is only a hint and can
│ │ │ -
446 * potentially improve the performance of the insertion process. A bad
│ │ │ -
447 * hint would cause no gains in efficiency.
│ │ │ -
448 *
│ │ │ -
449 * For more on @a hinting, see:
│ │ │ -
450 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
451 *
│ │ │ -
452 * Insertion requires amortized constant time.
│ │ │ -
453 */
│ │ │ -
454 template<typename... _Args>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
457 { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
458
│ │ │ -
459 ///@{
│ │ │ -
460 /**
│ │ │ -
461 * @brief Attempts to insert an element into the %unordered_set.
│ │ │ -
462 * @param __x Element to be inserted.
│ │ │ -
463 * @return A pair, of which the first element is an iterator that points
│ │ │ -
464 * to the possibly inserted element, and the second is a bool
│ │ │ -
465 * that is true if the element was actually inserted.
│ │ │ -
466 *
│ │ │ -
467 * This function attempts to insert an element into the %unordered_set.
│ │ │ -
468 * An %unordered_set relies on unique keys and thus an element is only
│ │ │ -
469 * inserted if it is not already present in the %unordered_set.
│ │ │ -
470 *
│ │ │ -
471 * Insertion requires amortized constant time.
│ │ │ -
472 */
│ │ │ - │ │ │ -
│ │ │ -
474 insert(const value_type& __x)
│ │ │ -
475 { return _M_h.insert(__x); }
│ │ │ -
│ │ │ -
476
│ │ │ - │ │ │ +
403 ///@{
│ │ │ +
404 /**
│ │ │ +
405 * Returns a read-only (constant) iterator that points one past the last
│ │ │ +
406 * element in the %unordered_map.
│ │ │ +
407 */
│ │ │ + │ │ │ +
│ │ │ +
409 end() const noexcept
│ │ │ +
410 { return _M_h.end(); }
│ │ │ +
│ │ │ +
411
│ │ │ + │ │ │ +
│ │ │ +
413 cend() const noexcept
│ │ │ +
414 { return _M_h.end(); }
│ │ │ +
│ │ │ +
415 ///@}
│ │ │ +
416
│ │ │ +
417 // modifiers.
│ │ │ +
418
│ │ │ +
419 /**
│ │ │ +
420 * @brief Attempts to build and insert a std::pair into the
│ │ │ +
421 * %unordered_map.
│ │ │ +
422 *
│ │ │ +
423 * @param __args Arguments used to generate a new pair instance (see
│ │ │ +
424 * std::piecewise_contruct for passing arguments to each
│ │ │ +
425 * part of the pair constructor).
│ │ │ +
426 *
│ │ │ +
427 * @return A pair, of which the first element is an iterator that points
│ │ │ +
428 * to the possibly inserted pair, and the second is a bool that
│ │ │ +
429 * is true if the pair was actually inserted.
│ │ │ +
430 *
│ │ │ +
431 * This function attempts to build and insert a (key, value) %pair into
│ │ │ +
432 * the %unordered_map.
│ │ │ +
433 * An %unordered_map relies on unique keys and thus a %pair is only
│ │ │ +
434 * inserted if its first element (the key) is not already present in the
│ │ │ +
435 * %unordered_map.
│ │ │ +
436 *
│ │ │ +
437 * Insertion requires amortized constant time.
│ │ │ +
438 */
│ │ │ +
439 template<typename... _Args>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
442 { return _M_h.emplace(std::forward<_Args>(__args)...); }
│ │ │ +
│ │ │ +
443
│ │ │ +
444 /**
│ │ │ +
445 * @brief Attempts to build and insert a std::pair into the
│ │ │ +
446 * %unordered_map.
│ │ │ +
447 *
│ │ │ +
448 * @param __pos An iterator that serves as a hint as to where the pair
│ │ │ +
449 * should be inserted.
│ │ │ +
450 * @param __args Arguments used to generate a new pair instance (see
│ │ │ +
451 * std::piecewise_contruct for passing arguments to each
│ │ │ +
452 * part of the pair constructor).
│ │ │ +
453 * @return An iterator that points to the element with key of the
│ │ │ +
454 * std::pair built from @a __args (may or may not be that
│ │ │ +
455 * std::pair).
│ │ │ +
456 *
│ │ │ +
457 * This function is not concerned about whether the insertion took place,
│ │ │ +
458 * and thus does not return a boolean like the single-argument emplace()
│ │ │ +
459 * does.
│ │ │ +
460 * Note that the first parameter is only a hint and can potentially
│ │ │ +
461 * improve the performance of the insertion process. A bad hint would
│ │ │ +
462 * cause no gains in efficiency.
│ │ │ +
463 *
│ │ │ +
464 * See
│ │ │ +
465 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ +
466 * for more on @a hinting.
│ │ │ +
467 *
│ │ │ +
468 * Insertion requires amortized constant time.
│ │ │ +
469 */
│ │ │ +
470 template<typename... _Args>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
473 { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
│ │ │ +
│ │ │ +
474
│ │ │ +
475#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ +
476 /// Extract a node.
│ │ │ +
477 node_type
│ │ │
│ │ │ - │ │ │ -
479 { return _M_h.insert(std::move(__x)); }
│ │ │ -
│ │ │ -
480 ///@}
│ │ │ -
481
│ │ │ -
482 ///@{
│ │ │ -
483 /**
│ │ │ -
484 * @brief Attempts to insert an element into the %unordered_set.
│ │ │ -
485 * @param __hint An iterator that serves as a hint as to where the
│ │ │ -
486 * element should be inserted.
│ │ │ -
487 * @param __x Element to be inserted.
│ │ │ -
488 * @return An iterator that points to the element with key of
│ │ │ -
489 * @a __x (may or may not be the element passed in).
│ │ │ -
490 *
│ │ │ -
491 * This function is not concerned about whether the insertion took place,
│ │ │ -
492 * and thus does not return a boolean like the single-argument insert()
│ │ │ -
493 * does. Note that the first parameter is only a hint and can
│ │ │ -
494 * potentially improve the performance of the insertion process. A bad
│ │ │ -
495 * hint would cause no gains in efficiency.
│ │ │ -
496 *
│ │ │ -
497 * For more on @a hinting, see:
│ │ │ -
498 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
499 *
│ │ │ -
500 * Insertion requires amortized constant.
│ │ │ -
501 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
504 { return _M_h.insert(__hint, __x); }
│ │ │ -
│ │ │ -
505
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
508 { return _M_h.insert(__hint, std::move(__x)); }
│ │ │ -
│ │ │ -
509 ///@}
│ │ │ -
510
│ │ │ -
511 /**
│ │ │ -
512 * @brief A template function that attempts to insert a range of
│ │ │ -
513 * elements.
│ │ │ -
514 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
515 * inserted.
│ │ │ -
516 * @param __last Iterator pointing to the end of the range.
│ │ │ -
517 *
│ │ │ -
518 * Complexity similar to that of the range constructor.
│ │ │ -
519 */
│ │ │ -
520 template<typename _InputIterator>
│ │ │ -
521 void
│ │ │ -
│ │ │ - │ │ │ -
523 { _M_h.insert(__first, __last); }
│ │ │ -
│ │ │ -
524
│ │ │ -
525 /**
│ │ │ -
526 * @brief Attempts to insert a list of elements into the %unordered_set.
│ │ │ -
527 * @param __l A std::initializer_list<value_type> of elements
│ │ │ -
528 * to be inserted.
│ │ │ -
529 *
│ │ │ -
530 * Complexity similar to that of the range constructor.
│ │ │ -
531 */
│ │ │ -
532 void
│ │ │ -
│ │ │ - │ │ │ -
534 { _M_h.insert(__l); }
│ │ │ -
│ │ │ -
535
│ │ │ -
536#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
537 /**
│ │ │ -
538 * @brief Inserts a range of elements.
│ │ │ -
539 * @since C++23
│ │ │ -
540 * @param __rg An input range of elements that can be converted to
│ │ │ -
541 * the set's value type.
│ │ │ -
542 */
│ │ │ -
543 template<__detail::__container_compatible_range<_Value> _Rg>
│ │ │ -
544 void
│ │ │ - │ │ │ -
546 {
│ │ │ -
547 auto __first = ranges::begin(__rg);
│ │ │ -
548 const auto __last = ranges::end(__rg);
│ │ │ -
549 for (; __first != __last; ++__first)
│ │ │ -
550 _M_h.emplace(*__first);
│ │ │ -
551 }
│ │ │ -
552#endif
│ │ │ -
553
│ │ │ -
554#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
555 /// Extract a node.
│ │ │ -
556 node_type
│ │ │ -
│ │ │ - │ │ │ -
558 {
│ │ │ -
559 __glibcxx_assert(__pos != end());
│ │ │ -
560 return _M_h.extract(__pos);
│ │ │ -
561 }
│ │ │ -
│ │ │ -
562
│ │ │ -
563 /// Extract a node.
│ │ │ -
564 node_type
│ │ │ -
│ │ │ - │ │ │ -
566 { return _M_h.extract(__key); }
│ │ │ -
│ │ │ -
567
│ │ │ -
568 /// Re-insert an extracted node.
│ │ │ -
569 insert_return_type
│ │ │ -
│ │ │ -
570 insert(node_type&& __nh)
│ │ │ -
571 { return _M_h._M_reinsert_node(std::move(__nh)); }
│ │ │ -
│ │ │ -
572
│ │ │ -
573 /// Re-insert an extracted node.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
576 { return _M_h._M_reinsert_node(std::move(__nh)).position; }
│ │ │ -
│ │ │ -
577#endif // node_extract
│ │ │ -
578
│ │ │ -
579 ///@{
│ │ │ -
580 /**
│ │ │ -
581 * @brief Erases an element from an %unordered_set.
│ │ │ -
582 * @param __position An iterator pointing to the element to be erased.
│ │ │ -
583 * @return An iterator pointing to the element immediately following
│ │ │ -
584 * @a __position prior to the element being erased. If no such
│ │ │ -
585 * element exists, end() is returned.
│ │ │ -
586 *
│ │ │ -
587 * This function erases an element, pointed to by the given iterator,
│ │ │ -
588 * from an %unordered_set. Note that this function only erases the
│ │ │ -
589 * element, and that if the element is itself a pointer, the pointed-to
│ │ │ -
590 * memory is not touched in any way. Managing the pointer is the user's
│ │ │ -
591 * responsibility.
│ │ │ -
592 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
595 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
596
│ │ │ -
597 // LWG 2059.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
600 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
601 ///@}
│ │ │ -
602
│ │ │ -
603 /**
│ │ │ -
604 * @brief Erases elements according to the provided key.
│ │ │ -
605 * @param __x Key of element to be erased.
│ │ │ -
606 * @return The number of elements erased.
│ │ │ -
607 *
│ │ │ -
608 * This function erases all the elements located by the given key from
│ │ │ -
609 * an %unordered_set. For an %unordered_set the result of this function
│ │ │ -
610 * can only be 0 (not present) or 1 (present).
│ │ │ -
611 * Note that this function only erases the element, and that if
│ │ │ -
612 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ -
613 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
614 */
│ │ │ - │ │ │ -
│ │ │ -
616 erase(const key_type& __x)
│ │ │ -
617 { return _M_h.erase(__x); }
│ │ │ -
│ │ │ -
618
│ │ │ -
619 /**
│ │ │ -
620 * @brief Erases a [__first,__last) range of elements from an
│ │ │ -
621 * %unordered_set.
│ │ │ -
622 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
623 * erased.
│ │ │ -
624 * @param __last Iterator pointing to the end of the range to
│ │ │ -
625 * be erased.
│ │ │ -
626 * @return The iterator @a __last.
│ │ │ -
627 *
│ │ │ -
628 * This function erases a sequence of elements from an %unordered_set.
│ │ │ -
629 * Note that this function only erases the element, and that if
│ │ │ -
630 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ -
631 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
632 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
635 { return _M_h.erase(__first, __last); }
│ │ │ -
│ │ │ -
636
│ │ │ -
637 /**
│ │ │ -
638 * Erases all elements in an %unordered_set. Note that this function only
│ │ │ -
639 * erases the elements, and that if the elements themselves are pointers,
│ │ │ -
640 * the pointed-to memory is not touched in any way. Managing the pointer
│ │ │ -
641 * is the user's responsibility.
│ │ │ + │ │ │ +
479 {
│ │ │ +
480 __glibcxx_assert(__pos != end());
│ │ │ +
481 return _M_h.extract(__pos);
│ │ │ +
482 }
│ │ │ +
│ │ │ +
483
│ │ │ +
484 /// Extract a node.
│ │ │ +
485 node_type
│ │ │ +
│ │ │ + │ │ │ +
487 { return _M_h.extract(__key); }
│ │ │ +
│ │ │ +
488
│ │ │ +
489 /// Re-insert an extracted node.
│ │ │ +
490 insert_return_type
│ │ │ +
│ │ │ +
491 insert(node_type&& __nh)
│ │ │ +
492 { return _M_h._M_reinsert_node(std::move(__nh)); }
│ │ │ +
│ │ │ +
493
│ │ │ +
494 /// Re-insert an extracted node.
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
497 { return _M_h._M_reinsert_node(std::move(__nh)).position; }
│ │ │ +
│ │ │ +
498#endif // node_extract
│ │ │ +
499
│ │ │ +
500#ifdef __glibcxx_unordered_map_try_emplace // C++ >= 17 && HOSTED
│ │ │ +
501 /**
│ │ │ +
502 * @brief Attempts to build and insert a std::pair into the
│ │ │ +
503 * %unordered_map.
│ │ │ +
504 *
│ │ │ +
505 * @param __k Key to use for finding a possibly existing pair in
│ │ │ +
506 * the unordered_map.
│ │ │ +
507 * @param __args Arguments used to generate the .second for a
│ │ │ +
508 * new pair instance.
│ │ │ +
509 *
│ │ │ +
510 * @return A pair, of which the first element is an iterator that points
│ │ │ +
511 * to the possibly inserted pair, and the second is a bool that
│ │ │ +
512 * is true if the pair was actually inserted.
│ │ │ +
513 *
│ │ │ +
514 * This function attempts to build and insert a (key, value) %pair into
│ │ │ +
515 * the %unordered_map.
│ │ │ +
516 * An %unordered_map relies on unique keys and thus a %pair is only
│ │ │ +
517 * inserted if its first element (the key) is not already present in the
│ │ │ +
518 * %unordered_map.
│ │ │ +
519 * If a %pair is not inserted, this function has no effect.
│ │ │ +
520 *
│ │ │ +
521 * Insertion requires amortized constant time.
│ │ │ +
522 */
│ │ │ +
523 template <typename... _Args>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
526 {
│ │ │ +
527 return _M_h.try_emplace(cend(), __k, std::forward<_Args>(__args)...);
│ │ │ +
528 }
│ │ │ +
│ │ │ +
529
│ │ │ +
530 // move-capable overload
│ │ │ +
531 template <typename... _Args>
│ │ │ + │ │ │ + │ │ │ +
534 {
│ │ │ +
535 return _M_h.try_emplace(cend(), std::move(__k),
│ │ │ + │ │ │ +
537 }
│ │ │ +
538
│ │ │ +
539 /**
│ │ │ +
540 * @brief Attempts to build and insert a std::pair into the
│ │ │ +
541 * %unordered_map.
│ │ │ +
542 *
│ │ │ +
543 * @param __hint An iterator that serves as a hint as to where the pair
│ │ │ +
544 * should be inserted.
│ │ │ +
545 * @param __k Key to use for finding a possibly existing pair in
│ │ │ +
546 * the unordered_map.
│ │ │ +
547 * @param __args Arguments used to generate the .second for a
│ │ │ +
548 * new pair instance.
│ │ │ +
549 * @return An iterator that points to the element with key of the
│ │ │ +
550 * std::pair built from @a __args (may or may not be that
│ │ │ +
551 * std::pair).
│ │ │ +
552 *
│ │ │ +
553 * This function is not concerned about whether the insertion took place,
│ │ │ +
554 * and thus does not return a boolean like the single-argument emplace()
│ │ │ +
555 * does. However, if insertion did not take place,
│ │ │ +
556 * this function has no effect.
│ │ │ +
557 * Note that the first parameter is only a hint and can potentially
│ │ │ +
558 * improve the performance of the insertion process. A bad hint would
│ │ │ +
559 * cause no gains in efficiency.
│ │ │ +
560 *
│ │ │ +
561 * See
│ │ │ +
562 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ +
563 * for more on @a hinting.
│ │ │ +
564 *
│ │ │ +
565 * Insertion requires amortized constant time.
│ │ │ +
566 */
│ │ │ +
567 template <typename... _Args>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
570 _Args&&... __args)
│ │ │ +
571 {
│ │ │ +
572 return _M_h.try_emplace(__hint, __k,
│ │ │ +
573 std::forward<_Args>(__args)...).first;
│ │ │ +
574 }
│ │ │ +
│ │ │ +
575
│ │ │ +
576 // move-capable overload
│ │ │ +
577 template <typename... _Args>
│ │ │ + │ │ │ + │ │ │ +
580 {
│ │ │ +
581 return _M_h.try_emplace(__hint, std::move(__k),
│ │ │ +
582 std::forward<_Args>(__args)...).first;
│ │ │ +
583 }
│ │ │ +
584#endif // __glibcxx_unordered_map_try_emplace
│ │ │ +
585
│ │ │ +
586 ///@{
│ │ │ +
587 /**
│ │ │ +
588 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ +
589
│ │ │ +
590 * @param __x Pair to be inserted (see std::make_pair for easy
│ │ │ +
591 * creation of pairs).
│ │ │ +
592 *
│ │ │ +
593 * @return A pair, of which the first element is an iterator that
│ │ │ +
594 * points to the possibly inserted pair, and the second is
│ │ │ +
595 * a bool that is true if the pair was actually inserted.
│ │ │ +
596 *
│ │ │ +
597 * This function attempts to insert a (key, value) %pair into the
│ │ │ +
598 * %unordered_map. An %unordered_map relies on unique keys and thus a
│ │ │ +
599 * %pair is only inserted if its first element (the key) is not already
│ │ │ +
600 * present in the %unordered_map.
│ │ │ +
601 *
│ │ │ +
602 * Insertion requires amortized constant time.
│ │ │ +
603 */
│ │ │ + │ │ │ +
│ │ │ +
605 insert(const value_type& __x)
│ │ │ +
606 { return _M_h.insert(__x); }
│ │ │ +
│ │ │ +
607
│ │ │ +
608 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
609 // 2354. Unnecessary copying when inserting into maps with braced-init
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
612 { return _M_h.insert(std::move(__x)); }
│ │ │ +
│ │ │ +
613
│ │ │ +
614 template<typename _Pair>
│ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ +
618 { return _M_h.emplace(std::forward<_Pair>(__x)); }
│ │ │ +
│ │ │ +
619 ///@}
│ │ │ +
620
│ │ │ +
621 ///@{
│ │ │ +
622 /**
│ │ │ +
623 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ +
624 * @param __hint An iterator that serves as a hint as to where the
│ │ │ +
625 * pair should be inserted.
│ │ │ +
626 * @param __x Pair to be inserted (see std::make_pair for easy creation
│ │ │ +
627 * of pairs).
│ │ │ +
628 * @return An iterator that points to the element with key of
│ │ │ +
629 * @a __x (may or may not be the %pair passed in).
│ │ │ +
630 *
│ │ │ +
631 * This function is not concerned about whether the insertion took place,
│ │ │ +
632 * and thus does not return a boolean like the single-argument insert()
│ │ │ +
633 * does. Note that the first parameter is only a hint and can
│ │ │ +
634 * potentially improve the performance of the insertion process. A bad
│ │ │ +
635 * hint would cause no gains in efficiency.
│ │ │ +
636 *
│ │ │ +
637 * See
│ │ │ +
638 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ +
639 * for more on @a hinting.
│ │ │ +
640 *
│ │ │ +
641 * Insertion requires amortized constant time.
│ │ │
642 */
│ │ │ -
643 void
│ │ │ + │ │ │
│ │ │ -
644 clear() noexcept
│ │ │ -
645 { _M_h.clear(); }
│ │ │ + │ │ │ +
645 { return _M_h.insert(__hint, __x); }
│ │ │
│ │ │ -
646
│ │ │ -
647 /**
│ │ │ -
648 * @brief Swaps data with another %unordered_set.
│ │ │ -
649 * @param __x An %unordered_set of the same element and allocator
│ │ │ -
650 * types.
│ │ │ -
651 *
│ │ │ -
652 * This exchanges the elements between two sets in constant time.
│ │ │ -
653 * Note that the global std::swap() function is specialized such that
│ │ │ -
654 * std::swap(s1,s2) will feed to this function.
│ │ │ -
655 */
│ │ │ -
656 void
│ │ │ -
│ │ │ - │ │ │ -
658 noexcept( noexcept(_M_h.swap(__x._M_h)) )
│ │ │ -
659 { _M_h.swap(__x._M_h); }
│ │ │ -
│ │ │ -
660
│ │ │ -
661#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
662 template<typename, typename, typename>
│ │ │ -
663 friend class std::_Hash_merge_helper;
│ │ │ -
664
│ │ │ -
665 template<typename _H2, typename _P2>
│ │ │ -
666 void
│ │ │ - │ │ │ -
668 {
│ │ │ - │ │ │ -
670 if (std::__addressof(__source) == this) [[__unlikely__]]
│ │ │ -
671 return;
│ │ │ -
672
│ │ │ - │ │ │ -
674 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ -
675 }
│ │ │ -
676
│ │ │ -
677 template<typename _H2, typename _P2>
│ │ │ -
678 void
│ │ │ -
679 merge(unordered_set<_Value, _H2, _P2, _Alloc>&& __source)
│ │ │ -
680 {
│ │ │ -
681 using _Merge_helper = _Hash_merge_helper<unordered_set, _H2, _P2>;
│ │ │ -
682 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ -
683 }
│ │ │ -
684
│ │ │ -
685 template<typename _H2, typename _P2>
│ │ │ -
686 void
│ │ │ -
687 merge(unordered_multiset<_Value, _H2, _P2, _Alloc>& __source)
│ │ │ -
688 {
│ │ │ -
689 using _Merge_helper = _Hash_merge_helper<unordered_set, _H2, _P2>;
│ │ │ -
690 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ -
691 }
│ │ │ -
692
│ │ │ -
693 template<typename _H2, typename _P2>
│ │ │ -
694 void
│ │ │ -
695 merge(unordered_multiset<_Value, _H2, _P2, _Alloc>&& __source)
│ │ │ -
696 { merge(__source); }
│ │ │ -
697#endif // node_extract
│ │ │ -
698
│ │ │ -
699 // observers.
│ │ │ -
700
│ │ │ -
701 /// Returns the hash functor object with which the %unordered_set was
│ │ │ -
702 /// constructed.
│ │ │ -
703 hasher
│ │ │ -
│ │ │ - │ │ │ -
705 { return _M_h.hash_function(); }
│ │ │ -
│ │ │ -
706
│ │ │ -
707 /// Returns the key comparison object with which the %unordered_set was
│ │ │ -
708 /// constructed.
│ │ │ - │ │ │ -
│ │ │ -
710 key_eq() const
│ │ │ -
711 { return _M_h.key_eq(); }
│ │ │ -
│ │ │ -
712
│ │ │ -
713 // lookup.
│ │ │ -
714
│ │ │ -
715 ///@{
│ │ │ -
716 /**
│ │ │ -
717 * @brief Tries to locate an element in an %unordered_set.
│ │ │ -
718 * @param __x Element to be located.
│ │ │ -
719 * @return Iterator pointing to sought-after element, or end() if not
│ │ │ -
720 * found.
│ │ │ -
721 *
│ │ │ -
722 * This function takes a key and tries to locate the element with which
│ │ │ -
723 * the key matches. If successful the function returns an iterator
│ │ │ -
724 * pointing to the sought after element. If unsuccessful it returns the
│ │ │ -
725 * past-the-end ( @c end() ) iterator.
│ │ │ -
726 */
│ │ │ - │ │ │ -
│ │ │ -
728 find(const key_type& __x)
│ │ │ -
729 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
730
│ │ │ -
731#if __cplusplus > 201703L
│ │ │ -
732 template<typename _Kt>
│ │ │ -
733 auto
│ │ │ -
│ │ │ -
734 find(const _Kt& __k)
│ │ │ -
735 -> decltype(_M_h._M_find_tr(__k))
│ │ │ -
736 { return _M_h._M_find_tr(__k); }
│ │ │ -
│ │ │ -
737#endif
│ │ │ -
738
│ │ │ - │ │ │ -
│ │ │ -
740 find(const key_type& __x) const
│ │ │ -
741 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
742
│ │ │ -
743#if __cplusplus > 201703L
│ │ │ -
744 template<typename _Kt>
│ │ │ -
745 auto
│ │ │ -
│ │ │ -
746 find(const _Kt& __k) const
│ │ │ -
747 -> decltype(_M_h._M_find_tr(__k))
│ │ │ -
748 { return _M_h._M_find_tr(__k); }
│ │ │ -
│ │ │ -
749#endif
│ │ │ -
750 ///@}
│ │ │ -
751
│ │ │ -
752 ///@{
│ │ │ -
753 /**
│ │ │ -
754 * @brief Finds the number of elements.
│ │ │ -
755 * @param __x Element to located.
│ │ │ -
756 * @return Number of elements with specified key.
│ │ │ -
757 *
│ │ │ -
758 * This function only makes sense for unordered_multisets; for
│ │ │ -
759 * unordered_set the result will either be 0 (not present) or 1
│ │ │ -
760 * (present).
│ │ │ -
761 */
│ │ │ - │ │ │ -
│ │ │ -
763 count(const key_type& __x) const
│ │ │ -
764 { return _M_h.count(__x); }
│ │ │ -
│ │ │ -
765
│ │ │ -
766#if __cplusplus > 201703L
│ │ │ -
767 template<typename _Kt>
│ │ │ -
768 auto
│ │ │ -
│ │ │ -
769 count(const _Kt& __k) const
│ │ │ -
770 -> decltype(_M_h._M_count_tr(__k))
│ │ │ -
771 { return _M_h._M_count_tr(__k); }
│ │ │ -
│ │ │ -
772#endif
│ │ │ -
773 ///@}
│ │ │ -
774
│ │ │ -
775#if __cplusplus > 201703L
│ │ │ -
776 ///@{
│ │ │ -
777 /**
│ │ │ -
778 * @brief Finds whether an element with the given key exists.
│ │ │ -
779 * @param __x Key of elements to be located.
│ │ │ -
780 * @return True if there is any element with the specified key.
│ │ │ -
781 */
│ │ │ -
782 bool
│ │ │ -
│ │ │ -
783 contains(const key_type& __x) const
│ │ │ -
784 { return _M_h.find(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
785
│ │ │ -
786 template<typename _Kt>
│ │ │ -
787 auto
│ │ │ -
│ │ │ -
788 contains(const _Kt& __k) const
│ │ │ -
789 -> decltype(_M_h._M_find_tr(__k), void(), true)
│ │ │ -
790 { return _M_h._M_find_tr(__k) != _M_h.end(); }
│ │ │ -
│ │ │ -
791 ///@}
│ │ │ -
792#endif
│ │ │ -
793
│ │ │ -
794 ///@{
│ │ │ -
795 /**
│ │ │ -
796 * @brief Finds a subsequence matching given key.
│ │ │ -
797 * @param __x Key to be located.
│ │ │ -
798 * @return Pair of iterators that possibly points to the subsequence
│ │ │ -
799 * matching given key.
│ │ │ -
800 *
│ │ │ -
801 * This function probably only makes sense for multisets.
│ │ │ -
802 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
805 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
806
│ │ │ -
807#if __cplusplus > 201703L
│ │ │ -
808 template<typename _Kt>
│ │ │ -
809 auto
│ │ │ -
│ │ │ - │ │ │ -
811 -> decltype(_M_h._M_equal_range_tr(__k))
│ │ │ -
812 { return _M_h._M_equal_range_tr(__k); }
│ │ │ -
│ │ │ -
813#endif
│ │ │ -
814
│ │ │ - │ │ │ +
646
│ │ │ +
647 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
648 // 2354. Unnecessary copying when inserting into maps with braced-init
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
651 { return _M_h.insert(__hint, std::move(__x)); }
│ │ │ +
│ │ │ +
652
│ │ │ +
653 template<typename _Pair>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
656 { return _M_h.emplace_hint(__hint, std::forward<_Pair>(__x)); }
│ │ │ +
│ │ │ +
657 ///@}
│ │ │ +
658
│ │ │ +
659 /**
│ │ │ +
660 * @brief A template function that attempts to insert a range of
│ │ │ +
661 * elements.
│ │ │ +
662 * @param __first Iterator pointing to the start of the range to be
│ │ │ +
663 * inserted.
│ │ │ +
664 * @param __last Iterator pointing to the end of the range.
│ │ │ +
665 *
│ │ │ +
666 * Complexity similar to that of the range constructor.
│ │ │ +
667 */
│ │ │ +
668 template<typename _InputIterator>
│ │ │ +
669 void
│ │ │ +
│ │ │ + │ │ │ +
671 { _M_h.insert(__first, __last); }
│ │ │ +
│ │ │ +
672
│ │ │ +
673 /**
│ │ │ +
674 * @brief Attempts to insert a list of elements into the %unordered_map.
│ │ │ +
675 * @param __l A std::initializer_list<value_type> of elements
│ │ │ +
676 * to be inserted.
│ │ │ +
677 *
│ │ │ +
678 * Complexity similar to that of the range constructor.
│ │ │ +
679 */
│ │ │ +
680 void
│ │ │ +
│ │ │ + │ │ │ +
682 { _M_h.insert(__l); }
│ │ │ +
│ │ │ +
683
│ │ │ +
684#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
685 /**
│ │ │ +
686 * @brief Inserts a range of elements.
│ │ │ +
687 * @since C++23
│ │ │ +
688 * @param __rg An input range of elements that can be converted to
│ │ │ +
689 * the map's value type.
│ │ │ +
690 */
│ │ │ +
691 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ +
692 void
│ │ │ + │ │ │ +
694 {
│ │ │ +
695 auto __first = ranges::begin(__rg);
│ │ │ +
696 const auto __last = ranges::end(__rg);
│ │ │ +
697 for (; __first != __last; ++__first)
│ │ │ +
698 _M_h.emplace(*__first);
│ │ │ +
699 }
│ │ │ +
700#endif
│ │ │ +
701
│ │ │ +
702#ifdef __glibcxx_unordered_map_try_emplace // >= C++17 && HOSTED
│ │ │ +
703 /**
│ │ │ +
704 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ +
705 * @param __k Key to use for finding a possibly existing pair in
│ │ │ +
706 * the map.
│ │ │ +
707 * @param __obj Argument used to generate the .second for a pair
│ │ │ +
708 * instance.
│ │ │ +
709 *
│ │ │ +
710 * @return A pair, of which the first element is an iterator that
│ │ │ +
711 * points to the possibly inserted pair, and the second is
│ │ │ +
712 * a bool that is true if the pair was actually inserted.
│ │ │ +
713 *
│ │ │ +
714 * This function attempts to insert a (key, value) %pair into the
│ │ │ +
715 * %unordered_map. An %unordered_map relies on unique keys and thus a
│ │ │ +
716 * %pair is only inserted if its first element (the key) is not already
│ │ │ +
717 * present in the %unordered_map.
│ │ │ +
718 * If the %pair was already in the %unordered_map, the .second of
│ │ │ +
719 * the %pair is assigned from __obj.
│ │ │ +
720 *
│ │ │ +
721 * Insertion requires amortized constant time.
│ │ │ +
722 */
│ │ │ +
723 template <typename _Obj>
│ │ │ +
724 pair<iterator, bool>
│ │ │ +
│ │ │ + │ │ │ +
726 {
│ │ │ +
727 auto __ret = _M_h.try_emplace(cend(), __k,
│ │ │ + │ │ │ +
729 if (!__ret.second)
│ │ │ +
730 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ +
731 return __ret;
│ │ │ +
732 }
│ │ │ +
│ │ │ +
733
│ │ │ +
734 // move-capable overload
│ │ │ +
735 template <typename _Obj>
│ │ │ + │ │ │ + │ │ │ +
738 {
│ │ │ +
739 auto __ret = _M_h.try_emplace(cend(), std::move(__k),
│ │ │ + │ │ │ +
741 if (!__ret.second)
│ │ │ +
742 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ +
743 return __ret;
│ │ │ +
744 }
│ │ │ +
745
│ │ │ +
746 /**
│ │ │ +
747 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ +
748 * @param __hint An iterator that serves as a hint as to where the
│ │ │ +
749 * pair should be inserted.
│ │ │ +
750 * @param __k Key to use for finding a possibly existing pair in
│ │ │ +
751 * the unordered_map.
│ │ │ +
752 * @param __obj Argument used to generate the .second for a pair
│ │ │ +
753 * instance.
│ │ │ +
754 * @return An iterator that points to the element with key of
│ │ │ +
755 * @a __x (may or may not be the %pair passed in).
│ │ │ +
756 *
│ │ │ +
757 * This function is not concerned about whether the insertion took place,
│ │ │ +
758 * and thus does not return a boolean like the single-argument insert()
│ │ │ +
759 * does.
│ │ │ +
760 * If the %pair was already in the %unordered map, the .second of
│ │ │ +
761 * the %pair is assigned from __obj.
│ │ │ +
762 * Note that the first parameter is only a hint and can
│ │ │ +
763 * potentially improve the performance of the insertion process. A bad
│ │ │ +
764 * hint would cause no gains in efficiency.
│ │ │ +
765 *
│ │ │ +
766 * See
│ │ │ +
767 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ +
768 * for more on @a hinting.
│ │ │ +
769 *
│ │ │ +
770 * Insertion requires amortized constant time.
│ │ │ +
771 */
│ │ │ +
772 template <typename _Obj>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
775 _Obj&& __obj)
│ │ │ +
776 {
│ │ │ +
777 auto __ret = _M_h.try_emplace(__hint, __k, std::forward<_Obj>(__obj));
│ │ │ +
778 if (!__ret.second)
│ │ │ +
779 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ +
780 return __ret.first;
│ │ │ +
781 }
│ │ │ +
│ │ │ +
782
│ │ │ +
783 // move-capable overload
│ │ │ +
784 template <typename _Obj>
│ │ │ + │ │ │ + │ │ │ +
787 {
│ │ │ +
788 auto __ret = _M_h.try_emplace(__hint, std::move(__k),
│ │ │ + │ │ │ +
790 if (!__ret.second)
│ │ │ +
791 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ +
792 return __ret.first;
│ │ │ +
793 }
│ │ │ +
794#endif // unordered_map_try_emplace
│ │ │ +
795
│ │ │ +
796 ///@{
│ │ │ +
797 /**
│ │ │ +
798 * @brief Erases an element from an %unordered_map.
│ │ │ +
799 * @param __position An iterator pointing to the element to be erased.
│ │ │ +
800 * @return An iterator pointing to the element immediately following
│ │ │ +
801 * @a __position prior to the element being erased. If no such
│ │ │ +
802 * element exists, end() is returned.
│ │ │ +
803 *
│ │ │ +
804 * This function erases an element, pointed to by the given iterator,
│ │ │ +
805 * from an %unordered_map.
│ │ │ +
806 * Note that this function only erases the element, and that if the
│ │ │ +
807 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ +
808 * any way. Managing the pointer is the user's responsibility.
│ │ │ +
809 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
812 { return _M_h.erase(__position); }
│ │ │ +
│ │ │ +
813
│ │ │ +
814 // LWG 2059.
│ │ │ + │ │ │
│ │ │ -
816 equal_range(const key_type& __x) const
│ │ │ -
817 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
818
│ │ │ -
819#if __cplusplus > 201703L
│ │ │ -
820 template<typename _Kt>
│ │ │ -
821 auto
│ │ │ -
│ │ │ -
822 equal_range(const _Kt& __k) const
│ │ │ -
823 -> decltype(_M_h._M_equal_range_tr(__k))
│ │ │ -
824 { return _M_h._M_equal_range_tr(__k); }
│ │ │ -
│ │ │ -
825#endif
│ │ │ -
826 ///@}
│ │ │ -
827
│ │ │ -
828 // bucket interface.
│ │ │ -
829
│ │ │ -
830 /// Returns the number of buckets of the %unordered_set.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
833 { return _M_h.bucket_count(); }
│ │ │ -
│ │ │ -
834
│ │ │ -
835 /// Returns the maximum number of buckets of the %unordered_set.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
838 { return _M_h.max_bucket_count(); }
│ │ │ -
│ │ │ -
839
│ │ │ -
840 /*
│ │ │ -
841 * @brief Returns the number of elements in a given bucket.
│ │ │ -
842 * @param __n A bucket index.
│ │ │ -
843 * @return The number of elements in the bucket.
│ │ │ -
844 */
│ │ │ - │ │ │ -
846 bucket_size(size_type __n) const
│ │ │ -
847 { return _M_h.bucket_size(__n); }
│ │ │ -
848
│ │ │ -
849 /*
│ │ │ -
850 * @brief Returns the bucket index of a given element.
│ │ │ -
851 * @param __key A key instance.
│ │ │ -
852 * @return The key bucket index.
│ │ │ -
853 */
│ │ │ - │ │ │ -
855 bucket(const key_type& __key) const
│ │ │ -
856 { return _M_h.bucket(__key); }
│ │ │ -
857
│ │ │ -
858 ///@{
│ │ │ -
859 /**
│ │ │ -
860 * @brief Returns a read-only (constant) iterator pointing to the first
│ │ │ -
861 * bucket element.
│ │ │ -
862 * @param __n The bucket index.
│ │ │ -
863 * @return A read-only local iterator.
│ │ │ -
864 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
867 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
868
│ │ │ - │ │ │ -
│ │ │ -
870 begin(size_type __n) const
│ │ │ -
871 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
872
│ │ │ - │ │ │ -
│ │ │ -
874 cbegin(size_type __n) const
│ │ │ -
875 { return _M_h.cbegin(__n); }
│ │ │ -
│ │ │ -
876 ///@}
│ │ │ -
877
│ │ │ -
878 ///@{
│ │ │ -
879 /**
│ │ │ -
880 * @brief Returns a read-only (constant) iterator pointing to one past
│ │ │ -
881 * the last bucket elements.
│ │ │ -
882 * @param __n The bucket index.
│ │ │ -
883 * @return A read-only local iterator.
│ │ │ -
884 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
887 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
888
│ │ │ - │ │ │ -
│ │ │ -
890 end(size_type __n) const
│ │ │ -
891 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
892
│ │ │ - │ │ │ -
│ │ │ -
894 cend(size_type __n) const
│ │ │ -
895 { return _M_h.cend(__n); }
│ │ │ -
│ │ │ -
896 ///@}
│ │ │ -
897
│ │ │ -
898 // hash policy.
│ │ │ -
899
│ │ │ -
900 /// Returns the average number of elements per bucket.
│ │ │ -
901 float
│ │ │ -
│ │ │ - │ │ │ -
903 { return _M_h.load_factor(); }
│ │ │ -
│ │ │ -
904
│ │ │ -
905 /// Returns a positive number that the %unordered_set tries to keep the
│ │ │ -
906 /// load factor less than or equal to.
│ │ │ -
907 float
│ │ │ -
│ │ │ - │ │ │ -
909 { return _M_h.max_load_factor(); }
│ │ │ -
│ │ │ -
910
│ │ │ -
911 /**
│ │ │ -
912 * @brief Change the %unordered_set maximum load factor.
│ │ │ -
913 * @param __z The new maximum load factor.
│ │ │ -
914 */
│ │ │ -
915 void
│ │ │ -
│ │ │ - │ │ │ -
917 { _M_h.max_load_factor(__z); }
│ │ │ + │ │ │ +
817 { return _M_h.erase(__position); }
│ │ │
│ │ │ +
818 ///@}
│ │ │ +
819
│ │ │ +
820 /**
│ │ │ +
821 * @brief Erases elements according to the provided key.
│ │ │ +
822 * @param __x Key of element to be erased.
│ │ │ +
823 * @return The number of elements erased.
│ │ │ +
824 *
│ │ │ +
825 * This function erases all the elements located by the given key from
│ │ │ +
826 * an %unordered_map. For an %unordered_map the result of this function
│ │ │ +
827 * can only be 0 (not present) or 1 (present).
│ │ │ +
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 */
│ │ │ + │ │ │ +
│ │ │ +
833 erase(const key_type& __x)
│ │ │ +
834 { return _M_h.erase(__x); }
│ │ │ +
│ │ │ +
835
│ │ │ +
836 /**
│ │ │ +
837 * @brief Erases a [__first,__last) range of elements from an
│ │ │ +
838 * %unordered_map.
│ │ │ +
839 * @param __first Iterator pointing to the start of the range to be
│ │ │ +
840 * erased.
│ │ │ +
841 * @param __last Iterator pointing to the end of the range to
│ │ │ +
842 * be erased.
│ │ │ +
843 * @return The iterator @a __last.
│ │ │ +
844 *
│ │ │ +
845 * This function erases a sequence of elements from an %unordered_map.
│ │ │ +
846 * Note that this function only erases the elements, and that if
│ │ │ +
847 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ +
848 * in any way. Managing the pointer is the user's responsibility.
│ │ │ +
849 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
852 { return _M_h.erase(__first, __last); }
│ │ │ +
│ │ │ +
853
│ │ │ +
854 /**
│ │ │ +
855 * Erases all elements in an %unordered_map.
│ │ │ +
856 * Note that this function only erases the elements, and that if the
│ │ │ +
857 * elements themselves are pointers, the pointed-to memory is not touched
│ │ │ +
858 * in any way. Managing the pointer is the user's responsibility.
│ │ │ +
859 */
│ │ │ +
860 void
│ │ │ +
│ │ │ +
861 clear() noexcept
│ │ │ +
862 { _M_h.clear(); }
│ │ │ +
│ │ │ +
863
│ │ │ +
864 /**
│ │ │ +
865 * @brief Swaps data with another %unordered_map.
│ │ │ +
866 * @param __x An %unordered_map of the same element and allocator
│ │ │ +
867 * types.
│ │ │ +
868 *
│ │ │ +
869 * This exchanges the elements between two %unordered_map in constant
│ │ │ +
870 * time.
│ │ │ +
871 * Note that the global std::swap() function is specialized such that
│ │ │ +
872 * std::swap(m1,m2) will feed to this function.
│ │ │ +
873 */
│ │ │ +
874 void
│ │ │ +
│ │ │ + │ │ │ +
876 noexcept( noexcept(_M_h.swap(__x._M_h)) )
│ │ │ +
877 { _M_h.swap(__x._M_h); }
│ │ │ +
│ │ │ +
878
│ │ │ +
879#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ +
880 template<typename, typename, typename>
│ │ │ +
881 friend class std::_Hash_merge_helper;
│ │ │ +
882
│ │ │ +
883 template<typename _H2, typename _P2>
│ │ │ +
884 void
│ │ │ + │ │ │ +
886 {
│ │ │ + │ │ │ +
888 if (std::__addressof(__source) == this) [[__unlikely__]]
│ │ │ +
889 return;
│ │ │ +
890
│ │ │ + │ │ │ +
892 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ +
893 }
│ │ │ +
894
│ │ │ +
895 template<typename _H2, typename _P2>
│ │ │ +
896 void
│ │ │ +
897 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ +
898 {
│ │ │ +
899 using _Merge_helper = _Hash_merge_helper<unordered_map, _H2, _P2>;
│ │ │ +
900 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ +
901 }
│ │ │ +
902
│ │ │ +
903 template<typename _H2, typename _P2>
│ │ │ +
904 void
│ │ │ +
905 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>& __source)
│ │ │ +
906 {
│ │ │ +
907 using _Merge_helper = _Hash_merge_helper<unordered_map, _H2, _P2>;
│ │ │ +
908 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ +
909 }
│ │ │ +
910
│ │ │ +
911 template<typename _H2, typename _P2>
│ │ │ +
912 void
│ │ │ +
913 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ +
914 { merge(__source); }
│ │ │ +
915#endif // node_extract
│ │ │ +
916
│ │ │ +
917 // observers.
│ │ │
918
│ │ │ -
919 /**
│ │ │ -
920 * @brief May rehash the %unordered_set.
│ │ │ -
921 * @param __n The new number of buckets.
│ │ │ -
922 *
│ │ │ -
923 * Rehash will occur only if the new number of buckets respect the
│ │ │ -
924 * %unordered_set maximum load factor.
│ │ │ -
925 */
│ │ │ -
926 void
│ │ │ -
│ │ │ - │ │ │ -
928 { _M_h.rehash(__n); }
│ │ │ -
│ │ │ -
929
│ │ │ -
930 /**
│ │ │ -
931 * @brief Prepare the %unordered_set for a specified number of
│ │ │ -
932 * elements.
│ │ │ -
933 * @param __n Number of elements required.
│ │ │ -
934 *
│ │ │ -
935 * Same as rehash(ceil(n / max_load_factor())).
│ │ │ -
936 */
│ │ │ -
937 void
│ │ │ -
│ │ │ - │ │ │ -
939 { _M_h.reserve(__n); }
│ │ │ -
│ │ │ -
940
│ │ │ -
941 template<typename _Value1, typename _Hash1, typename _Pred1,
│ │ │ -
942 typename _Alloc1>
│ │ │ -
943 friend bool
│ │ │ - │ │ │ - │ │ │ -
946 };
│ │ │ -
│ │ │ -
947
│ │ │ -
948#if __cpp_deduction_guides >= 201606
│ │ │ -
949
│ │ │ -
950 template<typename _InputIterator,
│ │ │ -
951 typename _Hash =
│ │ │ -
952 hash<typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
953 typename _Pred =
│ │ │ -
954 equal_to<typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
955 typename _Allocator =
│ │ │ -
956 allocator<typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
957 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
958 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
959 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
960 typename = _RequireAllocator<_Allocator>>
│ │ │ -
961 unordered_set(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
963 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ -
964 -> unordered_set<typename iterator_traits<_InputIterator>::value_type,
│ │ │ -
965 _Hash, _Pred, _Allocator>;
│ │ │ -
966
│ │ │ -
967 template<typename _Tp, typename _Hash = hash<_Tp>,
│ │ │ -
968 typename _Pred = equal_to<_Tp>,
│ │ │ -
969 typename _Allocator = allocator<_Tp>,
│ │ │ -
970 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
971 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
972 typename = _RequireAllocator<_Allocator>>
│ │ │ -
973 unordered_set(initializer_list<_Tp>,
│ │ │ - │ │ │ -
975 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ -
976 -> unordered_set<_Tp, _Hash, _Pred, _Allocator>;
│ │ │ -
977
│ │ │ -
978 template<typename _InputIterator, typename _Allocator,
│ │ │ -
979 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
980 typename = _RequireAllocator<_Allocator>>
│ │ │ -
981 unordered_set(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
983 -> unordered_set<typename iterator_traits<_InputIterator>::value_type,
│ │ │ -
984 hash<
│ │ │ -
985 typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
986 equal_to<
│ │ │ -
987 typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
988 _Allocator>;
│ │ │ -
989
│ │ │ -
990 template<typename _InputIterator, typename _Hash, typename _Allocator,
│ │ │ -
991 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
992 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
993 typename = _RequireAllocator<_Allocator>>
│ │ │ -
994 unordered_set(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
996 _Hash, _Allocator)
│ │ │ -
997 -> unordered_set<typename iterator_traits<_InputIterator>::value_type,
│ │ │ -
998 _Hash,
│ │ │ -
999 equal_to<
│ │ │ -
1000 typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
1001 _Allocator>;
│ │ │ -
1002
│ │ │ -
1003 template<typename _Tp, typename _Allocator,
│ │ │ -
1004 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1005 unordered_set(initializer_list<_Tp>,
│ │ │ - │ │ │ -
1007 -> unordered_set<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>;
│ │ │ -
1008
│ │ │ -
1009 template<typename _Tp, typename _Hash, typename _Allocator,
│ │ │ -
1010 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1011 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1012 unordered_set(initializer_list<_Tp>,
│ │ │ -
1013 unordered_set<int>::size_type, _Hash, _Allocator)
│ │ │ -
1014 -> unordered_set<_Tp, _Hash, equal_to<_Tp>, _Allocator>;
│ │ │ -
1015
│ │ │ -
1016#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
1017 template<ranges::input_range _Rg,
│ │ │ -
1018 __not_allocator_like _Hash = hash<ranges::range_value_t<_Rg>>,
│ │ │ -
1019 __not_allocator_like _Pred = equal_to<ranges::range_value_t<_Rg>>,
│ │ │ -
1020 __allocator_like _Allocator = allocator<ranges::range_value_t<_Rg>>>
│ │ │ -
1021 unordered_set(from_range_t, _Rg&&, unordered_set<int>::size_type = {},
│ │ │ -
1022 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ -
1023 -> unordered_set<ranges::range_value_t<_Rg>, _Hash, _Pred, _Allocator>;
│ │ │ -
1024
│ │ │ -
1025 template<ranges::input_range _Rg,
│ │ │ -
1026 __allocator_like _Allocator>
│ │ │ -
1027 unordered_set(from_range_t, _Rg&&, unordered_set<int>::size_type,
│ │ │ -
1028 _Allocator)
│ │ │ -
1029 -> unordered_set<ranges::range_value_t<_Rg>,
│ │ │ -
1030 hash<ranges::range_value_t<_Rg>>,
│ │ │ -
1031 equal_to<ranges::range_value_t<_Rg>>,
│ │ │ -
1032 _Allocator>;
│ │ │ -
1033
│ │ │ -
1034 template<ranges::input_range _Rg,
│ │ │ -
1035 __allocator_like _Allocator>
│ │ │ -
1036 unordered_set(from_range_t, _Rg&&, _Allocator)
│ │ │ -
1037 -> unordered_set<ranges::range_value_t<_Rg>,
│ │ │ -
1038 hash<ranges::range_value_t<_Rg>>,
│ │ │ -
1039 equal_to<ranges::range_value_t<_Rg>>,
│ │ │ -
1040 _Allocator>;
│ │ │ -
1041
│ │ │ -
1042 template<ranges::input_range _Rg,
│ │ │ -
1043 __not_allocator_like _Hash,
│ │ │ -
1044 __allocator_like _Allocator>
│ │ │ -
1045 unordered_set(from_range_t, _Rg&&, unordered_set<int>::size_type,
│ │ │ -
1046 _Hash, _Allocator)
│ │ │ -
1047 -> unordered_set<ranges::range_value_t<_Rg>, _Hash,
│ │ │ -
1048 equal_to<ranges::range_value_t<_Rg>>,
│ │ │ -
1049 _Allocator>;
│ │ │ -
1050#endif
│ │ │ -
1051#endif
│ │ │ -
1052
│ │ │ -
1053 /**
│ │ │ -
1054 * @brief A standard container composed of equivalent keys
│ │ │ -
1055 * (possibly containing multiple of each key value) in which the
│ │ │ -
1056 * elements' keys are the elements themselves.
│ │ │ -
1057 *
│ │ │ -
1058 * @ingroup unordered_associative_containers
│ │ │ -
1059 * @headerfile unordered_set
│ │ │ -
1060 * @since C++11
│ │ │ -
1061 *
│ │ │ -
1062 * @tparam _Value Type of key objects.
│ │ │ -
1063 * @tparam _Hash Hashing function object type, defaults to hash<_Value>.
│ │ │ -
1064 * @tparam _Pred Predicate function object type, defaults
│ │ │ -
1065 * to equal_to<_Value>.
│ │ │ -
1066 * @tparam _Alloc Allocator type, defaults to allocator<_Key>.
│ │ │ -
1067 *
│ │ │ -
1068 * Meets the requirements of a <a href="tables.html#65">container</a>, and
│ │ │ -
1069 * <a href="tables.html#xx">unordered associative container</a>
│ │ │ -
1070 *
│ │ │ -
1071 * Base is _Hashtable, dispatched at compile time via template
│ │ │ -
1072 * alias __umset_hashtable.
│ │ │ -
1073 */
│ │ │ -
1074 template<typename _Value,
│ │ │ -
1075 typename _Hash = hash<_Value>,
│ │ │ -
1076 typename _Pred = equal_to<_Value>,
│ │ │ -
1077 typename _Alloc = allocator<_Value>>
│ │ │ -
│ │ │ - │ │ │ -
1079 {
│ │ │ - │ │ │ -
1081 _Hashtable _M_h;
│ │ │ -
1082
│ │ │ -
1083 public:
│ │ │ -
1084 // typedefs:
│ │ │ -
1085 ///@{
│ │ │ -
1086 /// Public typedefs.
│ │ │ -
1087 typedef typename _Hashtable::key_type key_type;
│ │ │ -
1088 typedef typename _Hashtable::value_type value_type;
│ │ │ -
1089 typedef typename _Hashtable::hasher hasher;
│ │ │ -
1090 typedef typename _Hashtable::key_equal key_equal;
│ │ │ -
1091 typedef typename _Hashtable::allocator_type allocator_type;
│ │ │ -
1092 ///@}
│ │ │ -
1093
│ │ │ -
1094 ///@{
│ │ │ -
1095 /// Iterator-related typedefs.
│ │ │ -
1096 typedef typename _Hashtable::pointer pointer;
│ │ │ -
1097 typedef typename _Hashtable::const_pointer const_pointer;
│ │ │ -
1098 typedef typename _Hashtable::reference reference;
│ │ │ -
1099 typedef typename _Hashtable::const_reference const_reference;
│ │ │ -
1100 typedef typename _Hashtable::iterator iterator;
│ │ │ -
1101 typedef typename _Hashtable::const_iterator const_iterator;
│ │ │ -
1102 typedef typename _Hashtable::local_iterator local_iterator;
│ │ │ -
1103 typedef typename _Hashtable::const_local_iterator const_local_iterator;
│ │ │ -
1104 typedef typename _Hashtable::size_type size_type;
│ │ │ -
1105 typedef typename _Hashtable::difference_type difference_type;
│ │ │ -
1106 ///@}
│ │ │ -
1107
│ │ │ -
1108#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
1109 using node_type = typename _Hashtable::node_type;
│ │ │ -
1110#endif
│ │ │ -
1111
│ │ │ -
1112 // construct/destroy/copy
│ │ │ -
1113
│ │ │ -
1114 /// Default constructor.
│ │ │ - │ │ │ -
1116
│ │ │ -
1117 /**
│ │ │ -
1118 * @brief Default constructor creates no elements.
│ │ │ -
1119 * @param __n Minimal initial number of buckets.
│ │ │ -
1120 * @param __hf A hash functor.
│ │ │ -
1121 * @param __eql A key equality functor.
│ │ │ -
1122 * @param __a An allocator object.
│ │ │ -
1123 */
│ │ │ -
1124 explicit
│ │ │ -
│ │ │ - │ │ │ -
1126 const hasher& __hf = hasher(),
│ │ │ -
1127 const key_equal& __eql = key_equal(),
│ │ │ -
1128 const allocator_type& __a = allocator_type())
│ │ │ -
1129 : _M_h(__n, __hf, __eql, __a)
│ │ │ -
1130 { }
│ │ │ -
│ │ │ -
1131
│ │ │ -
1132 /**
│ │ │ -
1133 * @brief Builds an %unordered_multiset from a range.
│ │ │ -
1134 * @param __first An input iterator.
│ │ │ -
1135 * @param __last An input iterator.
│ │ │ -
1136 * @param __n Minimal initial number of buckets.
│ │ │ -
1137 * @param __hf A hash functor.
│ │ │ -
1138 * @param __eql A key equality functor.
│ │ │ -
1139 * @param __a An allocator object.
│ │ │ -
1140 *
│ │ │ -
1141 * Create an %unordered_multiset consisting of copies of the elements
│ │ │ -
1142 * from [__first,__last). This is linear in N (where N is
│ │ │ -
1143 * distance(__first,__last)).
│ │ │ -
1144 */
│ │ │ -
1145 template<typename _InputIterator>
│ │ │ -
│ │ │ - │ │ │ -
1147 size_type __n = 0,
│ │ │ -
1148 const hasher& __hf = hasher(),
│ │ │ -
1149 const key_equal& __eql = key_equal(),
│ │ │ -
1150 const allocator_type& __a = allocator_type())
│ │ │ -
1151 : _M_h(__first, __last, __n, __hf, __eql, __a)
│ │ │ -
1152 { }
│ │ │ -
│ │ │ -
1153
│ │ │ -
1154 /// Copy constructor.
│ │ │ - │ │ │ -
1156
│ │ │ -
1157 /// Move constructor.
│ │ │ - │ │ │ -
1159
│ │ │ -
1160 /**
│ │ │ -
1161 * @brief Builds an %unordered_multiset from an initializer_list.
│ │ │ -
1162 * @param __l An initializer_list.
│ │ │ -
1163 * @param __n Minimal initial number of buckets.
│ │ │ -
1164 * @param __hf A hash functor.
│ │ │ -
1165 * @param __eql A key equality functor.
│ │ │ -
1166 * @param __a An allocator object.
│ │ │ -
1167 *
│ │ │ -
1168 * Create an %unordered_multiset consisting of copies of the elements in
│ │ │ -
1169 * the list. This is linear in N (where N is @a __l.size()).
│ │ │ -
1170 */
│ │ │ -
│ │ │ - │ │ │ -
1172 size_type __n = 0,
│ │ │ -
1173 const hasher& __hf = hasher(),
│ │ │ -
1174 const key_equal& __eql = key_equal(),
│ │ │ -
1175 const allocator_type& __a = allocator_type())
│ │ │ -
1176 : _M_h(__l, __n, __hf, __eql, __a)
│ │ │ -
1177 { }
│ │ │ -
│ │ │ -
1178
│ │ │ -
1179 /// Copy assignment operator.
│ │ │ - │ │ │ - │ │ │ -
1182
│ │ │ -
1183 /// Move assignment operator.
│ │ │ - │ │ │ - │ │ │ -
1186
│ │ │ -
1187 /**
│ │ │ -
1188 * @brief Creates an %unordered_multiset with no elements.
│ │ │ -
1189 * @param __a An allocator object.
│ │ │ -
1190 */
│ │ │ -
1191 explicit
│ │ │ -
│ │ │ - │ │ │ -
1193 : _M_h(__a)
│ │ │ -
1194 { }
│ │ │ -
│ │ │ -
1195
│ │ │ -
1196 /*
│ │ │ -
1197 * @brief Copy constructor with allocator argument.
│ │ │ -
1198 * @param __uset Input %unordered_multiset to copy.
│ │ │ -
1199 * @param __a An allocator object.
│ │ │ -
1200 */
│ │ │ - │ │ │ -
1202 const allocator_type& __a)
│ │ │ -
1203 : _M_h(__umset._M_h, __a)
│ │ │ -
1204 { }
│ │ │ -
1205
│ │ │ -
1206 /*
│ │ │ -
1207 * @brief Move constructor with allocator argument.
│ │ │ -
1208 * @param __umset Input %unordered_multiset to move.
│ │ │ -
1209 * @param __a An allocator object.
│ │ │ -
1210 */
│ │ │ - │ │ │ -
1212 const allocator_type& __a)
│ │ │ -
1213 noexcept( noexcept(_Hashtable(std::move(__umset._M_h), __a)) )
│ │ │ -
1214 : _M_h(std::move(__umset._M_h), __a)
│ │ │ -
1215 { }
│ │ │ -
1216
│ │ │ - │ │ │ -
1218 : unordered_multiset(__n, hasher(), key_equal(), __a)
│ │ │ -
1219 { }
│ │ │ -
1220
│ │ │ -
1221 unordered_multiset(size_type __n, const hasher& __hf,
│ │ │ -
1222 const allocator_type& __a)
│ │ │ -
1223 : unordered_multiset(__n, __hf, key_equal(), __a)
│ │ │ -
1224 { }
│ │ │ -
1225
│ │ │ -
1226 template<typename _InputIterator>
│ │ │ -
1227 unordered_multiset(_InputIterator __first, _InputIterator __last,
│ │ │ -
1228 size_type __n,
│ │ │ -
1229 const allocator_type& __a)
│ │ │ -
1230 : unordered_multiset(__first, __last, __n, hasher(), key_equal(), __a)
│ │ │ -
1231 { }
│ │ │ -
1232
│ │ │ -
1233 template<typename _InputIterator>
│ │ │ -
1234 unordered_multiset(_InputIterator __first, _InputIterator __last,
│ │ │ -
1235 size_type __n, const hasher& __hf,
│ │ │ -
1236 const allocator_type& __a)
│ │ │ -
1237 : unordered_multiset(__first, __last, __n, __hf, key_equal(), __a)
│ │ │ -
1238 { }
│ │ │ -
1239
│ │ │ -
1240 unordered_multiset(initializer_list<value_type> __l,
│ │ │ -
1241 size_type __n,
│ │ │ -
1242 const allocator_type& __a)
│ │ │ -
1243 : unordered_multiset(__l, __n, hasher(), key_equal(), __a)
│ │ │ -
1244 { }
│ │ │ -
1245
│ │ │ -
1246 unordered_multiset(initializer_list<value_type> __l,
│ │ │ -
1247 size_type __n, const hasher& __hf,
│ │ │ -
1248 const allocator_type& __a)
│ │ │ -
1249 : unordered_multiset(__l, __n, __hf, key_equal(), __a)
│ │ │ -
1250 { }
│ │ │ -
1251
│ │ │ -
1252#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
1253 /**
│ │ │ -
1254 * @brief Builds an %unordered_multiset from a range.
│ │ │ -
1255 * @since C++23
│ │ │ -
1256 * @param __rg An input range of elements that can be converted to
│ │ │ -
1257 * the set's value type.
│ │ │ -
1258 * @param __n Minimal initial number of buckets.
│ │ │ -
1259 * @param __hf A hash functor.
│ │ │ -
1260 * @param __eql A key equality functor.
│ │ │ -
1261 * @param __a An allocator object.
│ │ │ -
1262 *
│ │ │ -
1263 * Create an %unordered_multiset consisting of copies of the elements in the
│ │ │ -
1264 * range. This is linear in N (where N is `std::ranges::size(__rg)`).
│ │ │ -
1265 */
│ │ │ -
1266 template<__detail::__container_compatible_range<_Value> _Rg>
│ │ │ -
1267 unordered_multiset(from_range_t, _Rg&& __rg,
│ │ │ -
1268 size_type __n = 0,
│ │ │ -
1269 const hasher& __hf = hasher(),
│ │ │ -
1270 const key_equal& __eql = key_equal(),
│ │ │ -
1271 const allocator_type& __a = allocator_type())
│ │ │ -
1272 : _M_h(__n, __hf, __eql, __a)
│ │ │ -
1273 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
1274
│ │ │ -
1275
│ │ │ -
1276 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1277 // 2713. More missing allocator-extended constructors for unordered container
│ │ │ -
1278 template<__detail::__container_compatible_range<_Value> _Rg>
│ │ │ -
1279 unordered_multiset(from_range_t, _Rg&& __rg, const allocator_type& __a)
│ │ │ -
1280 : _M_h(0, hasher(), key_equal(), __a)
│ │ │ -
1281 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
1282
│ │ │ -
1283 template<__detail::__container_compatible_range<_Value> _Rg>
│ │ │ -
1284 unordered_multiset(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ -
1285 const allocator_type& __a)
│ │ │ -
1286 : _M_h(__n, hasher(), key_equal(), __a)
│ │ │ -
1287 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
1288
│ │ │ -
1289 template<__detail::__container_compatible_range<_Value> _Rg>
│ │ │ -
1290 unordered_multiset(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ -
1291 const hasher& __hf, const allocator_type& __a)
│ │ │ -
1292 : _M_h(__n, __hf, key_equal(), __a)
│ │ │ -
1293 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
1294#endif
│ │ │ -
1295
│ │ │ -
1296
│ │ │ -
1297 /**
│ │ │ -
1298 * @brief %Unordered_multiset list assignment operator.
│ │ │ -
1299 * @param __l An initializer_list.
│ │ │ -
1300 *
│ │ │ -
1301 * This function fills an %unordered_multiset with copies of the elements
│ │ │ -
1302 * in the initializer list @a __l.
│ │ │ -
1303 *
│ │ │ -
1304 * Note that the assignment completely changes the %unordered_multiset
│ │ │ -
1305 * and that the resulting %unordered_multiset's size is the same as the
│ │ │ -
1306 * number of elements assigned.
│ │ │ -
1307 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1310 {
│ │ │ -
1311 _M_h = __l;
│ │ │ -
1312 return *this;
│ │ │ -
1313 }
│ │ │ -
│ │ │ -
1314
│ │ │ -
1315 /// Returns the allocator object used by the %unordered_multiset.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1318 { return _M_h.get_allocator(); }
│ │ │ -
│ │ │ -
1319
│ │ │ -
1320 // size and capacity:
│ │ │ -
1321
│ │ │ -
1322 /// Returns true if the %unordered_multiset is empty.
│ │ │ -
1323 _GLIBCXX_NODISCARD bool
│ │ │ -
│ │ │ -
1324 empty() const noexcept
│ │ │ -
1325 { return _M_h.empty(); }
│ │ │ -
│ │ │ -
1326
│ │ │ -
1327 /// Returns the size of the %unordered_multiset.
│ │ │ -
1328 size_type
│ │ │ -
│ │ │ -
1329 size() const noexcept
│ │ │ -
1330 { return _M_h.size(); }
│ │ │ -
│ │ │ -
1331
│ │ │ -
1332 /// Returns the maximum size of the %unordered_multiset.
│ │ │ -
1333 size_type
│ │ │ -
│ │ │ -
1334 max_size() const noexcept
│ │ │ -
1335 { return _M_h.max_size(); }
│ │ │ -
│ │ │ -
1336
│ │ │ -
1337 // iterators.
│ │ │ -
1338
│ │ │ -
1339 ///@{
│ │ │ -
1340 /**
│ │ │ -
1341 * Returns a read-only (constant) iterator that points to the first
│ │ │ -
1342 * element in the %unordered_multiset.
│ │ │ -
1343 */
│ │ │ -
1344 iterator
│ │ │ -
│ │ │ -
1345 begin() noexcept
│ │ │ -
1346 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
1347
│ │ │ - │ │ │ -
│ │ │ -
1349 begin() const noexcept
│ │ │ -
1350 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
1351 ///@}
│ │ │ -
1352
│ │ │ -
1353 ///@{
│ │ │ -
1354 /**
│ │ │ -
1355 * Returns a read-only (constant) iterator that points one past the last
│ │ │ -
1356 * element in the %unordered_multiset.
│ │ │ -
1357 */
│ │ │ -
1358 iterator
│ │ │ -
│ │ │ -
1359 end() noexcept
│ │ │ -
1360 { return _M_h.end(); }
│ │ │ -
│ │ │ -
1361
│ │ │ - │ │ │ -
│ │ │ -
1363 end() const noexcept
│ │ │ -
1364 { return _M_h.end(); }
│ │ │ -
│ │ │ -
1365 ///@}
│ │ │ -
1366
│ │ │ -
1367 /**
│ │ │ -
1368 * Returns a read-only (constant) iterator that points to the first
│ │ │ -
1369 * element in the %unordered_multiset.
│ │ │ -
1370 */
│ │ │ - │ │ │ -
│ │ │ -
1372 cbegin() const noexcept
│ │ │ -
1373 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
1374
│ │ │ -
1375 /**
│ │ │ -
1376 * Returns a read-only (constant) iterator that points one past the last
│ │ │ -
1377 * element in the %unordered_multiset.
│ │ │ -
1378 */
│ │ │ - │ │ │ -
│ │ │ -
1380 cend() const noexcept
│ │ │ -
1381 { return _M_h.end(); }
│ │ │ -
│ │ │ -
1382
│ │ │ -
1383 // modifiers.
│ │ │ -
1384
│ │ │ -
1385 /**
│ │ │ -
1386 * @brief Builds and insert an element into the %unordered_multiset.
│ │ │ -
1387 * @param __args Arguments used to generate an element.
│ │ │ -
1388 * @return An iterator that points to the inserted element.
│ │ │ -
1389 *
│ │ │ -
1390 * Insertion requires amortized constant time.
│ │ │ -
1391 */
│ │ │ -
1392 template<typename... _Args>
│ │ │ -
1393 iterator
│ │ │ -
│ │ │ - │ │ │ -
1395 { return _M_h.emplace(std::forward<_Args>(__args)...); }
│ │ │ +
919 /// Returns the hash functor object with which the %unordered_map was
│ │ │ +
920 /// constructed.
│ │ │ +
921 hasher
│ │ │ +
│ │ │ + │ │ │ +
923 { return _M_h.hash_function(); }
│ │ │ +
│ │ │ +
924
│ │ │ +
925 /// Returns the key comparison object with which the %unordered_map was
│ │ │ +
926 /// constructed.
│ │ │ + │ │ │ +
│ │ │ +
928 key_eq() const
│ │ │ +
929 { return _M_h.key_eq(); }
│ │ │ +
│ │ │ +
930
│ │ │ +
931 // lookup.
│ │ │ +
932
│ │ │ +
933 ///@{
│ │ │ +
934 /**
│ │ │ +
935 * @brief Tries to locate an element in an %unordered_map.
│ │ │ +
936 * @param __x Key to be located.
│ │ │ +
937 * @return Iterator pointing to sought-after element, or end() if not
│ │ │ +
938 * found.
│ │ │ +
939 *
│ │ │ +
940 * This function takes a key and tries to locate the element with which
│ │ │ +
941 * the key matches. If successful the function returns an iterator
│ │ │ +
942 * pointing to the sought after element. If unsuccessful it returns the
│ │ │ +
943 * past-the-end ( @c end() ) iterator.
│ │ │ +
944 */
│ │ │ + │ │ │ +
│ │ │ +
946 find(const key_type& __x)
│ │ │ +
947 { return _M_h.find(__x); }
│ │ │ +
│ │ │ +
948
│ │ │ +
949#if __cplusplus > 201703L
│ │ │ +
950 template<typename _Kt>
│ │ │ +
951 auto
│ │ │ +
│ │ │ +
952 find(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x))
│ │ │ +
953 { return _M_h._M_find_tr(__x); }
│ │ │ +
│ │ │ +
954#endif
│ │ │ +
955
│ │ │ + │ │ │ +
│ │ │ +
957 find(const key_type& __x) const
│ │ │ +
958 { return _M_h.find(__x); }
│ │ │ +
│ │ │ +
959
│ │ │ +
960#if __cplusplus > 201703L
│ │ │ +
961 template<typename _Kt>
│ │ │ +
962 auto
│ │ │ +
│ │ │ +
963 find(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x))
│ │ │ +
964 { return _M_h._M_find_tr(__x); }
│ │ │ +
│ │ │ +
965#endif
│ │ │ +
966 ///@}
│ │ │ +
967
│ │ │ +
968 ///@{
│ │ │ +
969 /**
│ │ │ +
970 * @brief Finds the number of elements.
│ │ │ +
971 * @param __x Key to count.
│ │ │ +
972 * @return Number of elements with specified key.
│ │ │ +
973 *
│ │ │ +
974 * This function only makes sense for %unordered_multimap; for
│ │ │ +
975 * %unordered_map the result will either be 0 (not present) or 1
│ │ │ +
976 * (present).
│ │ │ +
977 */
│ │ │ + │ │ │ +
│ │ │ +
979 count(const key_type& __x) const
│ │ │ +
980 { return _M_h.count(__x); }
│ │ │ +
│ │ │ +
981
│ │ │ +
982#if __cplusplus > 201703L
│ │ │ +
983 template<typename _Kt>
│ │ │ +
984 auto
│ │ │ +
│ │ │ +
985 count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x))
│ │ │ +
986 { return _M_h._M_count_tr(__x); }
│ │ │ +
│ │ │ +
987#endif
│ │ │ +
988 ///@}
│ │ │ +
989
│ │ │ +
990#if __cplusplus > 201703L
│ │ │ +
991 ///@{
│ │ │ +
992 /**
│ │ │ +
993 * @brief Finds whether an element with the given key exists.
│ │ │ +
994 * @param __x Key of elements to be located.
│ │ │ +
995 * @return True if there is any element with the specified key.
│ │ │ +
996 */
│ │ │ +
997 bool
│ │ │ +
│ │ │ +
998 contains(const key_type& __x) const
│ │ │ +
999 { return _M_h.find(__x) != _M_h.end(); }
│ │ │ +
│ │ │ +
1000
│ │ │ +
1001 template<typename _Kt>
│ │ │ +
1002 auto
│ │ │ +
│ │ │ +
1003 contains(const _Kt& __x) const
│ │ │ +
1004 -> decltype(_M_h._M_find_tr(__x), void(), true)
│ │ │ +
1005 { return _M_h._M_find_tr(__x) != _M_h.end(); }
│ │ │ +
│ │ │ +
1006 ///@}
│ │ │ +
1007#endif
│ │ │ +
1008
│ │ │ +
1009 ///@{
│ │ │ +
1010 /**
│ │ │ +
1011 * @brief Finds a subsequence matching given key.
│ │ │ +
1012 * @param __x Key to be located.
│ │ │ +
1013 * @return Pair of iterators that possibly points to the subsequence
│ │ │ +
1014 * matching given key.
│ │ │ +
1015 *
│ │ │ +
1016 * This function probably only makes sense for %unordered_multimap.
│ │ │ +
1017 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1020 { return _M_h.equal_range(__x); }
│ │ │ +
│ │ │ +
1021
│ │ │ +
1022#if __cplusplus > 201703L
│ │ │ +
1023 template<typename _Kt>
│ │ │ +
1024 auto
│ │ │ +
│ │ │ +
1025 equal_range(const _Kt& __x)
│ │ │ +
1026 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ +
1027 { return _M_h._M_equal_range_tr(__x); }
│ │ │ +
│ │ │ +
1028#endif
│ │ │ +
1029
│ │ │ + │ │ │ +
│ │ │ +
1031 equal_range(const key_type& __x) const
│ │ │ +
1032 { return _M_h.equal_range(__x); }
│ │ │
│ │ │ +
1033
│ │ │ +
1034#if __cplusplus > 201703L
│ │ │ +
1035 template<typename _Kt>
│ │ │ +
1036 auto
│ │ │ +
│ │ │ +
1037 equal_range(const _Kt& __x) const
│ │ │ +
1038 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ +
1039 { return _M_h._M_equal_range_tr(__x); }
│ │ │ +
│ │ │ +
1040#endif
│ │ │ +
1041 ///@}
│ │ │ +
1042
│ │ │ +
1043 ///@{
│ │ │ +
1044 /**
│ │ │ +
1045 * @brief Subscript ( @c [] ) access to %unordered_map data.
│ │ │ +
1046 * @param __k The key for which data should be retrieved.
│ │ │ +
1047 * @return A reference to the data of the (key,data) %pair.
│ │ │ +
1048 *
│ │ │ +
1049 * Allows for easy lookup with the subscript ( @c [] )operator. Returns
│ │ │ +
1050 * data associated with the key specified in subscript. If the key does
│ │ │ +
1051 * not exist, a pair with that key is created using default values, which
│ │ │ +
1052 * is then returned.
│ │ │ +
1053 *
│ │ │ +
1054 * Lookup requires constant time.
│ │ │ +
1055 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1058 { return _M_h[__k]; }
│ │ │ +
│ │ │ +
1059
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1062 { return _M_h[std::move(__k)]; }
│ │ │ +
│ │ │ +
1063 ///@}
│ │ │ +
1064
│ │ │ +
1065 ///@{
│ │ │ +
1066 /**
│ │ │ +
1067 * @brief Access to %unordered_map data.
│ │ │ +
1068 * @param __k The key for which data should be retrieved.
│ │ │ +
1069 * @return A reference to the data whose key is equal to @a __k, if
│ │ │ +
1070 * such a data is present in the %unordered_map.
│ │ │ +
1071 * @throw std::out_of_range If no such data is present.
│ │ │ +
1072 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1075 { return _M_h.at(__k); }
│ │ │ +
│ │ │ +
1076
│ │ │ +
1077 const mapped_type&
│ │ │ +
│ │ │ +
1078 at(const key_type& __k) const
│ │ │ +
1079 { return _M_h.at(__k); }
│ │ │ +
│ │ │ +
1080 ///@}
│ │ │ +
1081
│ │ │ +
1082 // bucket interface.
│ │ │ +
1083
│ │ │ +
1084 /// Returns the number of buckets of the %unordered_map.
│ │ │ +
1085 size_type
│ │ │ +
│ │ │ + │ │ │ +
1087 { return _M_h.bucket_count(); }
│ │ │ +
│ │ │ +
1088
│ │ │ +
1089 /// Returns the maximum number of buckets of the %unordered_map.
│ │ │ +
1090 size_type
│ │ │ +
│ │ │ + │ │ │ +
1092 { return _M_h.max_bucket_count(); }
│ │ │ +
│ │ │ +
1093
│ │ │ +
1094 /*
│ │ │ +
1095 * @brief Returns the number of elements in a given bucket.
│ │ │ +
1096 * @param __n A bucket index.
│ │ │ +
1097 * @return The number of elements in the bucket.
│ │ │ +
1098 */
│ │ │ +
1099 size_type
│ │ │ +
1100 bucket_size(size_type __n) const
│ │ │ +
1101 { return _M_h.bucket_size(__n); }
│ │ │ +
1102
│ │ │ +
1103 /*
│ │ │ +
1104 * @brief Returns the bucket index of a given element.
│ │ │ +
1105 * @param __key A key instance.
│ │ │ +
1106 * @return The key bucket index.
│ │ │ +
1107 */
│ │ │ +
1108 size_type
│ │ │ +
1109 bucket(const key_type& __key) const
│ │ │ +
1110 { return _M_h.bucket(__key); }
│ │ │ +
1111
│ │ │ +
1112 /**
│ │ │ +
1113 * @brief Returns a read/write iterator pointing to the first bucket
│ │ │ +
1114 * element.
│ │ │ +
1115 * @param __n The bucket index.
│ │ │ +
1116 * @return A read/write local iterator.
│ │ │ +
1117 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1120 { return _M_h.begin(__n); }
│ │ │ +
│ │ │ +
1121
│ │ │ +
1122 ///@{
│ │ │ +
1123 /**
│ │ │ +
1124 * @brief Returns a read-only (constant) iterator pointing to the first
│ │ │ +
1125 * bucket element.
│ │ │ +
1126 * @param __n The bucket index.
│ │ │ +
1127 * @return A read-only local iterator.
│ │ │ +
1128 */
│ │ │ + │ │ │ +
│ │ │ +
1130 begin(size_type __n) const
│ │ │ +
1131 { return _M_h.begin(__n); }
│ │ │ +
│ │ │ +
1132
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1135 { return _M_h.cbegin(__n); }
│ │ │ +
│ │ │ +
1136 ///@}
│ │ │ +
1137
│ │ │ +
1138 /**
│ │ │ +
1139 * @brief Returns a read/write iterator pointing to one past the last
│ │ │ +
1140 * bucket elements.
│ │ │ +
1141 * @param __n The bucket index.
│ │ │ +
1142 * @return A read/write local iterator.
│ │ │ +
1143 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1146 { return _M_h.end(__n); }
│ │ │ +
│ │ │ +
1147
│ │ │ +
1148 ///@{
│ │ │ +
1149 /**
│ │ │ +
1150 * @brief Returns a read-only (constant) iterator pointing to one past
│ │ │ +
1151 * the last bucket elements.
│ │ │ +
1152 * @param __n The bucket index.
│ │ │ +
1153 * @return A read-only local iterator.
│ │ │ +
1154 */
│ │ │ + │ │ │ +
│ │ │ +
1156 end(size_type __n) const
│ │ │ +
1157 { return _M_h.end(__n); }
│ │ │ +
│ │ │ +
1158
│ │ │ + │ │ │ +
│ │ │ +
1160 cend(size_type __n) const
│ │ │ +
1161 { return _M_h.cend(__n); }
│ │ │ +
│ │ │ +
1162 ///@}
│ │ │ +
1163
│ │ │ +
1164 // hash policy.
│ │ │ +
1165
│ │ │ +
1166 /// Returns the average number of elements per bucket.
│ │ │ +
1167 float
│ │ │ +
│ │ │ + │ │ │ +
1169 { return _M_h.load_factor(); }
│ │ │ +
│ │ │ +
1170
│ │ │ +
1171 /// Returns a positive number that the %unordered_map tries to keep the
│ │ │ +
1172 /// load factor less than or equal to.
│ │ │ +
1173 float
│ │ │ +
│ │ │ + │ │ │ +
1175 { return _M_h.max_load_factor(); }
│ │ │ +
│ │ │ +
1176
│ │ │ +
1177 /**
│ │ │ +
1178 * @brief Change the %unordered_map maximum load factor.
│ │ │ +
1179 * @param __z The new maximum load factor.
│ │ │ +
1180 */
│ │ │ +
1181 void
│ │ │ +
│ │ │ + │ │ │ +
1183 { _M_h.max_load_factor(__z); }
│ │ │ +
│ │ │ +
1184
│ │ │ +
1185 /**
│ │ │ +
1186 * @brief May rehash the %unordered_map.
│ │ │ +
1187 * @param __n The new number of buckets.
│ │ │ +
1188 *
│ │ │ +
1189 * Rehash will occur only if the new number of buckets respect the
│ │ │ +
1190 * %unordered_map maximum load factor.
│ │ │ +
1191 */
│ │ │ +
1192 void
│ │ │ +
│ │ │ + │ │ │ +
1194 { _M_h.rehash(__n); }
│ │ │ +
│ │ │ +
1195
│ │ │ +
1196 /**
│ │ │ +
1197 * @brief Prepare the %unordered_map for a specified number of
│ │ │ +
1198 * elements.
│ │ │ +
1199 * @param __n Number of elements required.
│ │ │ +
1200 *
│ │ │ +
1201 * Same as rehash(ceil(n / max_load_factor())).
│ │ │ +
1202 */
│ │ │ +
1203 void
│ │ │ +
│ │ │ + │ │ │ +
1205 { _M_h.reserve(__n); }
│ │ │ +
│ │ │ +
1206
│ │ │ +
1207 template<typename _Key1, typename _Tp1, typename _Hash1, typename _Pred1,
│ │ │ +
1208 typename _Alloc1>
│ │ │ +
1209 friend bool
│ │ │ + │ │ │ + │ │ │ +
1212 };
│ │ │ +
│ │ │ +
1213
│ │ │ +
1214#if __cpp_deduction_guides >= 201606
│ │ │ +
1215
│ │ │ +
1216 template<typename _InputIterator,
│ │ │ +
1217 typename _Hash = hash<__iter_key_t<_InputIterator>>,
│ │ │ +
1218 typename _Pred = equal_to<__iter_key_t<_InputIterator>>,
│ │ │ +
1219 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>,
│ │ │ +
1220 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
1221 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
1222 typename = _RequireNotAllocator<_Pred>,
│ │ │ +
1223 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1224 unordered_map(_InputIterator, _InputIterator,
│ │ │ + │ │ │ +
1226 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ +
1227 -> unordered_map<__iter_key_t<_InputIterator>,
│ │ │ +
1228 __iter_val_t<_InputIterator>,
│ │ │ +
1229 _Hash, _Pred, _Allocator>;
│ │ │ +
1230
│ │ │ +
1231 template<typename _Key, typename _Tp, typename _Hash = hash<_Key>,
│ │ │ +
1232 typename _Pred = equal_to<_Key>,
│ │ │ +
1233 typename _Allocator = allocator<pair<const _Key, _Tp>>,
│ │ │ +
1234 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
1235 typename = _RequireNotAllocator<_Pred>,
│ │ │ +
1236 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1237 unordered_map(initializer_list<pair<_Key, _Tp>>,
│ │ │ + │ │ │ +
1239 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ +
1240 -> unordered_map<_Key, _Tp, _Hash, _Pred, _Allocator>;
│ │ │ +
1241
│ │ │ +
1242 template<typename _InputIterator, typename _Allocator,
│ │ │ +
1243 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
1244 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1245 unordered_map(_InputIterator, _InputIterator,
│ │ │ +
1246 typename unordered_map<int, int>::size_type, _Allocator)
│ │ │ +
1247 -> unordered_map<__iter_key_t<_InputIterator>,
│ │ │ +
1248 __iter_val_t<_InputIterator>,
│ │ │ +
1249 hash<__iter_key_t<_InputIterator>>,
│ │ │ +
1250 equal_to<__iter_key_t<_InputIterator>>,
│ │ │ +
1251 _Allocator>;
│ │ │ +
1252
│ │ │ +
1253 template<typename _InputIterator, typename _Allocator,
│ │ │ +
1254 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
1255 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1256 unordered_map(_InputIterator, _InputIterator, _Allocator)
│ │ │ +
1257 -> unordered_map<__iter_key_t<_InputIterator>,
│ │ │ +
1258 __iter_val_t<_InputIterator>,
│ │ │ +
1259 hash<__iter_key_t<_InputIterator>>,
│ │ │ +
1260 equal_to<__iter_key_t<_InputIterator>>,
│ │ │ +
1261 _Allocator>;
│ │ │ +
1262
│ │ │ +
1263 template<typename _InputIterator, typename _Hash, typename _Allocator,
│ │ │ +
1264 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
1265 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
1266 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1267 unordered_map(_InputIterator, _InputIterator,
│ │ │ + │ │ │ +
1269 _Hash, _Allocator)
│ │ │ +
1270 -> unordered_map<__iter_key_t<_InputIterator>,
│ │ │ +
1271 __iter_val_t<_InputIterator>, _Hash,
│ │ │ +
1272 equal_to<__iter_key_t<_InputIterator>>, _Allocator>;
│ │ │ +
1273
│ │ │ +
1274 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ +
1275 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1276 unordered_map(initializer_list<pair<_Key, _Tp>>,
│ │ │ + │ │ │ +
1278 _Allocator)
│ │ │ +
1279 -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
│ │ │ +
1280
│ │ │ +
1281 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ +
1282 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1283 unordered_map(initializer_list<pair<_Key, _Tp>>, _Allocator)
│ │ │ +
1284 -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
│ │ │ +
1285
│ │ │ +
1286 template<typename _Key, typename _Tp, typename _Hash, typename _Allocator,
│ │ │ +
1287 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
1288 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1289 unordered_map(initializer_list<pair<_Key, _Tp>>,
│ │ │ + │ │ │ +
1291 _Hash, _Allocator)
│ │ │ +
1292 -> unordered_map<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>;
│ │ │ +
1293
│ │ │ +
1294#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
1295 template<ranges::input_range _Rg,
│ │ │ +
1296 __not_allocator_like _Hash = hash<__detail::__range_key_type<_Rg>>,
│ │ │ +
1297 __not_allocator_like _Pred = equal_to<__detail::__range_key_type<_Rg>>,
│ │ │ +
1298 __allocator_like _Allocator =
│ │ │ +
1299 allocator<__detail::__range_to_alloc_type<_Rg>>>
│ │ │ +
1300 unordered_map(from_range_t, _Rg&&, unordered_map<int, int>::size_type = {},
│ │ │ +
1301 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ +
1302 -> unordered_map<__detail::__range_key_type<_Rg>,
│ │ │ +
1303 __detail::__range_mapped_type<_Rg>,
│ │ │ +
1304 _Hash, _Pred, _Allocator>;
│ │ │ +
1305
│ │ │ +
1306 template<ranges::input_range _Rg,
│ │ │ +
1307 __allocator_like _Allocator>
│ │ │ +
1308 unordered_map(from_range_t, _Rg&&, unordered_map<int, int>::size_type,
│ │ │ +
1309 _Allocator)
│ │ │ +
1310 -> unordered_map<__detail::__range_key_type<_Rg>,
│ │ │ +
1311 __detail::__range_mapped_type<_Rg>,
│ │ │ +
1312 hash<__detail::__range_key_type<_Rg>>,
│ │ │ +
1313 equal_to<__detail::__range_key_type<_Rg>>,
│ │ │ +
1314 _Allocator>;
│ │ │ +
1315
│ │ │ +
1316 template<ranges::input_range _Rg,
│ │ │ +
1317 __allocator_like _Allocator>
│ │ │ +
1318 unordered_map(from_range_t, _Rg&&, _Allocator)
│ │ │ +
1319 -> unordered_map<__detail::__range_key_type<_Rg>,
│ │ │ +
1320 __detail::__range_mapped_type<_Rg>,
│ │ │ +
1321 hash<__detail::__range_key_type<_Rg>>,
│ │ │ +
1322 equal_to<__detail::__range_key_type<_Rg>>,
│ │ │ +
1323 _Allocator>;
│ │ │ +
1324
│ │ │ +
1325 template<ranges::input_range _Rg,
│ │ │ +
1326 __not_allocator_like _Hash,
│ │ │ +
1327 __allocator_like _Allocator>
│ │ │ +
1328 unordered_map(from_range_t, _Rg&&, unordered_map<int, int>::size_type,
│ │ │ +
1329 _Hash, _Allocator)
│ │ │ +
1330 -> unordered_map<__detail::__range_key_type<_Rg>,
│ │ │ +
1331 __detail::__range_mapped_type<_Rg>,
│ │ │ +
1332 _Hash, equal_to<__detail::__range_key_type<_Rg>>,
│ │ │ +
1333 _Allocator>;
│ │ │ +
1334#endif
│ │ │ +
1335#endif
│ │ │ +
1336
│ │ │ +
1337 /**
│ │ │ +
1338 * @brief A standard container composed of equivalent keys
│ │ │ +
1339 * (possibly containing multiple of each key value) that associates
│ │ │ +
1340 * values of another type with the keys.
│ │ │ +
1341 *
│ │ │ +
1342 * @ingroup unordered_associative_containers
│ │ │ +
1343 * @headerfile unordered_map
│ │ │ +
1344 * @since C++11
│ │ │ +
1345 *
│ │ │ +
1346 * @tparam _Key Type of key objects.
│ │ │ +
1347 * @tparam _Tp Type of mapped objects.
│ │ │ +
1348 * @tparam _Hash Hashing function object type, defaults to hash<_Value>.
│ │ │ +
1349 * @tparam _Pred Predicate function object type, defaults
│ │ │ +
1350 * to equal_to<_Value>.
│ │ │ +
1351 * @tparam _Alloc Allocator type, defaults to
│ │ │ +
1352 * std::allocator<std::pair<const _Key, _Tp>>.
│ │ │ +
1353 *
│ │ │ +
1354 * Meets the requirements of a <a href="tables.html#65">container</a>, and
│ │ │ +
1355 * <a href="tables.html#xx">unordered associative container</a>
│ │ │ +
1356 *
│ │ │ +
1357 * The resulting value type of the container is std::pair<const _Key, _Tp>.
│ │ │ +
1358 *
│ │ │ +
1359 * Base is _Hashtable, dispatched at compile time via template
│ │ │ +
1360 * alias __ummap_hashtable.
│ │ │ +
1361 */
│ │ │ +
1362 template<typename _Key, typename _Tp,
│ │ │ +
1363 typename _Hash = hash<_Key>,
│ │ │ +
1364 typename _Pred = equal_to<_Key>,
│ │ │ +
1365 typename _Alloc = allocator<std::pair<const _Key, _Tp>>>
│ │ │ +
│ │ │ + │ │ │ +
1367 {
│ │ │ + │ │ │ +
1369 _Hashtable _M_h;
│ │ │ +
1370
│ │ │ +
1371 public:
│ │ │ +
1372 // typedefs:
│ │ │ +
1373 ///@{
│ │ │ +
1374 /// Public typedefs.
│ │ │ +
1375 typedef typename _Hashtable::key_type key_type;
│ │ │ +
1376 typedef typename _Hashtable::value_type value_type;
│ │ │ +
1377 typedef typename _Hashtable::mapped_type mapped_type;
│ │ │ +
1378 typedef typename _Hashtable::hasher hasher;
│ │ │ +
1379 typedef typename _Hashtable::key_equal key_equal;
│ │ │ +
1380 typedef typename _Hashtable::allocator_type allocator_type;
│ │ │ +
1381 ///@}
│ │ │ +
1382
│ │ │ +
1383 ///@{
│ │ │ +
1384 /// Iterator-related typedefs.
│ │ │ +
1385 typedef typename _Hashtable::pointer pointer;
│ │ │ +
1386 typedef typename _Hashtable::const_pointer const_pointer;
│ │ │ +
1387 typedef typename _Hashtable::reference reference;
│ │ │ +
1388 typedef typename _Hashtable::const_reference const_reference;
│ │ │ +
1389 typedef typename _Hashtable::iterator iterator;
│ │ │ +
1390 typedef typename _Hashtable::const_iterator const_iterator;
│ │ │ +
1391 typedef typename _Hashtable::local_iterator local_iterator;
│ │ │ +
1392 typedef typename _Hashtable::const_local_iterator const_local_iterator;
│ │ │ +
1393 typedef typename _Hashtable::size_type size_type;
│ │ │ +
1394 typedef typename _Hashtable::difference_type difference_type;
│ │ │ +
1395 ///@}
│ │ │
1396
│ │ │ -
1397 /**
│ │ │ -
1398 * @brief Inserts an element into the %unordered_multiset.
│ │ │ -
1399 * @param __pos An iterator that serves as a hint as to where the
│ │ │ -
1400 * element should be inserted.
│ │ │ -
1401 * @param __args Arguments used to generate the element to be
│ │ │ -
1402 * inserted.
│ │ │ -
1403 * @return An iterator that points to the inserted element.
│ │ │ -
1404 *
│ │ │ -
1405 * Note that the first parameter is only a hint and can potentially
│ │ │ -
1406 * improve the performance of the insertion process. A bad hint would
│ │ │ -
1407 * cause no gains in efficiency.
│ │ │ -
1408 *
│ │ │ -
1409 * For more on @a hinting, see:
│ │ │ -
1410 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
1411 *
│ │ │ -
1412 * Insertion requires amortized constant time.
│ │ │ -
1413 */
│ │ │ -
1414 template<typename... _Args>
│ │ │ -
1415 iterator
│ │ │ -
│ │ │ - │ │ │ -
1417 { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
1418
│ │ │ -
1419 ///@{
│ │ │ -
1420 /**
│ │ │ -
1421 * @brief Inserts an element into the %unordered_multiset.
│ │ │ -
1422 * @param __x Element to be inserted.
│ │ │ -
1423 * @return An iterator that points to the inserted element.
│ │ │ -
1424 *
│ │ │ -
1425 * Insertion requires amortized constant time.
│ │ │ -
1426 */
│ │ │ -
1427 iterator
│ │ │ -
│ │ │ -
1428 insert(const value_type& __x)
│ │ │ -
1429 { return _M_h.insert(__x); }
│ │ │ -
│ │ │ -
1430
│ │ │ -
1431 iterator
│ │ │ -
│ │ │ - │ │ │ -
1433 { return _M_h.insert(std::move(__x)); }
│ │ │ -
│ │ │ -
1434 ///@}
│ │ │ -
1435
│ │ │ -
1436 ///@{
│ │ │ -
1437 /**
│ │ │ -
1438 * @brief Inserts an element into the %unordered_multiset.
│ │ │ -
1439 * @param __hint An iterator that serves as a hint as to where the
│ │ │ -
1440 * element should be inserted.
│ │ │ -
1441 * @param __x Element to be inserted.
│ │ │ -
1442 * @return An iterator that points to the inserted element.
│ │ │ -
1443 *
│ │ │ -
1444 * Note that the first parameter is only a hint and can potentially
│ │ │ -
1445 * improve the performance of the insertion process. A bad hint would
│ │ │ -
1446 * cause no gains in efficiency.
│ │ │ -
1447 *
│ │ │ -
1448 * For more on @a hinting, see:
│ │ │ -
1449 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
1450 *
│ │ │ -
1451 * Insertion requires amortized constant.
│ │ │ +
1397#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ +
1398 using node_type = typename _Hashtable::node_type;
│ │ │ +
1399#endif
│ │ │ +
1400
│ │ │ +
1401 //construct/destroy/copy
│ │ │ +
1402
│ │ │ +
1403 /// Default constructor.
│ │ │ + │ │ │ +
1405
│ │ │ +
1406 /**
│ │ │ +
1407 * @brief Default constructor creates no elements.
│ │ │ +
1408 * @param __n Mnimal initial number of buckets.
│ │ │ +
1409 * @param __hf A hash functor.
│ │ │ +
1410 * @param __eql A key equality functor.
│ │ │ +
1411 * @param __a An allocator object.
│ │ │ +
1412 */
│ │ │ +
1413 explicit
│ │ │ +
│ │ │ + │ │ │ +
1415 const hasher& __hf = hasher(),
│ │ │ +
1416 const key_equal& __eql = key_equal(),
│ │ │ +
1417 const allocator_type& __a = allocator_type())
│ │ │ +
1418 : _M_h(__n, __hf, __eql, __a)
│ │ │ +
1419 { }
│ │ │ +
│ │ │ +
1420
│ │ │ +
1421 /**
│ │ │ +
1422 * @brief Builds an %unordered_multimap from a range.
│ │ │ +
1423 * @param __first An input iterator.
│ │ │ +
1424 * @param __last An input iterator.
│ │ │ +
1425 * @param __n Minimal initial number of buckets.
│ │ │ +
1426 * @param __hf A hash functor.
│ │ │ +
1427 * @param __eql A key equality functor.
│ │ │ +
1428 * @param __a An allocator object.
│ │ │ +
1429 *
│ │ │ +
1430 * Create an %unordered_multimap consisting of copies of the elements
│ │ │ +
1431 * from [__first,__last). This is linear in N (where N is
│ │ │ +
1432 * distance(__first,__last)).
│ │ │ +
1433 */
│ │ │ +
1434 template<typename _InputIterator>
│ │ │ +
│ │ │ + │ │ │ +
1436 size_type __n = 0,
│ │ │ +
1437 const hasher& __hf = hasher(),
│ │ │ +
1438 const key_equal& __eql = key_equal(),
│ │ │ +
1439 const allocator_type& __a = allocator_type())
│ │ │ +
1440 : _M_h(__first, __last, __n, __hf, __eql, __a)
│ │ │ +
1441 { }
│ │ │ +
│ │ │ +
1442
│ │ │ +
1443 /// Copy constructor.
│ │ │ + │ │ │ +
1445
│ │ │ +
1446 /// Move constructor.
│ │ │ + │ │ │ +
1448
│ │ │ +
1449 /**
│ │ │ +
1450 * @brief Creates an %unordered_multimap with no elements.
│ │ │ +
1451 * @param __a An allocator object.
│ │ │
1452 */
│ │ │ -
1453 iterator
│ │ │ +
1453 explicit
│ │ │
│ │ │ - │ │ │ -
1455 { return _M_h.insert(__hint, __x); }
│ │ │ -
│ │ │ -
1456
│ │ │ -
1457 iterator
│ │ │ -
│ │ │ - │ │ │ -
1459 { return _M_h.insert(__hint, std::move(__x)); }
│ │ │ -
│ │ │ -
1460 ///@}
│ │ │ -
1461
│ │ │ -
1462 /**
│ │ │ -
1463 * @brief A template function that inserts a range of elements.
│ │ │ -
1464 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
1465 * inserted.
│ │ │ -
1466 * @param __last Iterator pointing to the end of the range.
│ │ │ -
1467 *
│ │ │ -
1468 * Complexity similar to that of the range constructor.
│ │ │ -
1469 */
│ │ │ -
1470 template<typename _InputIterator>
│ │ │ -
1471 void
│ │ │ -
│ │ │ - │ │ │ -
1473 { _M_h.insert(__first, __last); }
│ │ │ -
│ │ │ -
1474
│ │ │ -
1475 /**
│ │ │ -
1476 * @brief Inserts a list of elements into the %unordered_multiset.
│ │ │ -
1477 * @param __l A std::initializer_list<value_type> of elements to be
│ │ │ -
1478 * inserted.
│ │ │ -
1479 *
│ │ │ -
1480 * Complexity similar to that of the range constructor.
│ │ │ -
1481 */
│ │ │ -
1482 void
│ │ │ -
│ │ │ - │ │ │ -
1484 { _M_h.insert(__l); }
│ │ │ -
│ │ │ -
1485
│ │ │ -
1486#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
1487 /**
│ │ │ -
1488 * @brief Inserts a range of elements.
│ │ │ -
1489 * @since C++23
│ │ │ -
1490 * @param __rg An input range of elements that can be converted to
│ │ │ -
1491 * the set's value type.
│ │ │ -
1492 */
│ │ │ -
1493 template<__detail::__container_compatible_range<_Value> _Rg>
│ │ │ -
1494 void
│ │ │ - │ │ │ -
1496 {
│ │ │ -
1497 auto __first = ranges::begin(__rg);
│ │ │ -
1498 const auto __last = ranges::end(__rg);
│ │ │ -
1499 if (__first == __last)
│ │ │ -
1500 return;
│ │ │ + │ │ │ +
1455 : _M_h(__a)
│ │ │ +
1456 { }
│ │ │ +
│ │ │ +
1457
│ │ │ +
1458 /*
│ │ │ +
1459 * @brief Copy constructor with allocator argument.
│ │ │ +
1460 * @param __uset Input %unordered_multimap to copy.
│ │ │ +
1461 * @param __a An allocator object.
│ │ │ +
1462 */
│ │ │ + │ │ │ +
1464 const allocator_type& __a)
│ │ │ +
1465 : _M_h(__ummap._M_h, __a)
│ │ │ +
1466 { }
│ │ │ +
1467
│ │ │ +
1468 /*
│ │ │ +
1469 * @brief Move constructor with allocator argument.
│ │ │ +
1470 * @param __uset Input %unordered_multimap to move.
│ │ │ +
1471 * @param __a An allocator object.
│ │ │ +
1472 */
│ │ │ + │ │ │ +
1474 const allocator_type& __a)
│ │ │ +
1475 noexcept( noexcept(_Hashtable(std::move(__ummap._M_h), __a)) )
│ │ │ +
1476 : _M_h(std::move(__ummap._M_h), __a)
│ │ │ +
1477 { }
│ │ │ +
1478
│ │ │ +
1479 /**
│ │ │ +
1480 * @brief Builds an %unordered_multimap from an initializer_list.
│ │ │ +
1481 * @param __l An initializer_list.
│ │ │ +
1482 * @param __n Minimal initial number of buckets.
│ │ │ +
1483 * @param __hf A hash functor.
│ │ │ +
1484 * @param __eql A key equality functor.
│ │ │ +
1485 * @param __a An allocator object.
│ │ │ +
1486 *
│ │ │ +
1487 * Create an %unordered_multimap consisting of copies of the elements in
│ │ │ +
1488 * the list. This is linear in N (where N is @a __l.size()).
│ │ │ +
1489 */
│ │ │ +
│ │ │ + │ │ │ +
1491 size_type __n = 0,
│ │ │ +
1492 const hasher& __hf = hasher(),
│ │ │ +
1493 const key_equal& __eql = key_equal(),
│ │ │ +
1494 const allocator_type& __a = allocator_type())
│ │ │ +
1495 : _M_h(__l, __n, __hf, __eql, __a)
│ │ │ +
1496 { }
│ │ │ +
│ │ │ +
1497
│ │ │ + │ │ │ +
1499 : unordered_multimap(__n, hasher(), key_equal(), __a)
│ │ │ +
1500 { }
│ │ │
1501
│ │ │ -
1502 if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>)
│ │ │ -
1503 _M_h._M_rehash_insert(size_type(ranges::distance(__rg)));
│ │ │ -
1504 else
│ │ │ -
1505 _M_h._M_rehash_insert(1);
│ │ │ +
1502 unordered_multimap(size_type __n, const hasher& __hf,
│ │ │ +
1503 const allocator_type& __a)
│ │ │ +
1504 : unordered_multimap(__n, __hf, key_equal(), __a)
│ │ │ +
1505 { }
│ │ │
1506
│ │ │ -
1507 for (; __first != __last; ++__first)
│ │ │ -
1508 _M_h.emplace(*__first);
│ │ │ -
1509 }
│ │ │ -
1510#endif
│ │ │ -
1511
│ │ │ -
1512#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
1513 /// Extract a node.
│ │ │ -
1514 node_type
│ │ │ -
│ │ │ - │ │ │ -
1516 {
│ │ │ -
1517 __glibcxx_assert(__pos != end());
│ │ │ -
1518 return _M_h.extract(__pos);
│ │ │ -
1519 }
│ │ │ -
│ │ │ -
1520
│ │ │ -
1521 /// Extract a node.
│ │ │ -
1522 node_type
│ │ │ -
│ │ │ - │ │ │ -
1524 { return _M_h.extract(__key); }
│ │ │ -
│ │ │ -
1525
│ │ │ -
1526 /// Re-insert an extracted node.
│ │ │ -
1527 iterator
│ │ │ -
│ │ │ -
1528 insert(node_type&& __nh)
│ │ │ -
1529 { return _M_h._M_reinsert_node_multi(cend(), std::move(__nh)); }
│ │ │ -
│ │ │ -
1530
│ │ │ -
1531 /// Re-insert an extracted node.
│ │ │ -
1532 iterator
│ │ │ -
│ │ │ - │ │ │ -
1534 { return _M_h._M_reinsert_node_multi(__hint, std::move(__nh)); }
│ │ │ -
│ │ │ -
1535#endif // node_extract
│ │ │ -
1536
│ │ │ -
1537 ///@{
│ │ │ -
1538 /**
│ │ │ -
1539 * @brief Erases an element from an %unordered_multiset.
│ │ │ -
1540 * @param __position An iterator pointing to the element to be erased.
│ │ │ -
1541 * @return An iterator pointing to the element immediately following
│ │ │ -
1542 * @a __position prior to the element being erased. If no such
│ │ │ -
1543 * element exists, end() is returned.
│ │ │ -
1544 *
│ │ │ -
1545 * This function erases an element, pointed to by the given iterator,
│ │ │ -
1546 * from an %unordered_multiset.
│ │ │ -
1547 *
│ │ │ -
1548 * Note that this function only erases the element, and that if the
│ │ │ -
1549 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ -
1550 * any way. Managing the pointer is the user's responsibility.
│ │ │ -
1551 */
│ │ │ -
1552 iterator
│ │ │ -
│ │ │ - │ │ │ -
1554 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ +
1507 template<typename _InputIterator>
│ │ │ +
1508 unordered_multimap(_InputIterator __first, _InputIterator __last,
│ │ │ +
1509 size_type __n,
│ │ │ +
1510 const allocator_type& __a)
│ │ │ +
1511 : unordered_multimap(__first, __last, __n, hasher(), key_equal(), __a)
│ │ │ +
1512 { }
│ │ │ +
1513
│ │ │ +
1514 template<typename _InputIterator>
│ │ │ +
1515 unordered_multimap(_InputIterator __first, _InputIterator __last,
│ │ │ +
1516 size_type __n, const hasher& __hf,
│ │ │ +
1517 const allocator_type& __a)
│ │ │ +
1518 : unordered_multimap(__first, __last, __n, __hf, key_equal(), __a)
│ │ │ +
1519 { }
│ │ │ +
1520
│ │ │ +
1521 unordered_multimap(initializer_list<value_type> __l,
│ │ │ +
1522 size_type __n,
│ │ │ +
1523 const allocator_type& __a)
│ │ │ +
1524 : unordered_multimap(__l, __n, hasher(), key_equal(), __a)
│ │ │ +
1525 { }
│ │ │ +
1526
│ │ │ +
1527 unordered_multimap(initializer_list<value_type> __l,
│ │ │ +
1528 size_type __n, const hasher& __hf,
│ │ │ +
1529 const allocator_type& __a)
│ │ │ +
1530 : unordered_multimap(__l, __n, __hf, key_equal(), __a)
│ │ │ +
1531 { }
│ │ │ +
1532
│ │ │ +
1533#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
1534 /**
│ │ │ +
1535 * @brief Builds an %unordered_multimap from a range.
│ │ │ +
1536 * @since C++23
│ │ │ +
1537 * @param __rg An input range of elements that can be converted to
│ │ │ +
1538 * the maps's value type.
│ │ │ +
1539 * @param __n Minimal initial number of buckets.
│ │ │ +
1540 * @param __hf A hash functor.
│ │ │ +
1541 * @param __eql A key equality functor.
│ │ │ +
1542 * @param __a An allocator object.
│ │ │ +
1543 *
│ │ │ +
1544 * Create an %unordered_multimap consisting of copies of the elements in
│ │ │ +
1545 * the range. This is linear in N (where N is `std::ranges::size(__rg)`).
│ │ │ +
1546 */
│ │ │ +
1547 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ +
1548 unordered_multimap(from_range_t, _Rg&& __rg,
│ │ │ +
1549 size_type __n = 0,
│ │ │ +
1550 const hasher& __hf = hasher(),
│ │ │ +
1551 const key_equal& __eql = key_equal(),
│ │ │ +
1552 const allocator_type& __a = allocator_type())
│ │ │ +
1553 : _M_h(__n, __hf, __eql, __a)
│ │ │ +
1554 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │
1555
│ │ │ -
1556 // LWG 2059.
│ │ │ -
1557 iterator
│ │ │ -
│ │ │ - │ │ │ -
1559 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
1560 ///@}
│ │ │ -
1561
│ │ │ -
1562
│ │ │ -
1563 /**
│ │ │ -
1564 * @brief Erases elements according to the provided key.
│ │ │ -
1565 * @param __x Key of element to be erased.
│ │ │ -
1566 * @return The number of elements erased.
│ │ │ -
1567 *
│ │ │ -
1568 * This function erases all the elements located by the given key from
│ │ │ -
1569 * an %unordered_multiset.
│ │ │ -
1570 *
│ │ │ -
1571 * Note that this function only erases the element, and that if the
│ │ │ -
1572 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ -
1573 * any way. Managing the pointer is the user's responsibility.
│ │ │ -
1574 */
│ │ │ -
1575 size_type
│ │ │ -
│ │ │ -
1576 erase(const key_type& __x)
│ │ │ -
1577 { return _M_h.erase(__x); }
│ │ │ -
│ │ │ -
1578
│ │ │ -
1579 /**
│ │ │ -
1580 * @brief Erases a [__first,__last) range of elements from an
│ │ │ -
1581 * %unordered_multiset.
│ │ │ -
1582 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
1583 * erased.
│ │ │ -
1584 * @param __last Iterator pointing to the end of the range to
│ │ │ -
1585 * be erased.
│ │ │ -
1586 * @return The iterator @a __last.
│ │ │ +
1556 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
1557 // 2713. More missing allocator-extended constructors for unordered containers
│ │ │ +
1558 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ +
1559 unordered_multimap(from_range_t, _Rg&& __rg, const allocator_type& __a)
│ │ │ +
1560 : _M_h(0, hasher(), key_equal(), __a)
│ │ │ +
1561 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ +
1562
│ │ │ +
1563 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ +
1564 unordered_multimap(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ +
1565 const allocator_type& __a)
│ │ │ +
1566 : _M_h(__n, hasher(), key_equal(), __a)
│ │ │ +
1567 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ +
1568
│ │ │ +
1569 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ +
1570 unordered_multimap(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ +
1571 const hasher& __hf, const allocator_type& __a)
│ │ │ +
1572 : _M_h(__n, __hf, key_equal(), __a)
│ │ │ +
1573 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ +
1574#endif
│ │ │ +
1575
│ │ │ +
1576 /// Copy assignment operator.
│ │ │ + │ │ │ + │ │ │ +
1579
│ │ │ +
1580 /// Move assignment operator.
│ │ │ + │ │ │ + │ │ │ +
1583
│ │ │ +
1584 /**
│ │ │ +
1585 * @brief %Unordered_multimap list assignment operator.
│ │ │ +
1586 * @param __l An initializer_list.
│ │ │
1587 *
│ │ │ -
1588 * This function erases a sequence of elements from an
│ │ │ -
1589 * %unordered_multiset.
│ │ │ +
1588 * This function fills an %unordered_multimap with copies of the
│ │ │ +
1589 * elements in the initializer list @a __l.
│ │ │
1590 *
│ │ │ -
1591 * Note that this function only erases the element, and that if
│ │ │ -
1592 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ -
1593 * in any way. Managing the pointer is the user's responsibility.
│ │ │ +
1591 * Note that the assignment completely changes the %unordered_multimap
│ │ │ +
1592 * and that the resulting %unordered_multimap's size is the same as the
│ │ │ +
1593 * number of elements assigned.
│ │ │
1594 */
│ │ │ -
1595 iterator
│ │ │ + │ │ │
│ │ │ - │ │ │ -
1597 { return _M_h.erase(__first, __last); }
│ │ │ -
│ │ │ -
1598
│ │ │ -
1599 /**
│ │ │ -
1600 * Erases all elements in an %unordered_multiset.
│ │ │ -
1601 *
│ │ │ -
1602 * Note that this function only erases the elements, and that if the
│ │ │ -
1603 * elements themselves are pointers, the pointed-to memory is not touched
│ │ │ -
1604 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
1605 */
│ │ │ -
1606 void
│ │ │ -
│ │ │ -
1607 clear() noexcept
│ │ │ -
1608 { _M_h.clear(); }
│ │ │ -
│ │ │ -
1609
│ │ │ -
1610 /**
│ │ │ -
1611 * @brief Swaps data with another %unordered_multiset.
│ │ │ -
1612 * @param __x An %unordered_multiset of the same element and allocator
│ │ │ -
1613 * types.
│ │ │ -
1614 *
│ │ │ -
1615 * This exchanges the elements between two sets in constant time.
│ │ │ -
1616 * Note that the global std::swap() function is specialized such that
│ │ │ -
1617 * std::swap(s1,s2) will feed to this function.
│ │ │ -
1618 */
│ │ │ -
1619 void
│ │ │ -
│ │ │ - │ │ │ -
1621 noexcept( noexcept(_M_h.swap(__x._M_h)) )
│ │ │ -
1622 { _M_h.swap(__x._M_h); }
│ │ │ + │ │ │ +
1597 {
│ │ │ +
1598 _M_h = __l;
│ │ │ +
1599 return *this;
│ │ │ +
1600 }
│ │ │ +
│ │ │ +
1601
│ │ │ +
1602 /// Returns the allocator object used by the %unordered_multimap.
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1605 { return _M_h.get_allocator(); }
│ │ │ +
│ │ │ +
1606
│ │ │ +
1607 // size and capacity:
│ │ │ +
1608
│ │ │ +
1609 /// Returns true if the %unordered_multimap is empty.
│ │ │ +
1610 _GLIBCXX_NODISCARD bool
│ │ │ +
│ │ │ +
1611 empty() const noexcept
│ │ │ +
1612 { return _M_h.empty(); }
│ │ │ +
│ │ │ +
1613
│ │ │ +
1614 /// Returns the size of the %unordered_multimap.
│ │ │ +
1615 size_type
│ │ │ +
│ │ │ +
1616 size() const noexcept
│ │ │ +
1617 { return _M_h.size(); }
│ │ │ +
│ │ │ +
1618
│ │ │ +
1619 /// Returns the maximum size of the %unordered_multimap.
│ │ │ +
1620 size_type
│ │ │ +
│ │ │ +
1621 max_size() const noexcept
│ │ │ +
1622 { return _M_h.max_size(); }
│ │ │
│ │ │
1623
│ │ │ -
1624#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
1625 template<typename, typename, typename>
│ │ │ -
1626 friend class std::_Hash_merge_helper;
│ │ │ -
1627
│ │ │ -
1628 template<typename _H2, typename _P2>
│ │ │ -
1629 void
│ │ │ - │ │ │ -
1631 {
│ │ │ - │ │ │ -
1633 if (std::__addressof(__source) == this) [[__unlikely__]]
│ │ │ -
1634 return;
│ │ │ -
1635
│ │ │ -
1636 using _Merge_helper
│ │ │ - │ │ │ -
1638 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ -
1639 }
│ │ │ -
1640
│ │ │ -
1641 template<typename _H2, typename _P2>
│ │ │ -
1642 void
│ │ │ -
1643 merge(unordered_multiset<_Value, _H2, _P2, _Alloc>&& __source)
│ │ │ -
1644 {
│ │ │ -
1645 using _Merge_helper
│ │ │ -
1646 = _Hash_merge_helper<unordered_multiset, _H2, _P2>;
│ │ │ -
1647 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ -
1648 }
│ │ │ -
1649
│ │ │ -
1650 template<typename _H2, typename _P2>
│ │ │ -
1651 void
│ │ │ -
1652 merge(unordered_set<_Value, _H2, _P2, _Alloc>& __source)
│ │ │ -
1653 {
│ │ │ -
1654 using _Merge_helper
│ │ │ -
1655 = _Hash_merge_helper<unordered_multiset, _H2, _P2>;
│ │ │ -
1656 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ -
1657 }
│ │ │ -
1658
│ │ │ -
1659 template<typename _H2, typename _P2>
│ │ │ -
1660 void
│ │ │ -
1661 merge(unordered_set<_Value, _H2, _P2, _Alloc>&& __source)
│ │ │ -
1662 { merge(__source); }
│ │ │ -
1663#endif // node_extract
│ │ │ +
1624 // iterators.
│ │ │ +
1625
│ │ │ +
1626 /**
│ │ │ +
1627 * Returns a read/write iterator that points to the first element in the
│ │ │ +
1628 * %unordered_multimap.
│ │ │ +
1629 */
│ │ │ +
1630 iterator
│ │ │ +
│ │ │ +
1631 begin() noexcept
│ │ │ +
1632 { return _M_h.begin(); }
│ │ │ +
│ │ │ +
1633
│ │ │ +
1634 ///@{
│ │ │ +
1635 /**
│ │ │ +
1636 * Returns a read-only (constant) iterator that points to the first
│ │ │ +
1637 * element in the %unordered_multimap.
│ │ │ +
1638 */
│ │ │ + │ │ │ +
│ │ │ +
1640 begin() const noexcept
│ │ │ +
1641 { return _M_h.begin(); }
│ │ │ +
│ │ │ +
1642
│ │ │ + │ │ │ +
│ │ │ +
1644 cbegin() const noexcept
│ │ │ +
1645 { return _M_h.begin(); }
│ │ │ +
│ │ │ +
1646 ///@}
│ │ │ +
1647
│ │ │ +
1648 /**
│ │ │ +
1649 * Returns a read/write iterator that points one past the last element in
│ │ │ +
1650 * the %unordered_multimap.
│ │ │ +
1651 */
│ │ │ +
1652 iterator
│ │ │ +
│ │ │ +
1653 end() noexcept
│ │ │ +
1654 { return _M_h.end(); }
│ │ │ +
│ │ │ +
1655
│ │ │ +
1656 ///@{
│ │ │ +
1657 /**
│ │ │ +
1658 * Returns a read-only (constant) iterator that points one past the last
│ │ │ +
1659 * element in the %unordered_multimap.
│ │ │ +
1660 */
│ │ │ + │ │ │ +
│ │ │ +
1662 end() const noexcept
│ │ │ +
1663 { return _M_h.end(); }
│ │ │ +
│ │ │
1664
│ │ │ -
1665 // observers.
│ │ │ -
1666
│ │ │ -
1667 /// Returns the hash functor object with which the %unordered_multiset
│ │ │ -
1668 /// was constructed.
│ │ │ -
1669 hasher
│ │ │ -
│ │ │ - │ │ │ -
1671 { return _M_h.hash_function(); }
│ │ │ -
│ │ │ -
1672
│ │ │ -
1673 /// Returns the key comparison object with which the %unordered_multiset
│ │ │ -
1674 /// was constructed.
│ │ │ -
1675 key_equal
│ │ │ -
│ │ │ -
1676 key_eq() const
│ │ │ -
1677 { return _M_h.key_eq(); }
│ │ │ -
│ │ │ -
1678
│ │ │ -
1679 // lookup.
│ │ │ -
1680
│ │ │ -
1681 ///@{
│ │ │ -
1682 /**
│ │ │ -
1683 * @brief Tries to locate an element in an %unordered_multiset.
│ │ │ -
1684 * @param __x Element to be located.
│ │ │ -
1685 * @return Iterator pointing to sought-after element, or end() if not
│ │ │ -
1686 * found.
│ │ │ -
1687 *
│ │ │ -
1688 * This function takes a key and tries to locate the element with which
│ │ │ -
1689 * the key matches. If successful the function returns an iterator
│ │ │ -
1690 * pointing to the sought after element. If unsuccessful it returns the
│ │ │ -
1691 * past-the-end ( @c end() ) iterator.
│ │ │ -
1692 */
│ │ │ -
1693 iterator
│ │ │ -
│ │ │ -
1694 find(const key_type& __x)
│ │ │ -
1695 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
1696
│ │ │ -
1697#if __cplusplus > 201703L
│ │ │ -
1698 template<typename _Kt>
│ │ │ -
1699 auto
│ │ │ -
│ │ │ -
1700 find(const _Kt& __x)
│ │ │ -
1701 -> decltype(_M_h._M_find_tr(__x))
│ │ │ -
1702 { return _M_h._M_find_tr(__x); }
│ │ │ -
│ │ │ -
1703#endif
│ │ │ -
1704
│ │ │ - │ │ │ -
│ │ │ -
1706 find(const key_type& __x) const
│ │ │ -
1707 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
1708
│ │ │ -
1709#if __cplusplus > 201703L
│ │ │ -
1710 template<typename _Kt>
│ │ │ -
1711 auto
│ │ │ -
│ │ │ -
1712 find(const _Kt& __x) const
│ │ │ -
1713 -> decltype(_M_h._M_find_tr(__x))
│ │ │ -
1714 { return _M_h._M_find_tr(__x); }
│ │ │ -
│ │ │ -
1715#endif
│ │ │ -
1716 ///@}
│ │ │ -
1717
│ │ │ -
1718 ///@{
│ │ │ -
1719 /**
│ │ │ -
1720 * @brief Finds the number of elements.
│ │ │ -
1721 * @param __x Element to located.
│ │ │ -
1722 * @return Number of elements with specified key.
│ │ │ -
1723 */
│ │ │ -
1724 size_type
│ │ │ -
│ │ │ -
1725 count(const key_type& __x) const
│ │ │ -
1726 { return _M_h.count(__x); }
│ │ │ -
│ │ │ -
1727
│ │ │ -
1728#if __cplusplus > 201703L
│ │ │ -
1729 template<typename _Kt>
│ │ │ -
1730 auto
│ │ │ -
│ │ │ -
1731 count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x))
│ │ │ -
1732 { return _M_h._M_count_tr(__x); }
│ │ │ -
│ │ │ -
1733#endif
│ │ │ -
1734 ///@}
│ │ │ -
1735
│ │ │ -
1736#if __cplusplus > 201703L
│ │ │ -
1737 ///@{
│ │ │ -
1738 /**
│ │ │ -
1739 * @brief Finds whether an element with the given key exists.
│ │ │ -
1740 * @param __x Key of elements to be located.
│ │ │ -
1741 * @return True if there is any element with the specified key.
│ │ │ -
1742 */
│ │ │ -
1743 bool
│ │ │ -
│ │ │ -
1744 contains(const key_type& __x) const
│ │ │ -
1745 { return _M_h.find(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
1746
│ │ │ -
1747 template<typename _Kt>
│ │ │ -
1748 auto
│ │ │ -
│ │ │ -
1749 contains(const _Kt& __x) const
│ │ │ -
1750 -> decltype(_M_h._M_find_tr(__x), void(), true)
│ │ │ -
1751 { return _M_h._M_find_tr(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
1752 ///@}
│ │ │ -
1753#endif
│ │ │ -
1754
│ │ │ -
1755 ///@{
│ │ │ -
1756 /**
│ │ │ -
1757 * @brief Finds a subsequence matching given key.
│ │ │ -
1758 * @param __x Key to be located.
│ │ │ -
1759 * @return Pair of iterators that possibly points to the subsequence
│ │ │ -
1760 * matching given key.
│ │ │ -
1761 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1764 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
1765
│ │ │ -
1766#if __cplusplus > 201703L
│ │ │ -
1767 template<typename _Kt>
│ │ │ -
1768 auto
│ │ │ -
│ │ │ -
1769 equal_range(const _Kt& __x)
│ │ │ -
1770 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ -
1771 { return _M_h._M_equal_range_tr(__x); }
│ │ │ -
│ │ │ -
1772#endif
│ │ │ -
1773
│ │ │ - │ │ │ + │ │ │ +
│ │ │ +
1666 cend() const noexcept
│ │ │ +
1667 { return _M_h.end(); }
│ │ │ +
│ │ │ +
1668 ///@}
│ │ │ +
1669
│ │ │ +
1670 // modifiers.
│ │ │ +
1671
│ │ │ +
1672 /**
│ │ │ +
1673 * @brief Attempts to build and insert a std::pair into the
│ │ │ +
1674 * %unordered_multimap.
│ │ │ +
1675 *
│ │ │ +
1676 * @param __args Arguments used to generate a new pair instance (see
│ │ │ +
1677 * std::piecewise_contruct for passing arguments to each
│ │ │ +
1678 * part of the pair constructor).
│ │ │ +
1679 *
│ │ │ +
1680 * @return An iterator that points to the inserted pair.
│ │ │ +
1681 *
│ │ │ +
1682 * This function attempts to build and insert a (key, value) %pair into
│ │ │ +
1683 * the %unordered_multimap.
│ │ │ +
1684 *
│ │ │ +
1685 * Insertion requires amortized constant time.
│ │ │ +
1686 */
│ │ │ +
1687 template<typename... _Args>
│ │ │ +
1688 iterator
│ │ │ +
│ │ │ + │ │ │ +
1690 { return _M_h.emplace(std::forward<_Args>(__args)...); }
│ │ │ +
│ │ │ +
1691
│ │ │ +
1692 /**
│ │ │ +
1693 * @brief Attempts to build and insert a std::pair into the
│ │ │ +
1694 * %unordered_multimap.
│ │ │ +
1695 *
│ │ │ +
1696 * @param __pos An iterator that serves as a hint as to where the pair
│ │ │ +
1697 * should be inserted.
│ │ │ +
1698 * @param __args Arguments used to generate a new pair instance (see
│ │ │ +
1699 * std::piecewise_contruct for passing arguments to each
│ │ │ +
1700 * part of the pair constructor).
│ │ │ +
1701 * @return An iterator that points to the element with key of the
│ │ │ +
1702 * std::pair built from @a __args.
│ │ │ +
1703 *
│ │ │ +
1704 * Note that the first parameter is only a hint and can potentially
│ │ │ +
1705 * improve the performance of the insertion process. A bad hint would
│ │ │ +
1706 * cause no gains in efficiency.
│ │ │ +
1707 *
│ │ │ +
1708 * See
│ │ │ +
1709 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ +
1710 * for more on @a hinting.
│ │ │ +
1711 *
│ │ │ +
1712 * Insertion requires amortized constant time.
│ │ │ +
1713 */
│ │ │ +
1714 template<typename... _Args>
│ │ │ +
1715 iterator
│ │ │ +
│ │ │ + │ │ │ +
1717 { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
│ │ │ +
│ │ │ +
1718
│ │ │ +
1719 ///@{
│ │ │ +
1720 /**
│ │ │ +
1721 * @brief Inserts a std::pair into the %unordered_multimap.
│ │ │ +
1722 * @param __x Pair to be inserted (see std::make_pair for easy
│ │ │ +
1723 * creation of pairs).
│ │ │ +
1724 *
│ │ │ +
1725 * @return An iterator that points to the inserted pair.
│ │ │ +
1726 *
│ │ │ +
1727 * Insertion requires amortized constant time.
│ │ │ +
1728 */
│ │ │ +
1729 iterator
│ │ │ +
│ │ │ +
1730 insert(const value_type& __x)
│ │ │ +
1731 { return _M_h.insert(__x); }
│ │ │ +
│ │ │ +
1732
│ │ │ +
1733 iterator
│ │ │ +
│ │ │ + │ │ │ +
1735 { return _M_h.insert(std::move(__x)); }
│ │ │ +
│ │ │ +
1736
│ │ │ +
1737 template<typename _Pair>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1740 { return _M_h.emplace(std::forward<_Pair>(__x)); }
│ │ │ +
│ │ │ +
1741 ///@}
│ │ │ +
1742
│ │ │ +
1743 ///@{
│ │ │ +
1744 /**
│ │ │ +
1745 * @brief Inserts a std::pair into the %unordered_multimap.
│ │ │ +
1746 * @param __hint An iterator that serves as a hint as to where the
│ │ │ +
1747 * pair should be inserted.
│ │ │ +
1748 * @param __x Pair to be inserted (see std::make_pair for easy creation
│ │ │ +
1749 * of pairs).
│ │ │ +
1750 * @return An iterator that points to the element with key of
│ │ │ +
1751 * @a __x (may or may not be the %pair passed in).
│ │ │ +
1752 *
│ │ │ +
1753 * Note that the first parameter is only a hint and can potentially
│ │ │ +
1754 * improve the performance of the insertion process. A bad hint would
│ │ │ +
1755 * cause no gains in efficiency.
│ │ │ +
1756 *
│ │ │ +
1757 * See
│ │ │ +
1758 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ +
1759 * for more on @a hinting.
│ │ │ +
1760 *
│ │ │ +
1761 * Insertion requires amortized constant time.
│ │ │ +
1762 */
│ │ │ +
1763 iterator
│ │ │ +
│ │ │ + │ │ │ +
1765 { return _M_h.insert(__hint, __x); }
│ │ │ +
│ │ │ +
1766
│ │ │ +
1767 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
1768 // 2354. Unnecessary copying when inserting into maps with braced-init
│ │ │ +
1769 iterator
│ │ │ +
│ │ │ + │ │ │ +
1771 { return _M_h.insert(__hint, std::move(__x)); }
│ │ │ +
│ │ │ +
1772
│ │ │ +
1773 template<typename _Pair>
│ │ │ + │ │ │
│ │ │ -
1775 equal_range(const key_type& __x) const
│ │ │ -
1776 { return _M_h.equal_range(__x); }
│ │ │ + │ │ │ +
1776 { return _M_h.emplace_hint(__hint, std::forward<_Pair>(__x)); }
│ │ │
│ │ │ -
1777
│ │ │ -
1778#if __cplusplus > 201703L
│ │ │ -
1779 template<typename _Kt>
│ │ │ -
1780 auto
│ │ │ -
│ │ │ -
1781 equal_range(const _Kt& __x) const
│ │ │ -
1782 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ -
1783 { return _M_h._M_equal_range_tr(__x); }
│ │ │ -
│ │ │ -
1784#endif
│ │ │ -
1785 ///@}
│ │ │ -
1786
│ │ │ -
1787 // bucket interface.
│ │ │ -
1788
│ │ │ -
1789 /// Returns the number of buckets of the %unordered_multiset.
│ │ │ -
1790 size_type
│ │ │ -
│ │ │ - │ │ │ -
1792 { return _M_h.bucket_count(); }
│ │ │ -
│ │ │ -
1793
│ │ │ -
1794 /// Returns the maximum number of buckets of the %unordered_multiset.
│ │ │ -
1795 size_type
│ │ │ -
│ │ │ - │ │ │ -
1797 { return _M_h.max_bucket_count(); }
│ │ │ -
│ │ │ -
1798
│ │ │ -
1799 /*
│ │ │ -
1800 * @brief Returns the number of elements in a given bucket.
│ │ │ -
1801 * @param __n A bucket index.
│ │ │ -
1802 * @return The number of elements in the bucket.
│ │ │ -
1803 */
│ │ │ -
1804 size_type
│ │ │ -
1805 bucket_size(size_type __n) const
│ │ │ -
1806 { return _M_h.bucket_size(__n); }
│ │ │ -
1807
│ │ │ -
1808 /*
│ │ │ -
1809 * @brief Returns the bucket index of a given element.
│ │ │ -
1810 * @param __key A key instance.
│ │ │ -
1811 * @return The key bucket index.
│ │ │ -
1812 */
│ │ │ -
1813 size_type
│ │ │ -
1814 bucket(const key_type& __key) const
│ │ │ -
1815 { return _M_h.bucket(__key); }
│ │ │ -
1816
│ │ │ -
1817 ///@{
│ │ │ -
1818 /**
│ │ │ -
1819 * @brief Returns a read-only (constant) iterator pointing to the first
│ │ │ -
1820 * bucket element.
│ │ │ -
1821 * @param __n The bucket index.
│ │ │ -
1822 * @return A read-only local iterator.
│ │ │ -
1823 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1826 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
1827
│ │ │ - │ │ │ -
│ │ │ -
1829 begin(size_type __n) const
│ │ │ -
1830 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
1831
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1834 { return _M_h.cbegin(__n); }
│ │ │ -
│ │ │ -
1835 ///@}
│ │ │ -
1836
│ │ │ -
1837 ///@{
│ │ │ -
1838 /**
│ │ │ -
1839 * @brief Returns a read-only (constant) iterator pointing to one past
│ │ │ -
1840 * the last bucket elements.
│ │ │ -
1841 * @param __n The bucket index.
│ │ │ -
1842 * @return A read-only local iterator.
│ │ │ -
1843 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1846 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
1847
│ │ │ - │ │ │ -
│ │ │ -
1849 end(size_type __n) const
│ │ │ -
1850 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
1851
│ │ │ - │ │ │ -
│ │ │ -
1853 cend(size_type __n) const
│ │ │ -
1854 { return _M_h.cend(__n); }
│ │ │ -
│ │ │ -
1855 ///@}
│ │ │ -
1856
│ │ │ -
1857 // hash policy.
│ │ │ -
1858
│ │ │ -
1859 /// Returns the average number of elements per bucket.
│ │ │ -
1860 float
│ │ │ -
│ │ │ - │ │ │ -
1862 { return _M_h.load_factor(); }
│ │ │ -
│ │ │ -
1863
│ │ │ -
1864 /// Returns a positive number that the %unordered_multiset tries to keep the
│ │ │ -
1865 /// load factor less than or equal to.
│ │ │ -
1866 float
│ │ │ -
│ │ │ - │ │ │ -
1868 { return _M_h.max_load_factor(); }
│ │ │ -
│ │ │ -
1869
│ │ │ -
1870 /**
│ │ │ -
1871 * @brief Change the %unordered_multiset maximum load factor.
│ │ │ -
1872 * @param __z The new maximum load factor.
│ │ │ -
1873 */
│ │ │ -
1874 void
│ │ │ -
│ │ │ - │ │ │ -
1876 { _M_h.max_load_factor(__z); }
│ │ │ -
│ │ │ -
1877
│ │ │ -
1878 /**
│ │ │ -
1879 * @brief May rehash the %unordered_multiset.
│ │ │ -
1880 * @param __n The new number of buckets.
│ │ │ -
1881 *
│ │ │ -
1882 * Rehash will occur only if the new number of buckets respect the
│ │ │ -
1883 * %unordered_multiset maximum load factor.
│ │ │ -
1884 */
│ │ │ -
1885 void
│ │ │ -
│ │ │ - │ │ │ -
1887 { _M_h.rehash(__n); }
│ │ │ -
│ │ │ -
1888
│ │ │ -
1889 /**
│ │ │ -
1890 * @brief Prepare the %unordered_multiset for a specified number of
│ │ │ -
1891 * elements.
│ │ │ -
1892 * @param __n Number of elements required.
│ │ │ -
1893 *
│ │ │ -
1894 * Same as rehash(ceil(n / max_load_factor())).
│ │ │ -
1895 */
│ │ │ -
1896 void
│ │ │ -
│ │ │ - │ │ │ -
1898 { _M_h.reserve(__n); }
│ │ │ -
│ │ │ -
1899
│ │ │ -
1900 template<typename _Value1, typename _Hash1, typename _Pred1,
│ │ │ -
1901 typename _Alloc1>
│ │ │ -
1902 friend bool
│ │ │ - │ │ │ - │ │ │ -
1905 };
│ │ │ -
│ │ │ -
1906
│ │ │ -
1907
│ │ │ -
1908#if __cpp_deduction_guides >= 201606
│ │ │ -
1909
│ │ │ -
1910 template<typename _InputIterator,
│ │ │ -
1911 typename _Hash =
│ │ │ -
1912 hash<typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
1913 typename _Pred =
│ │ │ -
1914 equal_to<typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
1915 typename _Allocator =
│ │ │ -
1916 allocator<typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
1917 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1918 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1919 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
1920 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1921 unordered_multiset(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
1923 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ -
1924 _Allocator = _Allocator())
│ │ │ -
1925 -> unordered_multiset<typename iterator_traits<_InputIterator>::value_type,
│ │ │ -
1926 _Hash, _Pred, _Allocator>;
│ │ │ -
1927
│ │ │ -
1928 template<typename _Tp, typename _Hash = hash<_Tp>,
│ │ │ -
1929 typename _Pred = equal_to<_Tp>,
│ │ │ -
1930 typename _Allocator = allocator<_Tp>,
│ │ │ -
1931 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1932 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
1933 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1934 unordered_multiset(initializer_list<_Tp>,
│ │ │ - │ │ │ -
1936 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ -
1937 _Allocator = _Allocator())
│ │ │ -
1938 -> unordered_multiset<_Tp, _Hash, _Pred, _Allocator>;
│ │ │ -
1939
│ │ │ -
1940 template<typename _InputIterator, typename _Allocator,
│ │ │ -
1941 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1942 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1943 unordered_multiset(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
1945 -> unordered_multiset<typename iterator_traits<_InputIterator>::value_type,
│ │ │ -
1946 hash<typename
│ │ │ -
1947 iterator_traits<_InputIterator>::value_type>,
│ │ │ -
1948 equal_to<typename
│ │ │ -
1949 iterator_traits<_InputIterator>::value_type>,
│ │ │ -
1950 _Allocator>;
│ │ │ -
1951
│ │ │ -
1952 template<typename _InputIterator, typename _Hash, typename _Allocator,
│ │ │ -
1953 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1954 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1955 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1956 unordered_multiset(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
1958 _Hash, _Allocator)
│ │ │ -
1959 -> unordered_multiset<typename
│ │ │ -
1960 iterator_traits<_InputIterator>::value_type,
│ │ │ -
1961 _Hash,
│ │ │ -
1962 equal_to<
│ │ │ -
1963 typename
│ │ │ -
1964 iterator_traits<_InputIterator>::value_type>,
│ │ │ -
1965 _Allocator>;
│ │ │ -
1966
│ │ │ -
1967 template<typename _Tp, typename _Allocator,
│ │ │ -
1968 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1969 unordered_multiset(initializer_list<_Tp>,
│ │ │ - │ │ │ -
1971 -> unordered_multiset<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>;
│ │ │ -
1972
│ │ │ -
1973 template<typename _Tp, typename _Hash, typename _Allocator,
│ │ │ -
1974 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1975 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1976 unordered_multiset(initializer_list<_Tp>,
│ │ │ -
1977 unordered_multiset<int>::size_type, _Hash, _Allocator)
│ │ │ -
1978 -> unordered_multiset<_Tp, _Hash, equal_to<_Tp>, _Allocator>;
│ │ │ +
1777 ///@}
│ │ │ +
1778
│ │ │ +
1779 /**
│ │ │ +
1780 * @brief A template function that attempts to insert a range of
│ │ │ +
1781 * elements.
│ │ │ +
1782 * @param __first Iterator pointing to the start of the range to be
│ │ │ +
1783 * inserted.
│ │ │ +
1784 * @param __last Iterator pointing to the end of the range.
│ │ │ +
1785 *
│ │ │ +
1786 * Complexity similar to that of the range constructor.
│ │ │ +
1787 */
│ │ │ +
1788 template<typename _InputIterator>
│ │ │ +
1789 void
│ │ │ +
│ │ │ + │ │ │ +
1791 { _M_h.insert(__first, __last); }
│ │ │ +
│ │ │ +
1792
│ │ │ +
1793 /**
│ │ │ +
1794 * @brief Attempts to insert a list of elements into the
│ │ │ +
1795 * %unordered_multimap.
│ │ │ +
1796 * @param __l A std::initializer_list<value_type> of elements
│ │ │ +
1797 * to be inserted.
│ │ │ +
1798 *
│ │ │ +
1799 * Complexity similar to that of the range constructor.
│ │ │ +
1800 */
│ │ │ +
1801 void
│ │ │ +
│ │ │ + │ │ │ +
1803 { _M_h.insert(__l); }
│ │ │ +
│ │ │ +
1804
│ │ │ +
1805#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
1806 /**
│ │ │ +
1807 * @brief Inserts a range of elements.
│ │ │ +
1808 * @since C++23
│ │ │ +
1809 * @param __rg An input range of elements that can be converted to
│ │ │ +
1810 * the maps's value type.
│ │ │ +
1811 */
│ │ │ +
1812 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ +
1813 void
│ │ │ + │ │ │ +
1815 {
│ │ │ +
1816 auto __first = ranges::begin(__rg);
│ │ │ +
1817 const auto __last = ranges::end(__rg);
│ │ │ +
1818 if (__first == __last)
│ │ │ +
1819 return;
│ │ │ +
1820
│ │ │ +
1821 if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>)
│ │ │ +
1822 _M_h._M_rehash_insert(size_type(ranges::distance(__rg)));
│ │ │ +
1823 else
│ │ │ +
1824 _M_h._M_rehash_insert(1);
│ │ │ +
1825
│ │ │ +
1826 for (; __first != __last; ++__first)
│ │ │ +
1827 _M_h.emplace(*__first);
│ │ │ +
1828 }
│ │ │ +
1829#endif
│ │ │ +
1830
│ │ │ +
1831#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ +
1832 /// Extract a node.
│ │ │ +
1833 node_type
│ │ │ +
│ │ │ + │ │ │ +
1835 {
│ │ │ +
1836 __glibcxx_assert(__pos != end());
│ │ │ +
1837 return _M_h.extract(__pos);
│ │ │ +
1838 }
│ │ │ +
│ │ │ +
1839
│ │ │ +
1840 /// Extract a node.
│ │ │ +
1841 node_type
│ │ │ +
│ │ │ + │ │ │ +
1843 { return _M_h.extract(__key); }
│ │ │ +
│ │ │ +
1844
│ │ │ +
1845 /// Re-insert an extracted node.
│ │ │ +
1846 iterator
│ │ │ +
│ │ │ +
1847 insert(node_type&& __nh)
│ │ │ +
1848 { return _M_h._M_reinsert_node_multi(cend(), std::move(__nh)); }
│ │ │ +
│ │ │ +
1849
│ │ │ +
1850 /// Re-insert an extracted node.
│ │ │ +
1851 iterator
│ │ │ +
│ │ │ + │ │ │ +
1853 { return _M_h._M_reinsert_node_multi(__hint, std::move(__nh)); }
│ │ │ +
│ │ │ +
1854#endif // node_extract
│ │ │ +
1855
│ │ │ +
1856 ///@{
│ │ │ +
1857 /**
│ │ │ +
1858 * @brief Erases an element from an %unordered_multimap.
│ │ │ +
1859 * @param __position An iterator pointing to the element to be erased.
│ │ │ +
1860 * @return An iterator pointing to the element immediately following
│ │ │ +
1861 * @a __position prior to the element being erased. If no such
│ │ │ +
1862 * element exists, end() is returned.
│ │ │ +
1863 *
│ │ │ +
1864 * This function erases an element, pointed to by the given iterator,
│ │ │ +
1865 * from an %unordered_multimap.
│ │ │ +
1866 * Note that this function only erases the element, and that if the
│ │ │ +
1867 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ +
1868 * any way. Managing the pointer is the user's responsibility.
│ │ │ +
1869 */
│ │ │ +
1870 iterator
│ │ │ +
│ │ │ + │ │ │ +
1872 { return _M_h.erase(__position); }
│ │ │ +
│ │ │ +
1873
│ │ │ +
1874 // LWG 2059.
│ │ │ +
1875 iterator
│ │ │ +
│ │ │ + │ │ │ +
1877 { return _M_h.erase(__position); }
│ │ │ +
│ │ │ +
1878 ///@}
│ │ │ +
1879
│ │ │ +
1880 /**
│ │ │ +
1881 * @brief Erases elements according to the provided key.
│ │ │ +
1882 * @param __x Key of elements to be erased.
│ │ │ +
1883 * @return The number of elements erased.
│ │ │ +
1884 *
│ │ │ +
1885 * This function erases all the elements located by the given key from
│ │ │ +
1886 * an %unordered_multimap.
│ │ │ +
1887 * Note that this function only erases the element, and that if the
│ │ │ +
1888 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ +
1889 * any way. Managing the pointer is the user's responsibility.
│ │ │ +
1890 */
│ │ │ +
1891 size_type
│ │ │ +
│ │ │ +
1892 erase(const key_type& __x)
│ │ │ +
1893 { return _M_h.erase(__x); }
│ │ │ +
│ │ │ +
1894
│ │ │ +
1895 /**
│ │ │ +
1896 * @brief Erases a [__first,__last) range of elements from an
│ │ │ +
1897 * %unordered_multimap.
│ │ │ +
1898 * @param __first Iterator pointing to the start of the range to be
│ │ │ +
1899 * erased.
│ │ │ +
1900 * @param __last Iterator pointing to the end of the range to
│ │ │ +
1901 * be erased.
│ │ │ +
1902 * @return The iterator @a __last.
│ │ │ +
1903 *
│ │ │ +
1904 * This function erases a sequence of elements from an
│ │ │ +
1905 * %unordered_multimap.
│ │ │ +
1906 * Note that this function only erases the elements, and that if
│ │ │ +
1907 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ +
1908 * in any way. Managing the pointer is the user's responsibility.
│ │ │ +
1909 */
│ │ │ +
1910 iterator
│ │ │ +
│ │ │ + │ │ │ +
1912 { return _M_h.erase(__first, __last); }
│ │ │ +
│ │ │ +
1913
│ │ │ +
1914 /**
│ │ │ +
1915 * Erases all elements in an %unordered_multimap.
│ │ │ +
1916 * Note that this function only erases the elements, and that if the
│ │ │ +
1917 * elements themselves are pointers, the pointed-to memory is not touched
│ │ │ +
1918 * in any way. Managing the pointer is the user's responsibility.
│ │ │ +
1919 */
│ │ │ +
1920 void
│ │ │ +
│ │ │ +
1921 clear() noexcept
│ │ │ +
1922 { _M_h.clear(); }
│ │ │ +
│ │ │ +
1923
│ │ │ +
1924 /**
│ │ │ +
1925 * @brief Swaps data with another %unordered_multimap.
│ │ │ +
1926 * @param __x An %unordered_multimap of the same element and allocator
│ │ │ +
1927 * types.
│ │ │ +
1928 *
│ │ │ +
1929 * This exchanges the elements between two %unordered_multimap in
│ │ │ +
1930 * constant time.
│ │ │ +
1931 * Note that the global std::swap() function is specialized such that
│ │ │ +
1932 * std::swap(m1,m2) will feed to this function.
│ │ │ +
1933 */
│ │ │ +
1934 void
│ │ │ +
│ │ │ + │ │ │ +
1936 noexcept( noexcept(_M_h.swap(__x._M_h)) )
│ │ │ +
1937 { _M_h.swap(__x._M_h); }
│ │ │ +
│ │ │ +
1938
│ │ │ +
1939#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ +
1940 template<typename, typename, typename>
│ │ │ +
1941 friend class std::_Hash_merge_helper;
│ │ │ +
1942
│ │ │ +
1943 template<typename _H2, typename _P2>
│ │ │ +
1944 void
│ │ │ + │ │ │ +
1946 {
│ │ │ + │ │ │ +
1948 if (std::__addressof(__source) == this) [[__unlikely__]]
│ │ │ +
1949 return;
│ │ │ +
1950
│ │ │ +
1951 using _Merge_helper
│ │ │ + │ │ │ +
1953 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ +
1954 }
│ │ │ +
1955
│ │ │ +
1956 template<typename _H2, typename _P2>
│ │ │ +
1957 void
│ │ │ +
1958 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ +
1959 {
│ │ │ +
1960 using _Merge_helper
│ │ │ +
1961 = _Hash_merge_helper<unordered_multimap, _H2, _P2>;
│ │ │ +
1962 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ +
1963 }
│ │ │ +
1964
│ │ │ +
1965 template<typename _H2, typename _P2>
│ │ │ +
1966 void
│ │ │ +
1967 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>& __source)
│ │ │ +
1968 {
│ │ │ +
1969 using _Merge_helper
│ │ │ +
1970 = _Hash_merge_helper<unordered_multimap, _H2, _P2>;
│ │ │ +
1971 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ +
1972 }
│ │ │ +
1973
│ │ │ +
1974 template<typename _H2, typename _P2>
│ │ │ +
1975 void
│ │ │ +
1976 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ +
1977 { merge(__source); }
│ │ │ +
1978#endif // node_extract
│ │ │
1979
│ │ │ -
1980#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
1981 template<ranges::input_range _Rg,
│ │ │ -
1982 __not_allocator_like _Hash = hash<ranges::range_value_t<_Rg>>,
│ │ │ -
1983 __not_allocator_like _Pred = equal_to<ranges::range_value_t<_Rg>>,
│ │ │ -
1984 __allocator_like _Allocator = allocator<ranges::range_value_t<_Rg>>>
│ │ │ -
1985 unordered_multiset(from_range_t, _Rg&&,
│ │ │ - │ │ │ -
1987 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ -
1988 _Allocator = _Allocator())
│ │ │ -
1989 -> unordered_multiset<ranges::range_value_t<_Rg>, _Hash, _Pred, _Allocator>;
│ │ │ -
1990
│ │ │ -
1991 template<ranges::input_range _Rg,
│ │ │ -
1992 __allocator_like _Allocator>
│ │ │ -
1993 unordered_multiset(from_range_t, _Rg&&, _Allocator)
│ │ │ -
1994 -> unordered_multiset<ranges::range_value_t<_Rg>,
│ │ │ -
1995 hash<ranges::range_value_t<_Rg>>,
│ │ │ -
1996 equal_to<ranges::range_value_t<_Rg>>,
│ │ │ -
1997 _Allocator>;
│ │ │ -
1998
│ │ │ -
1999 template<ranges::input_range _Rg,
│ │ │ -
2000 __allocator_like _Allocator>
│ │ │ -
2001 unordered_multiset(from_range_t, _Rg&&, unordered_multiset<int>::size_type,
│ │ │ -
2002 _Allocator)
│ │ │ -
2003 -> unordered_multiset<ranges::range_value_t<_Rg>,
│ │ │ -
2004 hash<ranges::range_value_t<_Rg>>,
│ │ │ -
2005 equal_to<ranges::range_value_t<_Rg>>,
│ │ │ -
2006 _Allocator>;
│ │ │ -
2007
│ │ │ -
2008 template<ranges::input_range _Rg,
│ │ │ -
2009 __not_allocator_like _Hash,
│ │ │ -
2010 __allocator_like _Allocator>
│ │ │ -
2011 unordered_multiset(from_range_t, _Rg&&,
│ │ │ - │ │ │ -
2013 _Hash, _Allocator)
│ │ │ -
2014 -> unordered_multiset<ranges::range_value_t<_Rg>, _Hash,
│ │ │ -
2015 equal_to<ranges::range_value_t<_Rg>>,
│ │ │ -
2016 _Allocator>;
│ │ │ +
1980 // observers.
│ │ │ +
1981
│ │ │ +
1982 /// Returns the hash functor object with which the %unordered_multimap
│ │ │ +
1983 /// was constructed.
│ │ │ +
1984 hasher
│ │ │ +
│ │ │ + │ │ │ +
1986 { return _M_h.hash_function(); }
│ │ │ +
│ │ │ +
1987
│ │ │ +
1988 /// Returns the key comparison object with which the %unordered_multimap
│ │ │ +
1989 /// was constructed.
│ │ │ +
1990 key_equal
│ │ │ +
│ │ │ +
1991 key_eq() const
│ │ │ +
1992 { return _M_h.key_eq(); }
│ │ │ +
│ │ │ +
1993
│ │ │ +
1994 // lookup.
│ │ │ +
1995
│ │ │ +
1996 ///@{
│ │ │ +
1997 /**
│ │ │ +
1998 * @brief Tries to locate an element in an %unordered_multimap.
│ │ │ +
1999 * @param __x Key to be located.
│ │ │ +
2000 * @return Iterator pointing to sought-after element, or end() if not
│ │ │ +
2001 * found.
│ │ │ +
2002 *
│ │ │ +
2003 * This function takes a key and tries to locate the element with which
│ │ │ +
2004 * the key matches. If successful the function returns an iterator
│ │ │ +
2005 * pointing to the sought after element. If unsuccessful it returns the
│ │ │ +
2006 * past-the-end ( @c end() ) iterator.
│ │ │ +
2007 */
│ │ │ +
2008 iterator
│ │ │ +
│ │ │ +
2009 find(const key_type& __x)
│ │ │ +
2010 { return _M_h.find(__x); }
│ │ │ +
│ │ │ +
2011
│ │ │ +
2012#if __cplusplus > 201703L
│ │ │ +
2013 template<typename _Kt>
│ │ │ +
2014 auto
│ │ │ +
│ │ │ +
2015 find(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x))
│ │ │ +
2016 { return _M_h._M_find_tr(__x); }
│ │ │ +
│ │ │
2017#endif
│ │ │ -
2018#endif
│ │ │ -
2019
│ │ │ -
2020 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2021 inline void
│ │ │ -
2022 swap(unordered_set<_Value, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
2023 unordered_set<_Value, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
2024 noexcept(noexcept(__x.swap(__y)))
│ │ │ -
2025 { __x.swap(__y); }
│ │ │ -
2026
│ │ │ -
2027 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2028 inline void
│ │ │ -
2029 swap(unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
2030 unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
2031 noexcept(noexcept(__x.swap(__y)))
│ │ │ -
2032 { __x.swap(__y); }
│ │ │ -
2033
│ │ │ -
2034 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2035 inline bool
│ │ │ -
2036 operator==(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
2037 const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
2038 { return __x._M_h._M_equal(__y._M_h); }
│ │ │ -
2039
│ │ │ -
2040#if __cpp_impl_three_way_comparison < 201907L
│ │ │ -
2041 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2042 inline bool
│ │ │ -
2043 operator!=(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
2044 const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
2045 { return !(__x == __y); }
│ │ │ -
2046#endif
│ │ │ -
2047
│ │ │ -
2048 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2049 inline bool
│ │ │ -
2050 operator==(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
2051 const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
2052 { return __x._M_h._M_equal(__y._M_h); }
│ │ │ -
2053
│ │ │ -
2054#if __cpp_impl_three_way_comparison < 201907L
│ │ │ -
2055 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2056 inline bool
│ │ │ -
2057 operator!=(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
2058 const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
2059 { return !(__x == __y); }
│ │ │ -
2060#endif
│ │ │ -
2061
│ │ │ -
2062_GLIBCXX_END_NAMESPACE_CONTAINER
│ │ │ -
2063
│ │ │ -
2064#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
2065 // Allow std::unordered_set access to internals of compatible sets.
│ │ │ -
2066 template<typename _Val, typename _Hash1, typename _Eq1, typename _Alloc,
│ │ │ -
2067 typename _Hash2, typename _Eq2>
│ │ │ -
2068 struct _Hash_merge_helper<
│ │ │ -
2069 _GLIBCXX_STD_C::unordered_set<_Val, _Hash1, _Eq1, _Alloc>, _Hash2, _Eq2>
│ │ │ -
2070 {
│ │ │ -
2071 private:
│ │ │ -
2072 template<typename... _Tp>
│ │ │ -
2073 using unordered_set = _GLIBCXX_STD_C::unordered_set<_Tp...>;
│ │ │ -
2074 template<typename... _Tp>
│ │ │ -
2075 using unordered_multiset = _GLIBCXX_STD_C::unordered_multiset<_Tp...>;
│ │ │ -
2076
│ │ │ -
2077 friend unordered_set<_Val, _Hash1, _Eq1, _Alloc>;
│ │ │ +
2018
│ │ │ + │ │ │ +
│ │ │ +
2020 find(const key_type& __x) const
│ │ │ +
2021 { return _M_h.find(__x); }
│ │ │ +
│ │ │ +
2022
│ │ │ +
2023#if __cplusplus > 201703L
│ │ │ +
2024 template<typename _Kt>
│ │ │ +
2025 auto
│ │ │ +
│ │ │ +
2026 find(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x))
│ │ │ +
2027 { return _M_h._M_find_tr(__x); }
│ │ │ +
│ │ │ +
2028#endif
│ │ │ +
2029 ///@}
│ │ │ +
2030
│ │ │ +
2031 ///@{
│ │ │ +
2032 /**
│ │ │ +
2033 * @brief Finds the number of elements.
│ │ │ +
2034 * @param __x Key to count.
│ │ │ +
2035 * @return Number of elements with specified key.
│ │ │ +
2036 */
│ │ │ +
2037 size_type
│ │ │ +
│ │ │ +
2038 count(const key_type& __x) const
│ │ │ +
2039 { return _M_h.count(__x); }
│ │ │ +
│ │ │ +
2040
│ │ │ +
2041#if __cplusplus > 201703L
│ │ │ +
2042 template<typename _Kt>
│ │ │ +
2043 auto
│ │ │ +
│ │ │ +
2044 count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x))
│ │ │ +
2045 { return _M_h._M_count_tr(__x); }
│ │ │ +
│ │ │ +
2046#endif
│ │ │ +
2047 ///@}
│ │ │ +
2048
│ │ │ +
2049#if __cplusplus > 201703L
│ │ │ +
2050 ///@{
│ │ │ +
2051 /**
│ │ │ +
2052 * @brief Finds whether an element with the given key exists.
│ │ │ +
2053 * @param __x Key of elements to be located.
│ │ │ +
2054 * @return True if there is any element with the specified key.
│ │ │ +
2055 */
│ │ │ +
2056 bool
│ │ │ +
│ │ │ +
2057 contains(const key_type& __x) const
│ │ │ +
2058 { return _M_h.find(__x) != _M_h.end(); }
│ │ │ +
│ │ │ +
2059
│ │ │ +
2060 template<typename _Kt>
│ │ │ +
2061 auto
│ │ │ +
│ │ │ +
2062 contains(const _Kt& __x) const
│ │ │ +
2063 -> decltype(_M_h._M_find_tr(__x), void(), true)
│ │ │ +
2064 { return _M_h._M_find_tr(__x) != _M_h.end(); }
│ │ │ +
│ │ │ +
2065 ///@}
│ │ │ +
2066#endif
│ │ │ +
2067
│ │ │ +
2068 ///@{
│ │ │ +
2069 /**
│ │ │ +
2070 * @brief Finds a subsequence matching given key.
│ │ │ +
2071 * @param __x Key to be located.
│ │ │ +
2072 * @return Pair of iterators that possibly points to the subsequence
│ │ │ +
2073 * matching given key.
│ │ │ +
2074 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
2077 { return _M_h.equal_range(__x); }
│ │ │ +
│ │ │
2078
│ │ │ -
2079 static auto&
│ │ │ -
2080 _S_get_table(unordered_set<_Val, _Hash2, _Eq2, _Alloc>& __set)
│ │ │ -
2081 { return __set._M_h; }
│ │ │ -
2082
│ │ │ -
2083 static auto&
│ │ │ -
2084 _S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set)
│ │ │ -
2085 { return __set._M_h; }
│ │ │ -
2086 };
│ │ │ -
2087
│ │ │ -
2088 // Allow std::unordered_multiset access to internals of compatible sets.
│ │ │ -
2089 template<typename _Val, typename _Hash1, typename _Eq1, typename _Alloc,
│ │ │ -
2090 typename _Hash2, typename _Eq2>
│ │ │ -
2091 struct _Hash_merge_helper<
│ │ │ -
2092 _GLIBCXX_STD_C::unordered_multiset<_Val, _Hash1, _Eq1, _Alloc>,
│ │ │ -
2093 _Hash2, _Eq2>
│ │ │ -
2094 {
│ │ │ -
2095 private:
│ │ │ -
2096 template<typename... _Tp>
│ │ │ -
2097 using unordered_set = _GLIBCXX_STD_C::unordered_set<_Tp...>;
│ │ │ -
2098 template<typename... _Tp>
│ │ │ -
2099 using unordered_multiset = _GLIBCXX_STD_C::unordered_multiset<_Tp...>;
│ │ │ -
2100
│ │ │ -
2101 friend unordered_multiset<_Val, _Hash1, _Eq1, _Alloc>;
│ │ │ -
2102
│ │ │ -
2103 static auto&
│ │ │ -
2104 _S_get_table(unordered_set<_Val, _Hash2, _Eq2, _Alloc>& __set)
│ │ │ -
2105 { return __set._M_h; }
│ │ │ -
2106
│ │ │ -
2107 static auto&
│ │ │ -
2108 _S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set)
│ │ │ -
2109 { return __set._M_h; }
│ │ │ -
2110 };
│ │ │ -
2111#endif // node_extract
│ │ │ -
2112
│ │ │ -
2113_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
2114} // namespace std
│ │ │ -
2115
│ │ │ -
2116#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
│ │ │ +
2079#if __cplusplus > 201703L
│ │ │ +
2080 template<typename _Kt>
│ │ │ +
2081 auto
│ │ │ +
│ │ │ +
2082 equal_range(const _Kt& __x)
│ │ │ +
2083 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ +
2084 { return _M_h._M_equal_range_tr(__x); }
│ │ │ +
│ │ │ +
2085#endif
│ │ │ +
2086
│ │ │ + │ │ │ +
│ │ │ +
2088 equal_range(const key_type& __x) const
│ │ │ +
2089 { return _M_h.equal_range(__x); }
│ │ │ +
│ │ │ +
2090
│ │ │ +
2091#if __cplusplus > 201703L
│ │ │ +
2092 template<typename _Kt>
│ │ │ +
2093 auto
│ │ │ +
│ │ │ +
2094 equal_range(const _Kt& __x) const
│ │ │ +
2095 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ +
2096 { return _M_h._M_equal_range_tr(__x); }
│ │ │ +
│ │ │ +
2097#endif
│ │ │ +
2098 ///@}
│ │ │ +
2099
│ │ │ +
2100 // bucket interface.
│ │ │ +
2101
│ │ │ +
2102 /// Returns the number of buckets of the %unordered_multimap.
│ │ │ +
2103 size_type
│ │ │ +
│ │ │ + │ │ │ +
2105 { return _M_h.bucket_count(); }
│ │ │ +
│ │ │ +
2106
│ │ │ +
2107 /// Returns the maximum number of buckets of the %unordered_multimap.
│ │ │ +
2108 size_type
│ │ │ +
│ │ │ + │ │ │ +
2110 { return _M_h.max_bucket_count(); }
│ │ │ +
│ │ │ +
2111
│ │ │ +
2112 /*
│ │ │ +
2113 * @brief Returns the number of elements in a given bucket.
│ │ │ +
2114 * @param __n A bucket index.
│ │ │ +
2115 * @return The number of elements in the bucket.
│ │ │ +
2116 */
│ │ │ +
2117 size_type
│ │ │ +
2118 bucket_size(size_type __n) const
│ │ │ +
2119 { return _M_h.bucket_size(__n); }
│ │ │ +
2120
│ │ │ +
2121 /*
│ │ │ +
2122 * @brief Returns the bucket index of a given element.
│ │ │ +
2123 * @param __key A key instance.
│ │ │ +
2124 * @return The key bucket index.
│ │ │ +
2125 */
│ │ │ +
2126 size_type
│ │ │ +
2127 bucket(const key_type& __key) const
│ │ │ +
2128 { return _M_h.bucket(__key); }
│ │ │ +
2129
│ │ │ +
2130 /**
│ │ │ +
2131 * @brief Returns a read/write iterator pointing to the first bucket
│ │ │ +
2132 * element.
│ │ │ +
2133 * @param __n The bucket index.
│ │ │ +
2134 * @return A read/write local iterator.
│ │ │ +
2135 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
2138 { return _M_h.begin(__n); }
│ │ │ +
│ │ │ +
2139
│ │ │ +
2140 ///@{
│ │ │ +
2141 /**
│ │ │ +
2142 * @brief Returns a read-only (constant) iterator pointing to the first
│ │ │ +
2143 * bucket element.
│ │ │ +
2144 * @param __n The bucket index.
│ │ │ +
2145 * @return A read-only local iterator.
│ │ │ +
2146 */
│ │ │ + │ │ │ +
│ │ │ +
2148 begin(size_type __n) const
│ │ │ +
2149 { return _M_h.begin(__n); }
│ │ │ +
│ │ │ +
2150
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
2153 { return _M_h.cbegin(__n); }
│ │ │ +
│ │ │ +
2154 ///@}
│ │ │ +
2155
│ │ │ +
2156 /**
│ │ │ +
2157 * @brief Returns a read/write iterator pointing to one past the last
│ │ │ +
2158 * bucket elements.
│ │ │ +
2159 * @param __n The bucket index.
│ │ │ +
2160 * @return A read/write local iterator.
│ │ │ +
2161 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
2164 { return _M_h.end(__n); }
│ │ │ +
│ │ │ +
2165
│ │ │ +
2166 ///@{
│ │ │ +
2167 /**
│ │ │ +
2168 * @brief Returns a read-only (constant) iterator pointing to one past
│ │ │ +
2169 * the last bucket elements.
│ │ │ +
2170 * @param __n The bucket index.
│ │ │ +
2171 * @return A read-only local iterator.
│ │ │ +
2172 */
│ │ │ + │ │ │ +
│ │ │ +
2174 end(size_type __n) const
│ │ │ +
2175 { return _M_h.end(__n); }
│ │ │ +
│ │ │ +
2176
│ │ │ + │ │ │ +
│ │ │ +
2178 cend(size_type __n) const
│ │ │ +
2179 { return _M_h.cend(__n); }
│ │ │ +
│ │ │ +
2180 ///@}
│ │ │ +
2181
│ │ │ +
2182 // hash policy.
│ │ │ +
2183
│ │ │ +
2184 /// Returns the average number of elements per bucket.
│ │ │ +
2185 float
│ │ │ +
│ │ │ + │ │ │ +
2187 { return _M_h.load_factor(); }
│ │ │ +
│ │ │ +
2188
│ │ │ +
2189 /// Returns a positive number that the %unordered_multimap tries to keep
│ │ │ +
2190 /// the load factor less than or equal to.
│ │ │ +
2191 float
│ │ │ +
│ │ │ + │ │ │ +
2193 { return _M_h.max_load_factor(); }
│ │ │ +
│ │ │ +
2194
│ │ │ +
2195 /**
│ │ │ +
2196 * @brief Change the %unordered_multimap maximum load factor.
│ │ │ +
2197 * @param __z The new maximum load factor.
│ │ │ +
2198 */
│ │ │ +
2199 void
│ │ │ +
│ │ │ + │ │ │ +
2201 { _M_h.max_load_factor(__z); }
│ │ │ +
│ │ │ +
2202
│ │ │ +
2203 /**
│ │ │ +
2204 * @brief May rehash the %unordered_multimap.
│ │ │ +
2205 * @param __n The new number of buckets.
│ │ │ +
2206 *
│ │ │ +
2207 * Rehash will occur only if the new number of buckets respect the
│ │ │ +
2208 * %unordered_multimap maximum load factor.
│ │ │ +
2209 */
│ │ │ +
2210 void
│ │ │ +
│ │ │ + │ │ │ +
2212 { _M_h.rehash(__n); }
│ │ │ +
│ │ │ +
2213
│ │ │ +
2214 /**
│ │ │ +
2215 * @brief Prepare the %unordered_multimap for a specified number of
│ │ │ +
2216 * elements.
│ │ │ +
2217 * @param __n Number of elements required.
│ │ │ +
2218 *
│ │ │ +
2219 * Same as rehash(ceil(n / max_load_factor())).
│ │ │ +
2220 */
│ │ │ +
2221 void
│ │ │ +
│ │ │ + │ │ │ +
2223 { _M_h.reserve(__n); }
│ │ │ +
│ │ │ +
2224
│ │ │ +
2225 template<typename _Key1, typename _Tp1, typename _Hash1, typename _Pred1,
│ │ │ +
2226 typename _Alloc1>
│ │ │ +
2227 friend bool
│ │ │ +
2228 operator==(const unordered_multimap<_Key1, _Tp1,
│ │ │ +
2229 _Hash1, _Pred1, _Alloc1>&,
│ │ │ + │ │ │ +
2231 _Hash1, _Pred1, _Alloc1>&);
│ │ │ +
2232 };
│ │ │ +
│ │ │ +
2233
│ │ │ +
2234#if __cpp_deduction_guides >= 201606
│ │ │ +
2235
│ │ │ +
2236 template<typename _InputIterator,
│ │ │ +
2237 typename _Hash = hash<__iter_key_t<_InputIterator>>,
│ │ │ +
2238 typename _Pred = equal_to<__iter_key_t<_InputIterator>>,
│ │ │ +
2239 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>,
│ │ │ +
2240 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
2241 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
2242 typename = _RequireNotAllocator<_Pred>,
│ │ │ +
2243 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2244 unordered_multimap(_InputIterator, _InputIterator,
│ │ │ + │ │ │ +
2246 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ +
2247 _Allocator = _Allocator())
│ │ │ +
2248 -> unordered_multimap<__iter_key_t<_InputIterator>,
│ │ │ +
2249 __iter_val_t<_InputIterator>, _Hash, _Pred,
│ │ │ +
2250 _Allocator>;
│ │ │ +
2251
│ │ │ +
2252 template<typename _Key, typename _Tp, typename _Hash = hash<_Key>,
│ │ │ +
2253 typename _Pred = equal_to<_Key>,
│ │ │ +
2254 typename _Allocator = allocator<pair<const _Key, _Tp>>,
│ │ │ +
2255 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
2256 typename = _RequireNotAllocator<_Pred>,
│ │ │ +
2257 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2258 unordered_multimap(initializer_list<pair<_Key, _Tp>>,
│ │ │ + │ │ │ +
2260 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ +
2261 _Allocator = _Allocator())
│ │ │ +
2262 -> unordered_multimap<_Key, _Tp, _Hash, _Pred, _Allocator>;
│ │ │ +
2263
│ │ │ +
2264 template<typename _InputIterator, typename _Allocator,
│ │ │ +
2265 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
2266 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2267 unordered_multimap(_InputIterator, _InputIterator,
│ │ │ + │ │ │ +
2269 -> unordered_multimap<__iter_key_t<_InputIterator>,
│ │ │ +
2270 __iter_val_t<_InputIterator>,
│ │ │ +
2271 hash<__iter_key_t<_InputIterator>>,
│ │ │ +
2272 equal_to<__iter_key_t<_InputIterator>>, _Allocator>;
│ │ │ +
2273
│ │ │ +
2274 template<typename _InputIterator, typename _Allocator,
│ │ │ +
2275 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
2276 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2277 unordered_multimap(_InputIterator, _InputIterator, _Allocator)
│ │ │ +
2278 -> unordered_multimap<__iter_key_t<_InputIterator>,
│ │ │ +
2279 __iter_val_t<_InputIterator>,
│ │ │ +
2280 hash<__iter_key_t<_InputIterator>>,
│ │ │ +
2281 equal_to<__iter_key_t<_InputIterator>>, _Allocator>;
│ │ │ +
2282
│ │ │ +
2283 template<typename _InputIterator, typename _Hash, typename _Allocator,
│ │ │ +
2284 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
2285 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
2286 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2287 unordered_multimap(_InputIterator, _InputIterator,
│ │ │ + │ │ │ +
2289 _Allocator)
│ │ │ +
2290 -> unordered_multimap<__iter_key_t<_InputIterator>,
│ │ │ +
2291 __iter_val_t<_InputIterator>, _Hash,
│ │ │ +
2292 equal_to<__iter_key_t<_InputIterator>>, _Allocator>;
│ │ │ +
2293
│ │ │ +
2294 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ +
2295 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2296 unordered_multimap(initializer_list<pair<_Key, _Tp>>,
│ │ │ + │ │ │ +
2298 _Allocator)
│ │ │ +
2299 -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
│ │ │ +
2300
│ │ │ +
2301 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ +
2302 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2303 unordered_multimap(initializer_list<pair<_Key, _Tp>>, _Allocator)
│ │ │ +
2304 -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
│ │ │ +
2305
│ │ │ +
2306 template<typename _Key, typename _Tp, typename _Hash, typename _Allocator,
│ │ │ +
2307 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
2308 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2309 unordered_multimap(initializer_list<pair<_Key, _Tp>>,
│ │ │ + │ │ │ +
2311 _Hash, _Allocator)
│ │ │ +
2312 -> unordered_multimap<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>;
│ │ │ +
2313
│ │ │ +
2314#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ +
2315 template<ranges::input_range _Rg,
│ │ │ +
2316 __not_allocator_like _Hash = hash<__detail::__range_key_type<_Rg>>,
│ │ │ +
2317 __not_allocator_like _Pred = equal_to<__detail::__range_key_type<_Rg>>,
│ │ │ +
2318 __allocator_like _Allocator =
│ │ │ +
2319 allocator<__detail::__range_to_alloc_type<_Rg>>>
│ │ │ +
2320 unordered_multimap(from_range_t, _Rg&&,
│ │ │ + │ │ │ +
2322 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ +
2323 _Allocator = _Allocator())
│ │ │ +
2324 -> unordered_multimap<__detail::__range_key_type<_Rg>,
│ │ │ +
2325 __detail::__range_mapped_type<_Rg>,
│ │ │ +
2326 _Hash, _Pred, _Allocator>;
│ │ │ +
2327
│ │ │ +
2328 template<ranges::input_range _Rg,
│ │ │ +
2329 __allocator_like _Allocator>
│ │ │ +
2330 unordered_multimap(from_range_t, _Rg&&, unordered_multimap<int, int>::size_type,
│ │ │ +
2331 _Allocator)
│ │ │ +
2332 -> unordered_multimap<__detail::__range_key_type<_Rg>,
│ │ │ +
2333 __detail::__range_mapped_type<_Rg>,
│ │ │ +
2334 hash<__detail::__range_key_type<_Rg>>,
│ │ │ +
2335 equal_to<__detail::__range_key_type<_Rg>>,
│ │ │ +
2336 _Allocator>;
│ │ │ +
2337
│ │ │ +
2338 template<ranges::input_range _Rg,
│ │ │ +
2339 __allocator_like _Allocator>
│ │ │ +
2340 unordered_multimap(from_range_t, _Rg&&, _Allocator)
│ │ │ +
2341 -> unordered_multimap<__detail::__range_key_type<_Rg>,
│ │ │ +
2342 __detail::__range_mapped_type<_Rg>,
│ │ │ +
2343 hash<__detail::__range_key_type<_Rg>>,
│ │ │ +
2344 equal_to<__detail::__range_key_type<_Rg>>,
│ │ │ +
2345 _Allocator>;
│ │ │ +
2346
│ │ │ +
2347 template<ranges::input_range _Rg,
│ │ │ +
2348 __not_allocator_like _Hash,
│ │ │ +
2349 __allocator_like _Allocator>
│ │ │ +
2350 unordered_multimap(from_range_t, _Rg&&,
│ │ │ + │ │ │ +
2352 _Hash, _Allocator)
│ │ │ +
2353 -> unordered_multimap<__detail::__range_key_type<_Rg>,
│ │ │ +
2354 __detail::__range_mapped_type<_Rg>,
│ │ │ +
2355 _Hash, equal_to<__detail::__range_key_type<_Rg>>,
│ │ │ +
2356 _Allocator>;
│ │ │ +
2357#endif
│ │ │ +
2358#endif
│ │ │ +
2359
│ │ │ +
2360 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ +
2361 inline void
│ │ │ +
2362 swap(unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ +
2363 unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ +
2364 noexcept(noexcept(__x.swap(__y)))
│ │ │ +
2365 { __x.swap(__y); }
│ │ │ +
2366
│ │ │ +
2367 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ +
2368 inline void
│ │ │ +
2369 swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ +
2370 unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ +
2371 noexcept(noexcept(__x.swap(__y)))
│ │ │ +
2372 { __x.swap(__y); }
│ │ │ +
2373
│ │ │ +
2374 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ +
2375 inline bool
│ │ │ +
2376 operator==(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ +
2377 const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ +
2378 { return __x._M_h._M_equal(__y._M_h); }
│ │ │ +
2379
│ │ │ +
2380#if __cpp_impl_three_way_comparison < 201907L
│ │ │ +
2381 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ +
2382 inline bool
│ │ │ +
2383 operator!=(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ +
2384 const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ +
2385 { return !(__x == __y); }
│ │ │ +
2386#endif
│ │ │ +
2387
│ │ │ +
2388 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ +
2389 inline bool
│ │ │ +
2390 operator==(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ +
2391 const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ +
2392 { return __x._M_h._M_equal(__y._M_h); }
│ │ │ +
2393
│ │ │ +
2394#if __cpp_impl_three_way_comparison < 201907L
│ │ │ +
2395 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ +
2396 inline bool
│ │ │ +
2397 operator!=(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ +
2398 const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ +
2399 { return !(__x == __y); }
│ │ │ +
2400#endif
│ │ │ +
2401
│ │ │ +
2402_GLIBCXX_END_NAMESPACE_CONTAINER
│ │ │ +
2403
│ │ │ +
2404#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ +
2405 // Allow std::unordered_map access to internals of compatible maps.
│ │ │ +
2406 template<typename _Key, typename _Val, typename _Hash1, typename _Eq1,
│ │ │ +
2407 typename _Alloc, typename _Hash2, typename _Eq2>
│ │ │ +
2408 struct _Hash_merge_helper<
│ │ │ +
2409 _GLIBCXX_STD_C::unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>,
│ │ │ +
2410 _Hash2, _Eq2>
│ │ │ +
2411 {
│ │ │ +
2412 private:
│ │ │ +
2413 template<typename... _Tp>
│ │ │ +
2414 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>;
│ │ │ +
2415 template<typename... _Tp>
│ │ │ +
2416 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>;
│ │ │ +
2417
│ │ │ +
2418 friend unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>;
│ │ │ +
2419
│ │ │ +
2420 static auto&
│ │ │ +
2421 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ +
2422 { return __map._M_h; }
│ │ │ +
2423
│ │ │ +
2424 static auto&
│ │ │ +
2425 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ +
2426 { return __map._M_h; }
│ │ │ +
2427 };
│ │ │ +
2428
│ │ │ +
2429 // Allow std::unordered_multimap access to internals of compatible maps.
│ │ │ +
2430 template<typename _Key, typename _Val, typename _Hash1, typename _Eq1,
│ │ │ +
2431 typename _Alloc, typename _Hash2, typename _Eq2>
│ │ │ +
2432 struct _Hash_merge_helper<
│ │ │ +
2433 _GLIBCXX_STD_C::unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>,
│ │ │ +
2434 _Hash2, _Eq2>
│ │ │ +
2435 {
│ │ │ +
2436 private:
│ │ │ +
2437 template<typename... _Tp>
│ │ │ +
2438 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>;
│ │ │ +
2439 template<typename... _Tp>
│ │ │ +
2440 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>;
│ │ │ +
2441
│ │ │ +
2442 friend unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>;
│ │ │ +
2443
│ │ │ +
2444 static auto&
│ │ │ +
2445 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ +
2446 { return __map._M_h; }
│ │ │ +
2447
│ │ │ +
2448 static auto&
│ │ │ +
2449 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ +
2450 { return __map._M_h; }
│ │ │ +
2451 };
│ │ │ +
2452#endif // node_extract
│ │ │ +
2453
│ │ │ +
2454_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
2455} // namespace std
│ │ │ +
2456
│ │ │ +
2457#endif /* _UNORDERED_MAP_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.
│ │ │ -
__detail::_Hashtable_traits< _Cache, true, true > __uset_traits
Base types for unordered_set.
│ │ │ -
__detail::_Hashtable_traits< _Cache, true, false > __umset_traits
Base types for unordered_multiset.
│ │ │ -
Common iterator class.
│ │ │ -
A standard container composed of equivalent keys (possibly containing multiple of each key value) in ...
│ │ │ -
auto find(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__x))
Tries to locate an element in an unordered_multiset.
│ │ │ -
iterator begin() noexcept
│ │ │ -
auto find(const _Kt &__x) -> decltype(_M_h._M_find_tr(__x))
Tries to locate an element in an unordered_multiset.
│ │ │ -
iterator insert(const_iterator __hint, const value_type &__x)
Inserts an element into the unordered_multiset.
│ │ │ -
_Hashtable::difference_type difference_type
Iterator-related typedefs.
│ │ │ -
void insert(initializer_list< value_type > __l)
Inserts a list of elements into the unordered_multiset.
│ │ │ -
_Hashtable::pointer pointer
Iterator-related typedefs.
│ │ │ -
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
│ │ │ -
_Hashtable::local_iterator local_iterator
Iterator-related typedefs.
│ │ │ -
node_type extract(const key_type &__key)
Extract a node.
│ │ │ -
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.
│ │ │ -
_Hashtable::const_iterator const_iterator
Iterator-related typedefs.
│ │ │ -
unordered_multiset(const allocator_type &__a)
Creates an unordered_multiset with no elements.
│ │ │ -
_Hashtable::allocator_type allocator_type
Public typedefs.
│ │ │ -
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.
│ │ │ -
_Hashtable::value_type value_type
Public typedefs.
│ │ │ -
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.
│ │ │ -
iterator insert(const_iterator __hint, node_type &&__nh)
Re-insert an extracted node.
│ │ │ -
_Hashtable::size_type size_type
Iterator-related typedefs.
│ │ │ -
auto equal_range(const _Kt &__x) -> decltype(_M_h._M_equal_range_tr(__x))
Finds a subsequence matching given key.
│ │ │ -
_Hashtable::key_type key_type
Public typedefs.
│ │ │ -
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.
│ │ │ -
auto count(const _Kt &__x) const -> decltype(_M_h._M_count_tr(__x))
Finds the number of elements.
│ │ │ -
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.
│ │ │ -
_Hashtable::reference reference
Iterator-related typedefs.
│ │ │ -
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.
│ │ │ -
_Hashtable::const_pointer const_pointer
Iterator-related typedefs.
│ │ │ -
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.
│ │ │ -
_Hashtable::const_reference const_reference
Iterator-related typedefs.
│ │ │ -
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.
│ │ │ -
iterator insert(node_type &&__nh)
Re-insert an extracted node.
│ │ │ -
_Hashtable::hasher hasher
Public typedefs.
│ │ │ -
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.
│ │ │ -
_Hashtable::iterator iterator
Iterator-related typedefs.
│ │ │ -
local_iterator end(size_type __n)
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ -
auto equal_range(const _Kt &__x) const -> decltype(_M_h._M_equal_range_tr(__x))
Finds a subsequence matching given key.
│ │ │ -
node_type extract(const_iterator __pos)
Extract a node.
│ │ │ -
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.
│ │ │ -
_Hashtable::const_local_iterator const_local_iterator
Iterator-related typedefs.
│ │ │ -
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.
│ │ │ -
_Hashtable::key_equal key_equal
Public typedefs.
│ │ │ -
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.
│ │ │ -
_Hashtable::iterator iterator
Iterator-related typedefs.
│ │ │ -
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.
│ │ │ -
_Hashtable::reference reference
Iterator-related typedefs.
│ │ │ -
const_local_iterator end(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ -
_Hashtable::value_type value_type
Public typedefs.
│ │ │ -
const_iterator cend() const noexcept
│ │ │ -
auto find(const _Kt &__k) -> decltype(_M_h._M_find_tr(__k))
Tries to locate an element in an unordered_set.
│ │ │ -
const_iterator find(const key_type &__x) const
Tries to locate an element in an unordered_set.
│ │ │ -
_Hashtable::key_type key_type
Public typedefs.
│ │ │ -
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.
│ │ │ -
auto equal_range(const _Kt &__k) -> decltype(_M_h._M_equal_range_tr(__k))
Finds a subsequence matching given key.
│ │ │ -
const_local_iterator cbegin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ -
auto count(const _Kt &__k) const -> decltype(_M_h._M_count_tr(__k))
Finds the number of elements.
│ │ │ -
const_iterator begin() const noexcept
│ │ │ -
_Hashtable::hasher hasher
Public typedefs.
│ │ │ -
_Hashtable::local_iterator local_iterator
Iterator-related typedefs.
│ │ │ -
insert_return_type insert(node_type &&__nh)
Re-insert an extracted node.
│ │ │ -
_Hashtable::size_type size_type
Iterator-related typedefs.
│ │ │ -
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.
│ │ │ -
_Hashtable::const_pointer const_pointer
Iterator-related typedefs.
│ │ │ -
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.
│ │ │ -
_Hashtable::key_equal key_equal
Public typedefs.
│ │ │ -
size_type size() const noexcept
Returns the size of the unordered_set.
│ │ │ -
iterator insert(const_iterator, node_type &&__nh)
Re-insert an extracted node.
│ │ │ -
_Hashtable::const_iterator const_iterator
Iterator-related typedefs.
│ │ │ -
_Hashtable::difference_type difference_type
Iterator-related typedefs.
│ │ │ -
_Hashtable::const_reference const_reference
Iterator-related typedefs.
│ │ │ -
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.
│ │ │ -
auto find(const _Kt &__k) const -> decltype(_M_h._M_find_tr(__k))
Tries to locate an element in an unordered_set.
│ │ │ -
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.
│ │ │ -
_Hashtable::allocator_type allocator_type
Public typedefs.
│ │ │ -
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
│ │ │ -
node_type extract(const key_type &__key)
Extract a node.
│ │ │ -
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.
│ │ │ -
auto equal_range(const _Kt &__k) const -> decltype(_M_h._M_equal_range_tr(__k))
Finds a subsequence matching given key.
│ │ │ -
_Hashtable::const_local_iterator const_local_iterator
Iterator-related typedefs.
│ │ │ -
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.
│ │ │ -
node_type extract(const_iterator __pos)
Extract a node.
│ │ │ -
_Hashtable::pointer pointer
Iterator-related typedefs.
│ │ │ -
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.
│ │ │ - │ │ │ +
__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.
│ │ │ +
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.
│ │ │ +
_Hashtable::reference reference
Iterator-related typedefs.
│ │ │ +
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.
│ │ │ +
_Hashtable::iterator iterator
Iterator-related typedefs.
│ │ │ +
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.
│ │ │ +
iterator insert(const_iterator __hint, node_type &&__nh)
Re-insert an extracted node.
│ │ │ +
__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.
│ │ │ +
_Hashtable::mapped_type mapped_type
Public typedefs.
│ │ │ +
auto find(const _Kt &__x) -> decltype(_M_h._M_find_tr(__x))
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.
│ │ │ +
_Hashtable::value_type value_type
Public typedefs.
│ │ │ +
iterator emplace(_Args &&... __args)
Attempts to build and insert a std::pair into the unordered_multimap.
│ │ │ +
node_type extract(const key_type &__key)
Extract a node.
│ │ │ +
bool contains(const key_type &__x) const
Finds whether an element with the given key exists.
│ │ │ +
_Hashtable::const_reference const_reference
Iterator-related typedefs.
│ │ │ +
iterator insert(node_type &&__nh)
Re-insert an extracted node.
│ │ │ +
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.
│ │ │ +
_Hashtable::hasher hasher
Public typedefs.
│ │ │ +
_Hashtable::local_iterator local_iterator
Iterator-related typedefs.
│ │ │ +
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.
│ │ │ +
auto count(const _Kt &__x) const -> decltype(_M_h._M_count_tr(__x))
Finds the number of elements.
│ │ │ +
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.
│ │ │ +
_Hashtable::pointer pointer
Iterator-related typedefs.
│ │ │ +
_Hashtable::allocator_type allocator_type
Public typedefs.
│ │ │ +
const_local_iterator begin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ +
auto find(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__x))
Tries to locate an element in an unordered_multimap.
│ │ │ +
_Hashtable::const_local_iterator const_local_iterator
Iterator-related typedefs.
│ │ │ +
unordered_multimap(unordered_multimap &&)=default
Move constructor.
│ │ │ +
unordered_multimap(const allocator_type &__a)
Creates an unordered_multimap with no elements.
│ │ │ +
_Hashtable::difference_type difference_type
Iterator-related typedefs.
│ │ │ +
_Hashtable::size_type size_type
Iterator-related typedefs.
│ │ │ +
_Hashtable::const_pointer const_pointer
Iterator-related typedefs.
│ │ │ +
__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.
│ │ │ +
_Hashtable::const_iterator const_iterator
Iterator-related typedefs.
│ │ │ +
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
│ │ │ +
_Hashtable::key_type key_type
Public typedefs.
│ │ │ +
node_type extract(const_iterator __pos)
Extract a node.
│ │ │ +
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.
│ │ │ +
auto equal_range(const _Kt &__x) -> decltype(_M_h._M_equal_range_tr(__x))
Finds a subsequence matching given key.
│ │ │ +
_Hashtable::key_equal key_equal
Public typedefs.
│ │ │ +
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.
│ │ │ +
auto equal_range(const _Kt &__x) const -> decltype(_M_h._M_equal_range_tr(__x))
Finds a subsequence matching given key.
│ │ │ +
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.
│ │ │ +
_Hashtable::iterator iterator
Iterator-related typedefs.
│ │ │ +
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.
│ │ │ +
node_type extract(const key_type &__key)
Extract a node.
│ │ │ +
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.
│ │ │ +
auto find(const _Kt &__x) -> decltype(_M_h._M_find_tr(__x))
Tries to locate an element in an unordered_map.
│ │ │ +
unordered_map & operator=(initializer_list< value_type > __l)
Unordered_map list assignment operator.
│ │ │ +
_Hashtable::const_pointer const_pointer
Iterator-related typedefs.
│ │ │ +
auto find(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__x))
Tries to locate an element in an unordered_map.
│ │ │ +
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.
│ │ │ +
iterator try_emplace(const_iterator __hint, const key_type &__k, _Args &&... __args)
Attempts to build and insert a std::pair into the unordered_map.
│ │ │ +
node_type extract(const_iterator __pos)
Extract a node.
│ │ │ +
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, node_type &&__nh)
Re-insert an extracted node.
│ │ │ +
_Hashtable::reference reference
Iterator-related typedefs.
│ │ │ +
iterator insert(const_iterator __hint, const value_type &__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ +
iterator end() noexcept
│ │ │ +
_Hashtable::allocator_type allocator_type
Public typedefs.
│ │ │ +
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 equal_range(const _Kt &__x) -> decltype(_M_h._M_equal_range_tr(__x))
Finds a subsequence matching given key.
│ │ │ +
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.
│ │ │ +
_Hashtable::mapped_type mapped_type
Public typedefs.
│ │ │ +
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.
│ │ │ +
_Hashtable::hasher hasher
Public typedefs.
│ │ │ +
pair< iterator, bool > insert_or_assign(const key_type &__k, _Obj &&__obj)
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.
│ │ │ +
pair< iterator, bool > try_emplace(const key_type &__k, _Args &&... __args)
Attempts to build and insert a std::pair into the unordered_map.
│ │ │ +
const_iterator begin() const noexcept
│ │ │ +
key_equal key_eq() const
Returns the key comparison object with which the unordered_map was constructed.
│ │ │ +
_Hashtable::const_reference const_reference
Iterator-related typedefs.
│ │ │ +
_Hashtable::key_equal key_equal
Public typedefs.
│ │ │ +
_Hashtable::local_iterator local_iterator
Iterator-related typedefs.
│ │ │ +
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.
│ │ │ +
_Hashtable::pointer pointer
Iterator-related typedefs.
│ │ │ +
iterator insert_or_assign(const_iterator __hint, const key_type &__k, _Obj &&__obj)
Attempts to insert a std::pair into the unordered_map.
│ │ │ +
unordered_map(const allocator_type &__a)
Creates an unordered_map with no elements.
│ │ │ +
_Hashtable::key_type key_type
Public typedefs.
│ │ │ +
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.
│ │ │ +
auto equal_range(const _Kt &__x) const -> decltype(_M_h._M_equal_range_tr(__x))
Finds a subsequence matching given key.
│ │ │ +
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.
│ │ │ +
_Hashtable::const_iterator const_iterator
Iterator-related typedefs.
│ │ │ +
_Hashtable::size_type size_type
Iterator-related typedefs.
│ │ │ +
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.
│ │ │ +
_Hashtable::difference_type difference_type
Iterator-related typedefs.
│ │ │ +
auto count(const _Kt &__x) const -> decltype(_M_h._M_count_tr(__x))
Finds the number of elements.
│ │ │ +
_Hashtable::const_local_iterator const_local_iterator
Iterator-related typedefs.
│ │ │ +
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.
│ │ │ +
insert_return_type insert(node_type &&__nh)
Re-insert an extracted node.
│ │ │ +
_Hashtable::value_type value_type
Public typedefs.
│ │ │ +
void rehash(size_type __n)
May rehash the unordered_map.
│ │ │ +
const_iterator cbegin() const noexcept
│ │ │ + │ │ │ │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,11 +1,11 @@ │ │ │ │ libstdc++ │ │ │ │ -unordered_set.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// unordered_set implementation -*- C++ -*- │ │ │ │ +1// unordered_map implementation -*- C++ -*- │ │ │ │ 2 │ │ │ │ 3// Copyright (C) 2010-2025 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,2790 +21,3189 @@ │ │ │ │ 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 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_set} │ │ │ │ +27 * Do not attempt to use it directly. @headername{unordered_map} │ │ │ │ 28 */ │ │ │ │ 29 │ │ │ │ -30#ifndef _UNORDERED_SET_H │ │ │ │ -31#define _UNORDERED_SET_H │ │ │ │ +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_set. │ │ │ │ +46 /// Base types for unordered_map. │ │ │ │ 47 template │ │ │ │ -_4_8 using _____u_s_e_t___t_r_a_i_t_s = __detail::_Hashtable_traits<_Cache, true, true>; │ │ │ │ +_4_8 using _____u_m_a_p___t_r_a_i_t_s = __detail::_Hashtable_traits<_Cache, false, true>; │ │ │ │ 49 │ │ │ │ -50 template, │ │ │ │ -52 typename ___P_r_e_d = _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 ___T_r = _____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 _____u_s_e_t___h_a_s_h_t_a_b_l_e = _Hashtable<_Value, _Value, _Alloc, │ │ │ │ -56 __detail::_Identity, ___P_r_e_d, ___H_a_s_h, │ │ │ │ -57 __detail::_Mod_range_hashing, │ │ │ │ -58 __detail::_Default_ranged_hash, │ │ │ │ -59 __detail::_Prime_rehash_policy, ___T_r>; │ │ │ │ -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 ___P_r_e_d = _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 ___T_r = _____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 _____u_m_s_e_t___h_a_s_h_t_a_b_l_e = _Hashtable<_Value, _Value, _Alloc, │ │ │ │ -71 __detail::_Identity, │ │ │ │ -72 ___P_r_e_d, ___H_a_s_h, │ │ │ │ -73 __detail::_Mod_range_hashing, │ │ │ │ -74 __detail::_Default_ranged_hash, │ │ │ │ -75 __detail::_Prime_rehash_policy, ___T_r>; │ │ │ │ -76 │ │ │ │ -77 template │ │ │ │ -78 class _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t; │ │ │ │ +50 template, │ │ │ │ +53 typename ___P_r_e_d = _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 ___T_r = _____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 _____u_m_a_p___h_a_s_h_t_a_b_l_e = ___H_a_s_h_t_a_b_l_e_<___K_e_y_,_ _s_t_d_:_:_p_a_i_r_<_c_o_n_s_t_ ___K_e_y_,_ ___T_p_>, │ │ │ │ +57 _Alloc, __detail::_Select1st, │ │ │ │ +58 ___P_r_e_d, ___H_a_s_h, │ │ │ │ +59 __detail::_Mod_range_hashing, │ │ │ │ +60 __detail::_Default_ranged_hash, │ │ │ │ +61 __detail::_Prime_rehash_policy, ___T_r>; │ │ │ │ +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 ___P_r_e_d = _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 ___T_r = _____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 _____u_m_m_a_p___h_a_s_h_t_a_b_l_e = ___H_a_s_h_t_a_b_l_e_<___K_e_y_,_ _s_t_d_:_:_p_a_i_r_<_c_o_n_s_t_ ___K_e_y_,_ ___T_p_>, │ │ │ │ +74 _Alloc, __detail::_Select1st, │ │ │ │ +75 ___P_r_e_d, ___H_a_s_h, │ │ │ │ +76 __detail::_Mod_range_hashing, │ │ │ │ +77 __detail::_Default_ranged_hash, │ │ │ │ +78 __detail::_Prime_rehash_policy, ___T_r>; │ │ │ │ 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 │ │ │ │ +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<_Value>. │ │ │ │ +95 * @tparam _Pred Predicate function object type, defaults │ │ │ │ +96 * to equal_to<_Value>. │ │ │ │ +97 * @tparam _Alloc Allocator type, defaults to │ │ │ │ +98 * std::allocator>. │ │ │ │ 99 * │ │ │ │ -100 * Base is _Hashtable, dispatched at compile time via template │ │ │ │ -101 * alias __uset_hashtable. │ │ │ │ -102 */ │ │ │ │ -103 template, │ │ │ │ -105 typename ___P_r_e_d = _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 │ │ │ │ -108 { │ │ │ │ -109 typedef _____u_s_e_t___h_a_s_h_t_a_b_l_e_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_> ___H_a_s_h_t_a_b_l_e; │ │ │ │ -110 ___H_a_s_h_t_a_b_l_e _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& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -157 const _k_e_y___e_q_u_a_l& _____e_q_l = _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, _____h_f, _____e_q_l, __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(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __last, │ │ │ │ -177 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -178 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -179 const _k_e_y___e_q_u_a_l& _____e_q_l = _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, _____h_f, _____e_q_l, __a) │ │ │ │ -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; │ │ │ │ +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 ___P_r_e_d = _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 _____u_m_a_p___h_a_s_h_t_a_b_l_e_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_> ___H_a_s_h_t_a_b_l_e; │ │ │ │ +115 ___H_a_s_h_t_a_b_l_e _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& _____h_f = _h_a_s_h_e_r(), │ │ │ │ +163 const _k_e_y___e_q_u_a_l& _____e_q_l = _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, _____h_f, _____e_q_l, __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(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __last, │ │ │ │ +183 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ +184 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ +185 const _k_e_y___e_q_u_a_l& _____e_q_l = _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, _____h_f, _____e_q_l, __a) │ │ │ │ +188 { } │ │ │ │ 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& _____u_s_e_t, │ │ │ │ -205 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -206 : _M_h(_____u_s_e_t._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(_u_n_o_r_d_e_r_e_d___s_e_t&& __uset, │ │ │ │ -215 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __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& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -234 const _k_e_y___e_q_u_a_l& _____e_q_l = _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, _____h_f, _____e_q_l, __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 _a_l_l_o_c_a_t_o_r___t_y_p_e& __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(_s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -244 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -245 : _u_n_o_r_d_e_r_e_d___s_e_t(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -246 { } │ │ │ │ -247 │ │ │ │ -248 template │ │ │ │ -249 _u_n_o_r_d_e_r_e_d___s_e_t(_InputIterator __first, _InputIterator __last, │ │ │ │ -250 _s_i_z_e___t_y_p_e __n, │ │ │ │ -251 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -252 : _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) │ │ │ │ -253 { } │ │ │ │ -254 │ │ │ │ -255 template │ │ │ │ -256 _u_n_o_r_d_e_r_e_d___s_e_t(_InputIterator __first, _InputIterator __last, │ │ │ │ -257 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -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___s_e_t(__first, __last, __n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -260 { } │ │ │ │ -261 │ │ │ │ -262 _u_n_o_r_d_e_r_e_d___s_e_t(initializer_list __l, │ │ │ │ -263 _s_i_z_e___t_y_p_e __n, │ │ │ │ +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& _____u_m_a_p, │ │ │ │ +211 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +212 : _M_h(_____u_m_a_p._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(_u_n_o_r_d_e_r_e_d___m_a_p&& __umap, │ │ │ │ +221 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __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& _____h_f = _h_a_s_h_e_r(), │ │ │ │ +240 const _k_e_y___e_q_u_a_l& _____e_q_l = _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, _____h_f, _____e_q_l, __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 _a_l_l_o_c_a_t_o_r___t_y_p_e& __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(_s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ +250 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +251 : _u_n_o_r_d_e_r_e_d___m_a_p(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +252 { } │ │ │ │ +253 │ │ │ │ +254 template │ │ │ │ +255 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ +256 _s_i_z_e___t_y_p_e __n, │ │ │ │ +257 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +258 : _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) │ │ │ │ +259 { } │ │ │ │ +260 │ │ │ │ +261 template │ │ │ │ +262 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ +263 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ 264 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -265 : _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) │ │ │ │ +265 : _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) │ │ │ │ 266 { } │ │ │ │ 267 │ │ │ │ -268 _u_n_o_r_d_e_r_e_d___s_e_t(initializer_list __l, │ │ │ │ -269 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ +268 _u_n_o_r_d_e_r_e_d___m_a_p(initializer_list __l, │ │ │ │ +269 _s_i_z_e___t_y_p_e __n, │ │ │ │ 270 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -271 : _u_n_o_r_d_e_r_e_d___s_e_t(__l, __n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +271 : _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) │ │ │ │ 272 { } │ │ │ │ 273 │ │ │ │ -274#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -275 /** │ │ │ │ -276 * @brief Builds an %unordered_set from a range. │ │ │ │ -277 * @since C++23 │ │ │ │ -278 * @param __rg An input range of elements that can be converted to │ │ │ │ -279 * the set's value type. │ │ │ │ -280 * @param __n Minimal initial number of buckets. │ │ │ │ -281 * @param __hf A hash functor. │ │ │ │ -282 * @param __eql A key equality functor. │ │ │ │ -283 * @param __a An allocator object. │ │ │ │ -284 * │ │ │ │ -285 * Create an %unordered_set consisting of copies of the elements in the │ │ │ │ -286 * range. This is linear in N (where N is `std::ranges::size(__rg)`). │ │ │ │ -287 */ │ │ │ │ -288 template<__detail::__container_compatible_range<_Value> _Rg> │ │ │ │ -289 _u_n_o_r_d_e_r_e_d___s_e_t(from_range_t, _Rg&& __rg, │ │ │ │ -290 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -291 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -292 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ -293 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()) │ │ │ │ -294 : _M_h(__n, __hf, __eql, __a) │ │ │ │ -295 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -296 │ │ │ │ -297 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -298 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ -container │ │ │ │ -299 template<__detail::__container_compatible_range<_Value> _Rg> │ │ │ │ -300 _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) │ │ │ │ -301 : _M_h(0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -302 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__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, _s_i_z_e___t_y_p_e __n, │ │ │ │ -306 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -307 : _M_h(__n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +274 _u_n_o_r_d_e_r_e_d___m_a_p(initializer_list __l, │ │ │ │ +275 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ +276 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +277 : _u_n_o_r_d_e_r_e_d___m_a_p(__l, __n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +278 { } │ │ │ │ +279 │ │ │ │ +280#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +281 /** │ │ │ │ +282 * @brief Builds an %unordered_map from a range. │ │ │ │ +283 * @since C++23 │ │ │ │ +284 * @param __rg An input range of elements that can be converted to │ │ │ │ +285 * the maps's value type. │ │ │ │ +286 * @param __n Minimal initial number of buckets. │ │ │ │ +287 * @param __hf A hash functor. │ │ │ │ +288 * @param __eql A key equality functor. │ │ │ │ +289 * @param __a An allocator object. │ │ │ │ +290 * │ │ │ │ +291 * Create an %unordered_map consisting of copies of the elements in the │ │ │ │ +292 * range. This is linear in N (where N is `std::ranges::size(__rg)`). │ │ │ │ +293 */ │ │ │ │ +294 template<__detail::__container_compatible_range _Rg> │ │ │ │ +295 _u_n_o_r_d_e_r_e_d___m_a_p(from_range_t, _Rg&& __rg, │ │ │ │ +296 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ +297 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ +298 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ +299 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()) │ │ │ │ +300 : _M_h(__n, __hf, __eql, __a) │ │ │ │ +301 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ +302 │ │ │ │ +303 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +304 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ +containers │ │ │ │ +305 template<__detail::__container_compatible_range _Rg> │ │ │ │ +306 _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) │ │ │ │ +307 : _M_h(0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ 308 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ 309 │ │ │ │ -310 template<__detail::__container_compatible_range<_Value> _Rg> │ │ │ │ -311 _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, │ │ │ │ -312 const _h_a_s_h_e_r& __hf, const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -313 : _M_h(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +310 template<__detail::__container_compatible_range _Rg> │ │ │ │ +311 _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, │ │ │ │ +312 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +313 : _M_h(__n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ 314 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -315#endif │ │ │ │ -316 │ │ │ │ -317 /// Copy assignment operator. │ │ │ │ -318 _u_n_o_r_d_e_r_e_d___s_e_t& │ │ │ │ -_3_1_9 _o_p_e_r_a_t_o_r_=(const _u_n_o_r_d_e_r_e_d___s_e_t&) = default; │ │ │ │ -320 │ │ │ │ -321 /// Move assignment operator. │ │ │ │ -322 _u_n_o_r_d_e_r_e_d___s_e_t& │ │ │ │ -_3_2_3 _o_p_e_r_a_t_o_r_=(_u_n_o_r_d_e_r_e_d___s_e_t&&) = default; │ │ │ │ -324 │ │ │ │ -325 /** │ │ │ │ -326 * @brief %Unordered_set list assignment operator. │ │ │ │ -327 * @param __l An initializer_list. │ │ │ │ -328 * │ │ │ │ -329 * This function fills an %unordered_set with copies of the elements in │ │ │ │ -330 * the initializer list @a __l. │ │ │ │ -331 * │ │ │ │ -332 * Note that the assignment completely changes the %unordered_set and │ │ │ │ -333 * that the resulting %unordered_set's size is the same as the number │ │ │ │ -334 * of elements assigned. │ │ │ │ -335 */ │ │ │ │ -336 _u_n_o_r_d_e_r_e_d___s_e_t& │ │ │ │ -_3_3_7 _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) │ │ │ │ -338 { │ │ │ │ -339 _M_h = _____l; │ │ │ │ -340 return *this; │ │ │ │ -341 } │ │ │ │ -342 │ │ │ │ -343 /// Returns the allocator object used by the %unordered_set. │ │ │ │ -344 _a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ -_3_4_5 _g_e_t___a_l_l_o_c_a_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -346 { return _M_h.get_allocator(); } │ │ │ │ -347 │ │ │ │ -348 // size and capacity: │ │ │ │ -349 │ │ │ │ -350 /// Returns true if the %unordered_set is empty. │ │ │ │ -351 _GLIBCXX_NODISCARD bool │ │ │ │ -_3_5_2 _e_m_p_t_y() _c_o_n_s_t noexcept │ │ │ │ -353 { return _M_h.empty(); } │ │ │ │ -354 │ │ │ │ -355 /// Returns the size of the %unordered_set. │ │ │ │ -356 _s_i_z_e___t_y_p_e │ │ │ │ -_3_5_7 _s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ -358 { return _M_h.size(); } │ │ │ │ -359 │ │ │ │ -360 /// Returns the maximum size of the %unordered_set. │ │ │ │ -361 _s_i_z_e___t_y_p_e │ │ │ │ -_3_6_2 _m_a_x___s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ -363 { return _M_h.max_size(); } │ │ │ │ -364 │ │ │ │ -365 // iterators. │ │ │ │ -366 │ │ │ │ -367 ///@{ │ │ │ │ -368 /** │ │ │ │ -369 * Returns a read-only (constant) iterator that points to the first │ │ │ │ -370 * element in the %unordered_set. │ │ │ │ -371 */ │ │ │ │ -372 _i_t_e_r_a_t_o_r │ │ │ │ -_3_7_3 _b_e_g_i_n() noexcept │ │ │ │ -374 { return _M_h.begin(); } │ │ │ │ -375 │ │ │ │ -376 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_3_7_7 _b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ -378 { return _M_h.begin(); } │ │ │ │ -379 ///@} │ │ │ │ +315 │ │ │ │ +316 template<__detail::__container_compatible_range _Rg> │ │ │ │ +317 _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, │ │ │ │ +318 const _h_a_s_h_e_r& __hf, const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +319 : _M_h(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +320 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ +321#endif │ │ │ │ +322 │ │ │ │ +323 /// Copy assignment operator. │ │ │ │ +324 _u_n_o_r_d_e_r_e_d___m_a_p& │ │ │ │ +_3_2_5 _o_p_e_r_a_t_o_r_=(const _u_n_o_r_d_e_r_e_d___m_a_p&) = default; │ │ │ │ +326 │ │ │ │ +327 /// Move assignment operator. │ │ │ │ +328 _u_n_o_r_d_e_r_e_d___m_a_p& │ │ │ │ +_3_2_9 _o_p_e_r_a_t_o_r_=(_u_n_o_r_d_e_r_e_d___m_a_p&&) = default; │ │ │ │ +330 │ │ │ │ +331 /** │ │ │ │ +332 * @brief %Unordered_map list assignment operator. │ │ │ │ +333 * @param __l An initializer_list. │ │ │ │ +334 * │ │ │ │ +335 * This function fills an %unordered_map with copies of the elements in │ │ │ │ +336 * the initializer list @a __l. │ │ │ │ +337 * │ │ │ │ +338 * Note that the assignment completely changes the %unordered_map and │ │ │ │ +339 * that the resulting %unordered_map's size is the same as the number │ │ │ │ +340 * of elements assigned. │ │ │ │ +341 */ │ │ │ │ +342 _u_n_o_r_d_e_r_e_d___m_a_p& │ │ │ │ +_3_4_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) │ │ │ │ +344 { │ │ │ │ +345 _M_h = _____l; │ │ │ │ +346 return *this; │ │ │ │ +347 } │ │ │ │ +348 │ │ │ │ +349 /// Returns the allocator object used by the %unordered_map. │ │ │ │ +350 _a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ +_3_5_1 _g_e_t___a_l_l_o_c_a_t_o_r() _c_o_n_s_t noexcept │ │ │ │ +352 { return _M_h.get_allocator(); } │ │ │ │ +353 │ │ │ │ +354 // size and capacity: │ │ │ │ +355 │ │ │ │ +356 /// Returns true if the %unordered_map is empty. │ │ │ │ +357 _GLIBCXX_NODISCARD bool │ │ │ │ +_3_5_8 _e_m_p_t_y() _c_o_n_s_t noexcept │ │ │ │ +359 { return _M_h.empty(); } │ │ │ │ +360 │ │ │ │ +361 /// Returns the size of the %unordered_map. │ │ │ │ +362 _s_i_z_e___t_y_p_e │ │ │ │ +_3_6_3 _s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ +364 { return _M_h.size(); } │ │ │ │ +365 │ │ │ │ +366 /// Returns the maximum size of the %unordered_map. │ │ │ │ +367 _s_i_z_e___t_y_p_e │ │ │ │ +_3_6_8 _m_a_x___s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ +369 { return _M_h.max_size(); } │ │ │ │ +370 │ │ │ │ +371 // iterators. │ │ │ │ +372 │ │ │ │ +373 /** │ │ │ │ +374 * Returns a read/write iterator that points to the first element in the │ │ │ │ +375 * %unordered_map. │ │ │ │ +376 */ │ │ │ │ +377 _i_t_e_r_a_t_o_r │ │ │ │ +_3_7_8 _b_e_g_i_n() noexcept │ │ │ │ +379 { return _M_h.begin(); } │ │ │ │ 380 │ │ │ │ 381 ///@{ │ │ │ │ 382 /** │ │ │ │ -383 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ -384 * element in the %unordered_set. │ │ │ │ +383 * Returns a read-only (constant) iterator that points to the first │ │ │ │ +384 * element in the %unordered_map. │ │ │ │ 385 */ │ │ │ │ -386 _i_t_e_r_a_t_o_r │ │ │ │ -_3_8_7 _e_n_d() noexcept │ │ │ │ -388 { return _M_h.end(); } │ │ │ │ +386 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_3_8_7 _b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ +388 { return _M_h.begin(); } │ │ │ │ 389 │ │ │ │ 390 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_3_9_1 _e_n_d() _c_o_n_s_t noexcept │ │ │ │ -392 { return _M_h.end(); } │ │ │ │ +_3_9_1 _c_b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ +392 { return _M_h.begin(); } │ │ │ │ 393 ///@} │ │ │ │ 394 │ │ │ │ 395 /** │ │ │ │ -396 * Returns a read-only (constant) iterator that points to the first │ │ │ │ -397 * element in the %unordered_set. │ │ │ │ +396 * Returns a read/write iterator that points one past the last element in │ │ │ │ +397 * the %unordered_map. │ │ │ │ 398 */ │ │ │ │ -399 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_4_0_0 _c_b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ -401 { return _M_h.begin(); } │ │ │ │ +399 _i_t_e_r_a_t_o_r │ │ │ │ +_4_0_0 _e_n_d() noexcept │ │ │ │ +401 { return _M_h.end(); } │ │ │ │ 402 │ │ │ │ -403 /** │ │ │ │ -404 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ -405 * element in the %unordered_set. │ │ │ │ -406 */ │ │ │ │ -407 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_4_0_8 _c_e_n_d() _c_o_n_s_t noexcept │ │ │ │ -409 { return _M_h.end(); } │ │ │ │ -410 │ │ │ │ -411 // modifiers. │ │ │ │ -412 │ │ │ │ -413 /** │ │ │ │ -414 * @brief Attempts to build and insert an element into the │ │ │ │ -415 * %unordered_set. │ │ │ │ -416 * @param __args Arguments used to generate an element. │ │ │ │ -417 * @return A pair, of which the first element is an iterator that points │ │ │ │ -418 * to the possibly inserted element, and the second is a bool │ │ │ │ -419 * that is true if the element was actually inserted. │ │ │ │ -420 * │ │ │ │ -421 * This function attempts to build and insert an element into the │ │ │ │ -422 * %unordered_set. An %unordered_set relies on unique keys and thus an │ │ │ │ -423 * element is only inserted if it is not already present in the │ │ │ │ -424 * %unordered_set. │ │ │ │ -425 * │ │ │ │ -426 * Insertion requires amortized constant time. │ │ │ │ -427 */ │ │ │ │ -428 template │ │ │ │ -429 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_4_3_0 _e_m_p_l_a_c_e(___A_r_g_s&&... _____a_r_g_s) │ │ │ │ -431 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); } │ │ │ │ -432 │ │ │ │ -433 /** │ │ │ │ -434 * @brief Attempts to insert an element into the %unordered_set. │ │ │ │ -435 * @param __pos An iterator that serves as a hint as to where the │ │ │ │ -436 * element should be inserted. │ │ │ │ -437 * @param __args Arguments used to generate the element to be │ │ │ │ -438 * inserted. │ │ │ │ -439 * @return An iterator that points to the element with key equivalent to │ │ │ │ -440 * the one generated from @a __args (may or may not be the │ │ │ │ -441 * element itself). │ │ │ │ -442 * │ │ │ │ -443 * This function is not concerned about whether the insertion took place, │ │ │ │ -444 * and thus does not return a boolean like the single-argument emplace() │ │ │ │ -445 * does. Note that the first parameter is only a hint and can │ │ │ │ -446 * potentially improve the performance of the insertion process. A bad │ │ │ │ -447 * hint would cause no gains in efficiency. │ │ │ │ -448 * │ │ │ │ -449 * For more on @a hinting, see: │ │ │ │ -450 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ +403 ///@{ │ │ │ │ +404 /** │ │ │ │ +405 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ +406 * element in the %unordered_map. │ │ │ │ +407 */ │ │ │ │ +408 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_4_0_9 _e_n_d() _c_o_n_s_t noexcept │ │ │ │ +410 { return _M_h.end(); } │ │ │ │ +411 │ │ │ │ +412 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_4_1_3 _c_e_n_d() _c_o_n_s_t noexcept │ │ │ │ +414 { return _M_h.end(); } │ │ │ │ +415 ///@} │ │ │ │ +416 │ │ │ │ +417 // modifiers. │ │ │ │ +418 │ │ │ │ +419 /** │ │ │ │ +420 * @brief Attempts to build and insert a std::pair into the │ │ │ │ +421 * %unordered_map. │ │ │ │ +422 * │ │ │ │ +423 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ +424 * std::piecewise_contruct for passing arguments to each │ │ │ │ +425 * part of the pair constructor). │ │ │ │ +426 * │ │ │ │ +427 * @return A pair, of which the first element is an iterator that points │ │ │ │ +428 * to the possibly inserted pair, and the second is a bool that │ │ │ │ +429 * is true if the pair was actually inserted. │ │ │ │ +430 * │ │ │ │ +431 * This function attempts to build and insert a (key, value) %pair into │ │ │ │ +432 * the %unordered_map. │ │ │ │ +433 * An %unordered_map relies on unique keys and thus a %pair is only │ │ │ │ +434 * inserted if its first element (the key) is not already present in the │ │ │ │ +435 * %unordered_map. │ │ │ │ +436 * │ │ │ │ +437 * Insertion requires amortized constant time. │ │ │ │ +438 */ │ │ │ │ +439 template │ │ │ │ +440 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +_4_4_1 _e_m_p_l_a_c_e(___A_r_g_s&&... _____a_r_g_s) │ │ │ │ +442 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); } │ │ │ │ +443 │ │ │ │ +444 /** │ │ │ │ +445 * @brief Attempts to build and insert a std::pair into the │ │ │ │ +446 * %unordered_map. │ │ │ │ +447 * │ │ │ │ +448 * @param __pos An iterator that serves as a hint as to where the pair │ │ │ │ +449 * should be inserted. │ │ │ │ +450 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ +451 * std::piecewise_contruct for passing arguments to each │ │ │ │ +452 * part of the pair constructor). │ │ │ │ +453 * @return An iterator that points to the element with key of the │ │ │ │ +454 * std::pair built from @a __args (may or may not be that │ │ │ │ +455 * std::pair). │ │ │ │ +456 * │ │ │ │ +457 * This function is not concerned about whether the insertion took place, │ │ │ │ +458 * and thus does not return a boolean like the single-argument emplace() │ │ │ │ +459 * does. │ │ │ │ +460 * Note that the first parameter is only a hint and can potentially │ │ │ │ +461 * improve the performance of the insertion process. A bad hint would │ │ │ │ +462 * cause no gains in efficiency. │ │ │ │ +463 * │ │ │ │ +464 * See │ │ │ │ +465 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ associative.html#containers.associative.insert_hints │ │ │ │ -451 * │ │ │ │ -452 * Insertion requires amortized constant time. │ │ │ │ -453 */ │ │ │ │ -454 template │ │ │ │ -455 _i_t_e_r_a_t_o_r │ │ │ │ -_4_5_6 _e_m_p_l_a_c_e___h_i_n_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s, ___A_r_g_s&&... _____a_r_g_s) │ │ │ │ -457 { return _M_h.emplace_hint(_____p_o_s, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); } │ │ │ │ -458 │ │ │ │ -459 ///@{ │ │ │ │ -460 /** │ │ │ │ -461 * @brief Attempts to insert an element into the %unordered_set. │ │ │ │ -462 * @param __x Element to be inserted. │ │ │ │ -463 * @return A pair, of which the first element is an iterator that points │ │ │ │ -464 * to the possibly inserted element, and the second is a bool │ │ │ │ -465 * that is true if the element was actually inserted. │ │ │ │ -466 * │ │ │ │ -467 * This function attempts to insert an element into the %unordered_set. │ │ │ │ -468 * An %unordered_set relies on unique keys and thus an element is only │ │ │ │ -469 * inserted if it is not already present in the %unordered_set. │ │ │ │ -470 * │ │ │ │ -471 * Insertion requires amortized constant time. │ │ │ │ -472 */ │ │ │ │ -473 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_4_7_4 _i_n_s_e_r_t(const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -475 { return _M_h.insert(__x); } │ │ │ │ -476 │ │ │ │ -477 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_4_7_8 _i_n_s_e_r_t(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -479 { return _M_h.insert(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -480 ///@} │ │ │ │ -481 │ │ │ │ -482 ///@{ │ │ │ │ -483 /** │ │ │ │ -484 * @brief Attempts to insert an element into the %unordered_set. │ │ │ │ -485 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ -486 * element should be inserted. │ │ │ │ -487 * @param __x Element to be inserted. │ │ │ │ -488 * @return An iterator that points to the element with key of │ │ │ │ -489 * @a __x (may or may not be the element passed in). │ │ │ │ -490 * │ │ │ │ -491 * This function is not concerned about whether the insertion took place, │ │ │ │ -492 * and thus does not return a boolean like the single-argument insert() │ │ │ │ -493 * does. Note that the first parameter is only a hint and can │ │ │ │ -494 * potentially improve the performance of the insertion process. A bad │ │ │ │ -495 * hint would cause no gains in efficiency. │ │ │ │ -496 * │ │ │ │ -497 * For more on @a hinting, see: │ │ │ │ -498 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ +466 * for more on @a hinting. │ │ │ │ +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 _____p_o_s, ___A_r_g_s&&... _____a_r_g_s) │ │ │ │ +473 { return _M_h.emplace_hint(_____p_o_s, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); } │ │ │ │ +474 │ │ │ │ +475#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +476 /// Extract a node. │ │ │ │ +477 node_type │ │ │ │ +_4_7_8 _e_x_t_r_a_c_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s) │ │ │ │ +479 { │ │ │ │ +480 __glibcxx_assert(_____p_o_s != _e_n_d()); │ │ │ │ +481 return _M_h.extract(_____p_o_s); │ │ │ │ +482 } │ │ │ │ +483 │ │ │ │ +484 /// Extract a node. │ │ │ │ +485 node_type │ │ │ │ +_4_8_6 _e_x_t_r_a_c_t(const _k_e_y___t_y_p_e& _____k_e_y) │ │ │ │ +487 { return _M_h.extract(_____k_e_y); } │ │ │ │ +488 │ │ │ │ +489 /// Re-insert an extracted node. │ │ │ │ +490 insert_return_type │ │ │ │ +_4_9_1 _i_n_s_e_r_t(node_type&& _____n_h) │ │ │ │ +492 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(_____n_h)); } │ │ │ │ +493 │ │ │ │ +494 /// Re-insert an extracted node. │ │ │ │ +495 _i_t_e_r_a_t_o_r │ │ │ │ +_4_9_6 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r, node_type&& _____n_h) │ │ │ │ +497 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(_____n_h)).position; } │ │ │ │ +498#endif // node_extract │ │ │ │ +499 │ │ │ │ +500#ifdef __glibcxx_unordered_map_try_emplace // C++ >= 17 && HOSTED │ │ │ │ +501 /** │ │ │ │ +502 * @brief Attempts to build and insert a std::pair into the │ │ │ │ +503 * %unordered_map. │ │ │ │ +504 * │ │ │ │ +505 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ +506 * the unordered_map. │ │ │ │ +507 * @param __args Arguments used to generate the .second for a │ │ │ │ +508 * new pair instance. │ │ │ │ +509 * │ │ │ │ +510 * @return A pair, of which the first element is an iterator that points │ │ │ │ +511 * to the possibly inserted pair, and the second is a bool that │ │ │ │ +512 * is true if the pair was actually inserted. │ │ │ │ +513 * │ │ │ │ +514 * This function attempts to build and insert a (key, value) %pair into │ │ │ │ +515 * the %unordered_map. │ │ │ │ +516 * An %unordered_map relies on unique keys and thus a %pair is only │ │ │ │ +517 * inserted if its first element (the key) is not already present in the │ │ │ │ +518 * %unordered_map. │ │ │ │ +519 * If a %pair is not inserted, this function has no effect. │ │ │ │ +520 * │ │ │ │ +521 * Insertion requires amortized constant time. │ │ │ │ +522 */ │ │ │ │ +523 template │ │ │ │ +524 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +_5_2_5 _t_r_y___e_m_p_l_a_c_e(const _k_e_y___t_y_p_e& _____k, ___A_r_g_s&&... _____a_r_g_s) │ │ │ │ +526 { │ │ │ │ +527 return _M_h.try_emplace(_c_e_n_d(), _____k, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); │ │ │ │ +528 } │ │ │ │ +529 │ │ │ │ +530 // move-capable overload │ │ │ │ +531 template │ │ │ │ +532 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +533 _t_r_y___e_m_p_l_a_c_e(_k_e_y___t_y_p_e&& _____k, ___A_r_g_s&&... _____a_r_g_s) │ │ │ │ +534 { │ │ │ │ +535 return _M_h.try_emplace(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(_____k), │ │ │ │ +536 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); │ │ │ │ +537 } │ │ │ │ +538 │ │ │ │ +539 /** │ │ │ │ +540 * @brief Attempts to build and insert a std::pair into the │ │ │ │ +541 * %unordered_map. │ │ │ │ +542 * │ │ │ │ +543 * @param __hint An iterator that serves as a hint as to where the pair │ │ │ │ +544 * should be inserted. │ │ │ │ +545 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ +546 * the unordered_map. │ │ │ │ +547 * @param __args Arguments used to generate the .second for a │ │ │ │ +548 * new pair instance. │ │ │ │ +549 * @return An iterator that points to the element with key of the │ │ │ │ +550 * std::pair built from @a __args (may or may not be that │ │ │ │ +551 * std::pair). │ │ │ │ +552 * │ │ │ │ +553 * This function is not concerned about whether the insertion took place, │ │ │ │ +554 * and thus does not return a boolean like the single-argument emplace() │ │ │ │ +555 * does. However, if insertion did not take place, │ │ │ │ +556 * this function has no effect. │ │ │ │ +557 * Note that the first parameter is only a hint and can potentially │ │ │ │ +558 * improve the performance of the insertion process. A bad hint would │ │ │ │ +559 * cause no gains in efficiency. │ │ │ │ +560 * │ │ │ │ +561 * See │ │ │ │ +562 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ associative.html#containers.associative.insert_hints │ │ │ │ -499 * │ │ │ │ -500 * Insertion requires amortized constant. │ │ │ │ -501 */ │ │ │ │ -502 _i_t_e_r_a_t_o_r │ │ │ │ -_5_0_3 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -504 { return _M_h.insert(_____h_i_n_t, __x); } │ │ │ │ -505 │ │ │ │ -506 _i_t_e_r_a_t_o_r │ │ │ │ -_5_0_7 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, _v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -508 { return _M_h.insert(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -509 ///@} │ │ │ │ -510 │ │ │ │ -511 /** │ │ │ │ -512 * @brief A template function that attempts to insert a range of │ │ │ │ -513 * elements. │ │ │ │ -514 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -515 * inserted. │ │ │ │ -516 * @param __last Iterator pointing to the end of the range. │ │ │ │ -517 * │ │ │ │ -518 * Complexity similar to that of the range constructor. │ │ │ │ -519 */ │ │ │ │ -520 template │ │ │ │ -521 void │ │ │ │ -_5_2_2 _i_n_s_e_r_t(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __last) │ │ │ │ -523 { _M_h.insert(__first, __last); } │ │ │ │ -524 │ │ │ │ -525 /** │ │ │ │ -526 * @brief Attempts to insert a list of elements into the %unordered_set. │ │ │ │ -527 * @param __l A std::initializer_list of elements │ │ │ │ -528 * to be inserted. │ │ │ │ -529 * │ │ │ │ -530 * Complexity similar to that of the range constructor. │ │ │ │ -531 */ │ │ │ │ -532 void │ │ │ │ -_5_3_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) │ │ │ │ -534 { _M_h.insert(_____l); } │ │ │ │ -535 │ │ │ │ -536#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -537 /** │ │ │ │ -538 * @brief Inserts a range of elements. │ │ │ │ -539 * @since C++23 │ │ │ │ -540 * @param __rg An input range of elements that can be converted to │ │ │ │ -541 * the set's value type. │ │ │ │ -542 */ │ │ │ │ -543 template<__detail::__container_compatible_range<_Value> _Rg> │ │ │ │ -544 void │ │ │ │ -545 _i_n_s_e_r_t___r_a_n_g_e(___R_g&& _____r_g) │ │ │ │ -546 { │ │ │ │ -547 auto __first = ranges::begin(_____r_g); │ │ │ │ -548 const auto __last = ranges::end(_____r_g); │ │ │ │ -549 for (; __first != __last; ++__first) │ │ │ │ -550 _M_h.emplace(*__first); │ │ │ │ -551 } │ │ │ │ -552#endif │ │ │ │ -553 │ │ │ │ -554#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -555 /// Extract a node. │ │ │ │ -556 node_type │ │ │ │ -_5_5_7 _e_x_t_r_a_c_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s) │ │ │ │ -558 { │ │ │ │ -559 __glibcxx_assert(_____p_o_s != _e_n_d()); │ │ │ │ -560 return _M_h.extract(_____p_o_s); │ │ │ │ -561 } │ │ │ │ -562 │ │ │ │ -563 /// Extract a node. │ │ │ │ -564 node_type │ │ │ │ -_5_6_5 _e_x_t_r_a_c_t(const _k_e_y___t_y_p_e& _____k_e_y) │ │ │ │ -566 { return _M_h.extract(_____k_e_y); } │ │ │ │ -567 │ │ │ │ -568 /// Re-insert an extracted node. │ │ │ │ -569 insert_return_type │ │ │ │ -_5_7_0 _i_n_s_e_r_t(node_type&& _____n_h) │ │ │ │ -571 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(_____n_h)); } │ │ │ │ -572 │ │ │ │ -573 /// Re-insert an extracted node. │ │ │ │ -574 _i_t_e_r_a_t_o_r │ │ │ │ -_5_7_5 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r, node_type&& _____n_h) │ │ │ │ -576 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(_____n_h)).position; } │ │ │ │ -577#endif // node_extract │ │ │ │ -578 │ │ │ │ -579 ///@{ │ │ │ │ -580 /** │ │ │ │ -581 * @brief Erases an element from an %unordered_set. │ │ │ │ -582 * @param __position An iterator pointing to the element to be erased. │ │ │ │ -583 * @return An iterator pointing to the element immediately following │ │ │ │ -584 * @a __position prior to the element being erased. If no such │ │ │ │ -585 * element exists, end() is returned. │ │ │ │ -586 * │ │ │ │ -587 * This function erases an element, pointed to by the given iterator, │ │ │ │ -588 * from an %unordered_set. Note that this function only erases the │ │ │ │ -589 * element, and that if the element is itself a pointer, the pointed-to │ │ │ │ -590 * memory is not touched in any way. Managing the pointer is the user's │ │ │ │ -591 * responsibility. │ │ │ │ -592 */ │ │ │ │ -593 _i_t_e_r_a_t_o_r │ │ │ │ -_5_9_4 _e_r_a_s_e(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n) │ │ │ │ -595 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ -596 │ │ │ │ -597 // LWG 2059. │ │ │ │ -598 _i_t_e_r_a_t_o_r │ │ │ │ -_5_9_9 _e_r_a_s_e(_i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n) │ │ │ │ -600 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ -601 ///@} │ │ │ │ -602 │ │ │ │ -603 /** │ │ │ │ -604 * @brief Erases elements according to the provided key. │ │ │ │ -605 * @param __x Key of element to be erased. │ │ │ │ -606 * @return The number of elements erased. │ │ │ │ -607 * │ │ │ │ -608 * This function erases all the elements located by the given key from │ │ │ │ -609 * an %unordered_set. For an %unordered_set the result of this function │ │ │ │ -610 * can only be 0 (not present) or 1 (present). │ │ │ │ -611 * Note that this function only erases the element, and that if │ │ │ │ -612 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ -613 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -614 */ │ │ │ │ -615 _s_i_z_e___t_y_p_e │ │ │ │ -_6_1_6 _e_r_a_s_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -617 { return _M_h.erase(__x); } │ │ │ │ -618 │ │ │ │ -619 /** │ │ │ │ -620 * @brief Erases a [__first,__last) range of elements from an │ │ │ │ -621 * %unordered_set. │ │ │ │ -622 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -623 * erased. │ │ │ │ -624 * @param __last Iterator pointing to the end of the range to │ │ │ │ -625 * be erased. │ │ │ │ -626 * @return The iterator @a __last. │ │ │ │ -627 * │ │ │ │ -628 * This function erases a sequence of elements from an %unordered_set. │ │ │ │ -629 * Note that this function only erases the element, and that if │ │ │ │ -630 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ -631 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -632 */ │ │ │ │ -633 _i_t_e_r_a_t_o_r │ │ │ │ -_6_3_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) │ │ │ │ -635 { return _M_h.erase(__first, __last); } │ │ │ │ -636 │ │ │ │ -637 /** │ │ │ │ -638 * Erases all elements in an %unordered_set. Note that this function only │ │ │ │ -639 * erases the elements, and that if the elements themselves are pointers, │ │ │ │ -640 * the pointed-to memory is not touched in any way. Managing the pointer │ │ │ │ -641 * is the user's responsibility. │ │ │ │ +563 * for more on @a hinting. │ │ │ │ +564 * │ │ │ │ +565 * Insertion requires amortized constant time. │ │ │ │ +566 */ │ │ │ │ +567 template │ │ │ │ +568 _i_t_e_r_a_t_o_r │ │ │ │ +_5_6_9 _t_r_y___e_m_p_l_a_c_e(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, const _k_e_y___t_y_p_e& _____k, │ │ │ │ +570 ___A_r_g_s&&... _____a_r_g_s) │ │ │ │ +571 { │ │ │ │ +572 return _M_h.try_emplace(_____h_i_n_t, _____k, │ │ │ │ +573 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...).first; │ │ │ │ +574 } │ │ │ │ +575 │ │ │ │ +576 // move-capable overload │ │ │ │ +577 template │ │ │ │ +578 _i_t_e_r_a_t_o_r │ │ │ │ +579 _t_r_y___e_m_p_l_a_c_e(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, _k_e_y___t_y_p_e&& _____k, ___A_r_g_s&&... _____a_r_g_s) │ │ │ │ +580 { │ │ │ │ +581 return _M_h.try_emplace(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(_____k), │ │ │ │ +582 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...).first; │ │ │ │ +583 } │ │ │ │ +584#endif // __glibcxx_unordered_map_try_emplace │ │ │ │ +585 │ │ │ │ +586 ///@{ │ │ │ │ +587 /** │ │ │ │ +588 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ +589 │ │ │ │ +590 * @param __x Pair to be inserted (see std::make_pair for easy │ │ │ │ +591 * creation of pairs). │ │ │ │ +592 * │ │ │ │ +593 * @return A pair, of which the first element is an iterator that │ │ │ │ +594 * points to the possibly inserted pair, and the second is │ │ │ │ +595 * a bool that is true if the pair was actually inserted. │ │ │ │ +596 * │ │ │ │ +597 * This function attempts to insert a (key, value) %pair into the │ │ │ │ +598 * %unordered_map. An %unordered_map relies on unique keys and thus a │ │ │ │ +599 * %pair is only inserted if its first element (the key) is not already │ │ │ │ +600 * present in the %unordered_map. │ │ │ │ +601 * │ │ │ │ +602 * Insertion requires amortized constant time. │ │ │ │ +603 */ │ │ │ │ +604 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +_6_0_5 _i_n_s_e_r_t(const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ +606 { return _M_h.insert(__x); } │ │ │ │ +607 │ │ │ │ +608 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +609 // 2354. Unnecessary copying when inserting into maps with braced-init │ │ │ │ +610 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +_6_1_1 _i_n_s_e_r_t(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ +612 { return _M_h.insert(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ +613 │ │ │ │ +614 template │ │ │ │ +615 _____e_n_a_b_l_e___i_f___t_<_i_s___c_o_n_s_t_r_u_c_t_i_b_l_e_<_v_a_l_u_e___t_y_p_e_,_ ___P_a_i_r_&_&_>_:_:_v_a_l_u_e, │ │ │ │ +616 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_>> │ │ │ │ +_6_1_7 _i_n_s_e_r_t(___P_a_i_r&& __x) │ │ │ │ +618 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ +619 ///@} │ │ │ │ +620 │ │ │ │ +621 ///@{ │ │ │ │ +622 /** │ │ │ │ +623 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ +624 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ +625 * pair should be inserted. │ │ │ │ +626 * @param __x Pair to be inserted (see std::make_pair for easy creation │ │ │ │ +627 * of pairs). │ │ │ │ +628 * @return An iterator that points to the element with key of │ │ │ │ +629 * @a __x (may or may not be the %pair passed in). │ │ │ │ +630 * │ │ │ │ +631 * This function is not concerned about whether the insertion took place, │ │ │ │ +632 * and thus does not return a boolean like the single-argument insert() │ │ │ │ +633 * does. Note that the first parameter is only a hint and can │ │ │ │ +634 * potentially improve the performance of the insertion process. A bad │ │ │ │ +635 * hint would cause no gains in efficiency. │ │ │ │ +636 * │ │ │ │ +637 * See │ │ │ │ +638 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ +associative.html#containers.associative.insert_hints │ │ │ │ +639 * for more on @a hinting. │ │ │ │ +640 * │ │ │ │ +641 * Insertion requires amortized constant time. │ │ │ │ 642 */ │ │ │ │ -643 void │ │ │ │ -_6_4_4 _c_l_e_a_r() noexcept │ │ │ │ -645 { _M_h.clear(); } │ │ │ │ +643 _i_t_e_r_a_t_o_r │ │ │ │ +_6_4_4 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ +645 { return _M_h.insert(_____h_i_n_t, __x); } │ │ │ │ 646 │ │ │ │ -647 /** │ │ │ │ -648 * @brief Swaps data with another %unordered_set. │ │ │ │ -649 * @param __x An %unordered_set of the same element and allocator │ │ │ │ -650 * types. │ │ │ │ -651 * │ │ │ │ -652 * This exchanges the elements between two sets in constant time. │ │ │ │ -653 * Note that the global std::swap() function is specialized such that │ │ │ │ -654 * std::swap(s1,s2) will feed to this function. │ │ │ │ -655 */ │ │ │ │ -656 void │ │ │ │ -_6_5_7 _s_w_a_p(_u_n_o_r_d_e_r_e_d___s_e_t& __x) │ │ │ │ -658 noexcept( noexcept(_M_h.swap(__x._M_h)) ) │ │ │ │ -659 { _M_h.swap(__x._M_h); } │ │ │ │ -660 │ │ │ │ -661#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -662 template │ │ │ │ -663 friend class std::_Hash_merge_helper; │ │ │ │ -664 │ │ │ │ -665 template │ │ │ │ -666 void │ │ │ │ -667 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_>& _____s_o_u_r_c_e) │ │ │ │ -668 { │ │ │ │ -669 if constexpr (_i_s___s_a_m_e___v_<___H_2_,_ ___H_a_s_h_> && _i_s___s_a_m_e___v_<___P_2_,_ ___P_r_e_d_>) │ │ │ │ -670 if (_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____s_o_u_r_c_e) == this) [[_____u_n_l_i_k_e_l_y____]] │ │ │ │ -671 return; │ │ │ │ +647 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +648 // 2354. Unnecessary copying when inserting into maps with braced-init │ │ │ │ +649 _i_t_e_r_a_t_o_r │ │ │ │ +_6_5_0 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, _v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ +651 { return _M_h.insert(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ +652 │ │ │ │ +653 template │ │ │ │ +654 _____e_n_a_b_l_e___i_f___t_<_i_s___c_o_n_s_t_r_u_c_t_i_b_l_e_<_v_a_l_u_e___t_y_p_e_,_ ___P_a_i_r_&_&_>_:_:_v_a_l_u_e, _i_t_e_r_a_t_o_r> │ │ │ │ +_6_5_5 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, ___P_a_i_r&& __x) │ │ │ │ +656 { return _M_h.emplace_hint(_____h_i_n_t, _s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ +657 ///@} │ │ │ │ +658 │ │ │ │ +659 /** │ │ │ │ +660 * @brief A template function that attempts to insert a range of │ │ │ │ +661 * elements. │ │ │ │ +662 * @param __first Iterator pointing to the start of the range to be │ │ │ │ +663 * inserted. │ │ │ │ +664 * @param __last Iterator pointing to the end of the range. │ │ │ │ +665 * │ │ │ │ +666 * Complexity similar to that of the range constructor. │ │ │ │ +667 */ │ │ │ │ +668 template │ │ │ │ +669 void │ │ │ │ +_6_7_0 _i_n_s_e_r_t(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __last) │ │ │ │ +671 { _M_h.insert(__first, __last); } │ │ │ │ 672 │ │ │ │ -673 using ___M_e_r_g_e___h_e_l_p_e_r = ___H_a_s_h___m_e_r_g_e___h_e_l_p_e_r_<_u_n_o_r_d_e_r_e_d___s_e_t_,_ ___H_2_,_ ___P_2_>; │ │ │ │ -674 _M_h._M_merge_unique(_Merge_helper::_S_get_table(_____s_o_u_r_c_e)); │ │ │ │ -675 } │ │ │ │ -676 │ │ │ │ -677 template │ │ │ │ -678 void │ │ │ │ -679 merge(unordered_set<_Value, _H2, _P2, _Alloc>&& __source) │ │ │ │ -680 { │ │ │ │ -681 using _Merge_helper = _Hash_merge_helper; │ │ │ │ -682 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ -683 } │ │ │ │ -684 │ │ │ │ -685 template │ │ │ │ -686 void │ │ │ │ -687 merge(unordered_multiset<_Value, _H2, _P2, _Alloc>& __source) │ │ │ │ -688 { │ │ │ │ -689 using _Merge_helper = _Hash_merge_helper; │ │ │ │ -690 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ -691 } │ │ │ │ -692 │ │ │ │ -693 template │ │ │ │ -694 void │ │ │ │ -695 merge(unordered_multiset<_Value, _H2, _P2, _Alloc>&& __source) │ │ │ │ -696 { merge(__source); } │ │ │ │ -697#endif // node_extract │ │ │ │ -698 │ │ │ │ -699 // observers. │ │ │ │ -700 │ │ │ │ -701 /// Returns the hash functor object with which the %unordered_set was │ │ │ │ -702 /// constructed. │ │ │ │ -703 _h_a_s_h_e_r │ │ │ │ -_7_0_4 _h_a_s_h___f_u_n_c_t_i_o_n() const │ │ │ │ -705 { return _M_h.hash_function(); } │ │ │ │ -706 │ │ │ │ -707 /// Returns the key comparison object with which the %unordered_set was │ │ │ │ -708 /// constructed. │ │ │ │ -709 _k_e_y___e_q_u_a_l │ │ │ │ -_7_1_0 _k_e_y___e_q() const │ │ │ │ -711 { return _M_h.key_eq(); } │ │ │ │ -712 │ │ │ │ -713 // lookup. │ │ │ │ -714 │ │ │ │ -715 ///@{ │ │ │ │ -716 /** │ │ │ │ -717 * @brief Tries to locate an element in an %unordered_set. │ │ │ │ -718 * @param __x Element to be located. │ │ │ │ -719 * @return Iterator pointing to sought-after element, or end() if not │ │ │ │ -720 * found. │ │ │ │ -721 * │ │ │ │ -722 * This function takes a key and tries to locate the element with which │ │ │ │ -723 * the key matches. If successful the function returns an iterator │ │ │ │ -724 * pointing to the sought after element. If unsuccessful it returns the │ │ │ │ -725 * past-the-end ( @c end() ) iterator. │ │ │ │ -726 */ │ │ │ │ -727 _i_t_e_r_a_t_o_r │ │ │ │ -_7_2_8 _f_i_n_d(const _k_e_y___t_y_p_e& __x) │ │ │ │ -729 { return _M_h.find(__x); } │ │ │ │ -730 │ │ │ │ -731#if __cplusplus > 201703L │ │ │ │ -732 template │ │ │ │ -733 auto │ │ │ │ -_7_3_4 _f_i_n_d(const ___K_t& _____k) │ │ │ │ -735 -> decltype(_M_h._M_find_tr(_____k)) │ │ │ │ -736 { return _M_h._M_find_tr(_____k); } │ │ │ │ -737#endif │ │ │ │ -738 │ │ │ │ -739 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_7_4_0 _f_i_n_d(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -741 { return _M_h.find(__x); } │ │ │ │ -742 │ │ │ │ -743#if __cplusplus > 201703L │ │ │ │ -744 template │ │ │ │ -745 auto │ │ │ │ -_7_4_6 _f_i_n_d(const ___K_t& _____k) const │ │ │ │ -747 -> decltype(_M_h._M_find_tr(_____k)) │ │ │ │ -748 { return _M_h._M_find_tr(_____k); } │ │ │ │ -749#endif │ │ │ │ -750 ///@} │ │ │ │ -751 │ │ │ │ -752 ///@{ │ │ │ │ -753 /** │ │ │ │ -754 * @brief Finds the number of elements. │ │ │ │ -755 * @param __x Element to located. │ │ │ │ -756 * @return Number of elements with specified key. │ │ │ │ -757 * │ │ │ │ -758 * This function only makes sense for unordered_multisets; for │ │ │ │ -759 * unordered_set the result will either be 0 (not present) or 1 │ │ │ │ -760 * (present). │ │ │ │ -761 */ │ │ │ │ -762 _s_i_z_e___t_y_p_e │ │ │ │ -_7_6_3 _c_o_u_n_t(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -764 { return _M_h.count(__x); } │ │ │ │ -765 │ │ │ │ -766#if __cplusplus > 201703L │ │ │ │ -767 template │ │ │ │ -768 auto │ │ │ │ -_7_6_9 _c_o_u_n_t(const ___K_t& _____k) const │ │ │ │ -770 -> decltype(_M_h._M_count_tr(_____k)) │ │ │ │ -771 { return _M_h._M_count_tr(_____k); } │ │ │ │ -772#endif │ │ │ │ -773 ///@} │ │ │ │ -774 │ │ │ │ -775#if __cplusplus > 201703L │ │ │ │ -776 ///@{ │ │ │ │ -777 /** │ │ │ │ -778 * @brief Finds whether an element with the given key exists. │ │ │ │ -779 * @param __x Key of elements to be located. │ │ │ │ -780 * @return True if there is any element with the specified key. │ │ │ │ -781 */ │ │ │ │ -782 bool │ │ │ │ -_7_8_3 _c_o_n_t_a_i_n_s(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -784 { return _M_h.find(__x) != _M_h.end(); } │ │ │ │ -785 │ │ │ │ -786 template │ │ │ │ -787 auto │ │ │ │ -_7_8_8 _c_o_n_t_a_i_n_s(const ___K_t& _____k) const │ │ │ │ -789 -> decltype(_M_h._M_find_tr(_____k), _v_o_i_d(), true) │ │ │ │ -790 { return _M_h._M_find_tr(_____k) != _M_h.end(); } │ │ │ │ -791 ///@} │ │ │ │ -792#endif │ │ │ │ -793 │ │ │ │ -794 ///@{ │ │ │ │ -795 /** │ │ │ │ -796 * @brief Finds a subsequence matching given key. │ │ │ │ -797 * @param __x Key to be located. │ │ │ │ -798 * @return Pair of iterators that possibly points to the subsequence │ │ │ │ -799 * matching given key. │ │ │ │ -800 * │ │ │ │ -801 * This function probably only makes sense for multisets. │ │ │ │ -802 */ │ │ │ │ -803 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _i_t_e_r_a_t_o_r_> │ │ │ │ -_8_0_4 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -805 { return _M_h.equal_range(__x); } │ │ │ │ -806 │ │ │ │ -807#if __cplusplus > 201703L │ │ │ │ -808 template │ │ │ │ -809 auto │ │ │ │ -_8_1_0 _e_q_u_a_l___r_a_n_g_e(const ___K_t& _____k) │ │ │ │ -811 -> decltype(_M_h._M_equal_range_tr(_____k)) │ │ │ │ -812 { return _M_h._M_equal_range_tr(_____k); } │ │ │ │ -813#endif │ │ │ │ -814 │ │ │ │ -815 _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_1_6 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -817 { return _M_h.equal_range(__x); } │ │ │ │ -818 │ │ │ │ -819#if __cplusplus > 201703L │ │ │ │ -820 template │ │ │ │ -821 auto │ │ │ │ -_8_2_2 _e_q_u_a_l___r_a_n_g_e(const ___K_t& _____k) const │ │ │ │ -823 -> decltype(_M_h._M_equal_range_tr(_____k)) │ │ │ │ -824 { return _M_h._M_equal_range_tr(_____k); } │ │ │ │ -825#endif │ │ │ │ -826 ///@} │ │ │ │ -827 │ │ │ │ -828 // bucket interface. │ │ │ │ -829 │ │ │ │ -830 /// Returns the number of buckets of the %unordered_set. │ │ │ │ -831 _s_i_z_e___t_y_p_e │ │ │ │ -_8_3_2 _b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ -833 { return _M_h.bucket_count(); } │ │ │ │ -834 │ │ │ │ -835 /// Returns the maximum number of buckets of the %unordered_set. │ │ │ │ -836 _s_i_z_e___t_y_p_e │ │ │ │ -_8_3_7 _m_a_x___b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ -838 { return _M_h.max_bucket_count(); } │ │ │ │ -839 │ │ │ │ -840 /* │ │ │ │ -841 * @brief Returns the number of elements in a given bucket. │ │ │ │ -842 * @param __n A bucket index. │ │ │ │ -843 * @return The number of elements in the bucket. │ │ │ │ -844 */ │ │ │ │ -845 _s_i_z_e___t_y_p_e │ │ │ │ -846 bucket_size(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -847 { return _M_h.bucket_size(__n); } │ │ │ │ -848 │ │ │ │ -849 /* │ │ │ │ -850 * @brief Returns the bucket index of a given element. │ │ │ │ -851 * @param __key A key instance. │ │ │ │ -852 * @return The key bucket index. │ │ │ │ -853 */ │ │ │ │ -854 _s_i_z_e___t_y_p_e │ │ │ │ -855 bucket(const _k_e_y___t_y_p_e& __key) const │ │ │ │ -856 { return _M_h.bucket(__key); } │ │ │ │ -857 │ │ │ │ -858 ///@{ │ │ │ │ -859 /** │ │ │ │ -860 * @brief Returns a read-only (constant) iterator pointing to the first │ │ │ │ -861 * bucket element. │ │ │ │ -862 * @param __n The bucket index. │ │ │ │ -863 * @return A read-only local iterator. │ │ │ │ -864 */ │ │ │ │ -865 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_8_6_6 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) │ │ │ │ -867 { return _M_h.begin(__n); } │ │ │ │ -868 │ │ │ │ -869 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_8_7_0 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -871 { return _M_h.begin(__n); } │ │ │ │ -872 │ │ │ │ -873 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_8_7_4 _c_b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -875 { return _M_h.cbegin(__n); } │ │ │ │ -876 ///@} │ │ │ │ -877 │ │ │ │ -878 ///@{ │ │ │ │ -879 /** │ │ │ │ -880 * @brief Returns a read-only (constant) iterator pointing to one past │ │ │ │ -881 * the last bucket elements. │ │ │ │ -882 * @param __n The bucket index. │ │ │ │ -883 * @return A read-only local iterator. │ │ │ │ -884 */ │ │ │ │ -885 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_8_8_6 _e_n_d(_s_i_z_e___t_y_p_e __n) │ │ │ │ -887 { return _M_h.end(__n); } │ │ │ │ -888 │ │ │ │ -889 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_8_9_0 _e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -891 { return _M_h.end(__n); } │ │ │ │ -892 │ │ │ │ -893 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_8_9_4 _c_e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -895 { return _M_h.cend(__n); } │ │ │ │ -896 ///@} │ │ │ │ -897 │ │ │ │ -898 // hash policy. │ │ │ │ -899 │ │ │ │ -900 /// Returns the average number of elements per bucket. │ │ │ │ -901 float │ │ │ │ -_9_0_2 _l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -903 { return _M_h.load_factor(); } │ │ │ │ -904 │ │ │ │ -905 /// Returns a positive number that the %unordered_set tries to keep the │ │ │ │ -906 /// load factor less than or equal to. │ │ │ │ -907 float │ │ │ │ -_9_0_8 _m_a_x___l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -909 { return _M_h.max_load_factor(); } │ │ │ │ +673 /** │ │ │ │ +674 * @brief Attempts to insert a list of elements into the %unordered_map. │ │ │ │ +675 * @param __l A std::initializer_list of elements │ │ │ │ +676 * to be inserted. │ │ │ │ +677 * │ │ │ │ +678 * Complexity similar to that of the range constructor. │ │ │ │ +679 */ │ │ │ │ +680 void │ │ │ │ +_6_8_1 _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) │ │ │ │ +682 { _M_h.insert(_____l); } │ │ │ │ +683 │ │ │ │ +684#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +685 /** │ │ │ │ +686 * @brief Inserts a range of elements. │ │ │ │ +687 * @since C++23 │ │ │ │ +688 * @param __rg An input range of elements that can be converted to │ │ │ │ +689 * the map's value type. │ │ │ │ +690 */ │ │ │ │ +691 template<__detail::__container_compatible_range _Rg> │ │ │ │ +692 void │ │ │ │ +693 _i_n_s_e_r_t___r_a_n_g_e(___R_g&& _____r_g) │ │ │ │ +694 { │ │ │ │ +695 auto __first = ranges::begin(_____r_g); │ │ │ │ +696 const auto __last = ranges::end(_____r_g); │ │ │ │ +697 for (; __first != __last; ++__first) │ │ │ │ +698 _M_h.emplace(*__first); │ │ │ │ +699 } │ │ │ │ +700#endif │ │ │ │ +701 │ │ │ │ +702#ifdef __glibcxx_unordered_map_try_emplace // >= C++17 && HOSTED │ │ │ │ +703 /** │ │ │ │ +704 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ +705 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ +706 * the map. │ │ │ │ +707 * @param __obj Argument used to generate the .second for a pair │ │ │ │ +708 * instance. │ │ │ │ +709 * │ │ │ │ +710 * @return A pair, of which the first element is an iterator that │ │ │ │ +711 * points to the possibly inserted pair, and the second is │ │ │ │ +712 * a bool that is true if the pair was actually inserted. │ │ │ │ +713 * │ │ │ │ +714 * This function attempts to insert a (key, value) %pair into the │ │ │ │ +715 * %unordered_map. An %unordered_map relies on unique keys and thus a │ │ │ │ +716 * %pair is only inserted if its first element (the key) is not already │ │ │ │ +717 * present in the %unordered_map. │ │ │ │ +718 * If the %pair was already in the %unordered_map, the .second of │ │ │ │ +719 * the %pair is assigned from __obj. │ │ │ │ +720 * │ │ │ │ +721 * Insertion requires amortized constant time. │ │ │ │ +722 */ │ │ │ │ +723 template │ │ │ │ +724 pair │ │ │ │ +_7_2_5 _i_n_s_e_r_t___o_r___a_s_s_i_g_n(const _k_e_y___t_y_p_e& _____k, _Obj&& _____o_b_j) │ │ │ │ +726 { │ │ │ │ +727 auto _____r_e_t = _M_h.try_emplace(_c_e_n_d(), _____k, │ │ │ │ +728 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j)); │ │ │ │ +729 if (!_____r_e_t.second) │ │ │ │ +730 _____r_e_t.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j); │ │ │ │ +731 return _____r_e_t; │ │ │ │ +732 } │ │ │ │ +733 │ │ │ │ +734 // move-capable overload │ │ │ │ +735 template │ │ │ │ +736 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +737 _i_n_s_e_r_t___o_r___a_s_s_i_g_n(_k_e_y___t_y_p_e&& _____k, _Obj&& _____o_b_j) │ │ │ │ +738 { │ │ │ │ +739 auto _____r_e_t = _M_h.try_emplace(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(_____k), │ │ │ │ +740 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j)); │ │ │ │ +741 if (!_____r_e_t.second) │ │ │ │ +742 _____r_e_t.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j); │ │ │ │ +743 return _____r_e_t; │ │ │ │ +744 } │ │ │ │ +745 │ │ │ │ +746 /** │ │ │ │ +747 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ +748 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ +749 * pair should be inserted. │ │ │ │ +750 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ +751 * the unordered_map. │ │ │ │ +752 * @param __obj Argument used to generate the .second for a pair │ │ │ │ +753 * instance. │ │ │ │ +754 * @return An iterator that points to the element with key of │ │ │ │ +755 * @a __x (may or may not be the %pair passed in). │ │ │ │ +756 * │ │ │ │ +757 * This function is not concerned about whether the insertion took place, │ │ │ │ +758 * and thus does not return a boolean like the single-argument insert() │ │ │ │ +759 * does. │ │ │ │ +760 * If the %pair was already in the %unordered map, the .second of │ │ │ │ +761 * the %pair is assigned from __obj. │ │ │ │ +762 * Note that the first parameter is only a hint and can │ │ │ │ +763 * potentially improve the performance of the insertion process. A bad │ │ │ │ +764 * hint would cause no gains in efficiency. │ │ │ │ +765 * │ │ │ │ +766 * See │ │ │ │ +767 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ +associative.html#containers.associative.insert_hints │ │ │ │ +768 * for more on @a hinting. │ │ │ │ +769 * │ │ │ │ +770 * Insertion requires amortized constant time. │ │ │ │ +771 */ │ │ │ │ +772 template │ │ │ │ +773 _i_t_e_r_a_t_o_r │ │ │ │ +_7_7_4 _i_n_s_e_r_t___o_r___a_s_s_i_g_n(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, const _k_e_y___t_y_p_e& _____k, │ │ │ │ +775 _Obj&& _____o_b_j) │ │ │ │ +776 { │ │ │ │ +777 auto _____r_e_t = _M_h.try_emplace(_____h_i_n_t, _____k, _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j)); │ │ │ │ +778 if (!_____r_e_t.second) │ │ │ │ +779 _____r_e_t.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j); │ │ │ │ +780 return _____r_e_t.first; │ │ │ │ +781 } │ │ │ │ +782 │ │ │ │ +783 // move-capable overload │ │ │ │ +784 template │ │ │ │ +785 _i_t_e_r_a_t_o_r │ │ │ │ +786 _i_n_s_e_r_t___o_r___a_s_s_i_g_n(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, _k_e_y___t_y_p_e&& _____k, _Obj&& _____o_b_j) │ │ │ │ +787 { │ │ │ │ +788 auto _____r_e_t = _M_h.try_emplace(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(_____k), │ │ │ │ +789 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j)); │ │ │ │ +790 if (!_____r_e_t.second) │ │ │ │ +791 _____r_e_t.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j); │ │ │ │ +792 return _____r_e_t.first; │ │ │ │ +793 } │ │ │ │ +794#endif // unordered_map_try_emplace │ │ │ │ +795 │ │ │ │ +796 ///@{ │ │ │ │ +797 /** │ │ │ │ +798 * @brief Erases an element from an %unordered_map. │ │ │ │ +799 * @param __position An iterator pointing to the element to be erased. │ │ │ │ +800 * @return An iterator pointing to the element immediately following │ │ │ │ +801 * @a __position prior to the element being erased. If no such │ │ │ │ +802 * element exists, end() is returned. │ │ │ │ +803 * │ │ │ │ +804 * This function erases an element, pointed to by the given iterator, │ │ │ │ +805 * from an %unordered_map. │ │ │ │ +806 * Note that this function only erases the element, and that if the │ │ │ │ +807 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ +808 * any way. Managing the pointer is the user's responsibility. │ │ │ │ +809 */ │ │ │ │ +810 _i_t_e_r_a_t_o_r │ │ │ │ +_8_1_1 _e_r_a_s_e(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n) │ │ │ │ +812 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ +813 │ │ │ │ +814 // LWG 2059. │ │ │ │ +815 _i_t_e_r_a_t_o_r │ │ │ │ +_8_1_6 _e_r_a_s_e(_i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n) │ │ │ │ +817 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ +818 ///@} │ │ │ │ +819 │ │ │ │ +820 /** │ │ │ │ +821 * @brief Erases elements according to the provided key. │ │ │ │ +822 * @param __x Key of element to be erased. │ │ │ │ +823 * @return The number of elements erased. │ │ │ │ +824 * │ │ │ │ +825 * This function erases all the elements located by the given key from │ │ │ │ +826 * an %unordered_map. For an %unordered_map the result of this function │ │ │ │ +827 * can only be 0 (not present) or 1 (present). │ │ │ │ +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 _s_i_z_e___t_y_p_e │ │ │ │ +_8_3_3 _e_r_a_s_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ +834 { return _M_h.erase(__x); } │ │ │ │ +835 │ │ │ │ +836 /** │ │ │ │ +837 * @brief Erases a [__first,__last) range of elements from an │ │ │ │ +838 * %unordered_map. │ │ │ │ +839 * @param __first Iterator pointing to the start of the range to be │ │ │ │ +840 * erased. │ │ │ │ +841 * @param __last Iterator pointing to the end of the range to │ │ │ │ +842 * be erased. │ │ │ │ +843 * @return The iterator @a __last. │ │ │ │ +844 * │ │ │ │ +845 * This function erases a sequence of elements from an %unordered_map. │ │ │ │ +846 * Note that this function only erases the elements, and that if │ │ │ │ +847 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ +848 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ +849 */ │ │ │ │ +850 _i_t_e_r_a_t_o_r │ │ │ │ +_8_5_1 _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) │ │ │ │ +852 { return _M_h.erase(__first, __last); } │ │ │ │ +853 │ │ │ │ +854 /** │ │ │ │ +855 * Erases all elements in an %unordered_map. │ │ │ │ +856 * Note that this function only erases the elements, and that if the │ │ │ │ +857 * elements themselves are pointers, the pointed-to memory is not touched │ │ │ │ +858 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ +859 */ │ │ │ │ +860 void │ │ │ │ +_8_6_1 _c_l_e_a_r() noexcept │ │ │ │ +862 { _M_h.clear(); } │ │ │ │ +863 │ │ │ │ +864 /** │ │ │ │ +865 * @brief Swaps data with another %unordered_map. │ │ │ │ +866 * @param __x An %unordered_map of the same element and allocator │ │ │ │ +867 * types. │ │ │ │ +868 * │ │ │ │ +869 * This exchanges the elements between two %unordered_map in constant │ │ │ │ +870 * time. │ │ │ │ +871 * Note that the global std::swap() function is specialized such that │ │ │ │ +872 * std::swap(m1,m2) will feed to this function. │ │ │ │ +873 */ │ │ │ │ +874 void │ │ │ │ +_8_7_5 _s_w_a_p(_u_n_o_r_d_e_r_e_d___m_a_p& __x) │ │ │ │ +876 noexcept( noexcept(_M_h.swap(__x._M_h)) ) │ │ │ │ +877 { _M_h.swap(__x._M_h); } │ │ │ │ +878 │ │ │ │ +879#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +880 template │ │ │ │ +881 friend class std::_Hash_merge_helper; │ │ │ │ +882 │ │ │ │ +883 template │ │ │ │ +884 void │ │ │ │ +885 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_>& _____s_o_u_r_c_e) │ │ │ │ +886 { │ │ │ │ +887 if constexpr (_i_s___s_a_m_e___v_<___H_2_,_ ___H_a_s_h_> && _i_s___s_a_m_e___v_<___P_2_,_ ___P_r_e_d_>) │ │ │ │ +888 if (_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____s_o_u_r_c_e) == this) [[_____u_n_l_i_k_e_l_y____]] │ │ │ │ +889 return; │ │ │ │ +890 │ │ │ │ +891 using ___M_e_r_g_e___h_e_l_p_e_r = ___H_a_s_h___m_e_r_g_e___h_e_l_p_e_r_<_u_n_o_r_d_e_r_e_d___m_a_p_,_ ___H_2_,_ ___P_2_>; │ │ │ │ +892 _M_h._M_merge_unique(_Merge_helper::_S_get_table(_____s_o_u_r_c_e)); │ │ │ │ +893 } │ │ │ │ +894 │ │ │ │ +895 template │ │ │ │ +896 void │ │ │ │ +897 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ +898 { │ │ │ │ +899 using _Merge_helper = _Hash_merge_helper; │ │ │ │ +900 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ +901 } │ │ │ │ +902 │ │ │ │ +903 template │ │ │ │ +904 void │ │ │ │ +905 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>& __source) │ │ │ │ +906 { │ │ │ │ +907 using _Merge_helper = _Hash_merge_helper; │ │ │ │ +908 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ +909 } │ │ │ │ 910 │ │ │ │ -911 /** │ │ │ │ -912 * @brief Change the %unordered_set maximum load factor. │ │ │ │ -913 * @param __z The new maximum load factor. │ │ │ │ -914 */ │ │ │ │ -915 void │ │ │ │ -_9_1_6 _m_a_x___l_o_a_d___f_a_c_t_o_r(float _____z) │ │ │ │ -917 { _M_h.max_load_factor(_____z); } │ │ │ │ +911 template │ │ │ │ +912 void │ │ │ │ +913 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ +914 { merge(__source); } │ │ │ │ +915#endif // node_extract │ │ │ │ +916 │ │ │ │ +917 // observers. │ │ │ │ 918 │ │ │ │ -919 /** │ │ │ │ -920 * @brief May rehash the %unordered_set. │ │ │ │ -921 * @param __n The new number of buckets. │ │ │ │ -922 * │ │ │ │ -923 * Rehash will occur only if the new number of buckets respect the │ │ │ │ -924 * %unordered_set maximum load factor. │ │ │ │ -925 */ │ │ │ │ -926 void │ │ │ │ -_9_2_7 _r_e_h_a_s_h(_s_i_z_e___t_y_p_e __n) │ │ │ │ -928 { _M_h.rehash(__n); } │ │ │ │ -929 │ │ │ │ -930 /** │ │ │ │ -931 * @brief Prepare the %unordered_set for a specified number of │ │ │ │ -932 * elements. │ │ │ │ -933 * @param __n Number of elements required. │ │ │ │ -934 * │ │ │ │ -935 * Same as rehash(ceil(n / max_load_factor())). │ │ │ │ -936 */ │ │ │ │ -937 void │ │ │ │ -_9_3_8 _r_e_s_e_r_v_e(_s_i_z_e___t_y_p_e __n) │ │ │ │ -939 { _M_h.reserve(__n); } │ │ │ │ -940 │ │ │ │ -941 template │ │ │ │ -943 friend bool │ │ │ │ -944 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_>&, │ │ │ │ -945 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_>&); │ │ │ │ -946 }; │ │ │ │ -947 │ │ │ │ -948#if __cpp_deduction_guides >= 201606 │ │ │ │ -949 │ │ │ │ -950 template::value_type>, │ │ │ │ -953 typename _Pred = │ │ │ │ -954 equal_to::value_type>, │ │ │ │ -955 typename _Allocator = │ │ │ │ -956 allocator::value_type>, │ │ │ │ -957 typename = _RequireInputIter<_InputIterator>, │ │ │ │ -958 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -959 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -960 typename = _RequireAllocator<_Allocator>> │ │ │ │ -961 unordered_set(_InputIterator, _InputIterator, │ │ │ │ -962 _u_n_o_r_d_e_r_e_d___s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e = {}, │ │ │ │ -963 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ -964 -> unordered_set::value_type, │ │ │ │ -965 _Hash, _Pred, _Allocator>; │ │ │ │ -966 │ │ │ │ -967 template, │ │ │ │ -968 typename _Pred = equal_to<_Tp>, │ │ │ │ -969 typename _Allocator = allocator<_Tp>, │ │ │ │ -970 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -971 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -972 typename = _RequireAllocator<_Allocator>> │ │ │ │ -973 unordered_set(initializer_list<_Tp>, │ │ │ │ -974 _u_n_o_r_d_e_r_e_d___s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e = {}, │ │ │ │ -975 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ -976 -> unordered_set<_Tp, _Hash, _Pred, _Allocator>; │ │ │ │ -977 │ │ │ │ -978 template, │ │ │ │ -980 typename = _RequireAllocator<_Allocator>> │ │ │ │ -981 unordered_set(_InputIterator, _InputIterator, │ │ │ │ -982 _u_n_o_r_d_e_r_e_d___s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e, _Allocator) │ │ │ │ -983 -> unordered_set::value_type, │ │ │ │ -984 hash< │ │ │ │ -985 typename iterator_traits<_InputIterator>::value_type>, │ │ │ │ -986 equal_to< │ │ │ │ -987 typename iterator_traits<_InputIterator>::value_type>, │ │ │ │ -988 _Allocator>; │ │ │ │ +919 /// Returns the hash functor object with which the %unordered_map was │ │ │ │ +920 /// constructed. │ │ │ │ +921 _h_a_s_h_e_r │ │ │ │ +_9_2_2 _h_a_s_h___f_u_n_c_t_i_o_n() const │ │ │ │ +923 { return _M_h.hash_function(); } │ │ │ │ +924 │ │ │ │ +925 /// Returns the key comparison object with which the %unordered_map was │ │ │ │ +926 /// constructed. │ │ │ │ +927 _k_e_y___e_q_u_a_l │ │ │ │ +_9_2_8 _k_e_y___e_q() const │ │ │ │ +929 { return _M_h.key_eq(); } │ │ │ │ +930 │ │ │ │ +931 // lookup. │ │ │ │ +932 │ │ │ │ +933 ///@{ │ │ │ │ +934 /** │ │ │ │ +935 * @brief Tries to locate an element in an %unordered_map. │ │ │ │ +936 * @param __x Key to be located. │ │ │ │ +937 * @return Iterator pointing to sought-after element, or end() if not │ │ │ │ +938 * found. │ │ │ │ +939 * │ │ │ │ +940 * This function takes a key and tries to locate the element with which │ │ │ │ +941 * the key matches. If successful the function returns an iterator │ │ │ │ +942 * pointing to the sought after element. If unsuccessful it returns the │ │ │ │ +943 * past-the-end ( @c end() ) iterator. │ │ │ │ +944 */ │ │ │ │ +945 _i_t_e_r_a_t_o_r │ │ │ │ +_9_4_6 _f_i_n_d(const _k_e_y___t_y_p_e& __x) │ │ │ │ +947 { return _M_h.find(__x); } │ │ │ │ +948 │ │ │ │ +949#if __cplusplus > 201703L │ │ │ │ +950 template │ │ │ │ +951 auto │ │ │ │ +_9_5_2 _f_i_n_d(const ___K_t& __x) -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ +953 { return _M_h._M_find_tr(__x); } │ │ │ │ +954#endif │ │ │ │ +955 │ │ │ │ +956 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_9_5_7 _f_i_n_d(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +958 { return _M_h.find(__x); } │ │ │ │ +959 │ │ │ │ +960#if __cplusplus > 201703L │ │ │ │ +961 template │ │ │ │ +962 auto │ │ │ │ +_9_6_3 _f_i_n_d(const ___K_t& __x) const -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ +964 { return _M_h._M_find_tr(__x); } │ │ │ │ +965#endif │ │ │ │ +966 ///@} │ │ │ │ +967 │ │ │ │ +968 ///@{ │ │ │ │ +969 /** │ │ │ │ +970 * @brief Finds the number of elements. │ │ │ │ +971 * @param __x Key to count. │ │ │ │ +972 * @return Number of elements with specified key. │ │ │ │ +973 * │ │ │ │ +974 * This function only makes sense for %unordered_multimap; for │ │ │ │ +975 * %unordered_map the result will either be 0 (not present) or 1 │ │ │ │ +976 * (present). │ │ │ │ +977 */ │ │ │ │ +978 _s_i_z_e___t_y_p_e │ │ │ │ +_9_7_9 _c_o_u_n_t(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +980 { return _M_h.count(__x); } │ │ │ │ +981 │ │ │ │ +982#if __cplusplus > 201703L │ │ │ │ +983 template │ │ │ │ +984 auto │ │ │ │ +_9_8_5 _c_o_u_n_t(const ___K_t& __x) const -> decltype(_M_h._M_count_tr(__x)) │ │ │ │ +986 { return _M_h._M_count_tr(__x); } │ │ │ │ +987#endif │ │ │ │ +988 ///@} │ │ │ │ 989 │ │ │ │ -990 template, │ │ │ │ -992 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -993 typename = _RequireAllocator<_Allocator>> │ │ │ │ -994 unordered_set(_InputIterator, _InputIterator, │ │ │ │ -995 _u_n_o_r_d_e_r_e_d___s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ -996 _Hash, _Allocator) │ │ │ │ -997 -> unordered_set::value_type, │ │ │ │ -998 _Hash, │ │ │ │ -999 equal_to< │ │ │ │ -1000 typename iterator_traits<_InputIterator>::value_type>, │ │ │ │ -1001 _Allocator>; │ │ │ │ -1002 │ │ │ │ -1003 template> │ │ │ │ -1005 unordered_set(initializer_list<_Tp>, │ │ │ │ -1006 _u_n_o_r_d_e_r_e_d___s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e, _Allocator) │ │ │ │ -1007 -> unordered_set<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>; │ │ │ │ +990#if __cplusplus > 201703L │ │ │ │ +991 ///@{ │ │ │ │ +992 /** │ │ │ │ +993 * @brief Finds whether an element with the given key exists. │ │ │ │ +994 * @param __x Key of elements to be located. │ │ │ │ +995 * @return True if there is any element with the specified key. │ │ │ │ +996 */ │ │ │ │ +997 bool │ │ │ │ +_9_9_8 _c_o_n_t_a_i_n_s(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +999 { return _M_h.find(__x) != _M_h.end(); } │ │ │ │ +1000 │ │ │ │ +1001 template │ │ │ │ +1002 auto │ │ │ │ +_1_0_0_3 _c_o_n_t_a_i_n_s(const ___K_t& __x) const │ │ │ │ +1004 -> decltype(_M_h._M_find_tr(__x), _v_o_i_d(), true) │ │ │ │ +1005 { return _M_h._M_find_tr(__x) != _M_h.end(); } │ │ │ │ +1006 ///@} │ │ │ │ +1007#endif │ │ │ │ 1008 │ │ │ │ -1009 template, │ │ │ │ -1011 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1012 unordered_set(initializer_list<_Tp>, │ │ │ │ -1013 _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) │ │ │ │ -1014 -> unordered_set<_Tp, _Hash, equal_to<_Tp>, _Allocator>; │ │ │ │ -1015 │ │ │ │ -1016#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -1017 template>, │ │ │ │ -1019 __not_allocator_like _Pred = equal_to>, │ │ │ │ -1020 __allocator_like _Allocator = allocator>> │ │ │ │ -1021 unordered_set(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 = {}, │ │ │ │ -1022 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ -1023 -> unordered_set, _Hash, _Pred, _Allocator>; │ │ │ │ -1024 │ │ │ │ -1025 template │ │ │ │ -1027 unordered_set(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, │ │ │ │ -1028 _Allocator) │ │ │ │ -1029 -> unordered_set, │ │ │ │ -1030 hash>, │ │ │ │ -1031 equal_to>, │ │ │ │ -1032 _Allocator>; │ │ │ │ +1009 ///@{ │ │ │ │ +1010 /** │ │ │ │ +1011 * @brief Finds a subsequence matching given key. │ │ │ │ +1012 * @param __x Key to be located. │ │ │ │ +1013 * @return Pair of iterators that possibly points to the subsequence │ │ │ │ +1014 * matching given key. │ │ │ │ +1015 * │ │ │ │ +1016 * This function probably only makes sense for %unordered_multimap. │ │ │ │ +1017 */ │ │ │ │ +1018 _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_1_9 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ +1020 { return _M_h.equal_range(__x); } │ │ │ │ +1021 │ │ │ │ +1022#if __cplusplus > 201703L │ │ │ │ +1023 template │ │ │ │ +1024 auto │ │ │ │ +_1_0_2_5 _e_q_u_a_l___r_a_n_g_e(const ___K_t& __x) │ │ │ │ +1026 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ +1027 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ +1028#endif │ │ │ │ +1029 │ │ │ │ +1030 _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_3_1 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +1032 { return _M_h.equal_range(__x); } │ │ │ │ 1033 │ │ │ │ -1034 template │ │ │ │ -1036 unordered_set(from_range_t, _Rg&&, _Allocator) │ │ │ │ -1037 -> unordered_set, │ │ │ │ -1038 hash>, │ │ │ │ -1039 equal_to>, │ │ │ │ -1040 _Allocator>; │ │ │ │ -1041 │ │ │ │ -1042 template │ │ │ │ -1045 unordered_set(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, │ │ │ │ -1046 _Hash, _Allocator) │ │ │ │ -1047 -> unordered_set, _Hash, │ │ │ │ -1048 equal_to>, │ │ │ │ -1049 _Allocator>; │ │ │ │ -1050#endif │ │ │ │ -1051#endif │ │ │ │ -1052 │ │ │ │ -1053 /** │ │ │ │ -1054 * @brief A standard container composed of equivalent keys │ │ │ │ -1055 * (possibly containing multiple of each key value) in which the │ │ │ │ -1056 * elements' keys are the elements themselves. │ │ │ │ -1057 * │ │ │ │ -1058 * @ingroup unordered_associative_containers │ │ │ │ -1059 * @headerfile unordered_set │ │ │ │ -1060 * @since C++11 │ │ │ │ -1061 * │ │ │ │ -1062 * @tparam _Value Type of key objects. │ │ │ │ -1063 * @tparam _Hash Hashing function object type, defaults to hash<_Value>. │ │ │ │ -1064 * @tparam _Pred Predicate function object type, defaults │ │ │ │ -1065 * to equal_to<_Value>. │ │ │ │ -1066 * @tparam _Alloc Allocator type, defaults to allocator<_Key>. │ │ │ │ -1067 * │ │ │ │ -1068 * Meets the requirements of a container, and │ │ │ │ -1069 * unordered associative container │ │ │ │ -1070 * │ │ │ │ -1071 * Base is _Hashtable, dispatched at compile time via template │ │ │ │ -1072 * alias __umset_hashtable. │ │ │ │ -1073 */ │ │ │ │ -1074 template, │ │ │ │ -1076 typename _Pred = equal_to<_Value>, │ │ │ │ -1077 typename _Alloc = allocator<_Value>> │ │ │ │ -_1_0_7_8 class _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t │ │ │ │ -1079 { │ │ │ │ -1080 typedef _____u_m_s_e_t___h_a_s_h_t_a_b_l_e_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_> ___H_a_s_h_t_a_b_l_e; │ │ │ │ -1081 ___H_a_s_h_t_a_b_l_e _M_h; │ │ │ │ -1082 │ │ │ │ -1083 public: │ │ │ │ -1084 // typedefs: │ │ │ │ -1085 ///@{ │ │ │ │ -1086 /// Public typedefs. │ │ │ │ -_1_0_8_7 typedef typename _Hashtable::key_type _k_e_y___t_y_p_e; │ │ │ │ -_1_0_8_8 typedef typename _Hashtable::value_type _v_a_l_u_e___t_y_p_e; │ │ │ │ -_1_0_8_9 typedef typename _Hashtable::hasher _h_a_s_h_e_r; │ │ │ │ -_1_0_9_0 typedef typename _Hashtable::key_equal _k_e_y___e_q_u_a_l; │ │ │ │ -_1_0_9_1 typedef typename _Hashtable::allocator_type _a_l_l_o_c_a_t_o_r___t_y_p_e; │ │ │ │ -1092 ///@} │ │ │ │ +1034#if __cplusplus > 201703L │ │ │ │ +1035 template │ │ │ │ +1036 auto │ │ │ │ +_1_0_3_7 _e_q_u_a_l___r_a_n_g_e(const ___K_t& __x) const │ │ │ │ +1038 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ +1039 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ +1040#endif │ │ │ │ +1041 ///@} │ │ │ │ +1042 │ │ │ │ +1043 ///@{ │ │ │ │ +1044 /** │ │ │ │ +1045 * @brief Subscript ( @c [] ) access to %unordered_map data. │ │ │ │ +1046 * @param __k The key for which data should be retrieved. │ │ │ │ +1047 * @return A reference to the data of the (key,data) %pair. │ │ │ │ +1048 * │ │ │ │ +1049 * Allows for easy lookup with the subscript ( @c [] )operator. Returns │ │ │ │ +1050 * data associated with the key specified in subscript. If the key does │ │ │ │ +1051 * not exist, a pair with that key is created using default values, which │ │ │ │ +1052 * is then returned. │ │ │ │ +1053 * │ │ │ │ +1054 * Lookup requires constant time. │ │ │ │ +1055 */ │ │ │ │ +1056 _m_a_p_p_e_d___t_y_p_e& │ │ │ │ +_1_0_5_7 _o_p_e_r_a_t_o_r_[_](const _k_e_y___t_y_p_e& _____k) │ │ │ │ +1058 { return _M_h[_____k]; } │ │ │ │ +1059 │ │ │ │ +1060 _m_a_p_p_e_d___t_y_p_e& │ │ │ │ +_1_0_6_1 _o_p_e_r_a_t_o_r_[_](_k_e_y___t_y_p_e&& _____k) │ │ │ │ +1062 { return _M_h[_s_t_d_:_:_m_o_v_e(_____k)]; } │ │ │ │ +1063 ///@} │ │ │ │ +1064 │ │ │ │ +1065 ///@{ │ │ │ │ +1066 /** │ │ │ │ +1067 * @brief Access to %unordered_map data. │ │ │ │ +1068 * @param __k The key for which data should be retrieved. │ │ │ │ +1069 * @return A reference to the data whose key is equal to @a __k, if │ │ │ │ +1070 * such a data is present in the %unordered_map. │ │ │ │ +1071 * @throw std::out_of_range If no such data is present. │ │ │ │ +1072 */ │ │ │ │ +1073 _m_a_p_p_e_d___t_y_p_e& │ │ │ │ +_1_0_7_4 _a_t(const _k_e_y___t_y_p_e& _____k) │ │ │ │ +1075 { return _M_h.at(_____k); } │ │ │ │ +1076 │ │ │ │ +1077 const _m_a_p_p_e_d___t_y_p_e& │ │ │ │ +_1_0_7_8 _a_t(const _k_e_y___t_y_p_e& _____k) const │ │ │ │ +1079 { return _M_h.at(_____k); } │ │ │ │ +1080 ///@} │ │ │ │ +1081 │ │ │ │ +1082 // bucket interface. │ │ │ │ +1083 │ │ │ │ +1084 /// Returns the number of buckets of the %unordered_map. │ │ │ │ +1085 _s_i_z_e___t_y_p_e │ │ │ │ +_1_0_8_6 _b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ +1087 { return _M_h.bucket_count(); } │ │ │ │ +1088 │ │ │ │ +1089 /// Returns the maximum number of buckets of the %unordered_map. │ │ │ │ +1090 _s_i_z_e___t_y_p_e │ │ │ │ +_1_0_9_1 _m_a_x___b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ +1092 { return _M_h.max_bucket_count(); } │ │ │ │ 1093 │ │ │ │ -1094 ///@{ │ │ │ │ -1095 /// Iterator-related typedefs. │ │ │ │ -_1_0_9_6 typedef typename _Hashtable::pointer _p_o_i_n_t_e_r; │ │ │ │ -_1_0_9_7 typedef typename _Hashtable::const_pointer _c_o_n_s_t___p_o_i_n_t_e_r; │ │ │ │ -_1_0_9_8 typedef typename _Hashtable::reference _r_e_f_e_r_e_n_c_e; │ │ │ │ -_1_0_9_9 typedef typename _Hashtable::const_reference _c_o_n_s_t___r_e_f_e_r_e_n_c_e; │ │ │ │ -_1_1_0_0 typedef typename _Hashtable::iterator _i_t_e_r_a_t_o_r; │ │ │ │ -_1_1_0_1 typedef typename _Hashtable::const_iterator _c_o_n_s_t___i_t_e_r_a_t_o_r; │ │ │ │ -_1_1_0_2 typedef typename _Hashtable::local_iterator _l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ -_1_1_0_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_0_4 typedef typename _Hashtable::size_type _s_i_z_e___t_y_p_e; │ │ │ │ -_1_1_0_5 typedef typename _Hashtable::difference_type _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ -1106 ///@} │ │ │ │ -1107 │ │ │ │ -1108#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -1109 using node_type = typename _Hashtable::node_type; │ │ │ │ -1110#endif │ │ │ │ +1094 /* │ │ │ │ +1095 * @brief Returns the number of elements in a given bucket. │ │ │ │ +1096 * @param __n A bucket index. │ │ │ │ +1097 * @return The number of elements in the bucket. │ │ │ │ +1098 */ │ │ │ │ +1099 _s_i_z_e___t_y_p_e │ │ │ │ +1100 bucket_size(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +1101 { return _M_h.bucket_size(__n); } │ │ │ │ +1102 │ │ │ │ +1103 /* │ │ │ │ +1104 * @brief Returns the bucket index of a given element. │ │ │ │ +1105 * @param __key A key instance. │ │ │ │ +1106 * @return The key bucket index. │ │ │ │ +1107 */ │ │ │ │ +1108 _s_i_z_e___t_y_p_e │ │ │ │ +1109 bucket(const _k_e_y___t_y_p_e& __key) const │ │ │ │ +1110 { return _M_h.bucket(__key); } │ │ │ │ 1111 │ │ │ │ -1112 // construct/destroy/copy │ │ │ │ -1113 │ │ │ │ -1114 /// Default constructor. │ │ │ │ -_1_1_1_5 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t() = default; │ │ │ │ -1116 │ │ │ │ -1117 /** │ │ │ │ -1118 * @brief Default constructor creates no elements. │ │ │ │ -1119 * @param __n Minimal initial number of buckets. │ │ │ │ -1120 * @param __hf A hash functor. │ │ │ │ -1121 * @param __eql A key equality functor. │ │ │ │ -1122 * @param __a An allocator object. │ │ │ │ -1123 */ │ │ │ │ -1124 explicit │ │ │ │ -_1_1_2_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, │ │ │ │ -1126 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -1127 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ -1128 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()) │ │ │ │ -1129 : _M_h(__n, _____h_f, _____e_q_l, __a) │ │ │ │ -1130 { } │ │ │ │ -1131 │ │ │ │ -1132 /** │ │ │ │ -1133 * @brief Builds an %unordered_multiset from a range. │ │ │ │ -1134 * @param __first An input iterator. │ │ │ │ -1135 * @param __last An input iterator. │ │ │ │ -1136 * @param __n Minimal initial number of buckets. │ │ │ │ -1137 * @param __hf A hash functor. │ │ │ │ -1138 * @param __eql A key equality functor. │ │ │ │ -1139 * @param __a An allocator object. │ │ │ │ -1140 * │ │ │ │ -1141 * Create an %unordered_multiset consisting of copies of the elements │ │ │ │ -1142 * from [__first,__last). This is linear in N (where N is │ │ │ │ -1143 * distance(__first,__last)). │ │ │ │ -1144 */ │ │ │ │ -1145 template │ │ │ │ -_1_1_4_6 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __last, │ │ │ │ -1147 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -1148 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -1149 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ -1150 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()) │ │ │ │ -1151 : _M_h(__first, __last, __n, _____h_f, _____e_q_l, __a) │ │ │ │ -1152 { } │ │ │ │ -1153 │ │ │ │ -1154 /// Copy constructor. │ │ │ │ -_1_1_5_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; │ │ │ │ -1156 │ │ │ │ -1157 /// Move constructor. │ │ │ │ -_1_1_5_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; │ │ │ │ -1159 │ │ │ │ -1160 /** │ │ │ │ -1161 * @brief Builds an %unordered_multiset from an initializer_list. │ │ │ │ -1162 * @param __l An initializer_list. │ │ │ │ -1163 * @param __n Minimal initial number of buckets. │ │ │ │ -1164 * @param __hf A hash functor. │ │ │ │ -1165 * @param __eql A key equality functor. │ │ │ │ -1166 * @param __a An allocator object. │ │ │ │ -1167 * │ │ │ │ -1168 * Create an %unordered_multiset consisting of copies of the elements in │ │ │ │ -1169 * the list. This is linear in N (where N is @a __l.size()). │ │ │ │ -1170 */ │ │ │ │ -_1_1_7_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, │ │ │ │ -1172 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -1173 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -1174 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ -1175 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()) │ │ │ │ -1176 : _M_h(_____l, __n, _____h_f, _____e_q_l, __a) │ │ │ │ -1177 { } │ │ │ │ -1178 │ │ │ │ -1179 /// Copy assignment operator. │ │ │ │ -1180 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t& │ │ │ │ -_1_1_8_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; │ │ │ │ -1182 │ │ │ │ -1183 /// Move assignment operator. │ │ │ │ -1184 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t& │ │ │ │ -_1_1_8_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; │ │ │ │ -1186 │ │ │ │ -1187 /** │ │ │ │ -1188 * @brief Creates an %unordered_multiset with no elements. │ │ │ │ -1189 * @param __a An allocator object. │ │ │ │ -1190 */ │ │ │ │ -1191 explicit │ │ │ │ -_1_1_9_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) │ │ │ │ -1193 : _M_h(__a) │ │ │ │ -1194 { } │ │ │ │ +1112 /** │ │ │ │ +1113 * @brief Returns a read/write iterator pointing to the first bucket │ │ │ │ +1114 * element. │ │ │ │ +1115 * @param __n The bucket index. │ │ │ │ +1116 * @return A read/write local iterator. │ │ │ │ +1117 */ │ │ │ │ +1118 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_1_1_9 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) │ │ │ │ +1120 { return _M_h.begin(__n); } │ │ │ │ +1121 │ │ │ │ +1122 ///@{ │ │ │ │ +1123 /** │ │ │ │ +1124 * @brief Returns a read-only (constant) iterator pointing to the first │ │ │ │ +1125 * bucket element. │ │ │ │ +1126 * @param __n The bucket index. │ │ │ │ +1127 * @return A read-only local iterator. │ │ │ │ +1128 */ │ │ │ │ +1129 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_1_3_0 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +1131 { return _M_h.begin(__n); } │ │ │ │ +1132 │ │ │ │ +1133 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_1_3_4 _c_b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +1135 { return _M_h.cbegin(__n); } │ │ │ │ +1136 ///@} │ │ │ │ +1137 │ │ │ │ +1138 /** │ │ │ │ +1139 * @brief Returns a read/write iterator pointing to one past the last │ │ │ │ +1140 * bucket elements. │ │ │ │ +1141 * @param __n The bucket index. │ │ │ │ +1142 * @return A read/write local iterator. │ │ │ │ +1143 */ │ │ │ │ +1144 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_1_4_5 _e_n_d(_s_i_z_e___t_y_p_e __n) │ │ │ │ +1146 { return _M_h.end(__n); } │ │ │ │ +1147 │ │ │ │ +1148 ///@{ │ │ │ │ +1149 /** │ │ │ │ +1150 * @brief Returns a read-only (constant) iterator pointing to one past │ │ │ │ +1151 * the last bucket elements. │ │ │ │ +1152 * @param __n The bucket index. │ │ │ │ +1153 * @return A read-only local iterator. │ │ │ │ +1154 */ │ │ │ │ +1155 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_1_5_6 _e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +1157 { return _M_h.end(__n); } │ │ │ │ +1158 │ │ │ │ +1159 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_1_6_0 _c_e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +1161 { return _M_h.cend(__n); } │ │ │ │ +1162 ///@} │ │ │ │ +1163 │ │ │ │ +1164 // hash policy. │ │ │ │ +1165 │ │ │ │ +1166 /// Returns the average number of elements per bucket. │ │ │ │ +1167 float │ │ │ │ +_1_1_6_8 _l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ +1169 { return _M_h.load_factor(); } │ │ │ │ +1170 │ │ │ │ +1171 /// Returns a positive number that the %unordered_map tries to keep the │ │ │ │ +1172 /// load factor less than or equal to. │ │ │ │ +1173 float │ │ │ │ +_1_1_7_4 _m_a_x___l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ +1175 { return _M_h.max_load_factor(); } │ │ │ │ +1176 │ │ │ │ +1177 /** │ │ │ │ +1178 * @brief Change the %unordered_map maximum load factor. │ │ │ │ +1179 * @param __z The new maximum load factor. │ │ │ │ +1180 */ │ │ │ │ +1181 void │ │ │ │ +_1_1_8_2 _m_a_x___l_o_a_d___f_a_c_t_o_r(float _____z) │ │ │ │ +1183 { _M_h.max_load_factor(_____z); } │ │ │ │ +1184 │ │ │ │ +1185 /** │ │ │ │ +1186 * @brief May rehash the %unordered_map. │ │ │ │ +1187 * @param __n The new number of buckets. │ │ │ │ +1188 * │ │ │ │ +1189 * Rehash will occur only if the new number of buckets respect the │ │ │ │ +1190 * %unordered_map maximum load factor. │ │ │ │ +1191 */ │ │ │ │ +1192 void │ │ │ │ +_1_1_9_3 _r_e_h_a_s_h(_s_i_z_e___t_y_p_e __n) │ │ │ │ +1194 { _M_h.rehash(__n); } │ │ │ │ 1195 │ │ │ │ -1196 /* │ │ │ │ -1197 * @brief Copy constructor with allocator argument. │ │ │ │ -1198 * @param __uset Input %unordered_multiset to copy. │ │ │ │ -1199 * @param __a An allocator object. │ │ │ │ -1200 */ │ │ │ │ -1201 _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& _____u_m_s_e_t, │ │ │ │ -1202 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1203 : _M_h(_____u_m_s_e_t._M_h, __a) │ │ │ │ -1204 { } │ │ │ │ -1205 │ │ │ │ -1206 /* │ │ │ │ -1207 * @brief Move constructor with allocator argument. │ │ │ │ -1208 * @param __umset Input %unordered_multiset to move. │ │ │ │ -1209 * @param __a An allocator object. │ │ │ │ -1210 */ │ │ │ │ -1211 _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&& __umset, │ │ │ │ -1212 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1213 noexcept( noexcept(_Hashtable(_s_t_d_:_:_m_o_v_e(__umset._M_h), __a)) ) │ │ │ │ -1214 : _M_h(_s_t_d_:_:_m_o_v_e(__umset._M_h), __a) │ │ │ │ -1215 { } │ │ │ │ -1216 │ │ │ │ -1217 _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) │ │ │ │ -1218 : _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) │ │ │ │ -1219 { } │ │ │ │ -1220 │ │ │ │ -1221 _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, │ │ │ │ -1222 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1223 : _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) │ │ │ │ -1224 { } │ │ │ │ -1225 │ │ │ │ -1226 template │ │ │ │ -1227 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_InputIterator __first, _InputIterator __last, │ │ │ │ -1228 _s_i_z_e___t_y_p_e __n, │ │ │ │ -1229 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1230 : _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) │ │ │ │ -1231 { } │ │ │ │ -1232 │ │ │ │ -1233 template │ │ │ │ -1234 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_InputIterator __first, _InputIterator __last, │ │ │ │ -1235 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -1236 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1237 : _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) │ │ │ │ -1238 { } │ │ │ │ -1239 │ │ │ │ -1240 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(initializer_list __l, │ │ │ │ -1241 _s_i_z_e___t_y_p_e __n, │ │ │ │ -1242 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1243 : _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) │ │ │ │ -1244 { } │ │ │ │ -1245 │ │ │ │ -1246 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(initializer_list __l, │ │ │ │ -1247 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -1248 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1249 : _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) │ │ │ │ -1250 { } │ │ │ │ -1251 │ │ │ │ -1252#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -1253 /** │ │ │ │ -1254 * @brief Builds an %unordered_multiset from a range. │ │ │ │ -1255 * @since C++23 │ │ │ │ -1256 * @param __rg An input range of elements that can be converted to │ │ │ │ -1257 * the set's value type. │ │ │ │ -1258 * @param __n Minimal initial number of buckets. │ │ │ │ -1259 * @param __hf A hash functor. │ │ │ │ -1260 * @param __eql A key equality functor. │ │ │ │ -1261 * @param __a An allocator object. │ │ │ │ -1262 * │ │ │ │ -1263 * Create an %unordered_multiset consisting of copies of the elements in │ │ │ │ -the │ │ │ │ -1264 * range. This is linear in N (where N is `std::ranges::size(__rg)`). │ │ │ │ -1265 */ │ │ │ │ -1266 template<__detail::__container_compatible_range<_Value> _Rg> │ │ │ │ -1267 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(from_range_t, _Rg&& __rg, │ │ │ │ -1268 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -1269 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -1270 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ -1271 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()) │ │ │ │ -1272 : _M_h(__n, __hf, __eql, __a) │ │ │ │ -1273 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -1274 │ │ │ │ -1275 │ │ │ │ -1276 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1277 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ -container │ │ │ │ -1278 template<__detail::__container_compatible_range<_Value> _Rg> │ │ │ │ -1279 _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) │ │ │ │ -1280 : _M_h(0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1281 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -1282 │ │ │ │ -1283 template<__detail::__container_compatible_range<_Value> _Rg> │ │ │ │ -1284 _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, │ │ │ │ -1285 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1286 : _M_h(__n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1287 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -1288 │ │ │ │ -1289 template<__detail::__container_compatible_range<_Value> _Rg> │ │ │ │ -1290 _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, │ │ │ │ -1291 const _h_a_s_h_e_r& __hf, const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1292 : _M_h(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1293 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -1294#endif │ │ │ │ -1295 │ │ │ │ -1296 │ │ │ │ -1297 /** │ │ │ │ -1298 * @brief %Unordered_multiset list assignment operator. │ │ │ │ -1299 * @param __l An initializer_list. │ │ │ │ -1300 * │ │ │ │ -1301 * This function fills an %unordered_multiset with copies of the elements │ │ │ │ -1302 * in the initializer list @a __l. │ │ │ │ -1303 * │ │ │ │ -1304 * Note that the assignment completely changes the %unordered_multiset │ │ │ │ -1305 * and that the resulting %unordered_multiset's size is the same as the │ │ │ │ -1306 * number of elements assigned. │ │ │ │ -1307 */ │ │ │ │ -1308 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t& │ │ │ │ -_1_3_0_9 _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) │ │ │ │ -1310 { │ │ │ │ -1311 _M_h = _____l; │ │ │ │ -1312 return *this; │ │ │ │ -1313 } │ │ │ │ -1314 │ │ │ │ -1315 /// Returns the allocator object used by the %unordered_multiset. │ │ │ │ -1316 _a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ -_1_3_1_7 _g_e_t___a_l_l_o_c_a_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -1318 { return _M_h.get_allocator(); } │ │ │ │ -1319 │ │ │ │ -1320 // size and capacity: │ │ │ │ -1321 │ │ │ │ -1322 /// Returns true if the %unordered_multiset is empty. │ │ │ │ -1323 _GLIBCXX_NODISCARD bool │ │ │ │ -_1_3_2_4 _e_m_p_t_y() _c_o_n_s_t noexcept │ │ │ │ -1325 { return _M_h.empty(); } │ │ │ │ -1326 │ │ │ │ -1327 /// Returns the size of the %unordered_multiset. │ │ │ │ -1328 _s_i_z_e___t_y_p_e │ │ │ │ -_1_3_2_9 _s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ -1330 { return _M_h.size(); } │ │ │ │ -1331 │ │ │ │ -1332 /// Returns the maximum size of the %unordered_multiset. │ │ │ │ -1333 _s_i_z_e___t_y_p_e │ │ │ │ -_1_3_3_4 _m_a_x___s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ -1335 { return _M_h.max_size(); } │ │ │ │ +1196 /** │ │ │ │ +1197 * @brief Prepare the %unordered_map for a specified number of │ │ │ │ +1198 * elements. │ │ │ │ +1199 * @param __n Number of elements required. │ │ │ │ +1200 * │ │ │ │ +1201 * Same as rehash(ceil(n / max_load_factor())). │ │ │ │ +1202 */ │ │ │ │ +1203 void │ │ │ │ +_1_2_0_4 _r_e_s_e_r_v_e(_s_i_z_e___t_y_p_e __n) │ │ │ │ +1205 { _M_h.reserve(__n); } │ │ │ │ +1206 │ │ │ │ +1207 template │ │ │ │ +1209 friend bool │ │ │ │ +1210 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_>&, │ │ │ │ +1211 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_>&); │ │ │ │ +1212 }; │ │ │ │ +1213 │ │ │ │ +1214#if __cpp_deduction_guides >= 201606 │ │ │ │ +1215 │ │ │ │ +1216 template>, │ │ │ │ +1218 typename _Pred = equal_to<__iter_key_t<_InputIterator>>, │ │ │ │ +1219 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, │ │ │ │ +1220 typename = _RequireInputIter<_InputIterator>, │ │ │ │ +1221 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ +1222 typename = _RequireNotAllocator<_Pred>, │ │ │ │ +1223 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1224 unordered_map(_InputIterator, _InputIterator, │ │ │ │ +1225 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 = {}, │ │ │ │ +1226 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ +1227 -> unordered_map<__iter_key_t<_InputIterator>, │ │ │ │ +1228 __iter_val_t<_InputIterator>, │ │ │ │ +1229 _Hash, _Pred, _Allocator>; │ │ │ │ +1230 │ │ │ │ +1231 template, │ │ │ │ +1232 typename _Pred = equal_to<_Key>, │ │ │ │ +1233 typename _Allocator = allocator>, │ │ │ │ +1234 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ +1235 typename = _RequireNotAllocator<_Pred>, │ │ │ │ +1236 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1237 unordered_map(initializer_list>, │ │ │ │ +1238 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 = {}, │ │ │ │ +1239 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ +1240 -> unordered_map<_Key, _Tp, _Hash, _Pred, _Allocator>; │ │ │ │ +1241 │ │ │ │ +1242 template, │ │ │ │ +1244 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1245 unordered_map(_InputIterator, _InputIterator, │ │ │ │ +1246 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) │ │ │ │ +1247 -> unordered_map<__iter_key_t<_InputIterator>, │ │ │ │ +1248 __iter_val_t<_InputIterator>, │ │ │ │ +1249 hash<__iter_key_t<_InputIterator>>, │ │ │ │ +1250 equal_to<__iter_key_t<_InputIterator>>, │ │ │ │ +1251 _Allocator>; │ │ │ │ +1252 │ │ │ │ +1253 template, │ │ │ │ +1255 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1256 unordered_map(_InputIterator, _InputIterator, _Allocator) │ │ │ │ +1257 -> unordered_map<__iter_key_t<_InputIterator>, │ │ │ │ +1258 __iter_val_t<_InputIterator>, │ │ │ │ +1259 hash<__iter_key_t<_InputIterator>>, │ │ │ │ +1260 equal_to<__iter_key_t<_InputIterator>>, │ │ │ │ +1261 _Allocator>; │ │ │ │ +1262 │ │ │ │ +1263 template, │ │ │ │ +1265 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ +1266 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1267 unordered_map(_InputIterator, _InputIterator, │ │ │ │ +1268 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, │ │ │ │ +1269 _Hash, _Allocator) │ │ │ │ +1270 -> unordered_map<__iter_key_t<_InputIterator>, │ │ │ │ +1271 __iter_val_t<_InputIterator>, _Hash, │ │ │ │ +1272 equal_to<__iter_key_t<_InputIterator>>, _Allocator>; │ │ │ │ +1273 │ │ │ │ +1274 template> │ │ │ │ +1276 unordered_map(initializer_list>, │ │ │ │ +1277 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, │ │ │ │ +1278 _Allocator) │ │ │ │ +1279 -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; │ │ │ │ +1280 │ │ │ │ +1281 template> │ │ │ │ +1283 unordered_map(initializer_list>, _Allocator) │ │ │ │ +1284 -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; │ │ │ │ +1285 │ │ │ │ +1286 template, │ │ │ │ +1288 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1289 unordered_map(initializer_list>, │ │ │ │ +1290 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, │ │ │ │ +1291 _Hash, _Allocator) │ │ │ │ +1292 -> unordered_map<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>; │ │ │ │ +1293 │ │ │ │ +1294#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +1295 template>, │ │ │ │ +1297 __not_allocator_like _Pred = equal_to<__detail::__range_key_type<_Rg>>, │ │ │ │ +1298 __allocator_like _Allocator = │ │ │ │ +1299 allocator<__detail::__range_to_alloc_type<_Rg>>> │ │ │ │ +1300 unordered_map(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 = │ │ │ │ +{}, │ │ │ │ +1301 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ +1302 -> unordered_map<__detail::__range_key_type<_Rg>, │ │ │ │ +1303 __detail::__range_mapped_type<_Rg>, │ │ │ │ +1304 _Hash, _Pred, _Allocator>; │ │ │ │ +1305 │ │ │ │ +1306 template │ │ │ │ +1308 unordered_map(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, │ │ │ │ +1309 _Allocator) │ │ │ │ +1310 -> unordered_map<__detail::__range_key_type<_Rg>, │ │ │ │ +1311 __detail::__range_mapped_type<_Rg>, │ │ │ │ +1312 hash<__detail::__range_key_type<_Rg>>, │ │ │ │ +1313 equal_to<__detail::__range_key_type<_Rg>>, │ │ │ │ +1314 _Allocator>; │ │ │ │ +1315 │ │ │ │ +1316 template │ │ │ │ +1318 unordered_map(from_range_t, _Rg&&, _Allocator) │ │ │ │ +1319 -> unordered_map<__detail::__range_key_type<_Rg>, │ │ │ │ +1320 __detail::__range_mapped_type<_Rg>, │ │ │ │ +1321 hash<__detail::__range_key_type<_Rg>>, │ │ │ │ +1322 equal_to<__detail::__range_key_type<_Rg>>, │ │ │ │ +1323 _Allocator>; │ │ │ │ +1324 │ │ │ │ +1325 template │ │ │ │ +1328 unordered_map(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, │ │ │ │ +1329 _Hash, _Allocator) │ │ │ │ +1330 -> unordered_map<__detail::__range_key_type<_Rg>, │ │ │ │ +1331 __detail::__range_mapped_type<_Rg>, │ │ │ │ +1332 _Hash, equal_to<__detail::__range_key_type<_Rg>>, │ │ │ │ +1333 _Allocator>; │ │ │ │ +1334#endif │ │ │ │ +1335#endif │ │ │ │ 1336 │ │ │ │ -1337 // iterators. │ │ │ │ -1338 │ │ │ │ -1339 ///@{ │ │ │ │ -1340 /** │ │ │ │ -1341 * Returns a read-only (constant) iterator that points to the first │ │ │ │ -1342 * element in the %unordered_multiset. │ │ │ │ -1343 */ │ │ │ │ -1344 _i_t_e_r_a_t_o_r │ │ │ │ -_1_3_4_5 _b_e_g_i_n() noexcept │ │ │ │ -1346 { return _M_h.begin(); } │ │ │ │ -1347 │ │ │ │ -1348 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_1_3_4_9 _b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ -1350 { return _M_h.begin(); } │ │ │ │ -1351 ///@} │ │ │ │ -1352 │ │ │ │ -1353 ///@{ │ │ │ │ -1354 /** │ │ │ │ -1355 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ -1356 * element in the %unordered_multiset. │ │ │ │ -1357 */ │ │ │ │ -1358 _i_t_e_r_a_t_o_r │ │ │ │ -_1_3_5_9 _e_n_d() noexcept │ │ │ │ -1360 { return _M_h.end(); } │ │ │ │ -1361 │ │ │ │ -1362 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_1_3_6_3 _e_n_d() _c_o_n_s_t noexcept │ │ │ │ -1364 { return _M_h.end(); } │ │ │ │ -1365 ///@} │ │ │ │ -1366 │ │ │ │ -1367 /** │ │ │ │ -1368 * Returns a read-only (constant) iterator that points to the first │ │ │ │ -1369 * element in the %unordered_multiset. │ │ │ │ -1370 */ │ │ │ │ -1371 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_1_3_7_2 _c_b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ -1373 { return _M_h.begin(); } │ │ │ │ -1374 │ │ │ │ -1375 /** │ │ │ │ -1376 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ -1377 * element in the %unordered_multiset. │ │ │ │ -1378 */ │ │ │ │ -1379 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_1_3_8_0 _c_e_n_d() _c_o_n_s_t noexcept │ │ │ │ -1381 { return _M_h.end(); } │ │ │ │ +1337 /** │ │ │ │ +1338 * @brief A standard container composed of equivalent keys │ │ │ │ +1339 * (possibly containing multiple of each key value) that associates │ │ │ │ +1340 * values of another type with the keys. │ │ │ │ +1341 * │ │ │ │ +1342 * @ingroup unordered_associative_containers │ │ │ │ +1343 * @headerfile unordered_map │ │ │ │ +1344 * @since C++11 │ │ │ │ +1345 * │ │ │ │ +1346 * @tparam _Key Type of key objects. │ │ │ │ +1347 * @tparam _Tp Type of mapped objects. │ │ │ │ +1348 * @tparam _Hash Hashing function object type, defaults to hash<_Value>. │ │ │ │ +1349 * @tparam _Pred Predicate function object type, defaults │ │ │ │ +1350 * to equal_to<_Value>. │ │ │ │ +1351 * @tparam _Alloc Allocator type, defaults to │ │ │ │ +1352 * std::allocator>. │ │ │ │ +1353 * │ │ │ │ +1354 * Meets the requirements of a container, and │ │ │ │ +1355 * unordered associative container │ │ │ │ +1356 * │ │ │ │ +1357 * The resulting value type of the container is std::pair. │ │ │ │ +1358 * │ │ │ │ +1359 * Base is _Hashtable, dispatched at compile time via template │ │ │ │ +1360 * alias __ummap_hashtable. │ │ │ │ +1361 */ │ │ │ │ +1362 template, │ │ │ │ +1364 typename _Pred = equal_to<_Key>, │ │ │ │ +1365 typename _Alloc = allocator>> │ │ │ │ +_1_3_6_6 class _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ +1367 { │ │ │ │ +1368 typedef _____u_m_m_a_p___h_a_s_h_t_a_b_l_e_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_> ___H_a_s_h_t_a_b_l_e; │ │ │ │ +1369 ___H_a_s_h_t_a_b_l_e _M_h; │ │ │ │ +1370 │ │ │ │ +1371 public: │ │ │ │ +1372 // typedefs: │ │ │ │ +1373 ///@{ │ │ │ │ +1374 /// Public typedefs. │ │ │ │ +_1_3_7_5 typedef typename _Hashtable::key_type _k_e_y___t_y_p_e; │ │ │ │ +_1_3_7_6 typedef typename _Hashtable::value_type _v_a_l_u_e___t_y_p_e; │ │ │ │ +_1_3_7_7 typedef typename _Hashtable::mapped_type _m_a_p_p_e_d___t_y_p_e; │ │ │ │ +_1_3_7_8 typedef typename _Hashtable::hasher _h_a_s_h_e_r; │ │ │ │ +_1_3_7_9 typedef typename _Hashtable::key_equal _k_e_y___e_q_u_a_l; │ │ │ │ +_1_3_8_0 typedef typename _Hashtable::allocator_type _a_l_l_o_c_a_t_o_r___t_y_p_e; │ │ │ │ +1381 ///@} │ │ │ │ 1382 │ │ │ │ -1383 // modifiers. │ │ │ │ -1384 │ │ │ │ -1385 /** │ │ │ │ -1386 * @brief Builds and insert an element into the %unordered_multiset. │ │ │ │ -1387 * @param __args Arguments used to generate an element. │ │ │ │ -1388 * @return An iterator that points to the inserted element. │ │ │ │ -1389 * │ │ │ │ -1390 * Insertion requires amortized constant time. │ │ │ │ -1391 */ │ │ │ │ -1392 template │ │ │ │ -1393 _i_t_e_r_a_t_o_r │ │ │ │ -_1_3_9_4 _e_m_p_l_a_c_e(___A_r_g_s&&... _____a_r_g_s) │ │ │ │ -1395 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); } │ │ │ │ +1383 ///@{ │ │ │ │ +1384 /// Iterator-related typedefs. │ │ │ │ +_1_3_8_5 typedef typename _Hashtable::pointer _p_o_i_n_t_e_r; │ │ │ │ +_1_3_8_6 typedef typename _Hashtable::const_pointer _c_o_n_s_t___p_o_i_n_t_e_r; │ │ │ │ +_1_3_8_7 typedef typename _Hashtable::reference _r_e_f_e_r_e_n_c_e; │ │ │ │ +_1_3_8_8 typedef typename _Hashtable::const_reference _c_o_n_s_t___r_e_f_e_r_e_n_c_e; │ │ │ │ +_1_3_8_9 typedef typename _Hashtable::iterator _i_t_e_r_a_t_o_r; │ │ │ │ +_1_3_9_0 typedef typename _Hashtable::const_iterator _c_o_n_s_t___i_t_e_r_a_t_o_r; │ │ │ │ +_1_3_9_1 typedef typename _Hashtable::local_iterator _l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ +_1_3_9_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_9_3 typedef typename _Hashtable::size_type _s_i_z_e___t_y_p_e; │ │ │ │ +_1_3_9_4 typedef typename _Hashtable::difference_type _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ +1395 ///@} │ │ │ │ 1396 │ │ │ │ -1397 /** │ │ │ │ -1398 * @brief Inserts an element into the %unordered_multiset. │ │ │ │ -1399 * @param __pos An iterator that serves as a hint as to where the │ │ │ │ -1400 * element should be inserted. │ │ │ │ -1401 * @param __args Arguments used to generate the element to be │ │ │ │ -1402 * inserted. │ │ │ │ -1403 * @return An iterator that points to the inserted element. │ │ │ │ -1404 * │ │ │ │ -1405 * Note that the first parameter is only a hint and can potentially │ │ │ │ -1406 * improve the performance of the insertion process. A bad hint would │ │ │ │ -1407 * cause no gains in efficiency. │ │ │ │ -1408 * │ │ │ │ -1409 * For more on @a hinting, see: │ │ │ │ -1410 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -1411 * │ │ │ │ -1412 * Insertion requires amortized constant time. │ │ │ │ -1413 */ │ │ │ │ -1414 template │ │ │ │ -1415 _i_t_e_r_a_t_o_r │ │ │ │ -_1_4_1_6 _e_m_p_l_a_c_e___h_i_n_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s, ___A_r_g_s&&... _____a_r_g_s) │ │ │ │ -1417 { return _M_h.emplace_hint(_____p_o_s, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); } │ │ │ │ -1418 │ │ │ │ -1419 ///@{ │ │ │ │ -1420 /** │ │ │ │ -1421 * @brief Inserts an element into the %unordered_multiset. │ │ │ │ -1422 * @param __x Element to be inserted. │ │ │ │ -1423 * @return An iterator that points to the inserted element. │ │ │ │ -1424 * │ │ │ │ -1425 * Insertion requires amortized constant time. │ │ │ │ -1426 */ │ │ │ │ -1427 _i_t_e_r_a_t_o_r │ │ │ │ -_1_4_2_8 _i_n_s_e_r_t(const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -1429 { return _M_h.insert(__x); } │ │ │ │ -1430 │ │ │ │ -1431 _i_t_e_r_a_t_o_r │ │ │ │ -_1_4_3_2 _i_n_s_e_r_t(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -1433 { return _M_h.insert(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -1434 ///@} │ │ │ │ -1435 │ │ │ │ -1436 ///@{ │ │ │ │ -1437 /** │ │ │ │ -1438 * @brief Inserts an element into the %unordered_multiset. │ │ │ │ -1439 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ -1440 * element should be inserted. │ │ │ │ -1441 * @param __x Element to be inserted. │ │ │ │ -1442 * @return An iterator that points to the inserted element. │ │ │ │ -1443 * │ │ │ │ -1444 * Note that the first parameter is only a hint and can potentially │ │ │ │ -1445 * improve the performance of the insertion process. A bad hint would │ │ │ │ -1446 * cause no gains in efficiency. │ │ │ │ -1447 * │ │ │ │ -1448 * For more on @a hinting, see: │ │ │ │ -1449 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -1450 * │ │ │ │ -1451 * Insertion requires amortized constant. │ │ │ │ +1397#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +1398 using node_type = typename _Hashtable::node_type; │ │ │ │ +1399#endif │ │ │ │ +1400 │ │ │ │ +1401 //construct/destroy/copy │ │ │ │ +1402 │ │ │ │ +1403 /// Default constructor. │ │ │ │ +_1_4_0_4 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p() = default; │ │ │ │ +1405 │ │ │ │ +1406 /** │ │ │ │ +1407 * @brief Default constructor creates no elements. │ │ │ │ +1408 * @param __n Mnimal initial number of buckets. │ │ │ │ +1409 * @param __hf A hash functor. │ │ │ │ +1410 * @param __eql A key equality functor. │ │ │ │ +1411 * @param __a An allocator object. │ │ │ │ +1412 */ │ │ │ │ +1413 explicit │ │ │ │ +_1_4_1_4 _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, │ │ │ │ +1415 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ +1416 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ +1417 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()) │ │ │ │ +1418 : _M_h(__n, _____h_f, _____e_q_l, __a) │ │ │ │ +1419 { } │ │ │ │ +1420 │ │ │ │ +1421 /** │ │ │ │ +1422 * @brief Builds an %unordered_multimap from a range. │ │ │ │ +1423 * @param __first An input iterator. │ │ │ │ +1424 * @param __last An input iterator. │ │ │ │ +1425 * @param __n Minimal initial number of buckets. │ │ │ │ +1426 * @param __hf A hash functor. │ │ │ │ +1427 * @param __eql A key equality functor. │ │ │ │ +1428 * @param __a An allocator object. │ │ │ │ +1429 * │ │ │ │ +1430 * Create an %unordered_multimap consisting of copies of the elements │ │ │ │ +1431 * from [__first,__last). This is linear in N (where N is │ │ │ │ +1432 * distance(__first,__last)). │ │ │ │ +1433 */ │ │ │ │ +1434 template │ │ │ │ +_1_4_3_5 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __last, │ │ │ │ +1436 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ +1437 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ +1438 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ +1439 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()) │ │ │ │ +1440 : _M_h(__first, __last, __n, _____h_f, _____e_q_l, __a) │ │ │ │ +1441 { } │ │ │ │ +1442 │ │ │ │ +1443 /// Copy constructor. │ │ │ │ +_1_4_4_4 _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; │ │ │ │ +1445 │ │ │ │ +1446 /// Move constructor. │ │ │ │ +_1_4_4_7 _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; │ │ │ │ +1448 │ │ │ │ +1449 /** │ │ │ │ +1450 * @brief Creates an %unordered_multimap with no elements. │ │ │ │ +1451 * @param __a An allocator object. │ │ │ │ 1452 */ │ │ │ │ -1453 _i_t_e_r_a_t_o_r │ │ │ │ -_1_4_5_4 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -1455 { return _M_h.insert(_____h_i_n_t, __x); } │ │ │ │ -1456 │ │ │ │ -1457 _i_t_e_r_a_t_o_r │ │ │ │ -_1_4_5_8 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, _v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -1459 { return _M_h.insert(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -1460 ///@} │ │ │ │ -1461 │ │ │ │ -1462 /** │ │ │ │ -1463 * @brief A template function that inserts a range of elements. │ │ │ │ -1464 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -1465 * inserted. │ │ │ │ -1466 * @param __last Iterator pointing to the end of the range. │ │ │ │ -1467 * │ │ │ │ -1468 * Complexity similar to that of the range constructor. │ │ │ │ -1469 */ │ │ │ │ -1470 template │ │ │ │ -1471 void │ │ │ │ -_1_4_7_2 _i_n_s_e_r_t(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __last) │ │ │ │ -1473 { _M_h.insert(__first, __last); } │ │ │ │ -1474 │ │ │ │ -1475 /** │ │ │ │ -1476 * @brief Inserts a list of elements into the %unordered_multiset. │ │ │ │ -1477 * @param __l A std::initializer_list of elements to be │ │ │ │ -1478 * inserted. │ │ │ │ -1479 * │ │ │ │ -1480 * Complexity similar to that of the range constructor. │ │ │ │ -1481 */ │ │ │ │ -1482 void │ │ │ │ -_1_4_8_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) │ │ │ │ -1484 { _M_h.insert(_____l); } │ │ │ │ -1485 │ │ │ │ -1486#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -1487 /** │ │ │ │ -1488 * @brief Inserts a range of elements. │ │ │ │ -1489 * @since C++23 │ │ │ │ -1490 * @param __rg An input range of elements that can be converted to │ │ │ │ -1491 * the set's value type. │ │ │ │ -1492 */ │ │ │ │ -1493 template<__detail::__container_compatible_range<_Value> _Rg> │ │ │ │ -1494 void │ │ │ │ -1495 _i_n_s_e_r_t___r_a_n_g_e(___R_g&& _____r_g) │ │ │ │ -1496 { │ │ │ │ -1497 auto __first = ranges::begin(_____r_g); │ │ │ │ -1498 const auto __last = ranges::end(_____r_g); │ │ │ │ -1499 if (__first == __last) │ │ │ │ -1500 return; │ │ │ │ +1453 explicit │ │ │ │ +_1_4_5_4 _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) │ │ │ │ +1455 : _M_h(__a) │ │ │ │ +1456 { } │ │ │ │ +1457 │ │ │ │ +1458 /* │ │ │ │ +1459 * @brief Copy constructor with allocator argument. │ │ │ │ +1460 * @param __uset Input %unordered_multimap to copy. │ │ │ │ +1461 * @param __a An allocator object. │ │ │ │ +1462 */ │ │ │ │ +1463 _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& _____u_m_m_a_p, │ │ │ │ +1464 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1465 : _M_h(_____u_m_m_a_p._M_h, __a) │ │ │ │ +1466 { } │ │ │ │ +1467 │ │ │ │ +1468 /* │ │ │ │ +1469 * @brief Move constructor with allocator argument. │ │ │ │ +1470 * @param __uset Input %unordered_multimap to move. │ │ │ │ +1471 * @param __a An allocator object. │ │ │ │ +1472 */ │ │ │ │ +1473 _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&& __ummap, │ │ │ │ +1474 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1475 noexcept( noexcept(_Hashtable(_s_t_d_:_:_m_o_v_e(__ummap._M_h), __a)) ) │ │ │ │ +1476 : _M_h(_s_t_d_:_:_m_o_v_e(__ummap._M_h), __a) │ │ │ │ +1477 { } │ │ │ │ +1478 │ │ │ │ +1479 /** │ │ │ │ +1480 * @brief Builds an %unordered_multimap from an initializer_list. │ │ │ │ +1481 * @param __l An initializer_list. │ │ │ │ +1482 * @param __n Minimal initial number of buckets. │ │ │ │ +1483 * @param __hf A hash functor. │ │ │ │ +1484 * @param __eql A key equality functor. │ │ │ │ +1485 * @param __a An allocator object. │ │ │ │ +1486 * │ │ │ │ +1487 * Create an %unordered_multimap consisting of copies of the elements in │ │ │ │ +1488 * the list. This is linear in N (where N is @a __l.size()). │ │ │ │ +1489 */ │ │ │ │ +_1_4_9_0 _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, │ │ │ │ +1491 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ +1492 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ +1493 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ +1494 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()) │ │ │ │ +1495 : _M_h(_____l, __n, _____h_f, _____e_q_l, __a) │ │ │ │ +1496 { } │ │ │ │ +1497 │ │ │ │ +1498 _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 _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1499 : _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) │ │ │ │ +1500 { } │ │ │ │ 1501 │ │ │ │ -1502 if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>) │ │ │ │ -1503 _M_h._M_rehash_insert(_s_i_z_e___t_y_p_e(ranges::distance(_____r_g))); │ │ │ │ -1504 else │ │ │ │ -1505 _M_h._M_rehash_insert(1); │ │ │ │ +1502 _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 _h_a_s_h_e_r& __hf, │ │ │ │ +1503 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1504 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +1505 { } │ │ │ │ 1506 │ │ │ │ -1507 for (; __first != __last; ++__first) │ │ │ │ -1508 _M_h.emplace(*__first); │ │ │ │ -1509 } │ │ │ │ -1510#endif │ │ │ │ -1511 │ │ │ │ -1512#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -1513 /// Extract a node. │ │ │ │ -1514 node_type │ │ │ │ -_1_5_1_5 _e_x_t_r_a_c_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s) │ │ │ │ -1516 { │ │ │ │ -1517 __glibcxx_assert(_____p_o_s != _e_n_d()); │ │ │ │ -1518 return _M_h.extract(_____p_o_s); │ │ │ │ -1519 } │ │ │ │ +1507 template │ │ │ │ +1508 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ +1509 _s_i_z_e___t_y_p_e __n, │ │ │ │ +1510 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1511 : _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) │ │ │ │ +1512 { } │ │ │ │ +1513 │ │ │ │ +1514 template │ │ │ │ +1515 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ +1516 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ +1517 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1518 : _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) │ │ │ │ +1519 { } │ │ │ │ 1520 │ │ │ │ -1521 /// Extract a node. │ │ │ │ -1522 node_type │ │ │ │ -_1_5_2_3 _e_x_t_r_a_c_t(const _k_e_y___t_y_p_e& _____k_e_y) │ │ │ │ -1524 { return _M_h.extract(_____k_e_y); } │ │ │ │ -1525 │ │ │ │ -1526 /// Re-insert an extracted node. │ │ │ │ -1527 _i_t_e_r_a_t_o_r │ │ │ │ -_1_5_2_8 _i_n_s_e_r_t(node_type&& _____n_h) │ │ │ │ -1529 { return _M_h._M_reinsert_node_multi(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(_____n_h)); } │ │ │ │ -1530 │ │ │ │ -1531 /// Re-insert an extracted node. │ │ │ │ -1532 _i_t_e_r_a_t_o_r │ │ │ │ -_1_5_3_3 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, node_type&& _____n_h) │ │ │ │ -1534 { return _M_h._M_reinsert_node_multi(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(_____n_h)); } │ │ │ │ -1535#endif // node_extract │ │ │ │ -1536 │ │ │ │ -1537 ///@{ │ │ │ │ -1538 /** │ │ │ │ -1539 * @brief Erases an element from an %unordered_multiset. │ │ │ │ -1540 * @param __position An iterator pointing to the element to be erased. │ │ │ │ -1541 * @return An iterator pointing to the element immediately following │ │ │ │ -1542 * @a __position prior to the element being erased. If no such │ │ │ │ -1543 * element exists, end() is returned. │ │ │ │ -1544 * │ │ │ │ -1545 * This function erases an element, pointed to by the given iterator, │ │ │ │ -1546 * from an %unordered_multiset. │ │ │ │ -1547 * │ │ │ │ -1548 * Note that this function only erases the element, and that if the │ │ │ │ -1549 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ -1550 * any way. Managing the pointer is the user's responsibility. │ │ │ │ -1551 */ │ │ │ │ -1552 _i_t_e_r_a_t_o_r │ │ │ │ -_1_5_5_3 _e_r_a_s_e(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n) │ │ │ │ -1554 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ +1521 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(initializer_list __l, │ │ │ │ +1522 _s_i_z_e___t_y_p_e __n, │ │ │ │ +1523 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1524 : _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) │ │ │ │ +1525 { } │ │ │ │ +1526 │ │ │ │ +1527 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(initializer_list __l, │ │ │ │ +1528 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ +1529 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1530 : _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) │ │ │ │ +1531 { } │ │ │ │ +1532 │ │ │ │ +1533#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +1534 /** │ │ │ │ +1535 * @brief Builds an %unordered_multimap from a range. │ │ │ │ +1536 * @since C++23 │ │ │ │ +1537 * @param __rg An input range of elements that can be converted to │ │ │ │ +1538 * the maps's value type. │ │ │ │ +1539 * @param __n Minimal initial number of buckets. │ │ │ │ +1540 * @param __hf A hash functor. │ │ │ │ +1541 * @param __eql A key equality functor. │ │ │ │ +1542 * @param __a An allocator object. │ │ │ │ +1543 * │ │ │ │ +1544 * Create an %unordered_multimap consisting of copies of the elements in │ │ │ │ +1545 * the range. This is linear in N (where N is `std::ranges::size(__rg)`). │ │ │ │ +1546 */ │ │ │ │ +1547 template<__detail::__container_compatible_range _Rg> │ │ │ │ +1548 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(from_range_t, _Rg&& __rg, │ │ │ │ +1549 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ +1550 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ +1551 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ +1552 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()) │ │ │ │ +1553 : _M_h(__n, __hf, __eql, __a) │ │ │ │ +1554 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ 1555 │ │ │ │ -1556 // LWG 2059. │ │ │ │ -1557 _i_t_e_r_a_t_o_r │ │ │ │ -_1_5_5_8 _e_r_a_s_e(_i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n) │ │ │ │ -1559 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ -1560 ///@} │ │ │ │ -1561 │ │ │ │ +1556 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +1557 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ +containers │ │ │ │ +1558 template<__detail::__container_compatible_range _Rg> │ │ │ │ +1559 _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) │ │ │ │ +1560 : _M_h(0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +1561 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ 1562 │ │ │ │ -1563 /** │ │ │ │ -1564 * @brief Erases elements according to the provided key. │ │ │ │ -1565 * @param __x Key of element to be erased. │ │ │ │ -1566 * @return The number of elements erased. │ │ │ │ -1567 * │ │ │ │ -1568 * This function erases all the elements located by the given key from │ │ │ │ -1569 * an %unordered_multiset. │ │ │ │ -1570 * │ │ │ │ -1571 * Note that this function only erases the element, and that if the │ │ │ │ -1572 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ -1573 * any way. Managing the pointer is the user's responsibility. │ │ │ │ -1574 */ │ │ │ │ -1575 _s_i_z_e___t_y_p_e │ │ │ │ -_1_5_7_6 _e_r_a_s_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -1577 { return _M_h.erase(__x); } │ │ │ │ -1578 │ │ │ │ -1579 /** │ │ │ │ -1580 * @brief Erases a [__first,__last) range of elements from an │ │ │ │ -1581 * %unordered_multiset. │ │ │ │ -1582 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -1583 * erased. │ │ │ │ -1584 * @param __last Iterator pointing to the end of the range to │ │ │ │ -1585 * be erased. │ │ │ │ -1586 * @return The iterator @a __last. │ │ │ │ +1563 template<__detail::__container_compatible_range _Rg> │ │ │ │ +1564 _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, │ │ │ │ +1565 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1566 : _M_h(__n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +1567 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ +1568 │ │ │ │ +1569 template<__detail::__container_compatible_range _Rg> │ │ │ │ +1570 _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, │ │ │ │ +1571 const _h_a_s_h_e_r& __hf, const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1572 : _M_h(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +1573 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ +1574#endif │ │ │ │ +1575 │ │ │ │ +1576 /// Copy assignment operator. │ │ │ │ +1577 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& │ │ │ │ +_1_5_7_8 _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; │ │ │ │ +1579 │ │ │ │ +1580 /// Move assignment operator. │ │ │ │ +1581 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& │ │ │ │ +_1_5_8_2 _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; │ │ │ │ +1583 │ │ │ │ +1584 /** │ │ │ │ +1585 * @brief %Unordered_multimap list assignment operator. │ │ │ │ +1586 * @param __l An initializer_list. │ │ │ │ 1587 * │ │ │ │ -1588 * This function erases a sequence of elements from an │ │ │ │ -1589 * %unordered_multiset. │ │ │ │ +1588 * This function fills an %unordered_multimap with copies of the │ │ │ │ +1589 * elements in the initializer list @a __l. │ │ │ │ 1590 * │ │ │ │ -1591 * Note that this function only erases the element, and that if │ │ │ │ -1592 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ -1593 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ +1591 * Note that the assignment completely changes the %unordered_multimap │ │ │ │ +1592 * and that the resulting %unordered_multimap's size is the same as the │ │ │ │ +1593 * number of elements assigned. │ │ │ │ 1594 */ │ │ │ │ -1595 _i_t_e_r_a_t_o_r │ │ │ │ -_1_5_9_6 _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) │ │ │ │ -1597 { return _M_h.erase(__first, __last); } │ │ │ │ -1598 │ │ │ │ -1599 /** │ │ │ │ -1600 * Erases all elements in an %unordered_multiset. │ │ │ │ -1601 * │ │ │ │ -1602 * Note that this function only erases the elements, and that if the │ │ │ │ -1603 * elements themselves are pointers, the pointed-to memory is not touched │ │ │ │ -1604 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -1605 */ │ │ │ │ -1606 void │ │ │ │ -_1_6_0_7 _c_l_e_a_r() noexcept │ │ │ │ -1608 { _M_h.clear(); } │ │ │ │ -1609 │ │ │ │ -1610 /** │ │ │ │ -1611 * @brief Swaps data with another %unordered_multiset. │ │ │ │ -1612 * @param __x An %unordered_multiset of the same element and allocator │ │ │ │ -1613 * types. │ │ │ │ -1614 * │ │ │ │ -1615 * This exchanges the elements between two sets in constant time. │ │ │ │ -1616 * Note that the global std::swap() function is specialized such that │ │ │ │ -1617 * std::swap(s1,s2) will feed to this function. │ │ │ │ -1618 */ │ │ │ │ -1619 void │ │ │ │ -_1_6_2_0 _s_w_a_p(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t& __x) │ │ │ │ -1621 noexcept( noexcept(_M_h.swap(__x._M_h)) ) │ │ │ │ -1622 { _M_h.swap(__x._M_h); } │ │ │ │ +1595 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& │ │ │ │ +_1_5_9_6 _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) │ │ │ │ +1597 { │ │ │ │ +1598 _M_h = _____l; │ │ │ │ +1599 return *this; │ │ │ │ +1600 } │ │ │ │ +1601 │ │ │ │ +1602 /// Returns the allocator object used by the %unordered_multimap. │ │ │ │ +1603 _a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ +_1_6_0_4 _g_e_t___a_l_l_o_c_a_t_o_r() _c_o_n_s_t noexcept │ │ │ │ +1605 { return _M_h.get_allocator(); } │ │ │ │ +1606 │ │ │ │ +1607 // size and capacity: │ │ │ │ +1608 │ │ │ │ +1609 /// Returns true if the %unordered_multimap is empty. │ │ │ │ +1610 _GLIBCXX_NODISCARD bool │ │ │ │ +_1_6_1_1 _e_m_p_t_y() _c_o_n_s_t noexcept │ │ │ │ +1612 { return _M_h.empty(); } │ │ │ │ +1613 │ │ │ │ +1614 /// Returns the size of the %unordered_multimap. │ │ │ │ +1615 _s_i_z_e___t_y_p_e │ │ │ │ +_1_6_1_6 _s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ +1617 { return _M_h.size(); } │ │ │ │ +1618 │ │ │ │ +1619 /// Returns the maximum size of the %unordered_multimap. │ │ │ │ +1620 _s_i_z_e___t_y_p_e │ │ │ │ +_1_6_2_1 _m_a_x___s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ +1622 { return _M_h.max_size(); } │ │ │ │ 1623 │ │ │ │ -1624#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -1625 template │ │ │ │ -1626 friend class std::_Hash_merge_helper; │ │ │ │ -1627 │ │ │ │ -1628 template │ │ │ │ -1629 void │ │ │ │ -1630 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_>& _____s_o_u_r_c_e) │ │ │ │ -1631 { │ │ │ │ -1632 if constexpr (_i_s___s_a_m_e___v_<___H_2_,_ ___H_a_s_h_> && _i_s___s_a_m_e___v_<___P_2_,_ ___P_r_e_d_>) │ │ │ │ -1633 if (_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____s_o_u_r_c_e) == this) [[_____u_n_l_i_k_e_l_y____]] │ │ │ │ -1634 return; │ │ │ │ -1635 │ │ │ │ -1636 using ___M_e_r_g_e___h_e_l_p_e_r │ │ │ │ -1637 = ___H_a_s_h___m_e_r_g_e___h_e_l_p_e_r_<_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_,_ ___H_2_,_ ___P_2_>; │ │ │ │ -1638 _M_h._M_merge_multi(_Merge_helper::_S_get_table(_____s_o_u_r_c_e)); │ │ │ │ -1639 } │ │ │ │ -1640 │ │ │ │ -1641 template │ │ │ │ -1642 void │ │ │ │ -1643 merge(unordered_multiset<_Value, _H2, _P2, _Alloc>&& __source) │ │ │ │ -1644 { │ │ │ │ -1645 using _Merge_helper │ │ │ │ -1646 = _Hash_merge_helper; │ │ │ │ -1647 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ -1648 } │ │ │ │ -1649 │ │ │ │ -1650 template │ │ │ │ -1651 void │ │ │ │ -1652 merge(unordered_set<_Value, _H2, _P2, _Alloc>& __source) │ │ │ │ -1653 { │ │ │ │ -1654 using _Merge_helper │ │ │ │ -1655 = _Hash_merge_helper; │ │ │ │ -1656 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ -1657 } │ │ │ │ -1658 │ │ │ │ -1659 template │ │ │ │ -1660 void │ │ │ │ -1661 merge(unordered_set<_Value, _H2, _P2, _Alloc>&& __source) │ │ │ │ -1662 { merge(__source); } │ │ │ │ -1663#endif // node_extract │ │ │ │ +1624 // iterators. │ │ │ │ +1625 │ │ │ │ +1626 /** │ │ │ │ +1627 * Returns a read/write iterator that points to the first element in the │ │ │ │ +1628 * %unordered_multimap. │ │ │ │ +1629 */ │ │ │ │ +1630 _i_t_e_r_a_t_o_r │ │ │ │ +_1_6_3_1 _b_e_g_i_n() noexcept │ │ │ │ +1632 { return _M_h.begin(); } │ │ │ │ +1633 │ │ │ │ +1634 ///@{ │ │ │ │ +1635 /** │ │ │ │ +1636 * Returns a read-only (constant) iterator that points to the first │ │ │ │ +1637 * element in the %unordered_multimap. │ │ │ │ +1638 */ │ │ │ │ +1639 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_1_6_4_0 _b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ +1641 { return _M_h.begin(); } │ │ │ │ +1642 │ │ │ │ +1643 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_1_6_4_4 _c_b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ +1645 { return _M_h.begin(); } │ │ │ │ +1646 ///@} │ │ │ │ +1647 │ │ │ │ +1648 /** │ │ │ │ +1649 * Returns a read/write iterator that points one past the last element in │ │ │ │ +1650 * the %unordered_multimap. │ │ │ │ +1651 */ │ │ │ │ +1652 _i_t_e_r_a_t_o_r │ │ │ │ +_1_6_5_3 _e_n_d() noexcept │ │ │ │ +1654 { return _M_h.end(); } │ │ │ │ +1655 │ │ │ │ +1656 ///@{ │ │ │ │ +1657 /** │ │ │ │ +1658 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ +1659 * element in the %unordered_multimap. │ │ │ │ +1660 */ │ │ │ │ +1661 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_1_6_6_2 _e_n_d() _c_o_n_s_t noexcept │ │ │ │ +1663 { return _M_h.end(); } │ │ │ │ 1664 │ │ │ │ -1665 // observers. │ │ │ │ -1666 │ │ │ │ -1667 /// Returns the hash functor object with which the %unordered_multiset │ │ │ │ -1668 /// was constructed. │ │ │ │ -1669 _h_a_s_h_e_r │ │ │ │ -_1_6_7_0 _h_a_s_h___f_u_n_c_t_i_o_n() const │ │ │ │ -1671 { return _M_h.hash_function(); } │ │ │ │ -1672 │ │ │ │ -1673 /// Returns the key comparison object with which the %unordered_multiset │ │ │ │ -1674 /// was constructed. │ │ │ │ -1675 _k_e_y___e_q_u_a_l │ │ │ │ -_1_6_7_6 _k_e_y___e_q() const │ │ │ │ -1677 { return _M_h.key_eq(); } │ │ │ │ -1678 │ │ │ │ -1679 // lookup. │ │ │ │ -1680 │ │ │ │ -1681 ///@{ │ │ │ │ -1682 /** │ │ │ │ -1683 * @brief Tries to locate an element in an %unordered_multiset. │ │ │ │ -1684 * @param __x Element to be located. │ │ │ │ -1685 * @return Iterator pointing to sought-after element, or end() if not │ │ │ │ -1686 * found. │ │ │ │ -1687 * │ │ │ │ -1688 * This function takes a key and tries to locate the element with which │ │ │ │ -1689 * the key matches. If successful the function returns an iterator │ │ │ │ -1690 * pointing to the sought after element. If unsuccessful it returns the │ │ │ │ -1691 * past-the-end ( @c end() ) iterator. │ │ │ │ -1692 */ │ │ │ │ -1693 _i_t_e_r_a_t_o_r │ │ │ │ -_1_6_9_4 _f_i_n_d(const _k_e_y___t_y_p_e& __x) │ │ │ │ -1695 { return _M_h.find(__x); } │ │ │ │ -1696 │ │ │ │ -1697#if __cplusplus > 201703L │ │ │ │ -1698 template │ │ │ │ -1699 auto │ │ │ │ -_1_7_0_0 _f_i_n_d(const ___K_t& __x) │ │ │ │ -1701 -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -1702 { return _M_h._M_find_tr(__x); } │ │ │ │ -1703#endif │ │ │ │ -1704 │ │ │ │ -1705 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_1_7_0_6 _f_i_n_d(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -1707 { return _M_h.find(__x); } │ │ │ │ -1708 │ │ │ │ -1709#if __cplusplus > 201703L │ │ │ │ -1710 template │ │ │ │ -1711 auto │ │ │ │ -_1_7_1_2 _f_i_n_d(const ___K_t& __x) const │ │ │ │ -1713 -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -1714 { return _M_h._M_find_tr(__x); } │ │ │ │ -1715#endif │ │ │ │ -1716 ///@} │ │ │ │ -1717 │ │ │ │ -1718 ///@{ │ │ │ │ -1719 /** │ │ │ │ -1720 * @brief Finds the number of elements. │ │ │ │ -1721 * @param __x Element to located. │ │ │ │ -1722 * @return Number of elements with specified key. │ │ │ │ -1723 */ │ │ │ │ -1724 _s_i_z_e___t_y_p_e │ │ │ │ -_1_7_2_5 _c_o_u_n_t(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -1726 { return _M_h.count(__x); } │ │ │ │ -1727 │ │ │ │ -1728#if __cplusplus > 201703L │ │ │ │ -1729 template │ │ │ │ -1730 auto │ │ │ │ -_1_7_3_1 _c_o_u_n_t(const ___K_t& __x) const -> decltype(_M_h._M_count_tr(__x)) │ │ │ │ -1732 { return _M_h._M_count_tr(__x); } │ │ │ │ -1733#endif │ │ │ │ -1734 ///@} │ │ │ │ -1735 │ │ │ │ -1736#if __cplusplus > 201703L │ │ │ │ -1737 ///@{ │ │ │ │ -1738 /** │ │ │ │ -1739 * @brief Finds whether an element with the given key exists. │ │ │ │ -1740 * @param __x Key of elements to be located. │ │ │ │ -1741 * @return True if there is any element with the specified key. │ │ │ │ -1742 */ │ │ │ │ -1743 bool │ │ │ │ -_1_7_4_4 _c_o_n_t_a_i_n_s(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -1745 { return _M_h.find(__x) != _M_h.end(); } │ │ │ │ -1746 │ │ │ │ -1747 template │ │ │ │ -1748 auto │ │ │ │ -_1_7_4_9 _c_o_n_t_a_i_n_s(const ___K_t& __x) const │ │ │ │ -1750 -> decltype(_M_h._M_find_tr(__x), _v_o_i_d(), true) │ │ │ │ -1751 { return _M_h._M_find_tr(__x) != _M_h.end(); } │ │ │ │ -1752 ///@} │ │ │ │ -1753#endif │ │ │ │ -1754 │ │ │ │ -1755 ///@{ │ │ │ │ -1756 /** │ │ │ │ -1757 * @brief Finds a subsequence matching given key. │ │ │ │ -1758 * @param __x Key to be located. │ │ │ │ -1759 * @return Pair of iterators that possibly points to the subsequence │ │ │ │ -1760 * matching given key. │ │ │ │ -1761 */ │ │ │ │ -1762 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _i_t_e_r_a_t_o_r_> │ │ │ │ -_1_7_6_3 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -1764 { return _M_h.equal_range(__x); } │ │ │ │ -1765 │ │ │ │ -1766#if __cplusplus > 201703L │ │ │ │ -1767 template │ │ │ │ -1768 auto │ │ │ │ -_1_7_6_9 _e_q_u_a_l___r_a_n_g_e(const ___K_t& __x) │ │ │ │ -1770 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -1771 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ -1772#endif │ │ │ │ -1773 │ │ │ │ -1774 _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_7_7_5 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -1776 { return _M_h.equal_range(__x); } │ │ │ │ -1777 │ │ │ │ -1778#if __cplusplus > 201703L │ │ │ │ -1779 template │ │ │ │ -1780 auto │ │ │ │ -_1_7_8_1 _e_q_u_a_l___r_a_n_g_e(const ___K_t& __x) const │ │ │ │ -1782 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -1783 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ -1784#endif │ │ │ │ -1785 ///@} │ │ │ │ -1786 │ │ │ │ -1787 // bucket interface. │ │ │ │ -1788 │ │ │ │ -1789 /// Returns the number of buckets of the %unordered_multiset. │ │ │ │ -1790 _s_i_z_e___t_y_p_e │ │ │ │ -_1_7_9_1 _b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ -1792 { return _M_h.bucket_count(); } │ │ │ │ -1793 │ │ │ │ -1794 /// Returns the maximum number of buckets of the %unordered_multiset. │ │ │ │ -1795 _s_i_z_e___t_y_p_e │ │ │ │ -_1_7_9_6 _m_a_x___b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ -1797 { return _M_h.max_bucket_count(); } │ │ │ │ -1798 │ │ │ │ -1799 /* │ │ │ │ -1800 * @brief Returns the number of elements in a given bucket. │ │ │ │ -1801 * @param __n A bucket index. │ │ │ │ -1802 * @return The number of elements in the bucket. │ │ │ │ -1803 */ │ │ │ │ -1804 _s_i_z_e___t_y_p_e │ │ │ │ -1805 bucket_size(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1806 { return _M_h.bucket_size(__n); } │ │ │ │ -1807 │ │ │ │ -1808 /* │ │ │ │ -1809 * @brief Returns the bucket index of a given element. │ │ │ │ -1810 * @param __key A key instance. │ │ │ │ -1811 * @return The key bucket index. │ │ │ │ -1812 */ │ │ │ │ -1813 _s_i_z_e___t_y_p_e │ │ │ │ -1814 bucket(const _k_e_y___t_y_p_e& __key) const │ │ │ │ -1815 { return _M_h.bucket(__key); } │ │ │ │ -1816 │ │ │ │ -1817 ///@{ │ │ │ │ -1818 /** │ │ │ │ -1819 * @brief Returns a read-only (constant) iterator pointing to the first │ │ │ │ -1820 * bucket element. │ │ │ │ -1821 * @param __n The bucket index. │ │ │ │ -1822 * @return A read-only local iterator. │ │ │ │ -1823 */ │ │ │ │ -1824 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_8_2_5 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1826 { return _M_h.begin(__n); } │ │ │ │ -1827 │ │ │ │ -1828 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_8_2_9 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1830 { return _M_h.begin(__n); } │ │ │ │ -1831 │ │ │ │ -1832 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_8_3_3 _c_b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1834 { return _M_h.cbegin(__n); } │ │ │ │ -1835 ///@} │ │ │ │ -1836 │ │ │ │ -1837 ///@{ │ │ │ │ -1838 /** │ │ │ │ -1839 * @brief Returns a read-only (constant) iterator pointing to one past │ │ │ │ -1840 * the last bucket elements. │ │ │ │ -1841 * @param __n The bucket index. │ │ │ │ -1842 * @return A read-only local iterator. │ │ │ │ -1843 */ │ │ │ │ -1844 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_8_4_5 _e_n_d(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1846 { return _M_h.end(__n); } │ │ │ │ -1847 │ │ │ │ -1848 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_8_4_9 _e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1850 { return _M_h.end(__n); } │ │ │ │ -1851 │ │ │ │ -1852 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_8_5_3 _c_e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1854 { return _M_h.cend(__n); } │ │ │ │ -1855 ///@} │ │ │ │ -1856 │ │ │ │ -1857 // hash policy. │ │ │ │ -1858 │ │ │ │ -1859 /// Returns the average number of elements per bucket. │ │ │ │ -1860 float │ │ │ │ -_1_8_6_1 _l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -1862 { return _M_h.load_factor(); } │ │ │ │ -1863 │ │ │ │ -1864 /// Returns a positive number that the %unordered_multiset tries to keep │ │ │ │ -the │ │ │ │ -1865 /// load factor less than or equal to. │ │ │ │ -1866 float │ │ │ │ -_1_8_6_7 _m_a_x___l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -1868 { return _M_h.max_load_factor(); } │ │ │ │ -1869 │ │ │ │ -1870 /** │ │ │ │ -1871 * @brief Change the %unordered_multiset maximum load factor. │ │ │ │ -1872 * @param __z The new maximum load factor. │ │ │ │ -1873 */ │ │ │ │ -1874 void │ │ │ │ -_1_8_7_5 _m_a_x___l_o_a_d___f_a_c_t_o_r(float _____z) │ │ │ │ -1876 { _M_h.max_load_factor(_____z); } │ │ │ │ -1877 │ │ │ │ -1878 /** │ │ │ │ -1879 * @brief May rehash the %unordered_multiset. │ │ │ │ -1880 * @param __n The new number of buckets. │ │ │ │ -1881 * │ │ │ │ -1882 * Rehash will occur only if the new number of buckets respect the │ │ │ │ -1883 * %unordered_multiset maximum load factor. │ │ │ │ -1884 */ │ │ │ │ -1885 void │ │ │ │ -_1_8_8_6 _r_e_h_a_s_h(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1887 { _M_h.rehash(__n); } │ │ │ │ -1888 │ │ │ │ -1889 /** │ │ │ │ -1890 * @brief Prepare the %unordered_multiset for a specified number of │ │ │ │ -1891 * elements. │ │ │ │ -1892 * @param __n Number of elements required. │ │ │ │ -1893 * │ │ │ │ -1894 * Same as rehash(ceil(n / max_load_factor())). │ │ │ │ -1895 */ │ │ │ │ -1896 void │ │ │ │ -_1_8_9_7 _r_e_s_e_r_v_e(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1898 { _M_h.reserve(__n); } │ │ │ │ -1899 │ │ │ │ -1900 template │ │ │ │ -1902 friend bool │ │ │ │ -1903 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_>&, │ │ │ │ -1904 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_>&); │ │ │ │ -1905 }; │ │ │ │ -1906 │ │ │ │ -1907 │ │ │ │ -1908#if __cpp_deduction_guides >= 201606 │ │ │ │ -1909 │ │ │ │ -1910 template::value_type>, │ │ │ │ -1913 typename _Pred = │ │ │ │ -1914 equal_to::value_type>, │ │ │ │ -1915 typename _Allocator = │ │ │ │ -1916 allocator::value_type>, │ │ │ │ -1917 typename = _RequireInputIter<_InputIterator>, │ │ │ │ -1918 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -1919 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -1920 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1921 unordered_multiset(_InputIterator, _InputIterator, │ │ │ │ -1922 _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 = {}, │ │ │ │ -1923 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ -1924 _Allocator = _Allocator()) │ │ │ │ -1925 -> unordered_multiset:: │ │ │ │ -value_type, │ │ │ │ -1926 _Hash, _Pred, _Allocator>; │ │ │ │ -1927 │ │ │ │ -1928 template, │ │ │ │ -1929 typename _Pred = equal_to<_Tp>, │ │ │ │ -1930 typename _Allocator = allocator<_Tp>, │ │ │ │ -1931 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -1932 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -1933 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1934 unordered_multiset(initializer_list<_Tp>, │ │ │ │ -1935 _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 = {}, │ │ │ │ -1936 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ -1937 _Allocator = _Allocator()) │ │ │ │ -1938 -> unordered_multiset<_Tp, _Hash, _Pred, _Allocator>; │ │ │ │ -1939 │ │ │ │ -1940 template, │ │ │ │ -1942 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1943 unordered_multiset(_InputIterator, _InputIterator, │ │ │ │ -1944 _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) │ │ │ │ -1945 -> unordered_multiset:: │ │ │ │ -value_type, │ │ │ │ -1946 hash::value_type>, │ │ │ │ -1948 equal_to::value_type>, │ │ │ │ -1950 _Allocator>; │ │ │ │ -1951 │ │ │ │ -1952 template, │ │ │ │ -1954 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -1955 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1956 unordered_multiset(_InputIterator, _InputIterator, │ │ │ │ -1957 _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, │ │ │ │ -1958 _Hash, _Allocator) │ │ │ │ -1959 -> unordered_multiset::value_type, │ │ │ │ -1961 _Hash, │ │ │ │ -1962 equal_to< │ │ │ │ -1963 typename │ │ │ │ -1964 iterator_traits<_InputIterator>::value_type>, │ │ │ │ -1965 _Allocator>; │ │ │ │ -1966 │ │ │ │ -1967 template> │ │ │ │ -1969 unordered_multiset(initializer_list<_Tp>, │ │ │ │ -1970 _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) │ │ │ │ -1971 -> unordered_multiset<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>; │ │ │ │ -1972 │ │ │ │ -1973 template, │ │ │ │ -1975 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1976 unordered_multiset(initializer_list<_Tp>, │ │ │ │ -1977 _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) │ │ │ │ -1978 -> unordered_multiset<_Tp, _Hash, equal_to<_Tp>, _Allocator>; │ │ │ │ +1665 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_1_6_6_6 _c_e_n_d() _c_o_n_s_t noexcept │ │ │ │ +1667 { return _M_h.end(); } │ │ │ │ +1668 ///@} │ │ │ │ +1669 │ │ │ │ +1670 // modifiers. │ │ │ │ +1671 │ │ │ │ +1672 /** │ │ │ │ +1673 * @brief Attempts to build and insert a std::pair into the │ │ │ │ +1674 * %unordered_multimap. │ │ │ │ +1675 * │ │ │ │ +1676 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ +1677 * std::piecewise_contruct for passing arguments to each │ │ │ │ +1678 * part of the pair constructor). │ │ │ │ +1679 * │ │ │ │ +1680 * @return An iterator that points to the inserted pair. │ │ │ │ +1681 * │ │ │ │ +1682 * This function attempts to build and insert a (key, value) %pair into │ │ │ │ +1683 * the %unordered_multimap. │ │ │ │ +1684 * │ │ │ │ +1685 * Insertion requires amortized constant time. │ │ │ │ +1686 */ │ │ │ │ +1687 template │ │ │ │ +1688 _i_t_e_r_a_t_o_r │ │ │ │ +_1_6_8_9 _e_m_p_l_a_c_e(___A_r_g_s&&... _____a_r_g_s) │ │ │ │ +1690 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); } │ │ │ │ +1691 │ │ │ │ +1692 /** │ │ │ │ +1693 * @brief Attempts to build and insert a std::pair into the │ │ │ │ +1694 * %unordered_multimap. │ │ │ │ +1695 * │ │ │ │ +1696 * @param __pos An iterator that serves as a hint as to where the pair │ │ │ │ +1697 * should be inserted. │ │ │ │ +1698 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ +1699 * std::piecewise_contruct for passing arguments to each │ │ │ │ +1700 * part of the pair constructor). │ │ │ │ +1701 * @return An iterator that points to the element with key of the │ │ │ │ +1702 * std::pair built from @a __args. │ │ │ │ +1703 * │ │ │ │ +1704 * Note that the first parameter is only a hint and can potentially │ │ │ │ +1705 * improve the performance of the insertion process. A bad hint would │ │ │ │ +1706 * cause no gains in efficiency. │ │ │ │ +1707 * │ │ │ │ +1708 * See │ │ │ │ +1709 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ +associative.html#containers.associative.insert_hints │ │ │ │ +1710 * for more on @a hinting. │ │ │ │ +1711 * │ │ │ │ +1712 * Insertion requires amortized constant time. │ │ │ │ +1713 */ │ │ │ │ +1714 template │ │ │ │ +1715 _i_t_e_r_a_t_o_r │ │ │ │ +_1_7_1_6 _e_m_p_l_a_c_e___h_i_n_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s, ___A_r_g_s&&... _____a_r_g_s) │ │ │ │ +1717 { return _M_h.emplace_hint(_____p_o_s, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); } │ │ │ │ +1718 │ │ │ │ +1719 ///@{ │ │ │ │ +1720 /** │ │ │ │ +1721 * @brief Inserts a std::pair into the %unordered_multimap. │ │ │ │ +1722 * @param __x Pair to be inserted (see std::make_pair for easy │ │ │ │ +1723 * creation of pairs). │ │ │ │ +1724 * │ │ │ │ +1725 * @return An iterator that points to the inserted pair. │ │ │ │ +1726 * │ │ │ │ +1727 * Insertion requires amortized constant time. │ │ │ │ +1728 */ │ │ │ │ +1729 _i_t_e_r_a_t_o_r │ │ │ │ +_1_7_3_0 _i_n_s_e_r_t(const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ +1731 { return _M_h.insert(__x); } │ │ │ │ +1732 │ │ │ │ +1733 _i_t_e_r_a_t_o_r │ │ │ │ +_1_7_3_4 _i_n_s_e_r_t(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ +1735 { return _M_h.insert(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ +1736 │ │ │ │ +1737 template │ │ │ │ +1738 _____e_n_a_b_l_e___i_f___t_<_i_s___c_o_n_s_t_r_u_c_t_i_b_l_e_<_v_a_l_u_e___t_y_p_e_,_ ___P_a_i_r_&_&_>_:_:_v_a_l_u_e, _i_t_e_r_a_t_o_r> │ │ │ │ +_1_7_3_9 _i_n_s_e_r_t(___P_a_i_r&& __x) │ │ │ │ +1740 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ +1741 ///@} │ │ │ │ +1742 │ │ │ │ +1743 ///@{ │ │ │ │ +1744 /** │ │ │ │ +1745 * @brief Inserts a std::pair into the %unordered_multimap. │ │ │ │ +1746 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ +1747 * pair should be inserted. │ │ │ │ +1748 * @param __x Pair to be inserted (see std::make_pair for easy creation │ │ │ │ +1749 * of pairs). │ │ │ │ +1750 * @return An iterator that points to the element with key of │ │ │ │ +1751 * @a __x (may or may not be the %pair passed in). │ │ │ │ +1752 * │ │ │ │ +1753 * Note that the first parameter is only a hint and can potentially │ │ │ │ +1754 * improve the performance of the insertion process. A bad hint would │ │ │ │ +1755 * cause no gains in efficiency. │ │ │ │ +1756 * │ │ │ │ +1757 * See │ │ │ │ +1758 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ +associative.html#containers.associative.insert_hints │ │ │ │ +1759 * for more on @a hinting. │ │ │ │ +1760 * │ │ │ │ +1761 * Insertion requires amortized constant time. │ │ │ │ +1762 */ │ │ │ │ +1763 _i_t_e_r_a_t_o_r │ │ │ │ +_1_7_6_4 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ +1765 { return _M_h.insert(_____h_i_n_t, __x); } │ │ │ │ +1766 │ │ │ │ +1767 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +1768 // 2354. Unnecessary copying when inserting into maps with braced-init │ │ │ │ +1769 _i_t_e_r_a_t_o_r │ │ │ │ +_1_7_7_0 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, _v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ +1771 { return _M_h.insert(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ +1772 │ │ │ │ +1773 template │ │ │ │ +1774 _____e_n_a_b_l_e___i_f___t_<_i_s___c_o_n_s_t_r_u_c_t_i_b_l_e_<_v_a_l_u_e___t_y_p_e_,_ ___P_a_i_r_&_&_>_:_:_v_a_l_u_e, _i_t_e_r_a_t_o_r> │ │ │ │ +_1_7_7_5 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, ___P_a_i_r&& __x) │ │ │ │ +1776 { return _M_h.emplace_hint(_____h_i_n_t, _s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ +1777 ///@} │ │ │ │ +1778 │ │ │ │ +1779 /** │ │ │ │ +1780 * @brief A template function that attempts to insert a range of │ │ │ │ +1781 * elements. │ │ │ │ +1782 * @param __first Iterator pointing to the start of the range to be │ │ │ │ +1783 * inserted. │ │ │ │ +1784 * @param __last Iterator pointing to the end of the range. │ │ │ │ +1785 * │ │ │ │ +1786 * Complexity similar to that of the range constructor. │ │ │ │ +1787 */ │ │ │ │ +1788 template │ │ │ │ +1789 void │ │ │ │ +_1_7_9_0 _i_n_s_e_r_t(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __last) │ │ │ │ +1791 { _M_h.insert(__first, __last); } │ │ │ │ +1792 │ │ │ │ +1793 /** │ │ │ │ +1794 * @brief Attempts to insert a list of elements into the │ │ │ │ +1795 * %unordered_multimap. │ │ │ │ +1796 * @param __l A std::initializer_list of elements │ │ │ │ +1797 * to be inserted. │ │ │ │ +1798 * │ │ │ │ +1799 * Complexity similar to that of the range constructor. │ │ │ │ +1800 */ │ │ │ │ +1801 void │ │ │ │ +_1_8_0_2 _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) │ │ │ │ +1803 { _M_h.insert(_____l); } │ │ │ │ +1804 │ │ │ │ +1805#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +1806 /** │ │ │ │ +1807 * @brief Inserts a range of elements. │ │ │ │ +1808 * @since C++23 │ │ │ │ +1809 * @param __rg An input range of elements that can be converted to │ │ │ │ +1810 * the maps's value type. │ │ │ │ +1811 */ │ │ │ │ +1812 template<__detail::__container_compatible_range _Rg> │ │ │ │ +1813 void │ │ │ │ +1814 _i_n_s_e_r_t___r_a_n_g_e(___R_g&& _____r_g) │ │ │ │ +1815 { │ │ │ │ +1816 auto __first = ranges::begin(_____r_g); │ │ │ │ +1817 const auto __last = ranges::end(_____r_g); │ │ │ │ +1818 if (__first == __last) │ │ │ │ +1819 return; │ │ │ │ +1820 │ │ │ │ +1821 if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>) │ │ │ │ +1822 _M_h._M_rehash_insert(_s_i_z_e___t_y_p_e(ranges::distance(_____r_g))); │ │ │ │ +1823 else │ │ │ │ +1824 _M_h._M_rehash_insert(1); │ │ │ │ +1825 │ │ │ │ +1826 for (; __first != __last; ++__first) │ │ │ │ +1827 _M_h.emplace(*__first); │ │ │ │ +1828 } │ │ │ │ +1829#endif │ │ │ │ +1830 │ │ │ │ +1831#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +1832 /// Extract a node. │ │ │ │ +1833 node_type │ │ │ │ +_1_8_3_4 _e_x_t_r_a_c_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s) │ │ │ │ +1835 { │ │ │ │ +1836 __glibcxx_assert(_____p_o_s != _e_n_d()); │ │ │ │ +1837 return _M_h.extract(_____p_o_s); │ │ │ │ +1838 } │ │ │ │ +1839 │ │ │ │ +1840 /// Extract a node. │ │ │ │ +1841 node_type │ │ │ │ +_1_8_4_2 _e_x_t_r_a_c_t(const _k_e_y___t_y_p_e& _____k_e_y) │ │ │ │ +1843 { return _M_h.extract(_____k_e_y); } │ │ │ │ +1844 │ │ │ │ +1845 /// Re-insert an extracted node. │ │ │ │ +1846 _i_t_e_r_a_t_o_r │ │ │ │ +_1_8_4_7 _i_n_s_e_r_t(node_type&& _____n_h) │ │ │ │ +1848 { return _M_h._M_reinsert_node_multi(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(_____n_h)); } │ │ │ │ +1849 │ │ │ │ +1850 /// Re-insert an extracted node. │ │ │ │ +1851 _i_t_e_r_a_t_o_r │ │ │ │ +_1_8_5_2 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, node_type&& _____n_h) │ │ │ │ +1853 { return _M_h._M_reinsert_node_multi(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(_____n_h)); } │ │ │ │ +1854#endif // node_extract │ │ │ │ +1855 │ │ │ │ +1856 ///@{ │ │ │ │ +1857 /** │ │ │ │ +1858 * @brief Erases an element from an %unordered_multimap. │ │ │ │ +1859 * @param __position An iterator pointing to the element to be erased. │ │ │ │ +1860 * @return An iterator pointing to the element immediately following │ │ │ │ +1861 * @a __position prior to the element being erased. If no such │ │ │ │ +1862 * element exists, end() is returned. │ │ │ │ +1863 * │ │ │ │ +1864 * This function erases an element, pointed to by the given iterator, │ │ │ │ +1865 * from an %unordered_multimap. │ │ │ │ +1866 * Note that this function only erases the element, and that if the │ │ │ │ +1867 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ +1868 * any way. Managing the pointer is the user's responsibility. │ │ │ │ +1869 */ │ │ │ │ +1870 _i_t_e_r_a_t_o_r │ │ │ │ +_1_8_7_1 _e_r_a_s_e(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n) │ │ │ │ +1872 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ +1873 │ │ │ │ +1874 // LWG 2059. │ │ │ │ +1875 _i_t_e_r_a_t_o_r │ │ │ │ +_1_8_7_6 _e_r_a_s_e(_i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n) │ │ │ │ +1877 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ +1878 ///@} │ │ │ │ +1879 │ │ │ │ +1880 /** │ │ │ │ +1881 * @brief Erases elements according to the provided key. │ │ │ │ +1882 * @param __x Key of elements to be erased. │ │ │ │ +1883 * @return The number of elements erased. │ │ │ │ +1884 * │ │ │ │ +1885 * This function erases all the elements located by the given key from │ │ │ │ +1886 * an %unordered_multimap. │ │ │ │ +1887 * Note that this function only erases the element, and that if the │ │ │ │ +1888 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ +1889 * any way. Managing the pointer is the user's responsibility. │ │ │ │ +1890 */ │ │ │ │ +1891 _s_i_z_e___t_y_p_e │ │ │ │ +_1_8_9_2 _e_r_a_s_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ +1893 { return _M_h.erase(__x); } │ │ │ │ +1894 │ │ │ │ +1895 /** │ │ │ │ +1896 * @brief Erases a [__first,__last) range of elements from an │ │ │ │ +1897 * %unordered_multimap. │ │ │ │ +1898 * @param __first Iterator pointing to the start of the range to be │ │ │ │ +1899 * erased. │ │ │ │ +1900 * @param __last Iterator pointing to the end of the range to │ │ │ │ +1901 * be erased. │ │ │ │ +1902 * @return The iterator @a __last. │ │ │ │ +1903 * │ │ │ │ +1904 * This function erases a sequence of elements from an │ │ │ │ +1905 * %unordered_multimap. │ │ │ │ +1906 * Note that this function only erases the elements, and that if │ │ │ │ +1907 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ +1908 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ +1909 */ │ │ │ │ +1910 _i_t_e_r_a_t_o_r │ │ │ │ +_1_9_1_1 _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) │ │ │ │ +1912 { return _M_h.erase(__first, __last); } │ │ │ │ +1913 │ │ │ │ +1914 /** │ │ │ │ +1915 * Erases all elements in an %unordered_multimap. │ │ │ │ +1916 * Note that this function only erases the elements, and that if the │ │ │ │ +1917 * elements themselves are pointers, the pointed-to memory is not touched │ │ │ │ +1918 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ +1919 */ │ │ │ │ +1920 void │ │ │ │ +_1_9_2_1 _c_l_e_a_r() noexcept │ │ │ │ +1922 { _M_h.clear(); } │ │ │ │ +1923 │ │ │ │ +1924 /** │ │ │ │ +1925 * @brief Swaps data with another %unordered_multimap. │ │ │ │ +1926 * @param __x An %unordered_multimap of the same element and allocator │ │ │ │ +1927 * types. │ │ │ │ +1928 * │ │ │ │ +1929 * This exchanges the elements between two %unordered_multimap in │ │ │ │ +1930 * constant time. │ │ │ │ +1931 * Note that the global std::swap() function is specialized such that │ │ │ │ +1932 * std::swap(m1,m2) will feed to this function. │ │ │ │ +1933 */ │ │ │ │ +1934 void │ │ │ │ +_1_9_3_5 _s_w_a_p(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& __x) │ │ │ │ +1936 noexcept( noexcept(_M_h.swap(__x._M_h)) ) │ │ │ │ +1937 { _M_h.swap(__x._M_h); } │ │ │ │ +1938 │ │ │ │ +1939#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +1940 template │ │ │ │ +1941 friend class std::_Hash_merge_helper; │ │ │ │ +1942 │ │ │ │ +1943 template │ │ │ │ +1944 void │ │ │ │ +1945 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_>& _____s_o_u_r_c_e) │ │ │ │ +1946 { │ │ │ │ +1947 if constexpr (_i_s___s_a_m_e___v_<___H_2_,_ ___H_a_s_h_> && _i_s___s_a_m_e___v_<___P_2_,_ ___P_r_e_d_>) │ │ │ │ +1948 if (_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____s_o_u_r_c_e) == this) [[_____u_n_l_i_k_e_l_y____]] │ │ │ │ +1949 return; │ │ │ │ +1950 │ │ │ │ +1951 using ___M_e_r_g_e___h_e_l_p_e_r │ │ │ │ +1952 = ___H_a_s_h___m_e_r_g_e___h_e_l_p_e_r_<_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_,_ ___H_2_,_ ___P_2_>; │ │ │ │ +1953 _M_h._M_merge_multi(_Merge_helper::_S_get_table(_____s_o_u_r_c_e)); │ │ │ │ +1954 } │ │ │ │ +1955 │ │ │ │ +1956 template │ │ │ │ +1957 void │ │ │ │ +1958 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ +1959 { │ │ │ │ +1960 using _Merge_helper │ │ │ │ +1961 = _Hash_merge_helper; │ │ │ │ +1962 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ +1963 } │ │ │ │ +1964 │ │ │ │ +1965 template │ │ │ │ +1966 void │ │ │ │ +1967 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>& __source) │ │ │ │ +1968 { │ │ │ │ +1969 using _Merge_helper │ │ │ │ +1970 = _Hash_merge_helper; │ │ │ │ +1971 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ +1972 } │ │ │ │ +1973 │ │ │ │ +1974 template │ │ │ │ +1975 void │ │ │ │ +1976 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ +1977 { merge(__source); } │ │ │ │ +1978#endif // node_extract │ │ │ │ 1979 │ │ │ │ -1980#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -1981 template>, │ │ │ │ -1983 __not_allocator_like _Pred = equal_to>, │ │ │ │ -1984 __allocator_like _Allocator = allocator>> │ │ │ │ -1985 unordered_multiset(from_range_t, _Rg&&, │ │ │ │ -1986 _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 = {}, │ │ │ │ -1987 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ -1988 _Allocator = _Allocator()) │ │ │ │ -1989 -> unordered_multiset, _Hash, _Pred, │ │ │ │ -_Allocator>; │ │ │ │ -1990 │ │ │ │ -1991 template │ │ │ │ -1993 unordered_multiset(from_range_t, _Rg&&, _Allocator) │ │ │ │ -1994 -> unordered_multiset, │ │ │ │ -1995 hash>, │ │ │ │ -1996 equal_to>, │ │ │ │ -1997 _Allocator>; │ │ │ │ -1998 │ │ │ │ -1999 template │ │ │ │ -2001 unordered_multiset(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, │ │ │ │ -2002 _Allocator) │ │ │ │ -2003 -> unordered_multiset, │ │ │ │ -2004 hash>, │ │ │ │ -2005 equal_to>, │ │ │ │ -2006 _Allocator>; │ │ │ │ -2007 │ │ │ │ -2008 template │ │ │ │ -2011 unordered_multiset(from_range_t, _Rg&&, │ │ │ │ -2012 _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, │ │ │ │ -2013 _Hash, _Allocator) │ │ │ │ -2014 -> unordered_multiset, _Hash, │ │ │ │ -2015 equal_to>, │ │ │ │ -2016 _Allocator>; │ │ │ │ +1980 // observers. │ │ │ │ +1981 │ │ │ │ +1982 /// Returns the hash functor object with which the %unordered_multimap │ │ │ │ +1983 /// was constructed. │ │ │ │ +1984 _h_a_s_h_e_r │ │ │ │ +_1_9_8_5 _h_a_s_h___f_u_n_c_t_i_o_n() const │ │ │ │ +1986 { return _M_h.hash_function(); } │ │ │ │ +1987 │ │ │ │ +1988 /// Returns the key comparison object with which the %unordered_multimap │ │ │ │ +1989 /// was constructed. │ │ │ │ +1990 _k_e_y___e_q_u_a_l │ │ │ │ +_1_9_9_1 _k_e_y___e_q() const │ │ │ │ +1992 { return _M_h.key_eq(); } │ │ │ │ +1993 │ │ │ │ +1994 // lookup. │ │ │ │ +1995 │ │ │ │ +1996 ///@{ │ │ │ │ +1997 /** │ │ │ │ +1998 * @brief Tries to locate an element in an %unordered_multimap. │ │ │ │ +1999 * @param __x Key to be located. │ │ │ │ +2000 * @return Iterator pointing to sought-after element, or end() if not │ │ │ │ +2001 * found. │ │ │ │ +2002 * │ │ │ │ +2003 * This function takes a key and tries to locate the element with which │ │ │ │ +2004 * the key matches. If successful the function returns an iterator │ │ │ │ +2005 * pointing to the sought after element. If unsuccessful it returns the │ │ │ │ +2006 * past-the-end ( @c end() ) iterator. │ │ │ │ +2007 */ │ │ │ │ +2008 _i_t_e_r_a_t_o_r │ │ │ │ +_2_0_0_9 _f_i_n_d(const _k_e_y___t_y_p_e& __x) │ │ │ │ +2010 { return _M_h.find(__x); } │ │ │ │ +2011 │ │ │ │ +2012#if __cplusplus > 201703L │ │ │ │ +2013 template │ │ │ │ +2014 auto │ │ │ │ +_2_0_1_5 _f_i_n_d(const ___K_t& __x) -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ +2016 { return _M_h._M_find_tr(__x); } │ │ │ │ 2017#endif │ │ │ │ -2018#endif │ │ │ │ -2019 │ │ │ │ -2020 template │ │ │ │ -2021 inline void │ │ │ │ -2022 swap(unordered_set<_Value, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -2023 unordered_set<_Value, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -2024 noexcept(noexcept(__x.swap(__y))) │ │ │ │ -2025 { __x.swap(__y); } │ │ │ │ -2026 │ │ │ │ -2027 template │ │ │ │ -2028 inline void │ │ │ │ -2029 swap(unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -2030 unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -2031 noexcept(noexcept(__x.swap(__y))) │ │ │ │ -2032 { __x.swap(__y); } │ │ │ │ -2033 │ │ │ │ -2034 template │ │ │ │ -2035 inline bool │ │ │ │ -2036 operator==(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -2037 const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -2038 { return __x._M_h._M_equal(__y._M_h); } │ │ │ │ -2039 │ │ │ │ -2040#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ -2041 template │ │ │ │ -2042 inline bool │ │ │ │ -2043 operator!=(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -2044 const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -2045 { return !(__x == __y); } │ │ │ │ +2018 │ │ │ │ +2019 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_2_0_2_0 _f_i_n_d(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +2021 { return _M_h.find(__x); } │ │ │ │ +2022 │ │ │ │ +2023#if __cplusplus > 201703L │ │ │ │ +2024 template │ │ │ │ +2025 auto │ │ │ │ +_2_0_2_6 _f_i_n_d(const ___K_t& __x) const -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ +2027 { return _M_h._M_find_tr(__x); } │ │ │ │ +2028#endif │ │ │ │ +2029 ///@} │ │ │ │ +2030 │ │ │ │ +2031 ///@{ │ │ │ │ +2032 /** │ │ │ │ +2033 * @brief Finds the number of elements. │ │ │ │ +2034 * @param __x Key to count. │ │ │ │ +2035 * @return Number of elements with specified key. │ │ │ │ +2036 */ │ │ │ │ +2037 _s_i_z_e___t_y_p_e │ │ │ │ +_2_0_3_8 _c_o_u_n_t(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +2039 { return _M_h.count(__x); } │ │ │ │ +2040 │ │ │ │ +2041#if __cplusplus > 201703L │ │ │ │ +2042 template │ │ │ │ +2043 auto │ │ │ │ +_2_0_4_4 _c_o_u_n_t(const ___K_t& __x) const -> decltype(_M_h._M_count_tr(__x)) │ │ │ │ +2045 { return _M_h._M_count_tr(__x); } │ │ │ │ 2046#endif │ │ │ │ -2047 │ │ │ │ -2048 template │ │ │ │ -2049 inline bool │ │ │ │ -2050 operator==(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -2051 const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -2052 { return __x._M_h._M_equal(__y._M_h); } │ │ │ │ -2053 │ │ │ │ -2054#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ -2055 template │ │ │ │ -2056 inline bool │ │ │ │ -2057 operator!=(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -2058 const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -2059 { return !(__x == __y); } │ │ │ │ -2060#endif │ │ │ │ -2061 │ │ │ │ -2062_GLIBCXX_END_NAMESPACE_CONTAINER │ │ │ │ -2063 │ │ │ │ -2064#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -2065 // Allow std::unordered_set access to internals of compatible sets. │ │ │ │ -2066 template │ │ │ │ -2068 struct _Hash_merge_helper< │ │ │ │ -2069 _GLIBCXX_STD_C::unordered_set<_Val, _Hash1, _Eq1, _Alloc>, _Hash2, _Eq2> │ │ │ │ -2070 { │ │ │ │ -2071 private: │ │ │ │ -2072 template │ │ │ │ -2073 using unordered_set = _GLIBCXX_STD_C::unordered_set<_Tp...>; │ │ │ │ -2074 template │ │ │ │ -2075 using unordered_multiset = _GLIBCXX_STD_C::unordered_multiset<_Tp...>; │ │ │ │ -2076 │ │ │ │ -2077 friend unordered_set<_Val, _Hash1, _Eq1, _Alloc>; │ │ │ │ +2047 ///@} │ │ │ │ +2048 │ │ │ │ +2049#if __cplusplus > 201703L │ │ │ │ +2050 ///@{ │ │ │ │ +2051 /** │ │ │ │ +2052 * @brief Finds whether an element with the given key exists. │ │ │ │ +2053 * @param __x Key of elements to be located. │ │ │ │ +2054 * @return True if there is any element with the specified key. │ │ │ │ +2055 */ │ │ │ │ +2056 bool │ │ │ │ +_2_0_5_7 _c_o_n_t_a_i_n_s(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +2058 { return _M_h.find(__x) != _M_h.end(); } │ │ │ │ +2059 │ │ │ │ +2060 template │ │ │ │ +2061 auto │ │ │ │ +_2_0_6_2 _c_o_n_t_a_i_n_s(const ___K_t& __x) const │ │ │ │ +2063 -> decltype(_M_h._M_find_tr(__x), _v_o_i_d(), true) │ │ │ │ +2064 { return _M_h._M_find_tr(__x) != _M_h.end(); } │ │ │ │ +2065 ///@} │ │ │ │ +2066#endif │ │ │ │ +2067 │ │ │ │ +2068 ///@{ │ │ │ │ +2069 /** │ │ │ │ +2070 * @brief Finds a subsequence matching given key. │ │ │ │ +2071 * @param __x Key to be located. │ │ │ │ +2072 * @return Pair of iterators that possibly points to the subsequence │ │ │ │ +2073 * matching given key. │ │ │ │ +2074 */ │ │ │ │ +2075 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _i_t_e_r_a_t_o_r_> │ │ │ │ +_2_0_7_6 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ +2077 { return _M_h.equal_range(__x); } │ │ │ │ 2078 │ │ │ │ -2079 static auto& │ │ │ │ -2080 _S_get_table(unordered_set<_Val, _Hash2, _Eq2, _Alloc>& __set) │ │ │ │ -2081 { return __set._M_h; } │ │ │ │ -2082 │ │ │ │ -2083 static auto& │ │ │ │ -2084 _S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set) │ │ │ │ -2085 { return __set._M_h; } │ │ │ │ -2086 }; │ │ │ │ -2087 │ │ │ │ -2088 // Allow std::unordered_multiset access to internals of compatible sets. │ │ │ │ -2089 template │ │ │ │ -2091 struct _Hash_merge_helper< │ │ │ │ -2092 _GLIBCXX_STD_C::unordered_multiset<_Val, _Hash1, _Eq1, _Alloc>, │ │ │ │ -2093 _Hash2, _Eq2> │ │ │ │ -2094 { │ │ │ │ -2095 private: │ │ │ │ -2096 template │ │ │ │ -2097 using unordered_set = _GLIBCXX_STD_C::unordered_set<_Tp...>; │ │ │ │ -2098 template │ │ │ │ -2099 using unordered_multiset = _GLIBCXX_STD_C::unordered_multiset<_Tp...>; │ │ │ │ -2100 │ │ │ │ -2101 friend unordered_multiset<_Val, _Hash1, _Eq1, _Alloc>; │ │ │ │ -2102 │ │ │ │ -2103 static auto& │ │ │ │ -2104 _S_get_table(unordered_set<_Val, _Hash2, _Eq2, _Alloc>& __set) │ │ │ │ -2105 { return __set._M_h; } │ │ │ │ +2079#if __cplusplus > 201703L │ │ │ │ +2080 template │ │ │ │ +2081 auto │ │ │ │ +_2_0_8_2 _e_q_u_a_l___r_a_n_g_e(const ___K_t& __x) │ │ │ │ +2083 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ +2084 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ +2085#endif │ │ │ │ +2086 │ │ │ │ +2087 _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_0_8_8 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +2089 { return _M_h.equal_range(__x); } │ │ │ │ +2090 │ │ │ │ +2091#if __cplusplus > 201703L │ │ │ │ +2092 template │ │ │ │ +2093 auto │ │ │ │ +_2_0_9_4 _e_q_u_a_l___r_a_n_g_e(const ___K_t& __x) const │ │ │ │ +2095 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ +2096 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ +2097#endif │ │ │ │ +2098 ///@} │ │ │ │ +2099 │ │ │ │ +2100 // bucket interface. │ │ │ │ +2101 │ │ │ │ +2102 /// Returns the number of buckets of the %unordered_multimap. │ │ │ │ +2103 _s_i_z_e___t_y_p_e │ │ │ │ +_2_1_0_4 _b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ +2105 { return _M_h.bucket_count(); } │ │ │ │ 2106 │ │ │ │ -2107 static auto& │ │ │ │ -2108 _S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set) │ │ │ │ -2109 { return __set._M_h; } │ │ │ │ -2110 }; │ │ │ │ -2111#endif // node_extract │ │ │ │ -2112 │ │ │ │ -2113_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -2114} // namespace std │ │ │ │ -2115 │ │ │ │ -2116#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 │ │ │ │ +2107 /// Returns the maximum number of buckets of the %unordered_multimap. │ │ │ │ +2108 _s_i_z_e___t_y_p_e │ │ │ │ +_2_1_0_9 _m_a_x___b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ +2110 { return _M_h.max_bucket_count(); } │ │ │ │ +2111 │ │ │ │ +2112 /* │ │ │ │ +2113 * @brief Returns the number of elements in a given bucket. │ │ │ │ +2114 * @param __n A bucket index. │ │ │ │ +2115 * @return The number of elements in the bucket. │ │ │ │ +2116 */ │ │ │ │ +2117 _s_i_z_e___t_y_p_e │ │ │ │ +2118 bucket_size(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +2119 { return _M_h.bucket_size(__n); } │ │ │ │ +2120 │ │ │ │ +2121 /* │ │ │ │ +2122 * @brief Returns the bucket index of a given element. │ │ │ │ +2123 * @param __key A key instance. │ │ │ │ +2124 * @return The key bucket index. │ │ │ │ +2125 */ │ │ │ │ +2126 _s_i_z_e___t_y_p_e │ │ │ │ +2127 bucket(const _k_e_y___t_y_p_e& __key) const │ │ │ │ +2128 { return _M_h.bucket(__key); } │ │ │ │ +2129 │ │ │ │ +2130 /** │ │ │ │ +2131 * @brief Returns a read/write iterator pointing to the first bucket │ │ │ │ +2132 * element. │ │ │ │ +2133 * @param __n The bucket index. │ │ │ │ +2134 * @return A read/write local iterator. │ │ │ │ +2135 */ │ │ │ │ +2136 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_2_1_3_7 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) │ │ │ │ +2138 { return _M_h.begin(__n); } │ │ │ │ +2139 │ │ │ │ +2140 ///@{ │ │ │ │ +2141 /** │ │ │ │ +2142 * @brief Returns a read-only (constant) iterator pointing to the first │ │ │ │ +2143 * bucket element. │ │ │ │ +2144 * @param __n The bucket index. │ │ │ │ +2145 * @return A read-only local iterator. │ │ │ │ +2146 */ │ │ │ │ +2147 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_2_1_4_8 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +2149 { return _M_h.begin(__n); } │ │ │ │ +2150 │ │ │ │ +2151 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_2_1_5_2 _c_b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +2153 { return _M_h.cbegin(__n); } │ │ │ │ +2154 ///@} │ │ │ │ +2155 │ │ │ │ +2156 /** │ │ │ │ +2157 * @brief Returns a read/write iterator pointing to one past the last │ │ │ │ +2158 * bucket elements. │ │ │ │ +2159 * @param __n The bucket index. │ │ │ │ +2160 * @return A read/write local iterator. │ │ │ │ +2161 */ │ │ │ │ +2162 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_2_1_6_3 _e_n_d(_s_i_z_e___t_y_p_e __n) │ │ │ │ +2164 { return _M_h.end(__n); } │ │ │ │ +2165 │ │ │ │ +2166 ///@{ │ │ │ │ +2167 /** │ │ │ │ +2168 * @brief Returns a read-only (constant) iterator pointing to one past │ │ │ │ +2169 * the last bucket elements. │ │ │ │ +2170 * @param __n The bucket index. │ │ │ │ +2171 * @return A read-only local iterator. │ │ │ │ +2172 */ │ │ │ │ +2173 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_2_1_7_4 _e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +2175 { return _M_h.end(__n); } │ │ │ │ +2176 │ │ │ │ +2177 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_2_1_7_8 _c_e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +2179 { return _M_h.cend(__n); } │ │ │ │ +2180 ///@} │ │ │ │ +2181 │ │ │ │ +2182 // hash policy. │ │ │ │ +2183 │ │ │ │ +2184 /// Returns the average number of elements per bucket. │ │ │ │ +2185 float │ │ │ │ +_2_1_8_6 _l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ +2187 { return _M_h.load_factor(); } │ │ │ │ +2188 │ │ │ │ +2189 /// Returns a positive number that the %unordered_multimap tries to keep │ │ │ │ +2190 /// the load factor less than or equal to. │ │ │ │ +2191 float │ │ │ │ +_2_1_9_2 _m_a_x___l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ +2193 { return _M_h.max_load_factor(); } │ │ │ │ +2194 │ │ │ │ +2195 /** │ │ │ │ +2196 * @brief Change the %unordered_multimap maximum load factor. │ │ │ │ +2197 * @param __z The new maximum load factor. │ │ │ │ +2198 */ │ │ │ │ +2199 void │ │ │ │ +_2_2_0_0 _m_a_x___l_o_a_d___f_a_c_t_o_r(float _____z) │ │ │ │ +2201 { _M_h.max_load_factor(_____z); } │ │ │ │ +2202 │ │ │ │ +2203 /** │ │ │ │ +2204 * @brief May rehash the %unordered_multimap. │ │ │ │ +2205 * @param __n The new number of buckets. │ │ │ │ +2206 * │ │ │ │ +2207 * Rehash will occur only if the new number of buckets respect the │ │ │ │ +2208 * %unordered_multimap maximum load factor. │ │ │ │ +2209 */ │ │ │ │ +2210 void │ │ │ │ +_2_2_1_1 _r_e_h_a_s_h(_s_i_z_e___t_y_p_e __n) │ │ │ │ +2212 { _M_h.rehash(__n); } │ │ │ │ +2213 │ │ │ │ +2214 /** │ │ │ │ +2215 * @brief Prepare the %unordered_multimap for a specified number of │ │ │ │ +2216 * elements. │ │ │ │ +2217 * @param __n Number of elements required. │ │ │ │ +2218 * │ │ │ │ +2219 * Same as rehash(ceil(n / max_load_factor())). │ │ │ │ +2220 */ │ │ │ │ +2221 void │ │ │ │ +_2_2_2_2 _r_e_s_e_r_v_e(_s_i_z_e___t_y_p_e __n) │ │ │ │ +2223 { _M_h.reserve(__n); } │ │ │ │ +2224 │ │ │ │ +2225 template │ │ │ │ +2227 friend bool │ │ │ │ +2228 operator==(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p<___K_e_y_1, ___T_p_1, │ │ │ │ +2229 ___H_a_s_h_1, ___P_r_e_d_1, _Alloc1>&, │ │ │ │ +2230 const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p<___K_e_y_1, ___T_p_1, │ │ │ │ +2231 ___H_a_s_h_1, ___P_r_e_d_1, _Alloc1>&); │ │ │ │ +2232 }; │ │ │ │ +2233 │ │ │ │ +2234#if __cpp_deduction_guides >= 201606 │ │ │ │ +2235 │ │ │ │ +2236 template>, │ │ │ │ +2238 typename _Pred = equal_to<__iter_key_t<_InputIterator>>, │ │ │ │ +2239 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, │ │ │ │ +2240 typename = _RequireInputIter<_InputIterator>, │ │ │ │ +2241 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ +2242 typename = _RequireNotAllocator<_Pred>, │ │ │ │ +2243 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2244 unordered_multimap(_InputIterator, _InputIterator, │ │ │ │ +2245 _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 = {}, │ │ │ │ +2246 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ +2247 _Allocator = _Allocator()) │ │ │ │ +2248 -> unordered_multimap<__iter_key_t<_InputIterator>, │ │ │ │ +2249 __iter_val_t<_InputIterator>, _Hash, _Pred, │ │ │ │ +2250 _Allocator>; │ │ │ │ +2251 │ │ │ │ +2252 template, │ │ │ │ +2253 typename _Pred = equal_to<_Key>, │ │ │ │ +2254 typename _Allocator = allocator>, │ │ │ │ +2255 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ +2256 typename = _RequireNotAllocator<_Pred>, │ │ │ │ +2257 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2258 unordered_multimap(initializer_list>, │ │ │ │ +2259 _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 = {}, │ │ │ │ +2260 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ +2261 _Allocator = _Allocator()) │ │ │ │ +2262 -> unordered_multimap<_Key, _Tp, _Hash, _Pred, _Allocator>; │ │ │ │ +2263 │ │ │ │ +2264 template, │ │ │ │ +2266 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2267 unordered_multimap(_InputIterator, _InputIterator, │ │ │ │ +2268 _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) │ │ │ │ +2269 -> unordered_multimap<__iter_key_t<_InputIterator>, │ │ │ │ +2270 __iter_val_t<_InputIterator>, │ │ │ │ +2271 hash<__iter_key_t<_InputIterator>>, │ │ │ │ +2272 equal_to<__iter_key_t<_InputIterator>>, _Allocator>; │ │ │ │ +2273 │ │ │ │ +2274 template, │ │ │ │ +2276 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2277 unordered_multimap(_InputIterator, _InputIterator, _Allocator) │ │ │ │ +2278 -> unordered_multimap<__iter_key_t<_InputIterator>, │ │ │ │ +2279 __iter_val_t<_InputIterator>, │ │ │ │ +2280 hash<__iter_key_t<_InputIterator>>, │ │ │ │ +2281 equal_to<__iter_key_t<_InputIterator>>, _Allocator>; │ │ │ │ +2282 │ │ │ │ +2283 template, │ │ │ │ +2285 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ +2286 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2287 unordered_multimap(_InputIterator, _InputIterator, │ │ │ │ +2288 _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, │ │ │ │ +2289 _Allocator) │ │ │ │ +2290 -> unordered_multimap<__iter_key_t<_InputIterator>, │ │ │ │ +2291 __iter_val_t<_InputIterator>, _Hash, │ │ │ │ +2292 equal_to<__iter_key_t<_InputIterator>>, _Allocator>; │ │ │ │ +2293 │ │ │ │ +2294 template> │ │ │ │ +2296 unordered_multimap(initializer_list>, │ │ │ │ +2297 _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, │ │ │ │ +2298 _Allocator) │ │ │ │ +2299 -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; │ │ │ │ +2300 │ │ │ │ +2301 template> │ │ │ │ +2303 unordered_multimap(initializer_list>, _Allocator) │ │ │ │ +2304 -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; │ │ │ │ +2305 │ │ │ │ +2306 template, │ │ │ │ +2308 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2309 unordered_multimap(initializer_list>, │ │ │ │ +2310 _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, │ │ │ │ +2311 _Hash, _Allocator) │ │ │ │ +2312 -> unordered_multimap<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>; │ │ │ │ +2313 │ │ │ │ +2314#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +2315 template>, │ │ │ │ +2317 __not_allocator_like _Pred = equal_to<__detail::__range_key_type<_Rg>>, │ │ │ │ +2318 __allocator_like _Allocator = │ │ │ │ +2319 allocator<__detail::__range_to_alloc_type<_Rg>>> │ │ │ │ +2320 unordered_multimap(from_range_t, _Rg&&, │ │ │ │ +2321 _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 = {}, │ │ │ │ +2322 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ +2323 _Allocator = _Allocator()) │ │ │ │ +2324 -> unordered_multimap<__detail::__range_key_type<_Rg>, │ │ │ │ +2325 __detail::__range_mapped_type<_Rg>, │ │ │ │ +2326 _Hash, _Pred, _Allocator>; │ │ │ │ +2327 │ │ │ │ +2328 template │ │ │ │ +2330 unordered_multimap(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, │ │ │ │ +2331 _Allocator) │ │ │ │ +2332 -> unordered_multimap<__detail::__range_key_type<_Rg>, │ │ │ │ +2333 __detail::__range_mapped_type<_Rg>, │ │ │ │ +2334 hash<__detail::__range_key_type<_Rg>>, │ │ │ │ +2335 equal_to<__detail::__range_key_type<_Rg>>, │ │ │ │ +2336 _Allocator>; │ │ │ │ +2337 │ │ │ │ +2338 template │ │ │ │ +2340 unordered_multimap(from_range_t, _Rg&&, _Allocator) │ │ │ │ +2341 -> unordered_multimap<__detail::__range_key_type<_Rg>, │ │ │ │ +2342 __detail::__range_mapped_type<_Rg>, │ │ │ │ +2343 hash<__detail::__range_key_type<_Rg>>, │ │ │ │ +2344 equal_to<__detail::__range_key_type<_Rg>>, │ │ │ │ +2345 _Allocator>; │ │ │ │ +2346 │ │ │ │ +2347 template │ │ │ │ +2350 unordered_multimap(from_range_t, _Rg&&, │ │ │ │ +2351 _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, │ │ │ │ +2352 _Hash, _Allocator) │ │ │ │ +2353 -> unordered_multimap<__detail::__range_key_type<_Rg>, │ │ │ │ +2354 __detail::__range_mapped_type<_Rg>, │ │ │ │ +2355 _Hash, equal_to<__detail::__range_key_type<_Rg>>, │ │ │ │ +2356 _Allocator>; │ │ │ │ +2357#endif │ │ │ │ +2358#endif │ │ │ │ +2359 │ │ │ │ +2360 template │ │ │ │ +2361 inline void │ │ │ │ +2362 swap(unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ +2363 unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ +2364 noexcept(noexcept(__x.swap(__y))) │ │ │ │ +2365 { __x.swap(__y); } │ │ │ │ +2366 │ │ │ │ +2367 template │ │ │ │ +2368 inline void │ │ │ │ +2369 swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ +2370 unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ +2371 noexcept(noexcept(__x.swap(__y))) │ │ │ │ +2372 { __x.swap(__y); } │ │ │ │ +2373 │ │ │ │ +2374 template │ │ │ │ +2375 inline bool │ │ │ │ +2376 operator==(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ +2377 const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ +2378 { return __x._M_h._M_equal(__y._M_h); } │ │ │ │ +2379 │ │ │ │ +2380#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ +2381 template │ │ │ │ +2382 inline bool │ │ │ │ +2383 operator!=(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ +2384 const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ +2385 { return !(__x == __y); } │ │ │ │ +2386#endif │ │ │ │ +2387 │ │ │ │ +2388 template │ │ │ │ +2389 inline bool │ │ │ │ +2390 operator==(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ +2391 const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ +2392 { return __x._M_h._M_equal(__y._M_h); } │ │ │ │ +2393 │ │ │ │ +2394#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ +2395 template │ │ │ │ +2396 inline bool │ │ │ │ +2397 operator!=(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ +2398 const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ +2399 { return !(__x == __y); } │ │ │ │ +2400#endif │ │ │ │ +2401 │ │ │ │ +2402_GLIBCXX_END_NAMESPACE_CONTAINER │ │ │ │ +2403 │ │ │ │ +2404#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +2405 // Allow std::unordered_map access to internals of compatible maps. │ │ │ │ +2406 template │ │ │ │ +2408 struct _Hash_merge_helper< │ │ │ │ +2409 _GLIBCXX_STD_C::unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>, │ │ │ │ +2410 _Hash2, _Eq2> │ │ │ │ +2411 { │ │ │ │ +2412 private: │ │ │ │ +2413 template │ │ │ │ +2414 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>; │ │ │ │ +2415 template │ │ │ │ +2416 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>; │ │ │ │ +2417 │ │ │ │ +2418 friend unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>; │ │ │ │ +2419 │ │ │ │ +2420 static auto& │ │ │ │ +2421 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ +2422 { return __map._M_h; } │ │ │ │ +2423 │ │ │ │ +2424 static auto& │ │ │ │ +2425 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ +2426 { return __map._M_h; } │ │ │ │ +2427 }; │ │ │ │ +2428 │ │ │ │ +2429 // Allow std::unordered_multimap access to internals of compatible maps. │ │ │ │ +2430 template │ │ │ │ +2432 struct _Hash_merge_helper< │ │ │ │ +2433 _GLIBCXX_STD_C::unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>, │ │ │ │ +2434 _Hash2, _Eq2> │ │ │ │ +2435 { │ │ │ │ +2436 private: │ │ │ │ +2437 template │ │ │ │ +2438 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>; │ │ │ │ +2439 template │ │ │ │ +2440 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>; │ │ │ │ +2441 │ │ │ │ +2442 friend unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>; │ │ │ │ +2443 │ │ │ │ +2444 static auto& │ │ │ │ +2445 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ +2446 { return __map._M_h; } │ │ │ │ +2447 │ │ │ │ +2448 static auto& │ │ │ │ +2449 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ +2450 { return __map._M_h; } │ │ │ │ +2451 }; │ │ │ │ +2452#endif // node_extract │ │ │ │ +2453 │ │ │ │ +2454_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +2455} // namespace std │ │ │ │ +2456 │ │ │ │ +2457#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_:_:_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_:_:_____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_:_:_____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_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_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 │ │ │ │ +_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) in ... │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_0_7_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_f_i_n_d │ │ │ │ -auto find(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__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_1_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 │ │ │ │ -iterator begin() noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_3_4_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_f_i_n_d │ │ │ │ -auto find(const _Kt &__x) -> decltype(_M_h._M_find_tr(__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_0_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_4_5_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ -_Hashtable::difference_type difference_type │ │ │ │ +of each key value) tha... │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_6_7 │ │ │ │ +_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_1_8_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_r_e_f_e_r_e_n_c_e │ │ │ │ +_Hashtable::reference reference │ │ │ │ Iterator-related typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_0_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_4_8_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_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_8_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(iterator __position) │ │ │ │ +Erases an element from an unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_7_6 │ │ │ │ +_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_6_6_2 │ │ │ │ +_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_8_9_2 │ │ │ │ +_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_0_7_6 │ │ │ │ +_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_0_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_t_e_r_a_t_o_r │ │ │ │ +_Hashtable::iterator iterator │ │ │ │ Iterator-related typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_0_9_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 │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_8_9 │ │ │ │ +_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_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 │ │ │ │ +iterator begin() noexcept │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_3_1 │ │ │ │ +_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_4_0 │ │ │ │ +_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_:_1_9_8_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 │ │ │ │ +iterator insert(const_iterator __hint, node_type &&__nh) │ │ │ │ +Re-insert an extracted node. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_5_2 │ │ │ │ +_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_7_7_5 │ │ │ │ +_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_:_1_9_9_1 │ │ │ │ +_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_3_8 │ │ │ │ +_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_2_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_m_a_p_p_e_d___t_y_p_e │ │ │ │ +_Hashtable::mapped_type mapped_type │ │ │ │ +Public typedefs. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_7_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_f_i_n_d │ │ │ │ +auto find(const _Kt &__x) -> decltype(_M_h._M_find_tr(__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_1_5 │ │ │ │ +_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_1_6_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 │ │ │ │ +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_7_9_0 │ │ │ │ +_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_5_9_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(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_1_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ +_Hashtable::value_type value_type │ │ │ │ +Public typedefs. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_7_6 │ │ │ │ +_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_6_8_9 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_x_t_r_a_c_t │ │ │ │ +node_type extract(const key_type &__key) │ │ │ │ +Extract a node. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_4_2 │ │ │ │ +_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___s_e_t_._h_:_1_7_4_4 │ │ │ │ -_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_8_8_6 │ │ │ │ -_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 │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_5_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_o_n_s_t___r_e_f_e_r_e_n_c_e │ │ │ │ +_Hashtable::const_reference const_reference │ │ │ │ +Iterator-related typedefs. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_8_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(node_type &&__nh) │ │ │ │ +Re-insert an extracted node. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_4_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_8_7_1 │ │ │ │ +_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_5_3 │ │ │ │ +_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-only (constant) iterator pointing to the first bucket element. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_8_2_5 │ │ │ │ -_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_7_9_1 │ │ │ │ -_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_0_7 │ │ │ │ -_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 │ │ │ │ +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_3_7 │ │ │ │ +_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_multiset tries to keep the load │ │ │ │ +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___s_e_t_._h_:_1_8_6_7 │ │ │ │ -_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_2_4 │ │ │ │ -_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_3_8_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_1_9_2 │ │ │ │ +_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_3_4 │ │ │ │ +_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_3_0 │ │ │ │ +_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_:_:_h_a_s_h_e_r │ │ │ │ +_Hashtable::hasher hasher │ │ │ │ +Public typedefs. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_7_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ _Hashtable::local_iterator local_iterator │ │ │ │ Iterator-related typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_0_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_e_x_t_r_a_c_t │ │ │ │ -node_type extract(const key_type &__key) │ │ │ │ -Extract a node. │ │ │ │ -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_:_:_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_8_2_9 │ │ │ │ -_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_3_9_4 │ │ │ │ -_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 │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_9_1 │ │ │ │ +_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_2_2 │ │ │ │ +_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_0_8_8 │ │ │ │ +_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_multiset from a range. │ │ │ │ -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_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::const_iterator const_iterator │ │ │ │ -Iterator-related typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_0_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_1_9_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ -_Hashtable::allocator_type allocator_type │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_0_9_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_e_n_d │ │ │ │ +Builds an unordered_multimap from a range. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_3_5 │ │ │ │ +_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_2_1 │ │ │ │ +_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_0_9 │ │ │ │ +_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_4_9_0 │ │ │ │ +_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 │ │ │ │ +auto count(const _Kt &__x) const -> decltype(_M_h._M_count_tr(__x)) │ │ │ │ +Finds the number of elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_4_4 │ │ │ │ +_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_1_1 │ │ │ │ +_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___s_e_t_._h_:_1_8_4_9 │ │ │ │ -_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_6_9_4 │ │ │ │ -_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___t_y_p_e │ │ │ │ -_Hashtable::value_type value_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_1_7_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_p_o_i_n_t_e_r │ │ │ │ +_Hashtable::pointer pointer │ │ │ │ +Iterator-related typedefs. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_8_5 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ +_Hashtable::allocator_type allocator_type │ │ │ │ Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_0_8_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_8_6_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()=default │ │ │ │ -Default constructor. │ │ │ │ -_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, node_type &&__nh) │ │ │ │ -Re-insert an extracted node. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_5_3_3 │ │ │ │ -_s_t_d_:_:_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 │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_8_0 │ │ │ │ +_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_1_4_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_f_i_n_d │ │ │ │ +auto find(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__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_2_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_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 │ │ │ │ +Iterator-related typedefs. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_9_2 │ │ │ │ +_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_5_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ +_Hashtable::difference_type difference_type │ │ │ │ +Iterator-related typedefs. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_9_4 │ │ │ │ +_s_t_d_:_:_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 │ │ │ │ _Hashtable::size_type size_type │ │ │ │ Iterator-related typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_0_4 │ │ │ │ -_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 │ │ │ │ -auto equal_range(const _Kt &__x) -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -Finds a subsequence matching given key. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_7_6_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_k_e_y___t_y_p_e │ │ │ │ -_Hashtable::key_type key_type │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_0_8_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_6_7_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(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_1_7_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 │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_9_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ +_Hashtable::const_pointer const_pointer │ │ │ │ +Iterator-related typedefs. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_8_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 │ │ │ │ +__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_3_9 │ │ │ │ +_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___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_:_:_c_o_u_n_t │ │ │ │ -auto count(const _Kt &__x) const -> decltype(_M_h._M_count_tr(__x)) │ │ │ │ -Finds the number of elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_7_3_1 │ │ │ │ -_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_7_2_5 │ │ │ │ -_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_5_5_3 │ │ │ │ -_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_:_:_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_:_2_0_6_2 │ │ │ │ +_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_3_5 │ │ │ │ +_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_1_1 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_Hashtable::const_iterator const_iterator │ │ │ │ Iterator-related typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_0_9_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_3_5_9 │ │ │ │ -_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_1_6 │ │ │ │ -_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_2_0 │ │ │ │ -_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_3_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(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_5_9_6 │ │ │ │ -_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 │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_9_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 │ │ │ │ +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_0_2 │ │ │ │ +_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_6_6_6 │ │ │ │ +_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_2_1 │ │ │ │ +_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_1_5_2 │ │ │ │ +_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_1_1 │ │ │ │ +_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___s_e_t_._h_:_1_3_7_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 │ │ │ │ -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_4_7_2 │ │ │ │ -_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_7_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___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_6_7_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ -_Hashtable::const_pointer const_pointer │ │ │ │ -Iterator-related typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_0_9_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_7_6_3 │ │ │ │ -_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_3_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(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_2_8 │ │ │ │ -_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_3_6_3 │ │ │ │ -_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_8_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_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_4_5_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_c_o_n_s_t___r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::const_reference const_reference │ │ │ │ -Iterator-related typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_0_9_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_5_5_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_c_e_n_d │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_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_y_p_e │ │ │ │ +_Hashtable::key_type key_type │ │ │ │ +Public typedefs. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_7_5 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_x_t_r_a_c_t │ │ │ │ +node_type extract(const_iterator __pos) │ │ │ │ +Extract a node. │ │ │ │ +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_:_:_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_8_5_3 │ │ │ │ -_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_7_9_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(node_type &&__nh) │ │ │ │ -Re-insert an extracted node. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_5_2_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_h_a_s_h_e_r │ │ │ │ -_Hashtable::hasher hasher │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_0_8_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_2_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_0_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_s_i_z_e │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_1_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_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_7_6_4 │ │ │ │ +_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_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_3_2_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::iterator iterator │ │ │ │ -Iterator-related typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_0_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_8_4_5 │ │ │ │ -_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 │ │ │ │ -auto equal_range(const _Kt &__x) const -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -Finds a subsequence matching given key. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_7_8_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_e_x_t_r_a_c_t │ │ │ │ -node_type extract(const_iterator __pos) │ │ │ │ -Extract a node. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_5_1_5 │ │ │ │ -_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_3_4 │ │ │ │ -_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_8_3_3 │ │ │ │ -_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 │ │ │ │ +Returns the size of the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_1_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(const unordered_multimap &)=default │ │ │ │ Copy constructor. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_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 │ │ │ │ -Iterator-related typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_0_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_5_7_6 │ │ │ │ -_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_0_6 │ │ │ │ -_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_1_7 │ │ │ │ -_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_u_a_l │ │ │ │ +_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_1_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, 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_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 │ │ │ │ +auto equal_range(const _Kt &__x) -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ +Finds a subsequence matching given key. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_8_2 │ │ │ │ +_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_u_a_l │ │ │ │ _Hashtable::key_equal key_equal │ │ │ │ Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_0_9_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 │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_7_9 │ │ │ │ +_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_0_4 │ │ │ │ +_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_multiset maximum load factor. │ │ │ │ -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___s_e_t │ │ │ │ +Change the unordered_multimap maximum load factor. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_2_0_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 │ │ │ │ +auto equal_range(const _Kt &__x) const -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ +Finds a subsequence matching given key. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_9_4 │ │ │ │ +_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) 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_7_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_i_t_e_r_a_t_o_r │ │ │ │ +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_5_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_i_t_e_r_a_t_o_r │ │ │ │ _Hashtable::iterator iterator │ │ │ │ Iterator-related typedefs. │ │ │ │ -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 │ │ │ │ +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_set maximum load factor. │ │ │ │ -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_:_:_r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::reference reference │ │ │ │ +Change the unordered_map maximum load factor. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_8_2 │ │ │ │ +_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_0_7_8 │ │ │ │ +_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_:_9_9_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_x_t_r_a_c_t │ │ │ │ +node_type extract(const key_type &__key) │ │ │ │ +Extract a node. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_8_6 │ │ │ │ +_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_7_0 │ │ │ │ +_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_5_1 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_f_i_n_d │ │ │ │ +auto find(const _Kt &__x) -> decltype(_M_h._M_find_tr(__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_5_2 │ │ │ │ +_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_4_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ +_Hashtable::const_pointer const_pointer │ │ │ │ Iterator-related typedefs. │ │ │ │ -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_:_8_9_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ -_Hashtable::value_type value_type │ │ │ │ -Public typedefs. │ │ │ │ -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_0_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_f_i_n_d │ │ │ │ -auto find(const _Kt &__k) -> decltype(_M_h._M_find_tr(__k)) │ │ │ │ -Tries to locate an element in an unordered_set. │ │ │ │ -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_:_:_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_4_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_k_e_y___t_y_p_e │ │ │ │ -_Hashtable::key_type key_type │ │ │ │ -Public typedefs. │ │ │ │ -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_6_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_:_8_7_0 │ │ │ │ -_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 │ │ │ │ -auto equal_range(const _Kt &__k) -> decltype(_M_h._M_equal_range_tr(__k)) │ │ │ │ +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_:_:_f_i_n_d │ │ │ │ +auto find(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__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_6_3 │ │ │ │ +_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_:_6_8_1 │ │ │ │ +_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_5_5 │ │ │ │ +_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___s_e_t_._h_:_8_1_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_c_b_e_g_i_n │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_0_1_9 │ │ │ │ +_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_0_7_4 │ │ │ │ +_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_5_1 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_t_r_y___e_m_p_l_a_c_e │ │ │ │ +iterator try_emplace(const_iterator __hint, const key_type &__k, _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_:_5_6_9 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_x_t_r_a_c_t │ │ │ │ +node_type extract(const_iterator __pos) │ │ │ │ +Extract a node. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_7_8 │ │ │ │ +_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_0_5 │ │ │ │ +_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_0_4 │ │ │ │ +_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___s_e_t_._h_:_8_7_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_c_o_u_n_t │ │ │ │ -auto count(const _Kt &__k) const -> decltype(_M_h._M_count_tr(__k)) │ │ │ │ -Finds the number of elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_7_6_9 │ │ │ │ -_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_7_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_h_a_s_h_e_r │ │ │ │ -_Hashtable::hasher hasher │ │ │ │ -Public typedefs. │ │ │ │ -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_:_:_l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::local_iterator local_iterator │ │ │ │ -Iterator-related typedefs. │ │ │ │ -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_:_:_i_n_s_e_r_t │ │ │ │ -insert_return_type insert(node_type &&__nh) │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_3_4 │ │ │ │ +_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_3_1 │ │ │ │ +_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, node_type &&__nh) │ │ │ │ Re-insert an extracted node. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_5_7_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_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_:_4_9_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_r_e_f_e_r_e_n_c_e │ │ │ │ +_Hashtable::reference reference │ │ │ │ Iterator-related typedefs. │ │ │ │ -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_0_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_e_m_p_t_y │ │ │ │ +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_4_4 │ │ │ │ +_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_0_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ +_Hashtable::allocator_type allocator_type │ │ │ │ +Public typedefs. │ │ │ │ +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_:_9_7_9 │ │ │ │ +_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_set is empty. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_3_5_2 │ │ │ │ -_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_3_7 │ │ │ │ -_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_:_5_9_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(unordered_set &&)=default │ │ │ │ +Returns true if the unordered_map is empty. │ │ │ │ +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_:_:_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_3_3 │ │ │ │ +_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_5_7 │ │ │ │ +_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___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 │ │ │ │ +_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___s_e_t_._h_:_8_9_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(), │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_5_6 │ │ │ │ +_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 │ │ │ │ +auto equal_range(const _Kt &__x) -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ +Finds a subsequence matching given key. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_0_2_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___s_e_t_._h_:_7_8_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ -_Hashtable::const_pointer const_pointer │ │ │ │ -Iterator-related typedefs. │ │ │ │ -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_1_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_5_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_0_3 │ │ │ │ -_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_7_8 │ │ │ │ -_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_0_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_2_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) │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_0_0_3 │ │ │ │ +_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_6_8 │ │ │ │ +_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_0_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()=default │ │ │ │ +Default constructor. │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_m_a_p_p_e_d___t_y_p_e │ │ │ │ +_Hashtable::mapped_type mapped_type │ │ │ │ +Public typedefs. │ │ │ │ +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_3_0 │ │ │ │ +_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_4_1 │ │ │ │ +_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___s_e_t_._h_:_8_8_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_k_e_y___e_q_u_a_l │ │ │ │ -_Hashtable::key_equal key_equal │ │ │ │ -Public typedefs. │ │ │ │ -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 │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_1_6_0 │ │ │ │ +_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_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_3_5_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, node_type &&__nh) │ │ │ │ -Re-insert an extracted node. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_5_7_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::const_iterator const_iterator │ │ │ │ +Returns the size of the unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_3_6_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, 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_1_7 │ │ │ │ +_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_6_1 │ │ │ │ +_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_1_1 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_h_a_s_h_e_r │ │ │ │ +_Hashtable::hasher hasher │ │ │ │ +Public typedefs. │ │ │ │ +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_:_:_i_n_s_e_r_t___o_r___a_s_s_i_g_n │ │ │ │ +pair< iterator, bool > insert_or_assign(const key_type &__k, _Obj &&__obj) │ │ │ │ +Attempts to insert a std::pair into the unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_7_2_5 │ │ │ │ +_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_6_1 │ │ │ │ +_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_5_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_t_r_y___e_m_p_l_a_c_e │ │ │ │ +pair< iterator, bool > try_emplace(const key_type &__k, _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_:_5_2_5 │ │ │ │ +_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_:_3_8_7 │ │ │ │ +_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_2_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_o_n_s_t___r_e_f_e_r_e_n_c_e │ │ │ │ +_Hashtable::const_reference const_reference │ │ │ │ Iterator-related typedefs. │ │ │ │ -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_:_:_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_3_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_k_e_y___e_q_u_a_l │ │ │ │ +_Hashtable::key_equal key_equal │ │ │ │ +Public typedefs. │ │ │ │ +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_:_:_l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_Hashtable::local_iterator local_iterator │ │ │ │ Iterator-related typedefs. │ │ │ │ -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_:_:_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_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_1_6 │ │ │ │ +_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_1_3 │ │ │ │ +_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_4_5 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_p_o_i_n_t_e_r │ │ │ │ +_Hashtable::pointer pointer │ │ │ │ Iterator-related typedefs. │ │ │ │ -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 │ │ │ │ +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_:_:_i_n_s_e_r_t___o_r___a_s_s_i_g_n │ │ │ │ +iterator insert_or_assign(const_iterator __hint, const key_type &__k, _Obj │ │ │ │ +&&__obj) │ │ │ │ +Attempts to insert a std::pair into the unordered_map. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_7_7_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(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_y_p_e │ │ │ │ +_Hashtable::key_type key_type │ │ │ │ +Public typedefs. │ │ │ │ +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_0_8_6 │ │ │ │ +_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_7_8 │ │ │ │ +_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_set was constructed. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_7_0_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) │ │ │ │ +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_2_2 │ │ │ │ +_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 │ │ │ │ +auto equal_range(const _Kt &__x) const -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ Finds a subsequence matching given key. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_8_0_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_f_i_n_d │ │ │ │ -auto find(const _Kt &__k) const -> decltype(_M_h._M_find_tr(__k)) │ │ │ │ -Tries to locate an element in an unordered_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_7_4_6 │ │ │ │ -_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_5_6 │ │ │ │ -_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_1_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ -_Hashtable::allocator_type allocator_type │ │ │ │ -Public typedefs. │ │ │ │ -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_0_7 │ │ │ │ -_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_:_3_9_1 │ │ │ │ -_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_:_3_8_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_e_x_t_r_a_c_t │ │ │ │ -node_type extract(const key_type &__key) │ │ │ │ -Extract a node. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_5_6_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_b_e_g_i_n │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_0_3_7 │ │ │ │ +_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_:_:_c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_Hashtable::const_iterator const_iterator │ │ │ │ +Iterator-related typedefs. │ │ │ │ +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_:_:_s_i_z_e___t_y_p_e │ │ │ │ +_Hashtable::size_type size_type │ │ │ │ +Iterator-related typedefs. │ │ │ │ +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_4_6 │ │ │ │ +_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_6_8 │ │ │ │ +_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_1_1 │ │ │ │ +_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_:_8_7_5 │ │ │ │ +_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-only (constant) iterator pointing to the first bucket element. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_8_6_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_2_2 │ │ │ │ -_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 │ │ │ │ +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_1_9 │ │ │ │ +_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_set tries to keep the load factor │ │ │ │ +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___s_e_t_._h_:_9_0_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_:_7_8_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_3_0 │ │ │ │ -_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 │ │ │ │ +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_:_:_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___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_1_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(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_3_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_:_5_9_4 │ │ │ │ -_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_4_5 │ │ │ │ -_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 │ │ │ │ -auto equal_range(const _Kt &__k) const -> decltype(_M_h._M_equal_range_tr(__k)) │ │ │ │ -Finds a subsequence matching given key. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_8_2_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_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 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ +_Hashtable::difference_type difference_type │ │ │ │ Iterator-related typedefs. │ │ │ │ -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_4_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_3_3 │ │ │ │ -_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_3_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_3_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_e_x_t_r_a_c_t │ │ │ │ -node_type extract(const_iterator __pos) │ │ │ │ -Extract a node. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_5_5_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_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_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_o_u_n_t │ │ │ │ +auto count(const _Kt &__x) const -> decltype(_M_h._M_count_tr(__x)) │ │ │ │ +Finds the number of elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_9_8_5 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_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 │ │ │ │ Iterator-related typedefs. │ │ │ │ -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_7_3 │ │ │ │ -_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_2_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_6_2 │ │ │ │ -_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 │ │ │ │ +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_set. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_8_3_7 │ │ │ │ +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_0_9_1 │ │ │ │ +_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_7_2 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_i_n_s_e_r_t │ │ │ │ +insert_return_type insert(node_type &&__nh) │ │ │ │ +Re-insert an extracted node. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_9_1 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ +_Hashtable::value_type value_type │ │ │ │ +Public typedefs. │ │ │ │ +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_1_9_3 │ │ │ │ +_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_:_3_9_1 │ │ │ │ _s_t_d_:_:_a_u_t_o___p_t_r___r_e_f │ │ │ │ DDeeffiinniittiioonn _a_u_t_o___p_t_r_._h_:_4_9 │ │ │ │ _h_a_s_h_t_a_b_l_e_._h │ │ │ │ * _b_i_t_s │ │ │ │ - * _u_n_o_r_d_e_r_e_d___s_e_t_._h │ │ │ │ + * _u_n_o_r_d_e_r_e_d___m_a_p_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00389.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: unordered_map.h File Reference │ │ │ +libstdc++: forward_list.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,136 +48,106 @@ │ │ │ /* @license-end */ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ Classes | │ │ │ Namespaces | │ │ │ -Typedefs | │ │ │ +Macros | │ │ │ Functions
│ │ │ -
unordered_map.h File Reference
│ │ │ +
forward_list.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ Classes

class  std::unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc >
struct  std::_Fwd_list_base< _Tp, _Alloc >
 
class  std::unordered_multimap< _Key, _Tp, _Hash, _Pred, _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::forward_list< _Tp, _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 = _Hashtable< _Key, std::pair< const _Key, _Tp >, _Alloc, __detail::_Select1st, _Pred, _Hash, __detail::_Mod_range_hashing, __detail::_Default_ranged_hash, __detail::_Prime_rehash_policy, _Tr >
 
template<bool _Cache>
using std::__umap_traits = __detail::_Hashtable_traits< _Cache, false, true >
 
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 = _Hashtable< _Key, std::pair< const _Key, _Tp >, _Alloc, __detail::_Select1st, _Pred, _Hash, __detail::_Mod_range_hashing, __detail::_Default_ranged_hash, __detail::_Prime_rehash_policy, _Tr >
 
template<bool _Cache>
using std::__ummap_traits = __detail::_Hashtable_traits< _Cache, false, false >
 

│ │ │ +Macros

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

│ │ │ 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 >
 
│ │ │ +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 <unordered_map>.

│ │ │ +

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 forward_list.h.

│ │ │ +

Macro Definition Documentation

│ │ │ + │ │ │ +

◆ _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG

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

Definition at line 1700 of file forward_list.h.

│ │ │ │ │ │ -

Definition in file unordered_map.h.

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

◆ _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 55 of file forward_list.h.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,196 +1,63 @@ │ │ │ │ libstdc++ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _T_y_p_e_d_e_f_s | _F_u_n_c_t_i_o_n_s │ │ │ │ -unordered_map.h File Reference │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _M_a_c_r_o_s | _F_u_n_c_t_i_o_n_s │ │ │ │ +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 │ │ │ │ -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_ _> │ │ │ │ +struct   _s_t_d_:_:___F_w_d___l_i_s_t___b_a_s_e_<_ ___T_p_,_ ___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_ _> │ │ │ │ +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_ _> │ │ │ │   │ │ │ │ -NNaammeessppaacceess │ │ │ │ -namespace   _s_t_d │ │ │ │ +struct   _s_t_d_:_:___F_w_d___l_i_s_t___i_t_e_r_a_t_o_r_<_ ___T_p_ _> │ │ │ │   │ │ │ │ -TTyyppeeddeeffss │ │ │ │ -template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___H_a_s_h = hash<_Key>, _t_y_p_e_n_a_m_e │ │ │ │ -___P_r_e_d = std::equal_to<_Key>, _t_y_p_e_n_a_m_e _Alloc = std::allocator >, _t_y_p_e_n_a_m_e ___T_r = __umap_traits<__cache_default<_Key, _Hash>:: │ │ │ │ -value>> │ │ │ │ -_u_s_i_n_g  _s_t_d_:_:_____u_m_a_p___h_a_s_h_t_a_b_l_e = _Hashtable< ___K_e_y, _s_t_d_:_:_p_a_i_r< _c_o_n_s_t ___K_e_y, _Tp >, │ │ │ │ - _Alloc, __detail::_Select1st, ___P_r_e_d, ___H_a_s_h, __detail:: │ │ │ │ - _Mod_range_hashing, __detail::_Default_ranged_hash, __detail:: │ │ │ │ - _Prime_rehash_policy, ___T_r > │ │ │ │ -  │ │ │ │ -template │ │ │ │ -_u_s_i_n_g  _s_t_d_:_:_____u_m_a_p___t_r_a_i_t_s = __detail::_Hashtable_traits< ___C_a_c_h_e, _f_a_l_s_e, _t_r_u_e > │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___H_a_s_h = hash<_Key>, _t_y_p_e_n_a_m_e │ │ │ │ -___P_r_e_d = std::equal_to<_Key>, _t_y_p_e_n_a_m_e _Alloc = std::allocator >, _t_y_p_e_n_a_m_e ___T_r = __ummap_traits<__cache_default<_Key, _Hash>:: │ │ │ │ -value>> │ │ │ │ -_u_s_i_n_g  _s_t_d_:_:_____u_m_m_a_p___h_a_s_h_t_a_b_l_e = _Hashtable< ___K_e_y, _s_t_d_:_:_p_a_i_r< _c_o_n_s_t ___K_e_y, _Tp >, │ │ │ │ - _Alloc, __detail::_Select1st, ___P_r_e_d, ___H_a_s_h, __detail:: │ │ │ │ - _Mod_range_hashing, __detail::_Default_ranged_hash, __detail:: │ │ │ │ - _Prime_rehash_policy, ___T_r > │ │ │ │ -  │ │ │ │ -template │ │ │ │ -_u_s_i_n_g  _s_t_d_:_:_____u_m_m_a_p___t_r_a_i_t_s = __detail::_Hashtable_traits< ___C_a_c_h_e, _f_a_l_s_e, _f_a_l_s_e │ │ │ │ - > │ │ │ │ -  │ │ │ │ -FFuunnccttiioonnss │ │ │ │ -template<_c_l_a_s_s ___K_e_y , _c_l_a_s_s _Tp , _c_l_a_s_s ___H_a_s_h , _c_l_a_s_s ___P_r_e_d , _c_l_a_s_s _Alloc > │ │ │ │ -bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (_c_o_n_s_t _u_n_o_r_d_e_r_e_d___m_a_p< ___K_e_y, _Tp, ___H_a_s_h, ___P_r_e_d, _Alloc > │ │ │ │ - &__x, _c_o_n_s_t _u_n_o_r_d_e_r_e_d___m_a_p< ___K_e_y, _Tp, ___H_a_s_h, ___P_r_e_d, _Alloc > &__y) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___K_e_y , _c_l_a_s_s _Tp , _c_l_a_s_s ___H_a_s_h , _c_l_a_s_s ___P_r_e_d , _c_l_a_s_s _Alloc > │ │ │ │ -bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (_c_o_n_s_t _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< ___K_e_y, _Tp, ___H_a_s_h, ___P_r_e_d, │ │ │ │ - _Alloc > &__x, _c_o_n_s_t _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< ___K_e_y, _Tp, ___H_a_s_h, ___P_r_e_d, _Alloc │ │ │ │ - > &__y) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___K_e_y , _c_l_a_s_s _Tp , _c_l_a_s_s ___H_a_s_h , _c_l_a_s_s ___P_r_e_d , _c_l_a_s_s _Alloc > │ │ │ │ -_v_o_i_d  _s_t_d_:_:_s_w_a_p (_u_n_o_r_d_e_r_e_d___m_a_p< ___K_e_y, _Tp, ___H_a_s_h, ___P_r_e_d, _Alloc > &__x, │ │ │ │ - _u_n_o_r_d_e_r_e_d___m_a_p< ___K_e_y, _Tp, ___H_a_s_h, ___P_r_e_d, _Alloc > &__y) noexcept(noexcept │ │ │ │ - (__x.swap(__y))) │ │ │ │ -  │ │ │ │ -template<_c_l_a_s_s ___K_e_y , _c_l_a_s_s _Tp , _c_l_a_s_s ___H_a_s_h , _c_l_a_s_s ___P_r_e_d , _c_l_a_s_s _Alloc > │ │ │ │ -_v_o_i_d  _s_t_d_:_:_s_w_a_p (_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< ___K_e_y, _Tp, ___H_a_s_h, ___P_r_e_d, _Alloc > &__x, │ │ │ │ - _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< ___K_e_y, _Tp, ___H_a_s_h, ___P_r_e_d, _Alloc > &__y) noexcept │ │ │ │ - (noexcept(__x.swap(__y))) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ - > _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 >, __iter_val_t< │ │ │ │ - ___I_n_p_u_t_I_t_e_r_a_t_o_r >, _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 > >, _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 > >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, _t_y_p_e_n_a_m_e │ │ │ │ - _u_n_o_r_d_e_r_e_d___m_a_p< int, int >::size_type, ___A_l_l_o_c_a_t_o_r) -> _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 >, __iter_val_t< ___I_n_p_u_t_I_t_e_r_a_t_o_r >, _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 > >, _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 │ │ │ │ - > >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___H_a_s_h , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , │ │ │ │ -_t_y_p_e_n_a_m_e = _RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, _t_y_p_e_n_a_m_e │ │ │ │ - _u_n_o_r_d_e_r_e_d___m_a_p< int, int >::size_type, ___H_a_s_h, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ - > _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 >, __iter_val_t< │ │ │ │ - ___I_n_p_u_t_I_t_e_r_a_t_o_r >, ___H_a_s_h, _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 > >, │ │ │ │ - ___A_l_l_o_c_a_t_o_r > │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___H_a_s_h = │ │ │ │ -hash<__iter_key_t<_InputIterator>>, _t_y_p_e_n_a_m_e ___P_r_e_d = │ │ │ │ -equal_to<__iter_key_t<_InputIterator>>, _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r = │ │ │ │ -allocator<__iter_to_alloc_t<_InputIterator>>, _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, _t_y_p_e_n_a_m_e = _RequireNotAllocator<_Pred>, │ │ │ │ -_t_y_p_e_n_a_m_e = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, _t_y_p_e_n_a_m_e │ │ │ │ - _u_n_o_r_d_e_r_e_d___m_a_p< int, int >::size_type={}, ___H_a_s_h=___H_a_s_h(), ___P_r_e_d=___P_r_e_d(), │ │ │ │ - ___A_l_l_o_c_a_t_o_r=___A_l_l_o_c_a_t_o_r()) -> _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 │ │ │ │ - >, __iter_val_t< ___I_n_p_u_t_I_t_e_r_a_t_o_r >, ___H_a_s_h, ___P_r_e_d, ___A_l_l_o_c_a_t_o_r > │ │ │ │ +struct   _s_t_d_:_:___F_w_d___l_i_s_t___n_o_d_e_<_ ___T_p_ _> │ │ │ │   │ │ │ │ -template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< ___K_e_y, _Tp > >, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ - > _u_n_o_r_d_e_r_e_d___m_a_p< ___K_e_y, _Tp, _h_a_s_h< ___K_e_y >, _e_q_u_a_l___t_o< ___K_e_y >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ +struct   _s_t_d_:_:___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e │ │ │ │   │ │ │ │ -template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< ___K_e_y, _Tp > >, _t_y_p_e_n_a_m_e │ │ │ │ - _u_n_o_r_d_e_r_e_d___m_a_p< int, int >::size_type, ___A_l_l_o_c_a_t_o_r) -> _u_n_o_r_d_e_r_e_d___m_a_p< ___K_e_y, │ │ │ │ - _Tp, _h_a_s_h< ___K_e_y >, _e_q_u_a_l___t_o< ___K_e_y >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ + class   _s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_<_ ___T_p_,_ ___A_l_l_o_c_ _> │ │ │ │   │ │ │ │ -template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___H_a_s_h , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , │ │ │ │ -_t_y_p_e_n_a_m_e = _RequireNotAllocatorOrIntegral<_Hash>, _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< ___K_e_y, _Tp > >, _t_y_p_e_n_a_m_e │ │ │ │ - _u_n_o_r_d_e_r_e_d___m_a_p< int, int >::size_type, ___H_a_s_h, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ - > _u_n_o_r_d_e_r_e_d___m_a_p< ___K_e_y, _Tp, ___H_a_s_h, _e_q_u_a_l___t_o< ___K_e_y >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___H_a_s_h = hash<_Key>, _t_y_p_e_n_a_m_e │ │ │ │ -___P_r_e_d = equal_to<_Key>, _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r = allocator>, │ │ │ │ -_t_y_p_e_n_a_m_e = _RequireNotAllocatorOrIntegral<_Hash>, _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireNotAllocator<_Pred>, _t_y_p_e_n_a_m_e = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< ___K_e_y, _Tp > >, _t_y_p_e_n_a_m_e │ │ │ │ - _u_n_o_r_d_e_r_e_d___m_a_p< int, int >::size_type={}, ___H_a_s_h=___H_a_s_h(), ___P_r_e_d=___P_r_e_d(), │ │ │ │ - ___A_l_l_o_c_a_t_o_r=___A_l_l_o_c_a_t_o_r()) -> _u_n_o_r_d_e_r_e_d___m_a_p< ___K_e_y, _Tp, ___H_a_s_h, ___P_r_e_d, │ │ │ │ - ___A_l_l_o_c_a_t_o_r > │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ - > _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 >, __iter_val_t< │ │ │ │ - ___I_n_p_u_t_I_t_e_r_a_t_o_r >, _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 > >, _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 > >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, │ │ │ │ - _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< int, int >::size_type, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ - > _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 >, __iter_val_t< │ │ │ │ - ___I_n_p_u_t_I_t_e_r_a_t_o_r >, _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 > >, _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 > >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___H_a_s_h , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , │ │ │ │ -_t_y_p_e_n_a_m_e = _RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, │ │ │ │ - _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< int, int >::size_type, ___H_a_s_h, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ - > _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 >, __iter_val_t< │ │ │ │ - ___I_n_p_u_t_I_t_e_r_a_t_o_r >, ___H_a_s_h, _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 > >, │ │ │ │ - ___A_l_l_o_c_a_t_o_r > │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___H_a_s_h = │ │ │ │ -hash<__iter_key_t<_InputIterator>>, _t_y_p_e_n_a_m_e ___P_r_e_d = │ │ │ │ -equal_to<__iter_key_t<_InputIterator>>, _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r = │ │ │ │ -allocator<__iter_to_alloc_t<_InputIterator>>, _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, _t_y_p_e_n_a_m_e = _RequireNotAllocator<_Pred>, │ │ │ │ -_t_y_p_e_n_a_m_e = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (___I_n_p_u_t_I_t_e_r_a_t_o_r, ___I_n_p_u_t_I_t_e_r_a_t_o_r, │ │ │ │ - _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< int, int >::size_type={}, ___H_a_s_h=___H_a_s_h(), ___P_r_e_d=___P_r_e_d │ │ │ │ - (), ___A_l_l_o_c_a_t_o_r=___A_l_l_o_c_a_t_o_r()) -> _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 >, __iter_val_t< ___I_n_p_u_t_I_t_e_r_a_t_o_r >, ___H_a_s_h, ___P_r_e_d, │ │ │ │ - ___A_l_l_o_c_a_t_o_r > │ │ │ │ +NNaammeessppaacceess │ │ │ │ +namespace   _s_t_d │ │ │ │   │ │ │ │ -template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< ___K_e_y, _Tp > >, │ │ │ │ - ___A_l_l_o_c_a_t_o_r) -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< ___K_e_y, _Tp, _h_a_s_h< ___K_e_y >, _e_q_u_a_l___t_o< │ │ │ │ - ___K_e_y >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ +MMaaccrrooss │ │ │ │ +#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 │ │ │ │   │ │ │ │ -template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< ___K_e_y, _Tp > >, │ │ │ │ - _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< int, int >::size_type, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ - > _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< ___K_e_y, _Tp, _h_a_s_h< ___K_e_y >, _e_q_u_a_l___t_o< ___K_e_y >, │ │ │ │ - ___A_l_l_o_c_a_t_o_r > │ │ │ │ +#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 │ │ │ │   │ │ │ │ -template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___H_a_s_h , _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r , │ │ │ │ -_t_y_p_e_n_a_m_e = _RequireNotAllocatorOrIntegral<_Hash>, _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< ___K_e_y, _Tp > >, │ │ │ │ - _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< int, int >::size_type, ___H_a_s_h, ___A_l_l_o_c_a_t_o_r) - │ │ │ │ - > _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< ___K_e_y, _Tp, ___H_a_s_h, _e_q_u_a_l___t_o< ___K_e_y >, ___A_l_l_o_c_a_t_o_r > │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___H_a_s_h = hash<_Key>, _t_y_p_e_n_a_m_e │ │ │ │ -___P_r_e_d = equal_to<_Key>, _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r = allocator>, │ │ │ │ -_t_y_p_e_n_a_m_e = _RequireNotAllocatorOrIntegral<_Hash>, _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireNotAllocator<_Pred>, _t_y_p_e_n_a_m_e = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< ___K_e_y, _Tp > >, │ │ │ │ - _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< int, int >::size_type={}, ___H_a_s_h=___H_a_s_h(), ___P_r_e_d=___P_r_e_d │ │ │ │ - (), ___A_l_l_o_c_a_t_o_r=___A_l_l_o_c_a_t_o_r()) -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p< ___K_e_y, _Tp, ___H_a_s_h, │ │ │ │ - ___P_r_e_d, ___A_l_l_o_c_a_t_o_r > │ │ │ │ +FFuunnccttiioonnss │ │ │ │ +template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___V_a_l_T = typename │ │ │ │ +iterator_traits<_InputIterator>::value_type, _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r = │ │ │ │ +allocator<_ValT>, _t_y_p_e_n_a_m_e = _RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = │ │ │ │ +_RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::ffoorrwwaarrdd__lliisstt (___I_n_p_u_t_I_t_e_r_a_t_o_r, │ │ │ │ + ___I_n_p_u_t_I_t_e_r_a_t_o_r, ___A_l_l_o_c_a_t_o_r=___A_l_l_o_c_a_t_o_r()) - │ │ │ │ + > _f_o_r_w_a_r_d___l_i_s_t< ___V_a_l_T, ___A_l_l_o_c_a_t_o_r > │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e _Alloc > │ │ │ │ +__detail::__synth3way_t< _Tp >  _s_t_d_:_:_o_p_e_r_a_t_o_r_<_=_> (_c_o_n_s_t _f_o_r_w_a_r_d___l_i_s_t< _Tp, │ │ │ │ + _Alloc > &__x, _c_o_n_s_t _f_o_r_w_a_r_d___l_i_s_t< _Tp, _Alloc │ │ │ │ + > &__y) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e _Alloc > │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (_c_o_n_s_t _f_o_r_w_a_r_d___l_i_s_t< _Tp, │ │ │ │ + _Alloc > &_____l_x, _c_o_n_s_t _f_o_r_w_a_r_d___l_i_s_t< _Tp, _Alloc │ │ │ │ + > &_____l_y) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e _Alloc > │ │ │ │ + _v_o_i_d  _s_t_d_:_:_s_w_a_p (_f_o_r_w_a_r_d___l_i_s_t< _Tp, _Alloc > &_____l_x, │ │ │ │ + _f_o_r_w_a_r_d___l_i_s_t< _Tp, _Alloc > &_____l_y) noexcept │ │ │ │ + (noexcept(__lx.swap(_____l_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_o_r_d_e_r_e_d___m_a_p_._h. │ │ │ │ +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 ********** │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__FFWWDDLLIISSTT__RREEMMOOVVEE__RREETTUURRNN__TTYYPPEE__TTAAGG ********** │ │ │ │ +#define _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG │ │ │ │ +Definition at line _1_7_0_0 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. │ │ │ │ * _b_i_t_s │ │ │ │ - * _u_n_o_r_d_e_r_e_d___m_a_p_._h │ │ │ │ + * _f_o_r_w_a_r_d___l_i_s_t_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00389.js │ │ │ ├── js-beautify {} │ │ │ │ @@ -1,4 +1,10 @@ │ │ │ │ var a00389 = [ │ │ │ │ - ["__umap_traits", "a00389.html#a84b02064179c0ef21d0189a7bf15803b", null], │ │ │ │ - ["__ummap_traits", "a00389.html#a1a55f2ace43a0a61a859367d227d245f", null] │ │ │ │ + ["std::_Fwd_list_base< _Tp, _Alloc >", "a04762.html", null], │ │ │ │ + ["std::_Fwd_list_const_iterator< _Tp >", "a04750.html", "a04750"], │ │ │ │ + ["std::_Fwd_list_iterator< _Tp >", "a04754.html", "a04754"], │ │ │ │ + ["std::_Fwd_list_node< _Tp >", "a04746.html", null], │ │ │ │ + ["std::_Fwd_list_node_base", "a04742.html", null], │ │ │ │ + ["operator<=>", "a00389.html#af2fde05a4b1c8436bb83bd8921460639", null], │ │ │ │ + ["operator==", "a00389.html#ada41d3682184f0d0d8525907fdfcbea8", null], │ │ │ │ + ["swap", "a00389.html#aeb866eb47db586b6058b597e97d8b909", null] │ │ │ │ ]; │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00389_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: unordered_map.h Source File │ │ │ +libstdc++: forward_list.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,20 +45,20 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
unordered_map.h
│ │ │ +
forward_list.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// unordered_map implementation -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// <forward_list.h> -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2010-2025 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2008-2025 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
│ │ │ @@ -72,2907 +72,2269 @@ │ │ │
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
│ │ │ +
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{unordered_map}
│ │ │ +
27 * Do not attempt to use it directly. @headername{forward_list}
│ │ │
28 */
│ │ │
29
│ │ │ -
30#ifndef _UNORDERED_MAP_H
│ │ │ -
31#define _UNORDERED_MAP_H
│ │ │ +
30#ifndef _FORWARD_LIST_H
│ │ │ +
31#define _FORWARD_LIST_H 1
│ │ │
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>;
│ │ │ -
49
│ │ │ -
50 template<typename _Key,
│ │ │ -
51 typename _Tp,
│ │ │ -
52 typename _Hash = hash<_Key>,
│ │ │ -
53 typename _Pred = std::equal_to<_Key>,
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
57 _Alloc, __detail::_Select1st,
│ │ │ -
58 _Pred, _Hash,
│ │ │ -
59 __detail::_Mod_range_hashing,
│ │ │ -
60 __detail::_Default_ranged_hash,
│ │ │ -
61 __detail::_Prime_rehash_policy, _Tr>;
│ │ │ +
33#ifdef _GLIBCXX_SYSHDR
│ │ │ +
34#pragma GCC system_header
│ │ │ +
35#endif
│ │ │ +
36
│ │ │ +
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 /// 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>,
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
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<_Value>.
│ │ │ -
95 * @tparam _Pred Predicate function object type, defaults
│ │ │ -
96 * to equal_to<_Value>.
│ │ │ -
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 {
│ │ │ - │ │ │ -
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>
│ │ │ -
│ │ │ - │ │ │ -
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 */
│ │ │ - │ │ │ -
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 */
│ │ │ - │ │ │ -
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 template<typename _InputIterator>
│ │ │ -
255 unordered_map(_InputIterator __first, _InputIterator __last,
│ │ │ -
256 size_type __n,
│ │ │ -
257 const allocator_type& __a)
│ │ │ -
258 : unordered_map(__first, __last, __n, hasher(), key_equal(), __a)
│ │ │ -
259 { }
│ │ │ +
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 */
│ │ │ +
│ │ │ + │ │ │ +
70 {
│ │ │ + │ │ │ +
72
│ │ │ +
73 _Fwd_list_node_base() = default;
│ │ │ + │ │ │ +
75 : _M_next(__x._M_next)
│ │ │ +
76 { __x._M_next = nullptr; }
│ │ │ +
77
│ │ │ + │ │ │ +
79 _Fwd_list_node_base& operator=(const _Fwd_list_node_base&) = delete;
│ │ │ +
80
│ │ │ + │ │ │ +
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
│ │ │ + │ │ │ +
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>
│ │ │ +
│ │ │ + │ │ │ +
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 _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
│ │ │ + │ │ │ +
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>
│ │ │ +
│ │ │ + │ │ │ +
164 {
│ │ │ + │ │ │ + │ │ │ +
167
│ │ │ +
168 typedef _Tp value_type;
│ │ │ +
169 typedef _Tp* pointer;
│ │ │ +
170 typedef _Tp& reference;
│ │ │ + │ │ │ + │ │ │ +
173
│ │ │ +
174 _Fwd_list_iterator() noexcept
│ │ │ +
175 : _M_node() { }
│ │ │ +
176
│ │ │ +
177 explicit
│ │ │ + │ │ │ +
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>
│ │ │ +
│ │ │ + │ │ │ +
250 {
│ │ │ + │ │ │ +
252 typedef const _Fwd_list_node<_Tp> _Node;
│ │ │ + │ │ │ +
254
│ │ │ +
255 typedef _Tp value_type;
│ │ │ +
256 typedef const _Tp* pointer;
│ │ │ +
257 typedef const _Tp& reference;
│ │ │ + │ │ │ + │ │ │
260
│ │ │ -
261 template<typename _InputIterator>
│ │ │ -
262 unordered_map(_InputIterator __first, _InputIterator __last,
│ │ │ -
263 size_type __n, const hasher& __hf,
│ │ │ -
264 const allocator_type& __a)
│ │ │ -
265 : unordered_map(__first, __last, __n, __hf, key_equal(), __a)
│ │ │ -
266 { }
│ │ │ +
261 _Fwd_list_const_iterator() noexcept
│ │ │ +
262 : _M_node() { }
│ │ │ +
263
│ │ │ +
264 explicit
│ │ │ + │ │ │ +
266 : _M_node(__n) { }
│ │ │
267
│ │ │ -
268 unordered_map(initializer_list<value_type> __l,
│ │ │ -
269 size_type __n,
│ │ │ -
270 const allocator_type& __a)
│ │ │ -
271 : unordered_map(__l, __n, hasher(), key_equal(), __a)
│ │ │ -
272 { }
│ │ │ -
273
│ │ │ -
274 unordered_map(initializer_list<value_type> __l,
│ │ │ -
275 size_type __n, const hasher& __hf,
│ │ │ -
276 const allocator_type& __a)
│ │ │ -
277 : unordered_map(__l, __n, __hf, key_equal(), __a)
│ │ │ -
278 { }
│ │ │ -
279
│ │ │ -
280#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
281 /**
│ │ │ -
282 * @brief Builds an %unordered_map from a range.
│ │ │ -
283 * @since C++23
│ │ │ -
284 * @param __rg An input range of elements that can be converted to
│ │ │ -
285 * the maps's value type.
│ │ │ -
286 * @param __n Minimal initial number of buckets.
│ │ │ -
287 * @param __hf A hash functor.
│ │ │ -
288 * @param __eql A key equality functor.
│ │ │ -
289 * @param __a An allocator object.
│ │ │ -
290 *
│ │ │ -
291 * Create an %unordered_map consisting of copies of the elements in the
│ │ │ -
292 * range. This is linear in N (where N is `std::ranges::size(__rg)`).
│ │ │ -
293 */
│ │ │ -
294 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ -
295 unordered_map(from_range_t, _Rg&& __rg,
│ │ │ -
296 size_type __n = 0,
│ │ │ -
297 const hasher& __hf = hasher(),
│ │ │ -
298 const key_equal& __eql = key_equal(),
│ │ │ -
299 const allocator_type& __a = allocator_type())
│ │ │ -
300 : _M_h(__n, __hf, __eql, __a)
│ │ │ -
301 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
302
│ │ │ -
303 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
304 // 2713. More missing allocator-extended constructors for unordered containers
│ │ │ -
305 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ -
306 unordered_map(from_range_t, _Rg&& __rg, const allocator_type& __a)
│ │ │ -
307 : _M_h(0, hasher(), key_equal(), __a)
│ │ │ -
308 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
309
│ │ │ -
310 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ -
311 unordered_map(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ -
312 const allocator_type& __a)
│ │ │ -
313 : _M_h(__n, hasher(), key_equal(), __a)
│ │ │ -
314 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
315
│ │ │ -
316 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ -
317 unordered_map(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ -
318 const hasher& __hf, const allocator_type& __a)
│ │ │ -
319 : _M_h(__n, __hf, key_equal(), __a)
│ │ │ -
320 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
321#endif
│ │ │ -
322
│ │ │ -
323 /// Copy assignment operator.
│ │ │ - │ │ │ -
325 operator=(const unordered_map&) = default;
│ │ │ -
326
│ │ │ -
327 /// Move assignment operator.
│ │ │ - │ │ │ - │ │ │ -
330
│ │ │ -
331 /**
│ │ │ -
332 * @brief %Unordered_map list assignment operator.
│ │ │ -
333 * @param __l An initializer_list.
│ │ │ -
334 *
│ │ │ -
335 * This function fills an %unordered_map with copies of the elements in
│ │ │ -
336 * the initializer list @a __l.
│ │ │ -
337 *
│ │ │ -
338 * Note that the assignment completely changes the %unordered_map and
│ │ │ -
339 * that the resulting %unordered_map's size is the same as the number
│ │ │ -
340 * of elements assigned.
│ │ │ -
341 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
344 {
│ │ │ -
345 _M_h = __l;
│ │ │ -
346 return *this;
│ │ │ -
347 }
│ │ │ -
│ │ │ -
348
│ │ │ -
349 /// Returns the allocator object used by the %unordered_map.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
352 { return _M_h.get_allocator(); }
│ │ │ -
│ │ │ -
353
│ │ │ -
354 // size and capacity:
│ │ │ -
355
│ │ │ -
356 /// Returns true if the %unordered_map is empty.
│ │ │ -
357 _GLIBCXX_NODISCARD bool
│ │ │ -
│ │ │ -
358 empty() const noexcept
│ │ │ -
359 { return _M_h.empty(); }
│ │ │ -
│ │ │ -
360
│ │ │ -
361 /// Returns the size of the %unordered_map.
│ │ │ - │ │ │ -
│ │ │ -
363 size() const noexcept
│ │ │ -
364 { return _M_h.size(); }
│ │ │ -
│ │ │ -
365
│ │ │ -
366 /// Returns the maximum size of the %unordered_map.
│ │ │ - │ │ │ -
│ │ │ -
368 max_size() const noexcept
│ │ │ -
369 { return _M_h.max_size(); }
│ │ │ -
│ │ │ -
370
│ │ │ -
371 // iterators.
│ │ │ -
372
│ │ │ -
373 /**
│ │ │ -
374 * Returns a read/write iterator that points to the first element in the
│ │ │ -
375 * %unordered_map.
│ │ │ -
376 */
│ │ │ - │ │ │ -
│ │ │ -
378 begin() noexcept
│ │ │ -
379 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
380
│ │ │ -
381 ///@{
│ │ │ -
382 /**
│ │ │ -
383 * Returns a read-only (constant) iterator that points to the first
│ │ │ -
384 * element in the %unordered_map.
│ │ │ -
385 */
│ │ │ - │ │ │ -
│ │ │ -
387 begin() const noexcept
│ │ │ -
388 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
389
│ │ │ - │ │ │ -
│ │ │ -
391 cbegin() const noexcept
│ │ │ -
392 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
393 ///@}
│ │ │ -
394
│ │ │ -
395 /**
│ │ │ -
396 * Returns a read/write iterator that points one past the last element in
│ │ │ -
397 * the %unordered_map.
│ │ │ -
398 */
│ │ │ - │ │ │ -
│ │ │ -
400 end() noexcept
│ │ │ -
401 { return _M_h.end(); }
│ │ │ -
│ │ │ -
402
│ │ │ -
403 ///@{
│ │ │ -
404 /**
│ │ │ -
405 * Returns a read-only (constant) iterator that points one past the last
│ │ │ -
406 * element in the %unordered_map.
│ │ │ -
407 */
│ │ │ - │ │ │ -
│ │ │ -
409 end() const noexcept
│ │ │ -
410 { return _M_h.end(); }
│ │ │ -
│ │ │ -
411
│ │ │ - │ │ │ -
│ │ │ -
413 cend() const noexcept
│ │ │ -
414 { return _M_h.end(); }
│ │ │ -
│ │ │ -
415 ///@}
│ │ │ -
416
│ │ │ -
417 // modifiers.
│ │ │ -
418
│ │ │ -
419 /**
│ │ │ -
420 * @brief Attempts to build and insert a std::pair into the
│ │ │ -
421 * %unordered_map.
│ │ │ -
422 *
│ │ │ -
423 * @param __args Arguments used to generate a new pair instance (see
│ │ │ -
424 * std::piecewise_contruct for passing arguments to each
│ │ │ -
425 * part of the pair constructor).
│ │ │ -
426 *
│ │ │ -
427 * @return A pair, of which the first element is an iterator that points
│ │ │ -
428 * to the possibly inserted pair, and the second is a bool that
│ │ │ -
429 * is true if the pair was actually inserted.
│ │ │ -
430 *
│ │ │ -
431 * This function attempts to build and insert a (key, value) %pair into
│ │ │ -
432 * the %unordered_map.
│ │ │ -
433 * An %unordered_map relies on unique keys and thus a %pair is only
│ │ │ -
434 * inserted if its first element (the key) is not already present in the
│ │ │ -
435 * %unordered_map.
│ │ │ -
436 *
│ │ │ -
437 * Insertion requires amortized constant time.
│ │ │ -
438 */
│ │ │ -
439 template<typename... _Args>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
442 { return _M_h.emplace(std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
443
│ │ │ -
444 /**
│ │ │ -
445 * @brief Attempts to build and insert a std::pair into the
│ │ │ -
446 * %unordered_map.
│ │ │ -
447 *
│ │ │ -
448 * @param __pos An iterator that serves as a hint as to where the pair
│ │ │ -
449 * should be inserted.
│ │ │ -
450 * @param __args Arguments used to generate a new pair instance (see
│ │ │ -
451 * std::piecewise_contruct for passing arguments to each
│ │ │ -
452 * part of the pair constructor).
│ │ │ -
453 * @return An iterator that points to the element with key of the
│ │ │ -
454 * std::pair built from @a __args (may or may not be that
│ │ │ -
455 * std::pair).
│ │ │ -
456 *
│ │ │ -
457 * This function is not concerned about whether the insertion took place,
│ │ │ -
458 * and thus does not return a boolean like the single-argument emplace()
│ │ │ -
459 * does.
│ │ │ -
460 * Note that the first parameter is only a hint and can potentially
│ │ │ -
461 * improve the performance of the insertion process. A bad hint would
│ │ │ -
462 * cause no gains in efficiency.
│ │ │ -
463 *
│ │ │ -
464 * See
│ │ │ -
465 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
466 * for more on @a hinting.
│ │ │ -
467 *
│ │ │ -
468 * Insertion requires amortized constant time.
│ │ │ -
469 */
│ │ │ -
470 template<typename... _Args>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
473 { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
474
│ │ │ -
475#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
476 /// Extract a node.
│ │ │ -
477 node_type
│ │ │ -
│ │ │ - │ │ │ -
479 {
│ │ │ -
480 __glibcxx_assert(__pos != end());
│ │ │ -
481 return _M_h.extract(__pos);
│ │ │ -
482 }
│ │ │ -
│ │ │ -
483
│ │ │ -
484 /// Extract a node.
│ │ │ -
485 node_type
│ │ │ -
│ │ │ - │ │ │ -
487 { return _M_h.extract(__key); }
│ │ │ -
│ │ │ -
488
│ │ │ -
489 /// Re-insert an extracted node.
│ │ │ -
490 insert_return_type
│ │ │ -
│ │ │ -
491 insert(node_type&& __nh)
│ │ │ -
492 { return _M_h._M_reinsert_node(std::move(__nh)); }
│ │ │ -
│ │ │ -
493
│ │ │ -
494 /// Re-insert an extracted node.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
497 { return _M_h._M_reinsert_node(std::move(__nh)).position; }
│ │ │ -
│ │ │ -
498#endif // node_extract
│ │ │ -
499
│ │ │ -
500#ifdef __glibcxx_unordered_map_try_emplace // C++ >= 17 && HOSTED
│ │ │ -
501 /**
│ │ │ -
502 * @brief Attempts to build and insert a std::pair into the
│ │ │ -
503 * %unordered_map.
│ │ │ -
504 *
│ │ │ -
505 * @param __k Key to use for finding a possibly existing pair in
│ │ │ -
506 * the unordered_map.
│ │ │ -
507 * @param __args Arguments used to generate the .second for a
│ │ │ -
508 * new pair instance.
│ │ │ -
509 *
│ │ │ -
510 * @return A pair, of which the first element is an iterator that points
│ │ │ -
511 * to the possibly inserted pair, and the second is a bool that
│ │ │ -
512 * is true if the pair was actually inserted.
│ │ │ -
513 *
│ │ │ -
514 * This function attempts to build and insert a (key, value) %pair into
│ │ │ -
515 * the %unordered_map.
│ │ │ -
516 * An %unordered_map relies on unique keys and thus a %pair is only
│ │ │ -
517 * inserted if its first element (the key) is not already present in the
│ │ │ -
518 * %unordered_map.
│ │ │ -
519 * If a %pair is not inserted, this function has no effect.
│ │ │ -
520 *
│ │ │ -
521 * Insertion requires amortized constant time.
│ │ │ -
522 */
│ │ │ -
523 template <typename... _Args>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
526 {
│ │ │ -
527 return _M_h.try_emplace(cend(), __k, std::forward<_Args>(__args)...);
│ │ │ -
528 }
│ │ │ -
│ │ │ -
529
│ │ │ -
530 // move-capable overload
│ │ │ -
531 template <typename... _Args>
│ │ │ - │ │ │ - │ │ │ -
534 {
│ │ │ -
535 return _M_h.try_emplace(cend(), std::move(__k),
│ │ │ - │ │ │ -
537 }
│ │ │ -
538
│ │ │ -
539 /**
│ │ │ -
540 * @brief Attempts to build and insert a std::pair into the
│ │ │ -
541 * %unordered_map.
│ │ │ -
542 *
│ │ │ -
543 * @param __hint An iterator that serves as a hint as to where the pair
│ │ │ -
544 * should be inserted.
│ │ │ -
545 * @param __k Key to use for finding a possibly existing pair in
│ │ │ -
546 * the unordered_map.
│ │ │ -
547 * @param __args Arguments used to generate the .second for a
│ │ │ -
548 * new pair instance.
│ │ │ -
549 * @return An iterator that points to the element with key of the
│ │ │ -
550 * std::pair built from @a __args (may or may not be that
│ │ │ -
551 * std::pair).
│ │ │ -
552 *
│ │ │ -
553 * This function is not concerned about whether the insertion took place,
│ │ │ -
554 * and thus does not return a boolean like the single-argument emplace()
│ │ │ -
555 * does. However, if insertion did not take place,
│ │ │ -
556 * this function has no effect.
│ │ │ -
557 * Note that the first parameter is only a hint and can potentially
│ │ │ -
558 * improve the performance of the insertion process. A bad hint would
│ │ │ -
559 * cause no gains in efficiency.
│ │ │ -
560 *
│ │ │ -
561 * See
│ │ │ -
562 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
563 * for more on @a hinting.
│ │ │ -
564 *
│ │ │ -
565 * Insertion requires amortized constant time.
│ │ │ -
566 */
│ │ │ -
567 template <typename... _Args>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
570 _Args&&... __args)
│ │ │ -
571 {
│ │ │ -
572 return _M_h.try_emplace(__hint, __k,
│ │ │ -
573 std::forward<_Args>(__args)...).first;
│ │ │ -
574 }
│ │ │ -
│ │ │ -
575
│ │ │ -
576 // move-capable overload
│ │ │ -
577 template <typename... _Args>
│ │ │ - │ │ │ - │ │ │ -
580 {
│ │ │ -
581 return _M_h.try_emplace(__hint, std::move(__k),
│ │ │ -
582 std::forward<_Args>(__args)...).first;
│ │ │ -
583 }
│ │ │ -
584#endif // __glibcxx_unordered_map_try_emplace
│ │ │ -
585
│ │ │ -
586 ///@{
│ │ │ -
587 /**
│ │ │ -
588 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ -
589
│ │ │ -
590 * @param __x Pair to be inserted (see std::make_pair for easy
│ │ │ -
591 * creation of pairs).
│ │ │ -
592 *
│ │ │ -
593 * @return A pair, of which the first element is an iterator that
│ │ │ -
594 * points to the possibly inserted pair, and the second is
│ │ │ -
595 * a bool that is true if the pair was actually inserted.
│ │ │ -
596 *
│ │ │ -
597 * This function attempts to insert a (key, value) %pair into the
│ │ │ -
598 * %unordered_map. An %unordered_map relies on unique keys and thus a
│ │ │ -
599 * %pair is only inserted if its first element (the key) is not already
│ │ │ -
600 * present in the %unordered_map.
│ │ │ -
601 *
│ │ │ -
602 * Insertion requires amortized constant time.
│ │ │ -
603 */
│ │ │ - │ │ │ -
│ │ │ -
605 insert(const value_type& __x)
│ │ │ -
606 { return _M_h.insert(__x); }
│ │ │ -
│ │ │ -
607
│ │ │ -
608 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
609 // 2354. Unnecessary copying when inserting into maps with braced-init
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
612 { return _M_h.insert(std::move(__x)); }
│ │ │ -
│ │ │ -
613
│ │ │ -
614 template<typename _Pair>
│ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ -
618 { return _M_h.emplace(std::forward<_Pair>(__x)); }
│ │ │ -
│ │ │ -
619 ///@}
│ │ │ -
620
│ │ │ -
621 ///@{
│ │ │ -
622 /**
│ │ │ -
623 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ -
624 * @param __hint An iterator that serves as a hint as to where the
│ │ │ -
625 * pair should be inserted.
│ │ │ -
626 * @param __x Pair to be inserted (see std::make_pair for easy creation
│ │ │ -
627 * of pairs).
│ │ │ -
628 * @return An iterator that points to the element with key of
│ │ │ -
629 * @a __x (may or may not be the %pair passed in).
│ │ │ -
630 *
│ │ │ -
631 * This function is not concerned about whether the insertion took place,
│ │ │ -
632 * and thus does not return a boolean like the single-argument insert()
│ │ │ -
633 * does. Note that the first parameter is only a hint and can
│ │ │ -
634 * potentially improve the performance of the insertion process. A bad
│ │ │ -
635 * hint would cause no gains in efficiency.
│ │ │ -
636 *
│ │ │ -
637 * See
│ │ │ -
638 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
639 * for more on @a hinting.
│ │ │ -
640 *
│ │ │ -
641 * Insertion requires amortized constant time.
│ │ │ -
642 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
645 { return _M_h.insert(__hint, __x); }
│ │ │ -
│ │ │ -
646
│ │ │ -
647 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
648 // 2354. Unnecessary copying when inserting into maps with braced-init
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
651 { return _M_h.insert(__hint, std::move(__x)); }
│ │ │ -
│ │ │ -
652
│ │ │ -
653 template<typename _Pair>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
656 { return _M_h.emplace_hint(__hint, std::forward<_Pair>(__x)); }
│ │ │ -
│ │ │ -
657 ///@}
│ │ │ -
658
│ │ │ -
659 /**
│ │ │ -
660 * @brief A template function that attempts to insert a range of
│ │ │ -
661 * elements.
│ │ │ -
662 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
663 * inserted.
│ │ │ -
664 * @param __last Iterator pointing to the end of the range.
│ │ │ -
665 *
│ │ │ -
666 * Complexity similar to that of the range constructor.
│ │ │ -
667 */
│ │ │ -
668 template<typename _InputIterator>
│ │ │ -
669 void
│ │ │ -
│ │ │ - │ │ │ -
671 { _M_h.insert(__first, __last); }
│ │ │ -
│ │ │ -
672
│ │ │ -
673 /**
│ │ │ -
674 * @brief Attempts to insert a list of elements into the %unordered_map.
│ │ │ -
675 * @param __l A std::initializer_list<value_type> of elements
│ │ │ -
676 * to be inserted.
│ │ │ -
677 *
│ │ │ -
678 * Complexity similar to that of the range constructor.
│ │ │ -
679 */
│ │ │ -
680 void
│ │ │ -
│ │ │ - │ │ │ -
682 { _M_h.insert(__l); }
│ │ │ -
│ │ │ +
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 {
│ │ │ +
408 return pointer_traits<_Base_ptr>::
│ │ │ +
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
│ │ │ +
459 = typename __fwdlist::_Node_base<__ptr_rebind<_Ptr, void>>::_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>
│ │ │ +
│ │ │ + │ │ │ +
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
│ │ │ + │ │ │ +
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>;
│ │ │ + │ │ │ +
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
│ │ │ + │ │ │ +
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#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
685 /**
│ │ │ -
686 * @brief Inserts a range of elements.
│ │ │ -
687 * @since C++23
│ │ │ -
688 * @param __rg An input range of elements that can be converted to
│ │ │ -
689 * the map's value type.
│ │ │ -
690 */
│ │ │ -
691 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ -
692 void
│ │ │ - │ │ │ -
694 {
│ │ │ -
695 auto __first = ranges::begin(__rg);
│ │ │ -
696 const auto __last = ranges::end(__rg);
│ │ │ -
697 for (; __first != __last; ++__first)
│ │ │ -
698 _M_h.emplace(*__first);
│ │ │ -
699 }
│ │ │ -
700#endif
│ │ │ -
701
│ │ │ -
702#ifdef __glibcxx_unordered_map_try_emplace // >= C++17 && HOSTED
│ │ │ -
703 /**
│ │ │ -
704 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ -
705 * @param __k Key to use for finding a possibly existing pair in
│ │ │ -
706 * the map.
│ │ │ -
707 * @param __obj Argument used to generate the .second for a pair
│ │ │ -
708 * instance.
│ │ │ -
709 *
│ │ │ -
710 * @return A pair, of which the first element is an iterator that
│ │ │ -
711 * points to the possibly inserted pair, and the second is
│ │ │ -
712 * a bool that is true if the pair was actually inserted.
│ │ │ -
713 *
│ │ │ -
714 * This function attempts to insert a (key, value) %pair into the
│ │ │ -
715 * %unordered_map. An %unordered_map relies on unique keys and thus a
│ │ │ -
716 * %pair is only inserted if its first element (the key) is not already
│ │ │ -
717 * present in the %unordered_map.
│ │ │ -
718 * If the %pair was already in the %unordered_map, the .second of
│ │ │ -
719 * the %pair is assigned from __obj.
│ │ │ -
720 *
│ │ │ -
721 * Insertion requires amortized constant time.
│ │ │ -
722 */
│ │ │ -
723 template <typename _Obj>
│ │ │ -
724 pair<iterator, bool>
│ │ │ -
│ │ │ - │ │ │ -
726 {
│ │ │ -
727 auto __ret = _M_h.try_emplace(cend(), __k,
│ │ │ - │ │ │ -
729 if (!__ret.second)
│ │ │ -
730 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ -
731 return __ret;
│ │ │ -
732 }
│ │ │ -
│ │ │ +
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;
│ │ │ + │ │ │ +
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(),
│ │ │ + │ │ │ +
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 // move-capable overload
│ │ │ -
735 template <typename _Obj>
│ │ │ - │ │ │ - │ │ │ -
738 {
│ │ │ -
739 auto __ret = _M_h.try_emplace(cend(), std::move(__k),
│ │ │ - │ │ │ -
741 if (!__ret.second)
│ │ │ -
742 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ -
743 return __ret;
│ │ │ -
744 }
│ │ │ -
745
│ │ │ -
746 /**
│ │ │ -
747 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ -
748 * @param __hint An iterator that serves as a hint as to where the
│ │ │ -
749 * pair should be inserted.
│ │ │ -
750 * @param __k Key to use for finding a possibly existing pair in
│ │ │ -
751 * the unordered_map.
│ │ │ -
752 * @param __obj Argument used to generate the .second for a pair
│ │ │ -
753 * instance.
│ │ │ -
754 * @return An iterator that points to the element with key of
│ │ │ -
755 * @a __x (may or may not be the %pair passed in).
│ │ │ -
756 *
│ │ │ -
757 * This function is not concerned about whether the insertion took place,
│ │ │ -
758 * and thus does not return a boolean like the single-argument insert()
│ │ │ -
759 * does.
│ │ │ -
760 * If the %pair was already in the %unordered map, the .second of
│ │ │ -
761 * the %pair is assigned from __obj.
│ │ │ -
762 * Note that the first parameter is only a hint and can
│ │ │ -
763 * potentially improve the performance of the insertion process. A bad
│ │ │ -
764 * hint would cause no gains in efficiency.
│ │ │ -
765 *
│ │ │ -
766 * See
│ │ │ -
767 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
768 * for more on @a hinting.
│ │ │ -
769 *
│ │ │ -
770 * Insertion requires amortized constant time.
│ │ │ -
771 */
│ │ │ -
772 template <typename _Obj>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
775 _Obj&& __obj)
│ │ │ -
776 {
│ │ │ -
777 auto __ret = _M_h.try_emplace(__hint, __k, std::forward<_Obj>(__obj));
│ │ │ -
778 if (!__ret.second)
│ │ │ -
779 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ -
780 return __ret.first;
│ │ │ -
781 }
│ │ │ -
│ │ │ -
782
│ │ │ -
783 // move-capable overload
│ │ │ -
784 template <typename _Obj>
│ │ │ - │ │ │ - │ │ │ -
787 {
│ │ │ -
788 auto __ret = _M_h.try_emplace(__hint, std::move(__k),
│ │ │ - │ │ │ -
790 if (!__ret.second)
│ │ │ -
791 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ -
792 return __ret.first;
│ │ │ -
793 }
│ │ │ -
794#endif // unordered_map_try_emplace
│ │ │ -
795
│ │ │ -
796 ///@{
│ │ │ -
797 /**
│ │ │ -
798 * @brief Erases an element from an %unordered_map.
│ │ │ -
799 * @param __position An iterator pointing to the element to be erased.
│ │ │ -
800 * @return An iterator pointing to the element immediately following
│ │ │ -
801 * @a __position prior to the element being erased. If no such
│ │ │ -
802 * element exists, end() is returned.
│ │ │ -
803 *
│ │ │ -
804 * This function erases an element, pointed to by the given iterator,
│ │ │ -
805 * from an %unordered_map.
│ │ │ -
806 * Note that this function only erases the element, and that if the
│ │ │ -
807 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ -
808 * any way. Managing the pointer is the user's responsibility.
│ │ │ -
809 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
812 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
813
│ │ │ -
814 // LWG 2059.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
817 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
818 ///@}
│ │ │ -
819
│ │ │ -
820 /**
│ │ │ -
821 * @brief Erases elements according to the provided key.
│ │ │ -
822 * @param __x Key of element to be erased.
│ │ │ -
823 * @return The number of elements erased.
│ │ │ -
824 *
│ │ │ -
825 * This function erases all the elements located by the given key from
│ │ │ -
826 * an %unordered_map. For an %unordered_map the result of this function
│ │ │ -
827 * can only be 0 (not present) or 1 (present).
│ │ │ -
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 */
│ │ │ - │ │ │ -
│ │ │ -
833 erase(const key_type& __x)
│ │ │ -
834 { return _M_h.erase(__x); }
│ │ │ -
│ │ │ -
835
│ │ │ -
836 /**
│ │ │ -
837 * @brief Erases a [__first,__last) range of elements from an
│ │ │ -
838 * %unordered_map.
│ │ │ -
839 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
840 * erased.
│ │ │ -
841 * @param __last Iterator pointing to the end of the range to
│ │ │ -
842 * be erased.
│ │ │ -
843 * @return The iterator @a __last.
│ │ │ -
844 *
│ │ │ -
845 * This function erases a sequence of elements from an %unordered_map.
│ │ │ -
846 * Note that this function only erases the elements, and that if
│ │ │ -
847 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ -
848 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
849 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
852 { return _M_h.erase(__first, __last); }
│ │ │ -
│ │ │ -
853
│ │ │ -
854 /**
│ │ │ -
855 * Erases all elements in an %unordered_map.
│ │ │ -
856 * Note that this function only erases the elements, and that if the
│ │ │ -
857 * elements themselves are pointers, the pointed-to memory is not touched
│ │ │ -
858 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
859 */
│ │ │ -
860 void
│ │ │ -
│ │ │ -
861 clear() noexcept
│ │ │ -
862 { _M_h.clear(); }
│ │ │ -
│ │ │ -
863
│ │ │ -
864 /**
│ │ │ -
865 * @brief Swaps data with another %unordered_map.
│ │ │ -
866 * @param __x An %unordered_map of the same element and allocator
│ │ │ -
867 * types.
│ │ │ -
868 *
│ │ │ -
869 * This exchanges the elements between two %unordered_map in constant
│ │ │ -
870 * time.
│ │ │ -
871 * Note that the global std::swap() function is specialized such that
│ │ │ -
872 * std::swap(m1,m2) will feed to this function.
│ │ │ -
873 */
│ │ │ -
874 void
│ │ │ -
│ │ │ - │ │ │ -
876 noexcept( noexcept(_M_h.swap(__x._M_h)) )
│ │ │ -
877 { _M_h.swap(__x._M_h); }
│ │ │ -
│ │ │ -
878
│ │ │ -
879#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
880 template<typename, typename, typename>
│ │ │ -
881 friend class std::_Hash_merge_helper;
│ │ │ -
882
│ │ │ -
883 template<typename _H2, typename _P2>
│ │ │ -
884 void
│ │ │ - │ │ │ -
886 {
│ │ │ - │ │ │ -
888 if (std::__addressof(__source) == this) [[__unlikely__]]
│ │ │ -
889 return;
│ │ │ -
890
│ │ │ - │ │ │ -
892 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ -
893 }
│ │ │ -
894
│ │ │ -
895 template<typename _H2, typename _P2>
│ │ │ -
896 void
│ │ │ -
897 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ -
898 {
│ │ │ -
899 using _Merge_helper = _Hash_merge_helper<unordered_map, _H2, _P2>;
│ │ │ -
900 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ -
901 }
│ │ │ -
902
│ │ │ -
903 template<typename _H2, typename _P2>
│ │ │ -
904 void
│ │ │ -
905 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>& __source)
│ │ │ -
906 {
│ │ │ -
907 using _Merge_helper = _Hash_merge_helper<unordered_map, _H2, _P2>;
│ │ │ -
908 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ -
909 }
│ │ │ -
910
│ │ │ -
911 template<typename _H2, typename _P2>
│ │ │ -
912 void
│ │ │ -
913 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ -
914 { merge(__source); }
│ │ │ -
915#endif // node_extract
│ │ │ -
916
│ │ │ -
917 // observers.
│ │ │ -
918
│ │ │ -
919 /// Returns the hash functor object with which the %unordered_map was
│ │ │ -
920 /// constructed.
│ │ │ -
921 hasher
│ │ │ -
│ │ │ - │ │ │ -
923 { return _M_h.hash_function(); }
│ │ │ -
│ │ │ -
924
│ │ │ -
925 /// Returns the key comparison object with which the %unordered_map was
│ │ │ -
926 /// constructed.
│ │ │ - │ │ │ +
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:
│ │ │ + │ │ │ + │ │ │ +
779 typedef typename _Base::_Node _Node;
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
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;
│ │ │ + │ │ │ +
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
│ │ │ + │ │ │ +
812 { }
│ │ │ +
│ │ │ +
813
│ │ │ +
814 /**
│ │ │ +
815 * @brief Copy constructor with allocator argument.
│ │ │ +
816 * @param __list Input list to copy.
│ │ │ +
817 * @param __al An allocator object.
│ │ │ +
818 */
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
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 */
│ │ │ +
│ │ │ + │ │ │ + │ │ │ +
850 noexcept(_Node_alloc_traits::_S_always_equal())
│ │ │ + │ │ │ +
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())
│ │ │ + │ │ │ +
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())
│ │ │ + │ │ │ +
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,
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
895 const _Alloc& __al = _Alloc())
│ │ │ + │ │ │ +
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 */
│ │ │
│ │ │ -
928 key_eq() const
│ │ │ -
929 { return _M_h.key_eq(); }
│ │ │ + │ │ │ +
929 : _Base(_Node_alloc_traits::_S_select_on_copy(
│ │ │ +
930 __list._M_get_Node_allocator()))
│ │ │ +
931 { _M_range_initialize(__list.begin(), __list.end()); }
│ │ │
│ │ │ -
930
│ │ │ -
931 // lookup.
│ │ │
932
│ │ │ -
933 ///@{
│ │ │ -
934 /**
│ │ │ -
935 * @brief Tries to locate an element in an %unordered_map.
│ │ │ -
936 * @param __x Key to be located.
│ │ │ -
937 * @return Iterator pointing to sought-after element, or end() if not
│ │ │ -
938 * found.
│ │ │ -
939 *
│ │ │ -
940 * This function takes a key and tries to locate the element with which
│ │ │ -
941 * the key matches. If successful the function returns an iterator
│ │ │ -
942 * pointing to the sought after element. If unsuccessful it returns the
│ │ │ -
943 * past-the-end ( @c end() ) iterator.
│ │ │ -
944 */
│ │ │ - │ │ │ -
│ │ │ -
946 find(const key_type& __x)
│ │ │ -
947 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
948
│ │ │ -
949#if __cplusplus > 201703L
│ │ │ -
950 template<typename _Kt>
│ │ │ -
951 auto
│ │ │ +
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 */
│ │ │
│ │ │ -
952 find(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x))
│ │ │ -
953 { return _M_h._M_find_tr(__x); }
│ │ │ -
│ │ │ -
954#endif
│ │ │ -
955
│ │ │ - │ │ │ -
│ │ │ -
957 find(const key_type& __x) const
│ │ │ -
958 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
959
│ │ │ -
960#if __cplusplus > 201703L
│ │ │ -
961 template<typename _Kt>
│ │ │ -
962 auto
│ │ │ -
│ │ │ -
963 find(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x))
│ │ │ -
964 { return _M_h._M_find_tr(__x); }
│ │ │ -
│ │ │ -
965#endif
│ │ │ -
966 ///@}
│ │ │ -
967
│ │ │ -
968 ///@{
│ │ │ -
969 /**
│ │ │ -
970 * @brief Finds the number of elements.
│ │ │ -
971 * @param __x Key to count.
│ │ │ -
972 * @return Number of elements with specified key.
│ │ │ -
973 *
│ │ │ -
974 * This function only makes sense for %unordered_multimap; for
│ │ │ -
975 * %unordered_map the result will either be 0 (not present) or 1
│ │ │ -
976 * (present).
│ │ │ -
977 */
│ │ │ - │ │ │ -
│ │ │ -
979 count(const key_type& __x) const
│ │ │ -
980 { return _M_h.count(__x); }
│ │ │ -
│ │ │ -
981
│ │ │ -
982#if __cplusplus > 201703L
│ │ │ -
983 template<typename _Kt>
│ │ │ -
984 auto
│ │ │ -
│ │ │ -
985 count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x))
│ │ │ -
986 { return _M_h._M_count_tr(__x); }
│ │ │ -
│ │ │ -
987#endif
│ │ │ -
988 ///@}
│ │ │ -
989
│ │ │ -
990#if __cplusplus > 201703L
│ │ │ -
991 ///@{
│ │ │ -
992 /**
│ │ │ -
993 * @brief Finds whether an element with the given key exists.
│ │ │ -
994 * @param __x Key of elements to be located.
│ │ │ -
995 * @return True if there is any element with the specified key.
│ │ │ -
996 */
│ │ │ -
997 bool
│ │ │ -
│ │ │ -
998 contains(const key_type& __x) const
│ │ │ -
999 { return _M_h.find(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
1000
│ │ │ -
1001 template<typename _Kt>
│ │ │ -
1002 auto
│ │ │ -
│ │ │ -
1003 contains(const _Kt& __x) const
│ │ │ -
1004 -> decltype(_M_h._M_find_tr(__x), void(), true)
│ │ │ -
1005 { return _M_h._M_find_tr(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
1006 ///@}
│ │ │ -
1007#endif
│ │ │ -
1008
│ │ │ -
1009 ///@{
│ │ │ -
1010 /**
│ │ │ -
1011 * @brief Finds a subsequence matching given key.
│ │ │ -
1012 * @param __x Key to be located.
│ │ │ -
1013 * @return Pair of iterators that possibly points to the subsequence
│ │ │ -
1014 * matching given key.
│ │ │ -
1015 *
│ │ │ -
1016 * This function probably only makes sense for %unordered_multimap.
│ │ │ -
1017 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1020 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
1021
│ │ │ -
1022#if __cplusplus > 201703L
│ │ │ -
1023 template<typename _Kt>
│ │ │ -
1024 auto
│ │ │ -
│ │ │ -
1025 equal_range(const _Kt& __x)
│ │ │ -
1026 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ -
1027 { return _M_h._M_equal_range_tr(__x); }
│ │ │ -
│ │ │ -
1028#endif
│ │ │ -
1029
│ │ │ - │ │ │ -
│ │ │ -
1031 equal_range(const key_type& __x) const
│ │ │ -
1032 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
1033
│ │ │ -
1034#if __cplusplus > 201703L
│ │ │ -
1035 template<typename _Kt>
│ │ │ -
1036 auto
│ │ │ -
│ │ │ -
1037 equal_range(const _Kt& __x) const
│ │ │ -
1038 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ -
1039 { return _M_h._M_equal_range_tr(__x); }
│ │ │ -
│ │ │ -
1040#endif
│ │ │ -
1041 ///@}
│ │ │ -
1042
│ │ │ -
1043 ///@{
│ │ │ -
1044 /**
│ │ │ -
1045 * @brief Subscript ( @c [] ) access to %unordered_map data.
│ │ │ -
1046 * @param __k The key for which data should be retrieved.
│ │ │ -
1047 * @return A reference to the data of the (key,data) %pair.
│ │ │ -
1048 *
│ │ │ -
1049 * Allows for easy lookup with the subscript ( @c [] )operator. Returns
│ │ │ -
1050 * data associated with the key specified in subscript. If the key does
│ │ │ -
1051 * not exist, a pair with that key is created using default values, which
│ │ │ -
1052 * is then returned.
│ │ │ -
1053 *
│ │ │ -
1054 * Lookup requires constant time.
│ │ │ -
1055 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1058 { return _M_h[__k]; }
│ │ │ -
│ │ │ -
1059
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1062 { return _M_h[std::move(__k)]; }
│ │ │ -
│ │ │ -
1063 ///@}
│ │ │ -
1064
│ │ │ -
1065 ///@{
│ │ │ -
1066 /**
│ │ │ -
1067 * @brief Access to %unordered_map data.
│ │ │ -
1068 * @param __k The key for which data should be retrieved.
│ │ │ -
1069 * @return A reference to the data whose key is equal to @a __k, if
│ │ │ -
1070 * such a data is present in the %unordered_map.
│ │ │ -
1071 * @throw std::out_of_range If no such data is present.
│ │ │ -
1072 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1075 { return _M_h.at(__k); }
│ │ │ -
│ │ │ -
1076
│ │ │ -
1077 const mapped_type&
│ │ │ -
│ │ │ -
1078 at(const key_type& __k) const
│ │ │ -
1079 { return _M_h.at(__k); }
│ │ │ -
│ │ │ -
1080 ///@}
│ │ │ -
1081
│ │ │ -
1082 // bucket interface.
│ │ │ -
1083
│ │ │ -
1084 /// Returns the number of buckets of the %unordered_map.
│ │ │ -
1085 size_type
│ │ │ -
│ │ │ - │ │ │ -
1087 { return _M_h.bucket_count(); }
│ │ │ -
│ │ │ -
1088
│ │ │ -
1089 /// Returns the maximum number of buckets of the %unordered_map.
│ │ │ -
1090 size_type
│ │ │ -
│ │ │ - │ │ │ -
1092 { return _M_h.max_bucket_count(); }
│ │ │ -
│ │ │ -
1093
│ │ │ -
1094 /*
│ │ │ -
1095 * @brief Returns the number of elements in a given bucket.
│ │ │ -
1096 * @param __n A bucket index.
│ │ │ -
1097 * @return The number of elements in the bucket.
│ │ │ -
1098 */
│ │ │ -
1099 size_type
│ │ │ -
1100 bucket_size(size_type __n) const
│ │ │ -
1101 { return _M_h.bucket_size(__n); }
│ │ │ -
1102
│ │ │ -
1103 /*
│ │ │ -
1104 * @brief Returns the bucket index of a given element.
│ │ │ -
1105 * @param __key A key instance.
│ │ │ -
1106 * @return The key bucket index.
│ │ │ -
1107 */
│ │ │ -
1108 size_type
│ │ │ -
1109 bucket(const key_type& __key) const
│ │ │ -
1110 { return _M_h.bucket(__key); }
│ │ │ -
1111
│ │ │ -
1112 /**
│ │ │ -
1113 * @brief Returns a read/write iterator pointing to the first bucket
│ │ │ -
1114 * element.
│ │ │ -
1115 * @param __n The bucket index.
│ │ │ -
1116 * @return A read/write local iterator.
│ │ │ -
1117 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1120 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
1121
│ │ │ -
1122 ///@{
│ │ │ -
1123 /**
│ │ │ -
1124 * @brief Returns a read-only (constant) iterator pointing to the first
│ │ │ -
1125 * bucket element.
│ │ │ -
1126 * @param __n The bucket index.
│ │ │ -
1127 * @return A read-only local iterator.
│ │ │ -
1128 */
│ │ │ - │ │ │ -
│ │ │ -
1130 begin(size_type __n) const
│ │ │ -
1131 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
1132
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1135 { return _M_h.cbegin(__n); }
│ │ │ -
│ │ │ -
1136 ///@}
│ │ │ -
1137
│ │ │ -
1138 /**
│ │ │ -
1139 * @brief Returns a read/write iterator pointing to one past the last
│ │ │ -
1140 * bucket elements.
│ │ │ -
1141 * @param __n The bucket index.
│ │ │ -
1142 * @return A read/write local iterator.
│ │ │ -
1143 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1146 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
1147
│ │ │ -
1148 ///@{
│ │ │ -
1149 /**
│ │ │ -
1150 * @brief Returns a read-only (constant) iterator pointing to one past
│ │ │ -
1151 * the last bucket elements.
│ │ │ -
1152 * @param __n The bucket index.
│ │ │ -
1153 * @return A read-only local iterator.
│ │ │ + │ │ │ +
953 const _Alloc& __al = _Alloc())
│ │ │ + │ │ │ +
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,
│ │ │ + │ │ │ +
1046 void
│ │ │ +
│ │ │ + │ │ │ +
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
│ │ │ + │ │ │ +
1082 {
│ │ │ + │ │ │ +
1084
│ │ │ +
1085 auto __first = ranges::begin(__rg);
│ │ │ +
1086 const auto __last = ranges::end(__rg);
│ │ │ + │ │ │ +
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
│ │ │
│ │ │ -
1156 end(size_type __n) const
│ │ │ -
1157 { return _M_h.end(__n); }
│ │ │ + │ │ │ +
1157 { assign(__il.begin(), __il.end()); }
│ │ │
│ │ │ -
1158
│ │ │ - │ │ │ -
│ │ │ -
1160 cend(size_type __n) const
│ │ │ -
1161 { return _M_h.cend(__n); }
│ │ │ -
│ │ │ -
1162 ///@}
│ │ │ -
1163
│ │ │ -
1164 // hash policy.
│ │ │ +
1158
│ │ │ +
1159 /// Get a copy of the memory allocation object.
│ │ │ +
1160 allocator_type
│ │ │ +
│ │ │ + │ │ │ +
1162 { return allocator_type(this->_M_get_Node_allocator()); }
│ │ │ +
│ │ │ +
1163
│ │ │ +
1164 // 23.3.4.3 iterators:
│ │ │
1165
│ │ │ -
1166 /// Returns the average number of elements per bucket.
│ │ │ -
1167 float
│ │ │ -
│ │ │ - │ │ │ -
1169 { return _M_h.load_factor(); }
│ │ │ -
│ │ │ -
1170
│ │ │ -
1171 /// Returns a positive number that the %unordered_map tries to keep the
│ │ │ -
1172 /// load factor less than or equal to.
│ │ │ -
1173 float
│ │ │ -
│ │ │ - │ │ │ -
1175 { return _M_h.max_load_factor(); }
│ │ │ -
│ │ │ -
1176
│ │ │ -
1177 /**
│ │ │ -
1178 * @brief Change the %unordered_map maximum load factor.
│ │ │ -
1179 * @param __z The new maximum load factor.
│ │ │ -
1180 */
│ │ │ -
1181 void
│ │ │ +
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
│ │ │
│ │ │ - │ │ │ -
1183 { _M_h.max_load_factor(__z); }
│ │ │ + │ │ │ +
1183 { return const_iterator(this->_M_impl._M_head._M_base_ptr()); }
│ │ │
│ │ │
1184
│ │ │
1185 /**
│ │ │ -
1186 * @brief May rehash the %unordered_map.
│ │ │ -
1187 * @param __n The new number of buckets.
│ │ │ -
1188 *
│ │ │ -
1189 * Rehash will occur only if the new number of buckets respect the
│ │ │ -
1190 * %unordered_map maximum load factor.
│ │ │ -
1191 */
│ │ │ -
1192 void
│ │ │ -
│ │ │ - │ │ │ -
1194 { _M_h.rehash(__n); }
│ │ │ -
│ │ │ -
1195
│ │ │ -
1196 /**
│ │ │ -
1197 * @brief Prepare the %unordered_map for a specified number of
│ │ │ -
1198 * elements.
│ │ │ -
1199 * @param __n Number of elements required.
│ │ │ -
1200 *
│ │ │ -
1201 * Same as rehash(ceil(n / max_load_factor())).
│ │ │ -
1202 */
│ │ │ -
1203 void
│ │ │ -
│ │ │ - │ │ │ -
1205 { _M_h.reserve(__n); }
│ │ │ -
│ │ │ -
1206
│ │ │ -
1207 template<typename _Key1, typename _Tp1, typename _Hash1, typename _Pred1,
│ │ │ -
1208 typename _Alloc1>
│ │ │ -
1209 friend bool
│ │ │ - │ │ │ - │ │ │ -
1212 };
│ │ │ -
│ │ │ -
1213
│ │ │ -
1214#if __cpp_deduction_guides >= 201606
│ │ │ -
1215
│ │ │ -
1216 template<typename _InputIterator,
│ │ │ -
1217 typename _Hash = hash<__iter_key_t<_InputIterator>>,
│ │ │ -
1218 typename _Pred = equal_to<__iter_key_t<_InputIterator>>,
│ │ │ -
1219 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>,
│ │ │ -
1220 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1221 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1222 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
1223 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1224 unordered_map(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
1226 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ -
1227 -> unordered_map<__iter_key_t<_InputIterator>,
│ │ │ -
1228 __iter_val_t<_InputIterator>,
│ │ │ -
1229 _Hash, _Pred, _Allocator>;
│ │ │ -
1230
│ │ │ -
1231 template<typename _Key, typename _Tp, typename _Hash = hash<_Key>,
│ │ │ -
1232 typename _Pred = equal_to<_Key>,
│ │ │ -
1233 typename _Allocator = allocator<pair<const _Key, _Tp>>,
│ │ │ -
1234 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1235 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
1236 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1237 unordered_map(initializer_list<pair<_Key, _Tp>>,
│ │ │ - │ │ │ -
1239 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ -
1240 -> unordered_map<_Key, _Tp, _Hash, _Pred, _Allocator>;
│ │ │ -
1241
│ │ │ -
1242 template<typename _InputIterator, typename _Allocator,
│ │ │ -
1243 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1244 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1245 unordered_map(_InputIterator, _InputIterator,
│ │ │ -
1246 typename unordered_map<int, int>::size_type, _Allocator)
│ │ │ -
1247 -> unordered_map<__iter_key_t<_InputIterator>,
│ │ │ -
1248 __iter_val_t<_InputIterator>,
│ │ │ -
1249 hash<__iter_key_t<_InputIterator>>,
│ │ │ -
1250 equal_to<__iter_key_t<_InputIterator>>,
│ │ │ -
1251 _Allocator>;
│ │ │ -
1252
│ │ │ -
1253 template<typename _InputIterator, typename _Allocator,
│ │ │ -
1254 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1255 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1256 unordered_map(_InputIterator, _InputIterator, _Allocator)
│ │ │ -
1257 -> unordered_map<__iter_key_t<_InputIterator>,
│ │ │ -
1258 __iter_val_t<_InputIterator>,
│ │ │ -
1259 hash<__iter_key_t<_InputIterator>>,
│ │ │ -
1260 equal_to<__iter_key_t<_InputIterator>>,
│ │ │ -
1261 _Allocator>;
│ │ │ -
1262
│ │ │ -
1263 template<typename _InputIterator, typename _Hash, typename _Allocator,
│ │ │ -
1264 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1265 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1266 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1267 unordered_map(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
1269 _Hash, _Allocator)
│ │ │ -
1270 -> unordered_map<__iter_key_t<_InputIterator>,
│ │ │ -
1271 __iter_val_t<_InputIterator>, _Hash,
│ │ │ -
1272 equal_to<__iter_key_t<_InputIterator>>, _Allocator>;
│ │ │ -
1273
│ │ │ -
1274 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ -
1275 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1276 unordered_map(initializer_list<pair<_Key, _Tp>>,
│ │ │ - │ │ │ -
1278 _Allocator)
│ │ │ -
1279 -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
│ │ │ -
1280
│ │ │ -
1281 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ -
1282 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1283 unordered_map(initializer_list<pair<_Key, _Tp>>, _Allocator)
│ │ │ -
1284 -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
│ │ │ -
1285
│ │ │ -
1286 template<typename _Key, typename _Tp, typename _Hash, typename _Allocator,
│ │ │ -
1287 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1288 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1289 unordered_map(initializer_list<pair<_Key, _Tp>>,
│ │ │ - │ │ │ -
1291 _Hash, _Allocator)
│ │ │ -
1292 -> unordered_map<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>;
│ │ │ -
1293
│ │ │ -
1294#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
1295 template<ranges::input_range _Rg,
│ │ │ -
1296 __not_allocator_like _Hash = hash<__detail::__range_key_type<_Rg>>,
│ │ │ -
1297 __not_allocator_like _Pred = equal_to<__detail::__range_key_type<_Rg>>,
│ │ │ -
1298 __allocator_like _Allocator =
│ │ │ -
1299 allocator<__detail::__range_to_alloc_type<_Rg>>>
│ │ │ -
1300 unordered_map(from_range_t, _Rg&&, unordered_map<int, int>::size_type = {},
│ │ │ -
1301 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ -
1302 -> unordered_map<__detail::__range_key_type<_Rg>,
│ │ │ -
1303 __detail::__range_mapped_type<_Rg>,
│ │ │ -
1304 _Hash, _Pred, _Allocator>;
│ │ │ -
1305
│ │ │ -
1306 template<ranges::input_range _Rg,
│ │ │ -
1307 __allocator_like _Allocator>
│ │ │ -
1308 unordered_map(from_range_t, _Rg&&, unordered_map<int, int>::size_type,
│ │ │ -
1309 _Allocator)
│ │ │ -
1310 -> unordered_map<__detail::__range_key_type<_Rg>,
│ │ │ -
1311 __detail::__range_mapped_type<_Rg>,
│ │ │ -
1312 hash<__detail::__range_key_type<_Rg>>,
│ │ │ -
1313 equal_to<__detail::__range_key_type<_Rg>>,
│ │ │ -
1314 _Allocator>;
│ │ │ -
1315
│ │ │ -
1316 template<ranges::input_range _Rg,
│ │ │ -
1317 __allocator_like _Allocator>
│ │ │ -
1318 unordered_map(from_range_t, _Rg&&, _Allocator)
│ │ │ -
1319 -> unordered_map<__detail::__range_key_type<_Rg>,
│ │ │ -
1320 __detail::__range_mapped_type<_Rg>,
│ │ │ -
1321 hash<__detail::__range_key_type<_Rg>>,
│ │ │ -
1322 equal_to<__detail::__range_key_type<_Rg>>,
│ │ │ -
1323 _Allocator>;
│ │ │ -
1324
│ │ │ -
1325 template<ranges::input_range _Rg,
│ │ │ -
1326 __not_allocator_like _Hash,
│ │ │ -
1327 __allocator_like _Allocator>
│ │ │ -
1328 unordered_map(from_range_t, _Rg&&, unordered_map<int, int>::size_type,
│ │ │ -
1329 _Hash, _Allocator)
│ │ │ -
1330 -> unordered_map<__detail::__range_key_type<_Rg>,
│ │ │ -
1331 __detail::__range_mapped_type<_Rg>,
│ │ │ -
1332 _Hash, equal_to<__detail::__range_key_type<_Rg>>,
│ │ │ -
1333 _Allocator>;
│ │ │ -
1334#endif
│ │ │ -
1335#endif
│ │ │ -
1336
│ │ │ -
1337 /**
│ │ │ -
1338 * @brief A standard container composed of equivalent keys
│ │ │ -
1339 * (possibly containing multiple of each key value) that associates
│ │ │ -
1340 * values of another type with the keys.
│ │ │ -
1341 *
│ │ │ -
1342 * @ingroup unordered_associative_containers
│ │ │ -
1343 * @headerfile unordered_map
│ │ │ -
1344 * @since C++11
│ │ │ -
1345 *
│ │ │ -
1346 * @tparam _Key Type of key objects.
│ │ │ -
1347 * @tparam _Tp Type of mapped objects.
│ │ │ -
1348 * @tparam _Hash Hashing function object type, defaults to hash<_Value>.
│ │ │ -
1349 * @tparam _Pred Predicate function object type, defaults
│ │ │ -
1350 * to equal_to<_Value>.
│ │ │ -
1351 * @tparam _Alloc Allocator type, defaults to
│ │ │ -
1352 * std::allocator<std::pair<const _Key, _Tp>>.
│ │ │ -
1353 *
│ │ │ -
1354 * Meets the requirements of a <a href="tables.html#65">container</a>, and
│ │ │ -
1355 * <a href="tables.html#xx">unordered associative container</a>
│ │ │ -
1356 *
│ │ │ -
1357 * The resulting value type of the container is std::pair<const _Key, _Tp>.
│ │ │ -
1358 *
│ │ │ -
1359 * Base is _Hashtable, dispatched at compile time via template
│ │ │ -
1360 * alias __ummap_hashtable.
│ │ │ -
1361 */
│ │ │ -
1362 template<typename _Key, typename _Tp,
│ │ │ -
1363 typename _Hash = hash<_Key>,
│ │ │ -
1364 typename _Pred = equal_to<_Key>,
│ │ │ -
1365 typename _Alloc = allocator<std::pair<const _Key, _Tp>>>
│ │ │ -
│ │ │ - │ │ │ -
1367 {
│ │ │ - │ │ │ -
1369 _Hashtable _M_h;
│ │ │ -
1370
│ │ │ -
1371 public:
│ │ │ -
1372 // typedefs:
│ │ │ -
1373 ///@{
│ │ │ -
1374 /// Public typedefs.
│ │ │ -
1375 typedef typename _Hashtable::key_type key_type;
│ │ │ -
1376 typedef typename _Hashtable::value_type value_type;
│ │ │ -
1377 typedef typename _Hashtable::mapped_type mapped_type;
│ │ │ -
1378 typedef typename _Hashtable::hasher hasher;
│ │ │ -
1379 typedef typename _Hashtable::key_equal key_equal;
│ │ │ -
1380 typedef typename _Hashtable::allocator_type allocator_type;
│ │ │ -
1381 ///@}
│ │ │ -
1382
│ │ │ -
1383 ///@{
│ │ │ -
1384 /// Iterator-related typedefs.
│ │ │ -
1385 typedef typename _Hashtable::pointer pointer;
│ │ │ -
1386 typedef typename _Hashtable::const_pointer const_pointer;
│ │ │ -
1387 typedef typename _Hashtable::reference reference;
│ │ │ -
1388 typedef typename _Hashtable::const_reference const_reference;
│ │ │ -
1389 typedef typename _Hashtable::iterator iterator;
│ │ │ -
1390 typedef typename _Hashtable::const_iterator const_iterator;
│ │ │ -
1391 typedef typename _Hashtable::local_iterator local_iterator;
│ │ │ -
1392 typedef typename _Hashtable::const_local_iterator const_local_iterator;
│ │ │ -
1393 typedef typename _Hashtable::size_type size_type;
│ │ │ -
1394 typedef typename _Hashtable::difference_type difference_type;
│ │ │ -
1395 ///@}
│ │ │ -
1396
│ │ │ -
1397#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
1398 using node_type = typename _Hashtable::node_type;
│ │ │ -
1399#endif
│ │ │ -
1400
│ │ │ -
1401 //construct/destroy/copy
│ │ │ -
1402
│ │ │ -
1403 /// Default constructor.
│ │ │ - │ │ │ -
1405
│ │ │ -
1406 /**
│ │ │ -
1407 * @brief Default constructor creates no elements.
│ │ │ -
1408 * @param __n Mnimal initial number of buckets.
│ │ │ -
1409 * @param __hf A hash functor.
│ │ │ -
1410 * @param __eql A key equality functor.
│ │ │ -
1411 * @param __a An allocator object.
│ │ │ -
1412 */
│ │ │ -
1413 explicit
│ │ │ -
│ │ │ - │ │ │ -
1415 const hasher& __hf = hasher(),
│ │ │ -
1416 const key_equal& __eql = key_equal(),
│ │ │ -
1417 const allocator_type& __a = allocator_type())
│ │ │ -
1418 : _M_h(__n, __hf, __eql, __a)
│ │ │ -
1419 { }
│ │ │ -
│ │ │ -
1420
│ │ │ -
1421 /**
│ │ │ -
1422 * @brief Builds an %unordered_multimap from a range.
│ │ │ -
1423 * @param __first An input iterator.
│ │ │ -
1424 * @param __last An input iterator.
│ │ │ -
1425 * @param __n Minimal initial number of buckets.
│ │ │ -
1426 * @param __hf A hash functor.
│ │ │ -
1427 * @param __eql A key equality functor.
│ │ │ -
1428 * @param __a An allocator object.
│ │ │ -
1429 *
│ │ │ -
1430 * Create an %unordered_multimap consisting of copies of the elements
│ │ │ -
1431 * from [__first,__last). This is linear in N (where N is
│ │ │ -
1432 * distance(__first,__last)).
│ │ │ -
1433 */
│ │ │ -
1434 template<typename _InputIterator>
│ │ │ -
│ │ │ - │ │ │ -
1436 size_type __n = 0,
│ │ │ -
1437 const hasher& __hf = hasher(),
│ │ │ -
1438 const key_equal& __eql = key_equal(),
│ │ │ -
1439 const allocator_type& __a = allocator_type())
│ │ │ -
1440 : _M_h(__first, __last, __n, __hf, __eql, __a)
│ │ │ -
1441 { }
│ │ │ -
│ │ │ -
1442
│ │ │ -
1443 /// Copy constructor.
│ │ │ - │ │ │ -
1445
│ │ │ -
1446 /// Move constructor.
│ │ │ - │ │ │ -
1448
│ │ │ -
1449 /**
│ │ │ -
1450 * @brief Creates an %unordered_multimap with no elements.
│ │ │ -
1451 * @param __a An allocator object.
│ │ │ -
1452 */
│ │ │ -
1453 explicit
│ │ │ -
│ │ │ - │ │ │ -
1455 : _M_h(__a)
│ │ │ -
1456 { }
│ │ │ -
│ │ │ -
1457
│ │ │ -
1458 /*
│ │ │ -
1459 * @brief Copy constructor with allocator argument.
│ │ │ -
1460 * @param __uset Input %unordered_multimap to copy.
│ │ │ -
1461 * @param __a An allocator object.
│ │ │ -
1462 */
│ │ │ - │ │ │ -
1464 const allocator_type& __a)
│ │ │ -
1465 : _M_h(__ummap._M_h, __a)
│ │ │ -
1466 { }
│ │ │ -
1467
│ │ │ -
1468 /*
│ │ │ -
1469 * @brief Move constructor with allocator argument.
│ │ │ -
1470 * @param __uset Input %unordered_multimap to move.
│ │ │ -
1471 * @param __a An allocator object.
│ │ │ -
1472 */
│ │ │ - │ │ │ -
1474 const allocator_type& __a)
│ │ │ -
1475 noexcept( noexcept(_Hashtable(std::move(__ummap._M_h), __a)) )
│ │ │ -
1476 : _M_h(std::move(__ummap._M_h), __a)
│ │ │ -
1477 { }
│ │ │ -
1478
│ │ │ -
1479 /**
│ │ │ -
1480 * @brief Builds an %unordered_multimap from an initializer_list.
│ │ │ -
1481 * @param __l An initializer_list.
│ │ │ -
1482 * @param __n Minimal initial number of buckets.
│ │ │ -
1483 * @param __hf A hash functor.
│ │ │ -
1484 * @param __eql A key equality functor.
│ │ │ -
1485 * @param __a An allocator object.
│ │ │ +
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
│ │ │ +
│ │ │ + │ │ │ +
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
│ │ │ +
│ │ │ + │ │ │ +
1319 {
│ │ │ +
1320 this->_M_insert_after(cbefore_begin(),
│ │ │ + │ │ │ +
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,
│ │ │ + │ │ │ +
│ │ │ +
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,
│ │ │ + │ │ │ +
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 * Create an %unordered_multimap consisting of copies of the elements in
│ │ │ -
1488 * the list. This is linear in N (where N is @a __l.size()).
│ │ │ +
1487 * This operation is linear in the number of elements inserted and
│ │ │ +
1488 * does not invalidate iterators and references.
│ │ │
1489 */
│ │ │ -
│ │ │ - │ │ │ -
1491 size_type __n = 0,
│ │ │ -
1492 const hasher& __hf = hasher(),
│ │ │ -
1493 const key_equal& __eql = key_equal(),
│ │ │ -
1494 const allocator_type& __a = allocator_type())
│ │ │ -
1495 : _M_h(__l, __n, __hf, __eql, __a)
│ │ │ -
1496 { }
│ │ │ -
│ │ │ -
1497
│ │ │ - │ │ │ -
1499 : unordered_multimap(__n, hasher(), key_equal(), __a)
│ │ │ -
1500 { }
│ │ │ -
1501
│ │ │ -
1502 unordered_multimap(size_type __n, const hasher& __hf,
│ │ │ -
1503 const allocator_type& __a)
│ │ │ -
1504 : unordered_multimap(__n, __hf, key_equal(), __a)
│ │ │ -
1505 { }
│ │ │ -
1506
│ │ │ -
1507 template<typename _InputIterator>
│ │ │ -
1508 unordered_multimap(_InputIterator __first, _InputIterator __last,
│ │ │ -
1509 size_type __n,
│ │ │ -
1510 const allocator_type& __a)
│ │ │ -
1511 : unordered_multimap(__first, __last, __n, hasher(), key_equal(), __a)
│ │ │ -
1512 { }
│ │ │ -
1513
│ │ │ -
1514 template<typename _InputIterator>
│ │ │ -
1515 unordered_multimap(_InputIterator __first, _InputIterator __last,
│ │ │ -
1516 size_type __n, const hasher& __hf,
│ │ │ -
1517 const allocator_type& __a)
│ │ │ -
1518 : unordered_multimap(__first, __last, __n, __hf, key_equal(), __a)
│ │ │ -
1519 { }
│ │ │ -
1520
│ │ │ -
1521 unordered_multimap(initializer_list<value_type> __l,
│ │ │ -
1522 size_type __n,
│ │ │ -
1523 const allocator_type& __a)
│ │ │ -
1524 : unordered_multimap(__l, __n, hasher(), key_equal(), __a)
│ │ │ -
1525 { }
│ │ │ -
1526
│ │ │ -
1527 unordered_multimap(initializer_list<value_type> __l,
│ │ │ -
1528 size_type __n, const hasher& __hf,
│ │ │ -
1529 const allocator_type& __a)
│ │ │ -
1530 : unordered_multimap(__l, __n, __hf, key_equal(), __a)
│ │ │ -
1531 { }
│ │ │ -
1532
│ │ │ -
1533#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
1534 /**
│ │ │ -
1535 * @brief Builds an %unordered_multimap from a range.
│ │ │ -
1536 * @since C++23
│ │ │ -
1537 * @param __rg An input range of elements that can be converted to
│ │ │ -
1538 * the maps's value type.
│ │ │ -
1539 * @param __n Minimal initial number of buckets.
│ │ │ -
1540 * @param __hf A hash functor.
│ │ │ -
1541 * @param __eql A key equality functor.
│ │ │ -
1542 * @param __a An allocator object.
│ │ │ -
1543 *
│ │ │ -
1544 * Create an %unordered_multimap consisting of copies of the elements in
│ │ │ -
1545 * the range. This is linear in N (where N is `std::ranges::size(__rg)`).
│ │ │ -
1546 */
│ │ │ -
1547 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ -
1548 unordered_multimap(from_range_t, _Rg&& __rg,
│ │ │ -
1549 size_type __n = 0,
│ │ │ -
1550 const hasher& __hf = hasher(),
│ │ │ -
1551 const key_equal& __eql = key_equal(),
│ │ │ -
1552 const allocator_type& __a = allocator_type())
│ │ │ -
1553 : _M_h(__n, __hf, __eql, __a)
│ │ │ -
1554 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
1555
│ │ │ -
1556 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1557 // 2713. More missing allocator-extended constructors for unordered containers
│ │ │ -
1558 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ -
1559 unordered_multimap(from_range_t, _Rg&& __rg, const allocator_type& __a)
│ │ │ -
1560 : _M_h(0, hasher(), key_equal(), __a)
│ │ │ -
1561 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
1562
│ │ │ -
1563 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ -
1564 unordered_multimap(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ -
1565 const allocator_type& __a)
│ │ │ -
1566 : _M_h(__n, hasher(), key_equal(), __a)
│ │ │ -
1567 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
1568
│ │ │ -
1569 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ -
1570 unordered_multimap(from_range_t, _Rg&& __rg, size_type __n,
│ │ │ -
1571 const hasher& __hf, const allocator_type& __a)
│ │ │ -
1572 : _M_h(__n, __hf, key_equal(), __a)
│ │ │ -
1573 { insert_range(std::forward<_Rg>(__rg)); }
│ │ │ -
1574#endif
│ │ │ -
1575
│ │ │ -
1576 /// Copy assignment operator.
│ │ │ - │ │ │ - │ │ │ -
1579
│ │ │ -
1580 /// Move assignment operator.
│ │ │ - │ │ │ - │ │ │ -
1583
│ │ │ -
1584 /**
│ │ │ -
1585 * @brief %Unordered_multimap list assignment operator.
│ │ │ -
1586 * @param __l An initializer_list.
│ │ │ -
1587 *
│ │ │ -
1588 * This function fills an %unordered_multimap with copies of the
│ │ │ -
1589 * elements in the initializer list @a __l.
│ │ │ -
1590 *
│ │ │ -
1591 * Note that the assignment completely changes the %unordered_multimap
│ │ │ -
1592 * and that the resulting %unordered_multimap's size is the same as the
│ │ │ -
1593 * number of elements assigned.
│ │ │ -
1594 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1597 {
│ │ │ -
1598 _M_h = __l;
│ │ │ -
1599 return *this;
│ │ │ -
1600 }
│ │ │ -
│ │ │ +
1490 iterator
│ │ │ +
│ │ │ + │ │ │ +
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 {
│ │ │ + │ │ │ +
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 /// Returns the allocator object used by the %unordered_multimap.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1605 { return _M_h.get_allocator(); }
│ │ │ -
│ │ │ -
1606
│ │ │ -
1607 // size and capacity:
│ │ │ -
1608
│ │ │ -
1609 /// Returns true if the %unordered_multimap is empty.
│ │ │ -
1610 _GLIBCXX_NODISCARD bool
│ │ │ -
│ │ │ -
1611 empty() const noexcept
│ │ │ -
1612 { return _M_h.empty(); }
│ │ │ -
│ │ │ -
1613
│ │ │ -
1614 /// Returns the size of the %unordered_multimap.
│ │ │ -
1615 size_type
│ │ │ -
│ │ │ -
1616 size() const noexcept
│ │ │ -
1617 { return _M_h.size(); }
│ │ │ -
│ │ │ -
1618
│ │ │ -
1619 /// Returns the maximum size of the %unordered_multimap.
│ │ │ -
1620 size_type
│ │ │ -
│ │ │ -
1621 max_size() const noexcept
│ │ │ -
1622 { return _M_h.max_size(); }
│ │ │ -
│ │ │ -
1623
│ │ │ -
1624 // iterators.
│ │ │ -
1625
│ │ │ -
1626 /**
│ │ │ -
1627 * Returns a read/write iterator that points to the first element in the
│ │ │ -
1628 * %unordered_multimap.
│ │ │ -
1629 */
│ │ │ -
1630 iterator
│ │ │ -
│ │ │ -
1631 begin() noexcept
│ │ │ -
1632 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
1633
│ │ │ -
1634 ///@{
│ │ │ -
1635 /**
│ │ │ -
1636 * Returns a read-only (constant) iterator that points to the first
│ │ │ -
1637 * element in the %unordered_multimap.
│ │ │ -
1638 */
│ │ │ - │ │ │ -
│ │ │ -
1640 begin() const noexcept
│ │ │ -
1641 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
1642
│ │ │ - │ │ │ -
│ │ │ -
1644 cbegin() const noexcept
│ │ │ -
1645 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
1646 ///@}
│ │ │ -
1647
│ │ │ -
1648 /**
│ │ │ -
1649 * Returns a read/write iterator that points one past the last element in
│ │ │ -
1650 * the %unordered_multimap.
│ │ │ -
1651 */
│ │ │ -
1652 iterator
│ │ │ -
│ │ │ -
1653 end() noexcept
│ │ │ -
1654 { return _M_h.end(); }
│ │ │ -
│ │ │ -
1655
│ │ │ -
1656 ///@{
│ │ │ -
1657 /**
│ │ │ -
1658 * Returns a read-only (constant) iterator that points one past the last
│ │ │ -
1659 * element in the %unordered_multimap.
│ │ │ -
1660 */
│ │ │ - │ │ │ -
│ │ │ -
1662 end() const noexcept
│ │ │ -
1663 { return _M_h.end(); }
│ │ │ -
│ │ │ -
1664
│ │ │ - │ │ │ -
│ │ │ -
1666 cend() const noexcept
│ │ │ -
1667 { return _M_h.end(); }
│ │ │ -
│ │ │ -
1668 ///@}
│ │ │ -
1669
│ │ │ -
1670 // modifiers.
│ │ │ +
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 Attempts to build and insert a std::pair into the
│ │ │ -
1674 * %unordered_multimap.
│ │ │ -
1675 *
│ │ │ -
1676 * @param __args Arguments used to generate a new pair instance (see
│ │ │ -
1677 * std::piecewise_contruct for passing arguments to each
│ │ │ -
1678 * part of the pair constructor).
│ │ │ +
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 * @return An iterator that points to the inserted pair.
│ │ │ -
1681 *
│ │ │ -
1682 * This function attempts to build and insert a (key, value) %pair into
│ │ │ -
1683 * the %unordered_multimap.
│ │ │ -
1684 *
│ │ │ -
1685 * Insertion requires amortized constant time.
│ │ │ -
1686 */
│ │ │ -
1687 template<typename... _Args>
│ │ │ -
1688 iterator
│ │ │ -
│ │ │ - │ │ │ -
1690 { return _M_h.emplace(std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
1691
│ │ │ -
1692 /**
│ │ │ -
1693 * @brief Attempts to build and insert a std::pair into the
│ │ │ -
1694 * %unordered_multimap.
│ │ │ -
1695 *
│ │ │ -
1696 * @param __pos An iterator that serves as a hint as to where the pair
│ │ │ -
1697 * should be inserted.
│ │ │ -
1698 * @param __args Arguments used to generate a new pair instance (see
│ │ │ -
1699 * std::piecewise_contruct for passing arguments to each
│ │ │ -
1700 * part of the pair constructor).
│ │ │ -
1701 * @return An iterator that points to the element with key of the
│ │ │ -
1702 * std::pair built from @a __args.
│ │ │ -
1703 *
│ │ │ -
1704 * Note that the first parameter is only a hint and can potentially
│ │ │ -
1705 * improve the performance of the insertion process. A bad hint would
│ │ │ -
1706 * cause no gains in efficiency.
│ │ │ -
1707 *
│ │ │ -
1708 * See
│ │ │ -
1709 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
1710 * for more on @a hinting.
│ │ │ +
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
│ │ │ +
│ │ │ + │ │ │ +
1688 const_iterator __before, const_iterator __last) noexcept
│ │ │ +
1689 { _M_splice_after(__pos, __before, __last); }
│ │ │ +
│ │ │ +
1690
│ │ │ +
1691 void
│ │ │ +
│ │ │ + │ │ │ +
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 * Insertion requires amortized constant time.
│ │ │ -
1713 */
│ │ │ -
1714 template<typename... _Args>
│ │ │ -
1715 iterator
│ │ │ -
│ │ │ - │ │ │ -
1717 { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
1718
│ │ │ -
1719 ///@{
│ │ │ -
1720 /**
│ │ │ -
1721 * @brief Inserts a std::pair into the %unordered_multimap.
│ │ │ -
1722 * @param __x Pair to be inserted (see std::make_pair for easy
│ │ │ -
1723 * creation of pairs).
│ │ │ -
1724 *
│ │ │ -
1725 * @return An iterator that points to the inserted pair.
│ │ │ +
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 * Insertion requires amortized constant time.
│ │ │ -
1728 */
│ │ │ -
1729 iterator
│ │ │ -
│ │ │ -
1730 insert(const value_type& __x)
│ │ │ -
1731 { return _M_h.insert(__x); }
│ │ │ -
│ │ │ -
1732
│ │ │ -
1733 iterator
│ │ │ -
│ │ │ - │ │ │ -
1735 { return _M_h.insert(std::move(__x)); }
│ │ │ -
│ │ │ -
1736
│ │ │ -
1737 template<typename _Pair>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1740 { return _M_h.emplace(std::forward<_Pair>(__x)); }
│ │ │ -
│ │ │ -
1741 ///@}
│ │ │ -
1742
│ │ │ -
1743 ///@{
│ │ │ -
1744 /**
│ │ │ -
1745 * @brief Inserts a std::pair into the %unordered_multimap.
│ │ │ -
1746 * @param __hint An iterator that serves as a hint as to where the
│ │ │ -
1747 * pair should be inserted.
│ │ │ -
1748 * @param __x Pair to be inserted (see std::make_pair for easy creation
│ │ │ -
1749 * of pairs).
│ │ │ -
1750 * @return An iterator that points to the element with key of
│ │ │ -
1751 * @a __x (may or may not be the %pair passed in).
│ │ │ -
1752 *
│ │ │ -
1753 * Note that the first parameter is only a hint and can potentially
│ │ │ -
1754 * improve the performance of the insertion process. A bad hint would
│ │ │ -
1755 * cause no gains in efficiency.
│ │ │ -
1756 *
│ │ │ -
1757 * See
│ │ │ -
1758 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
1759 * for more on @a hinting.
│ │ │ -
1760 *
│ │ │ -
1761 * Insertion requires amortized constant time.
│ │ │ -
1762 */
│ │ │ -
1763 iterator
│ │ │ -
│ │ │ - │ │ │ -
1765 { return _M_h.insert(__hint, __x); }
│ │ │ -
│ │ │ -
1766
│ │ │ -
1767 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1768 // 2354. Unnecessary copying when inserting into maps with braced-init
│ │ │ -
1769 iterator
│ │ │ -
│ │ │ - │ │ │ -
1771 { return _M_h.insert(__hint, std::move(__x)); }
│ │ │ -
│ │ │ -
1772
│ │ │ -
1773 template<typename _Pair>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1776 { return _M_h.emplace_hint(__hint, std::forward<_Pair>(__x)); }
│ │ │ -
│ │ │ -
1777 ///@}
│ │ │ -
1778
│ │ │ -
1779 /**
│ │ │ -
1780 * @brief A template function that attempts to insert a range of
│ │ │ -
1781 * elements.
│ │ │ -
1782 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
1783 * inserted.
│ │ │ -
1784 * @param __last Iterator pointing to the end of the range.
│ │ │ -
1785 *
│ │ │ -
1786 * Complexity similar to that of the range constructor.
│ │ │ -
1787 */
│ │ │ -
1788 template<typename _InputIterator>
│ │ │ -
1789 void
│ │ │ -
│ │ │ - │ │ │ -
1791 { _M_h.insert(__first, __last); }
│ │ │ -
│ │ │ -
1792
│ │ │ -
1793 /**
│ │ │ -
1794 * @brief Attempts to insert a list of elements into the
│ │ │ -
1795 * %unordered_multimap.
│ │ │ -
1796 * @param __l A std::initializer_list<value_type> of elements
│ │ │ -
1797 * to be inserted.
│ │ │ -
1798 *
│ │ │ -
1799 * Complexity similar to that of the range constructor.
│ │ │ -
1800 */
│ │ │ -
1801 void
│ │ │ -
│ │ │ - │ │ │ -
1803 { _M_h.insert(__l); }
│ │ │ -
│ │ │ -
1804
│ │ │ -
1805#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
1806 /**
│ │ │ -
1807 * @brief Inserts a range of elements.
│ │ │ -
1808 * @since C++23
│ │ │ -
1809 * @param __rg An input range of elements that can be converted to
│ │ │ -
1810 * the maps's value type.
│ │ │ -
1811 */
│ │ │ -
1812 template<__detail::__container_compatible_range<value_type> _Rg>
│ │ │ -
1813 void
│ │ │ - │ │ │ -
1815 {
│ │ │ -
1816 auto __first = ranges::begin(__rg);
│ │ │ -
1817 const auto __last = ranges::end(__rg);
│ │ │ -
1818 if (__first == __last)
│ │ │ -
1819 return;
│ │ │ -
1820
│ │ │ -
1821 if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>)
│ │ │ -
1822 _M_h._M_rehash_insert(size_type(ranges::distance(__rg)));
│ │ │ -
1823 else
│ │ │ -
1824 _M_h._M_rehash_insert(1);
│ │ │ -
1825
│ │ │ -
1826 for (; __first != __last; ++__first)
│ │ │ -
1827 _M_h.emplace(*__first);
│ │ │ -
1828 }
│ │ │ -
1829#endif
│ │ │ -
1830
│ │ │ -
1831#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
1832 /// Extract a node.
│ │ │ -
1833 node_type
│ │ │ +
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
│ │ │ + │ │ │ +
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
│ │ │ + │ │ │ +
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
│ │ │
│ │ │ - │ │ │ -
1835 {
│ │ │ -
1836 __glibcxx_assert(__pos != end());
│ │ │ -
1837 return _M_h.extract(__pos);
│ │ │ -
1838 }
│ │ │ -
│ │ │ -
1839
│ │ │ -
1840 /// Extract a node.
│ │ │ -
1841 node_type
│ │ │ -
│ │ │ - │ │ │ -
1843 { return _M_h.extract(__key); }
│ │ │ -
│ │ │ -
1844
│ │ │ -
1845 /// Re-insert an extracted node.
│ │ │ -
1846 iterator
│ │ │ -
│ │ │ -
1847 insert(node_type&& __nh)
│ │ │ -
1848 { return _M_h._M_reinsert_node_multi(cend(), std::move(__nh)); }
│ │ │ -
│ │ │ -
1849
│ │ │ -
1850 /// Re-insert an extracted node.
│ │ │ -
1851 iterator
│ │ │ -
│ │ │ - │ │ │ -
1853 { return _M_h._M_reinsert_node_multi(__hint, std::move(__nh)); }
│ │ │ -
│ │ │ -
1854#endif // node_extract
│ │ │ -
1855
│ │ │ -
1856 ///@{
│ │ │ -
1857 /**
│ │ │ -
1858 * @brief Erases an element from an %unordered_multimap.
│ │ │ -
1859 * @param __position An iterator pointing to the element to be erased.
│ │ │ -
1860 * @return An iterator pointing to the element immediately following
│ │ │ -
1861 * @a __position prior to the element being erased. If no such
│ │ │ -
1862 * element exists, end() is returned.
│ │ │ -
1863 *
│ │ │ -
1864 * This function erases an element, pointed to by the given iterator,
│ │ │ -
1865 * from an %unordered_multimap.
│ │ │ -
1866 * Note that this function only erases the element, and that if the
│ │ │ -
1867 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ -
1868 * any way. Managing the pointer is the user's responsibility.
│ │ │ -
1869 */
│ │ │ -
1870 iterator
│ │ │ -
│ │ │ - │ │ │ -
1872 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
1873
│ │ │ -
1874 // LWG 2059.
│ │ │ -
1875 iterator
│ │ │ -
│ │ │ - │ │ │ -
1877 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
1878 ///@}
│ │ │ -
1879
│ │ │ -
1880 /**
│ │ │ -
1881 * @brief Erases elements according to the provided key.
│ │ │ -
1882 * @param __x Key of elements to be erased.
│ │ │ -
1883 * @return The number of elements erased.
│ │ │ -
1884 *
│ │ │ -
1885 * This function erases all the elements located by the given key from
│ │ │ -
1886 * an %unordered_multimap.
│ │ │ -
1887 * Note that this function only erases the element, and that if the
│ │ │ -
1888 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ -
1889 * any way. Managing the pointer is the user's responsibility.
│ │ │ -
1890 */
│ │ │ -
1891 size_type
│ │ │ -
│ │ │ -
1892 erase(const key_type& __x)
│ │ │ -
1893 { return _M_h.erase(__x); }
│ │ │ -
│ │ │ -
1894
│ │ │ -
1895 /**
│ │ │ -
1896 * @brief Erases a [__first,__last) range of elements from an
│ │ │ -
1897 * %unordered_multimap.
│ │ │ -
1898 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
1899 * erased.
│ │ │ -
1900 * @param __last Iterator pointing to the end of the range to
│ │ │ -
1901 * be erased.
│ │ │ -
1902 * @return The iterator @a __last.
│ │ │ -
1903 *
│ │ │ -
1904 * This function erases a sequence of elements from an
│ │ │ -
1905 * %unordered_multimap.
│ │ │ -
1906 * Note that this function only erases the elements, and that if
│ │ │ -
1907 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ -
1908 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
1909 */
│ │ │ -
1910 iterator
│ │ │ -
│ │ │ - │ │ │ -
1912 { return _M_h.erase(__first, __last); }
│ │ │ -
│ │ │ -
1913
│ │ │ -
1914 /**
│ │ │ -
1915 * Erases all elements in an %unordered_multimap.
│ │ │ -
1916 * Note that this function only erases the elements, and that if the
│ │ │ -
1917 * elements themselves are pointers, the pointed-to memory is not touched
│ │ │ -
1918 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
1919 */
│ │ │ -
1920 void
│ │ │ -
│ │ │ -
1921 clear() noexcept
│ │ │ -
1922 { _M_h.clear(); }
│ │ │ -
│ │ │ -
1923
│ │ │ -
1924 /**
│ │ │ -
1925 * @brief Swaps data with another %unordered_multimap.
│ │ │ -
1926 * @param __x An %unordered_multimap of the same element and allocator
│ │ │ -
1927 * types.
│ │ │ -
1928 *
│ │ │ -
1929 * This exchanges the elements between two %unordered_multimap in
│ │ │ -
1930 * constant time.
│ │ │ -
1931 * Note that the global std::swap() function is specialized such that
│ │ │ -
1932 * std::swap(m1,m2) will feed to this function.
│ │ │ -
1933 */
│ │ │ -
1934 void
│ │ │ -
│ │ │ - │ │ │ -
1936 noexcept( noexcept(_M_h.swap(__x._M_h)) )
│ │ │ -
1937 { _M_h.swap(__x._M_h); }
│ │ │ -
│ │ │ -
1938
│ │ │ -
1939#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
1940 template<typename, typename, typename>
│ │ │ -
1941 friend class std::_Hash_merge_helper;
│ │ │ -
1942
│ │ │ -
1943 template<typename _H2, typename _P2>
│ │ │ -
1944 void
│ │ │ - │ │ │ -
1946 {
│ │ │ - │ │ │ -
1948 if (std::__addressof(__source) == this) [[__unlikely__]]
│ │ │ -
1949 return;
│ │ │ -
1950
│ │ │ -
1951 using _Merge_helper
│ │ │ - │ │ │ -
1953 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ -
1954 }
│ │ │ +
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
│ │ │ +
1949 = typename iterator_traits<_InputIterator>::value_type,
│ │ │ +
1950 typename _Allocator = allocator<_ValT>,
│ │ │ +
1951 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
1952 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1953 forward_list(_InputIterator, _InputIterator, _Allocator = _Allocator())
│ │ │ +
1954 -> forward_list<_ValT, _Allocator>;
│ │ │
1955
│ │ │ -
1956 template<typename _H2, typename _P2>
│ │ │ -
1957 void
│ │ │ -
1958 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ -
1959 {
│ │ │ -
1960 using _Merge_helper
│ │ │ -
1961 = _Hash_merge_helper<unordered_multimap, _H2, _P2>;
│ │ │ -
1962 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ -
1963 }
│ │ │ -
1964
│ │ │ -
1965 template<typename _H2, typename _P2>
│ │ │ -
1966 void
│ │ │ -
1967 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>& __source)
│ │ │ -
1968 {
│ │ │ -
1969 using _Merge_helper
│ │ │ -
1970 = _Hash_merge_helper<unordered_multimap, _H2, _P2>;
│ │ │ -
1971 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ -
1972 }
│ │ │ -
1973
│ │ │ -
1974 template<typename _H2, typename _P2>
│ │ │ -
1975 void
│ │ │ -
1976 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ -
1977 { merge(__source); }
│ │ │ -
1978#endif // node_extract
│ │ │ +
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())
│ │ │ +
1960 -> forward_list<ranges::range_value_t<_Rg>, _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
│ │ │ +
│ │ │ + │ │ │ + │ │ │
1979
│ │ │ -
1980 // observers.
│ │ │ -
1981
│ │ │ -
1982 /// Returns the hash functor object with which the %unordered_multimap
│ │ │ -
1983 /// was constructed.
│ │ │ -
1984 hasher
│ │ │ -
│ │ │ - │ │ │ -
1986 { return _M_h.hash_function(); }
│ │ │ -
│ │ │ -
1987
│ │ │ -
1988 /// Returns the key comparison object with which the %unordered_multimap
│ │ │ -
1989 /// was constructed.
│ │ │ -
1990 key_equal
│ │ │ -
│ │ │ -
1991 key_eq() const
│ │ │ -
1992 { return _M_h.key_eq(); }
│ │ │ -
│ │ │ -
1993
│ │ │ -
1994 // lookup.
│ │ │ -
1995
│ │ │ -
1996 ///@{
│ │ │ -
1997 /**
│ │ │ -
1998 * @brief Tries to locate an element in an %unordered_multimap.
│ │ │ -
1999 * @param __x Key to be located.
│ │ │ -
2000 * @return Iterator pointing to sought-after element, or end() if not
│ │ │ -
2001 * found.
│ │ │ -
2002 *
│ │ │ -
2003 * This function takes a key and tries to locate the element with which
│ │ │ -
2004 * the key matches. If successful the function returns an iterator
│ │ │ -
2005 * pointing to the sought after element. If unsuccessful it returns the
│ │ │ -
2006 * past-the-end ( @c end() ) iterator.
│ │ │ -
2007 */
│ │ │ -
2008 iterator
│ │ │ -
│ │ │ -
2009 find(const key_type& __x)
│ │ │ -
2010 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
2011
│ │ │ -
2012#if __cplusplus > 201703L
│ │ │ -
2013 template<typename _Kt>
│ │ │ -
2014 auto
│ │ │ -
│ │ │ -
2015 find(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x))
│ │ │ -
2016 { return _M_h._M_find_tr(__x); }
│ │ │ -
│ │ │ -
2017#endif
│ │ │ -
2018
│ │ │ - │ │ │ -
│ │ │ -
2020 find(const key_type& __x) const
│ │ │ -
2021 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
2022
│ │ │ -
2023#if __cplusplus > 201703L
│ │ │ -
2024 template<typename _Kt>
│ │ │ -
2025 auto
│ │ │ -
│ │ │ -
2026 find(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x))
│ │ │ -
2027 { return _M_h._M_find_tr(__x); }
│ │ │ -
│ │ │ -
2028#endif
│ │ │ -
2029 ///@}
│ │ │ -
2030
│ │ │ -
2031 ///@{
│ │ │ -
2032 /**
│ │ │ -
2033 * @brief Finds the number of elements.
│ │ │ -
2034 * @param __x Key to count.
│ │ │ -
2035 * @return Number of elements with specified key.
│ │ │ -
2036 */
│ │ │ -
2037 size_type
│ │ │ -
│ │ │ -
2038 count(const key_type& __x) const
│ │ │ -
2039 { return _M_h.count(__x); }
│ │ │ -
│ │ │ -
2040
│ │ │ -
2041#if __cplusplus > 201703L
│ │ │ -
2042 template<typename _Kt>
│ │ │ -
2043 auto
│ │ │ -
│ │ │ -
2044 count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x))
│ │ │ -
2045 { return _M_h._M_count_tr(__x); }
│ │ │ -
│ │ │ -
2046#endif
│ │ │ -
2047 ///@}
│ │ │ -
2048
│ │ │ -
2049#if __cplusplus > 201703L
│ │ │ -
2050 ///@{
│ │ │ -
2051 /**
│ │ │ -
2052 * @brief Finds whether an element with the given key exists.
│ │ │ -
2053 * @param __x Key of elements to be located.
│ │ │ -
2054 * @return True if there is any element with the specified key.
│ │ │ -
2055 */
│ │ │ -
2056 bool
│ │ │ -
│ │ │ -
2057 contains(const key_type& __x) const
│ │ │ -
2058 { return _M_h.find(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
2059
│ │ │ -
2060 template<typename _Kt>
│ │ │ -
2061 auto
│ │ │ -
│ │ │ -
2062 contains(const _Kt& __x) const
│ │ │ -
2063 -> decltype(_M_h._M_find_tr(__x), void(), true)
│ │ │ -
2064 { return _M_h._M_find_tr(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
2065 ///@}
│ │ │ -
2066#endif
│ │ │ -
2067
│ │ │ -
2068 ///@{
│ │ │ -
2069 /**
│ │ │ -
2070 * @brief Finds a subsequence matching given key.
│ │ │ -
2071 * @param __x Key to be located.
│ │ │ -
2072 * @return Pair of iterators that possibly points to the subsequence
│ │ │ -
2073 * matching given key.
│ │ │ -
2074 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
2077 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
2078
│ │ │ -
2079#if __cplusplus > 201703L
│ │ │ -
2080 template<typename _Kt>
│ │ │ -
2081 auto
│ │ │ -
│ │ │ -
2082 equal_range(const _Kt& __x)
│ │ │ -
2083 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ -
2084 { return _M_h._M_equal_range_tr(__x); }
│ │ │ -
│ │ │ -
2085#endif
│ │ │ -
2086
│ │ │ - │ │ │ -
│ │ │ -
2088 equal_range(const key_type& __x) const
│ │ │ -
2089 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
2090
│ │ │ -
2091#if __cplusplus > 201703L
│ │ │ -
2092 template<typename _Kt>
│ │ │ -
2093 auto
│ │ │ -
│ │ │ -
2094 equal_range(const _Kt& __x) const
│ │ │ -
2095 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ -
2096 { return _M_h._M_equal_range_tr(__x); }
│ │ │ -
│ │ │ -
2097#endif
│ │ │ -
2098 ///@}
│ │ │ -
2099
│ │ │ -
2100 // bucket interface.
│ │ │ -
2101
│ │ │ -
2102 /// Returns the number of buckets of the %unordered_multimap.
│ │ │ -
2103 size_type
│ │ │ -
│ │ │ - │ │ │ -
2105 { return _M_h.bucket_count(); }
│ │ │ -
│ │ │ -
2106
│ │ │ -
2107 /// Returns the maximum number of buckets of the %unordered_multimap.
│ │ │ -
2108 size_type
│ │ │ -
│ │ │ - │ │ │ -
2110 { return _M_h.max_bucket_count(); }
│ │ │ -
│ │ │ -
2111
│ │ │ -
2112 /*
│ │ │ -
2113 * @brief Returns the number of elements in a given bucket.
│ │ │ -
2114 * @param __n A bucket index.
│ │ │ -
2115 * @return The number of elements in the bucket.
│ │ │ -
2116 */
│ │ │ -
2117 size_type
│ │ │ -
2118 bucket_size(size_type __n) const
│ │ │ -
2119 { return _M_h.bucket_size(__n); }
│ │ │ -
2120
│ │ │ -
2121 /*
│ │ │ -
2122 * @brief Returns the bucket index of a given element.
│ │ │ -
2123 * @param __key A key instance.
│ │ │ -
2124 * @return The key bucket index.
│ │ │ -
2125 */
│ │ │ -
2126 size_type
│ │ │ -
2127 bucket(const key_type& __key) const
│ │ │ -
2128 { return _M_h.bucket(__key); }
│ │ │ -
2129
│ │ │ -
2130 /**
│ │ │ -
2131 * @brief Returns a read/write iterator pointing to the first bucket
│ │ │ -
2132 * element.
│ │ │ -
2133 * @param __n The bucket index.
│ │ │ -
2134 * @return A read/write local iterator.
│ │ │ -
2135 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
2138 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
2139
│ │ │ -
2140 ///@{
│ │ │ -
2141 /**
│ │ │ -
2142 * @brief Returns a read-only (constant) iterator pointing to the first
│ │ │ -
2143 * bucket element.
│ │ │ -
2144 * @param __n The bucket index.
│ │ │ -
2145 * @return A read-only local iterator.
│ │ │ -
2146 */
│ │ │ - │ │ │ -
│ │ │ -
2148 begin(size_type __n) const
│ │ │ -
2149 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
2150
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
2153 { return _M_h.cbegin(__n); }
│ │ │ -
│ │ │ -
2154 ///@}
│ │ │ -
2155
│ │ │ -
2156 /**
│ │ │ -
2157 * @brief Returns a read/write iterator pointing to one past the last
│ │ │ -
2158 * bucket elements.
│ │ │ -
2159 * @param __n The bucket index.
│ │ │ -
2160 * @return A read/write local iterator.
│ │ │ -
2161 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
2164 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
2165
│ │ │ -
2166 ///@{
│ │ │ -
2167 /**
│ │ │ -
2168 * @brief Returns a read-only (constant) iterator pointing to one past
│ │ │ -
2169 * the last bucket elements.
│ │ │ -
2170 * @param __n The bucket index.
│ │ │ -
2171 * @return A read-only local iterator.
│ │ │ -
2172 */
│ │ │ - │ │ │ -
│ │ │ -
2174 end(size_type __n) const
│ │ │ -
2175 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
2176
│ │ │ - │ │ │ -
│ │ │ -
2178 cend(size_type __n) const
│ │ │ -
2179 { return _M_h.cend(__n); }
│ │ │ -
│ │ │ -
2180 ///@}
│ │ │ -
2181
│ │ │ -
2182 // hash policy.
│ │ │ -
2183
│ │ │ -
2184 /// Returns the average number of elements per bucket.
│ │ │ -
2185 float
│ │ │ -
│ │ │ - │ │ │ -
2187 { return _M_h.load_factor(); }
│ │ │ -
│ │ │ -
2188
│ │ │ -
2189 /// Returns a positive number that the %unordered_multimap tries to keep
│ │ │ -
2190 /// the load factor less than or equal to.
│ │ │ -
2191 float
│ │ │ -
│ │ │ - │ │ │ -
2193 { return _M_h.max_load_factor(); }
│ │ │ -
│ │ │ -
2194
│ │ │ -
2195 /**
│ │ │ -
2196 * @brief Change the %unordered_multimap maximum load factor.
│ │ │ -
2197 * @param __z The new maximum load factor.
│ │ │ -
2198 */
│ │ │ -
2199 void
│ │ │ -
│ │ │ - │ │ │ -
2201 { _M_h.max_load_factor(__z); }
│ │ │ -
│ │ │ -
2202
│ │ │ -
2203 /**
│ │ │ -
2204 * @brief May rehash the %unordered_multimap.
│ │ │ -
2205 * @param __n The new number of buckets.
│ │ │ -
2206 *
│ │ │ -
2207 * Rehash will occur only if the new number of buckets respect the
│ │ │ -
2208 * %unordered_multimap maximum load factor.
│ │ │ -
2209 */
│ │ │ -
2210 void
│ │ │ -
│ │ │ - │ │ │ -
2212 { _M_h.rehash(__n); }
│ │ │ -
│ │ │ -
2213
│ │ │ -
2214 /**
│ │ │ -
2215 * @brief Prepare the %unordered_multimap for a specified number of
│ │ │ -
2216 * elements.
│ │ │ -
2217 * @param __n Number of elements required.
│ │ │ -
2218 *
│ │ │ -
2219 * Same as rehash(ceil(n / max_load_factor())).
│ │ │ -
2220 */
│ │ │ -
2221 void
│ │ │ -
│ │ │ - │ │ │ -
2223 { _M_h.reserve(__n); }
│ │ │ -
│ │ │ -
2224
│ │ │ -
2225 template<typename _Key1, typename _Tp1, typename _Hash1, typename _Pred1,
│ │ │ -
2226 typename _Alloc1>
│ │ │ -
2227 friend bool
│ │ │ -
2228 operator==(const unordered_multimap<_Key1, _Tp1,
│ │ │ -
2229 _Hash1, _Pred1, _Alloc1>&,
│ │ │ - │ │ │ -
2231 _Hash1, _Pred1, _Alloc1>&);
│ │ │ -
2232 };
│ │ │ -
│ │ │ -
2233
│ │ │ -
2234#if __cpp_deduction_guides >= 201606
│ │ │ -
2235
│ │ │ -
2236 template<typename _InputIterator,
│ │ │ -
2237 typename _Hash = hash<__iter_key_t<_InputIterator>>,
│ │ │ -
2238 typename _Pred = equal_to<__iter_key_t<_InputIterator>>,
│ │ │ -
2239 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>,
│ │ │ -
2240 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
2241 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
2242 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
2243 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2244 unordered_multimap(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
2246 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ -
2247 _Allocator = _Allocator())
│ │ │ -
2248 -> unordered_multimap<__iter_key_t<_InputIterator>,
│ │ │ -
2249 __iter_val_t<_InputIterator>, _Hash, _Pred,
│ │ │ -
2250 _Allocator>;
│ │ │ -
2251
│ │ │ -
2252 template<typename _Key, typename _Tp, typename _Hash = hash<_Key>,
│ │ │ -
2253 typename _Pred = equal_to<_Key>,
│ │ │ -
2254 typename _Allocator = allocator<pair<const _Key, _Tp>>,
│ │ │ -
2255 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
2256 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
2257 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2258 unordered_multimap(initializer_list<pair<_Key, _Tp>>,
│ │ │ - │ │ │ -
2260 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ -
2261 _Allocator = _Allocator())
│ │ │ -
2262 -> unordered_multimap<_Key, _Tp, _Hash, _Pred, _Allocator>;
│ │ │ -
2263
│ │ │ -
2264 template<typename _InputIterator, typename _Allocator,
│ │ │ -
2265 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
2266 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2267 unordered_multimap(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
2269 -> unordered_multimap<__iter_key_t<_InputIterator>,
│ │ │ -
2270 __iter_val_t<_InputIterator>,
│ │ │ -
2271 hash<__iter_key_t<_InputIterator>>,
│ │ │ -
2272 equal_to<__iter_key_t<_InputIterator>>, _Allocator>;
│ │ │ -
2273
│ │ │ -
2274 template<typename _InputIterator, typename _Allocator,
│ │ │ -
2275 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
2276 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2277 unordered_multimap(_InputIterator, _InputIterator, _Allocator)
│ │ │ -
2278 -> unordered_multimap<__iter_key_t<_InputIterator>,
│ │ │ -
2279 __iter_val_t<_InputIterator>,
│ │ │ -
2280 hash<__iter_key_t<_InputIterator>>,
│ │ │ -
2281 equal_to<__iter_key_t<_InputIterator>>, _Allocator>;
│ │ │ -
2282
│ │ │ -
2283 template<typename _InputIterator, typename _Hash, typename _Allocator,
│ │ │ -
2284 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
2285 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
2286 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2287 unordered_multimap(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
2289 _Allocator)
│ │ │ -
2290 -> unordered_multimap<__iter_key_t<_InputIterator>,
│ │ │ -
2291 __iter_val_t<_InputIterator>, _Hash,
│ │ │ -
2292 equal_to<__iter_key_t<_InputIterator>>, _Allocator>;
│ │ │ -
2293
│ │ │ -
2294 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ -
2295 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2296 unordered_multimap(initializer_list<pair<_Key, _Tp>>,
│ │ │ - │ │ │ -
2298 _Allocator)
│ │ │ -
2299 -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
│ │ │ -
2300
│ │ │ -
2301 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ -
2302 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2303 unordered_multimap(initializer_list<pair<_Key, _Tp>>, _Allocator)
│ │ │ -
2304 -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
│ │ │ -
2305
│ │ │ -
2306 template<typename _Key, typename _Tp, typename _Hash, typename _Allocator,
│ │ │ -
2307 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
2308 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2309 unordered_multimap(initializer_list<pair<_Key, _Tp>>,
│ │ │ - │ │ │ -
2311 _Hash, _Allocator)
│ │ │ -
2312 -> unordered_multimap<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>;
│ │ │ -
2313
│ │ │ -
2314#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
2315 template<ranges::input_range _Rg,
│ │ │ -
2316 __not_allocator_like _Hash = hash<__detail::__range_key_type<_Rg>>,
│ │ │ -
2317 __not_allocator_like _Pred = equal_to<__detail::__range_key_type<_Rg>>,
│ │ │ -
2318 __allocator_like _Allocator =
│ │ │ -
2319 allocator<__detail::__range_to_alloc_type<_Rg>>>
│ │ │ -
2320 unordered_multimap(from_range_t, _Rg&&,
│ │ │ - │ │ │ -
2322 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ -
2323 _Allocator = _Allocator())
│ │ │ -
2324 -> unordered_multimap<__detail::__range_key_type<_Rg>,
│ │ │ -
2325 __detail::__range_mapped_type<_Rg>,
│ │ │ -
2326 _Hash, _Pred, _Allocator>;
│ │ │ -
2327
│ │ │ -
2328 template<ranges::input_range _Rg,
│ │ │ -
2329 __allocator_like _Allocator>
│ │ │ -
2330 unordered_multimap(from_range_t, _Rg&&, unordered_multimap<int, int>::size_type,
│ │ │ -
2331 _Allocator)
│ │ │ -
2332 -> unordered_multimap<__detail::__range_key_type<_Rg>,
│ │ │ -
2333 __detail::__range_mapped_type<_Rg>,
│ │ │ -
2334 hash<__detail::__range_key_type<_Rg>>,
│ │ │ -
2335 equal_to<__detail::__range_key_type<_Rg>>,
│ │ │ -
2336 _Allocator>;
│ │ │ -
2337
│ │ │ -
2338 template<ranges::input_range _Rg,
│ │ │ -
2339 __allocator_like _Allocator>
│ │ │ -
2340 unordered_multimap(from_range_t, _Rg&&, _Allocator)
│ │ │ -
2341 -> unordered_multimap<__detail::__range_key_type<_Rg>,
│ │ │ -
2342 __detail::__range_mapped_type<_Rg>,
│ │ │ -
2343 hash<__detail::__range_key_type<_Rg>>,
│ │ │ -
2344 equal_to<__detail::__range_key_type<_Rg>>,
│ │ │ -
2345 _Allocator>;
│ │ │ -
2346
│ │ │ -
2347 template<ranges::input_range _Rg,
│ │ │ -
2348 __not_allocator_like _Hash,
│ │ │ -
2349 __allocator_like _Allocator>
│ │ │ -
2350 unordered_multimap(from_range_t, _Rg&&,
│ │ │ - │ │ │ -
2352 _Hash, _Allocator)
│ │ │ -
2353 -> unordered_multimap<__detail::__range_key_type<_Rg>,
│ │ │ -
2354 __detail::__range_mapped_type<_Rg>,
│ │ │ -
2355 _Hash, equal_to<__detail::__range_key_type<_Rg>>,
│ │ │ -
2356 _Allocator>;
│ │ │ -
2357#endif
│ │ │ -
2358#endif
│ │ │ -
2359
│ │ │ -
2360 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2361 inline void
│ │ │ -
2362 swap(unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
2363 unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
2364 noexcept(noexcept(__x.swap(__y)))
│ │ │ -
2365 { __x.swap(__y); }
│ │ │ -
2366
│ │ │ -
2367 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2368 inline void
│ │ │ -
2369 swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
2370 unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
2371 noexcept(noexcept(__x.swap(__y)))
│ │ │ -
2372 { __x.swap(__y); }
│ │ │ -
2373
│ │ │ -
2374 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2375 inline bool
│ │ │ -
2376 operator==(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
2377 const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
2378 { return __x._M_h._M_equal(__y._M_h); }
│ │ │ -
2379
│ │ │ -
2380#if __cpp_impl_three_way_comparison < 201907L
│ │ │ -
2381 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2382 inline bool
│ │ │ -
2383 operator!=(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
2384 const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
2385 { return !(__x == __y); }
│ │ │ -
2386#endif
│ │ │ -
2387
│ │ │ -
2388 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2389 inline bool
│ │ │ -
2390 operator==(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
2391 const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
2392 { return __x._M_h._M_equal(__y._M_h); }
│ │ │ -
2393
│ │ │ -
2394#if __cpp_impl_three_way_comparison < 201907L
│ │ │ -
2395 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2396 inline bool
│ │ │ -
2397 operator!=(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
2398 const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
2399 { return !(__x == __y); }
│ │ │ -
2400#endif
│ │ │ -
2401
│ │ │ -
2402_GLIBCXX_END_NAMESPACE_CONTAINER
│ │ │ -
2403
│ │ │ -
2404#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
2405 // Allow std::unordered_map access to internals of compatible maps.
│ │ │ -
2406 template<typename _Key, typename _Val, typename _Hash1, typename _Eq1,
│ │ │ -
2407 typename _Alloc, typename _Hash2, typename _Eq2>
│ │ │ -
2408 struct _Hash_merge_helper<
│ │ │ -
2409 _GLIBCXX_STD_C::unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>,
│ │ │ -
2410 _Hash2, _Eq2>
│ │ │ -
2411 {
│ │ │ -
2412 private:
│ │ │ -
2413 template<typename... _Tp>
│ │ │ -
2414 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>;
│ │ │ -
2415 template<typename... _Tp>
│ │ │ -
2416 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>;
│ │ │ -
2417
│ │ │ -
2418 friend unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>;
│ │ │ -
2419
│ │ │ -
2420 static auto&
│ │ │ -
2421 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ -
2422 { return __map._M_h; }
│ │ │ -
2423
│ │ │ -
2424 static auto&
│ │ │ -
2425 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ -
2426 { return __map._M_h; }
│ │ │ -
2427 };
│ │ │ -
2428
│ │ │ -
2429 // Allow std::unordered_multimap access to internals of compatible maps.
│ │ │ -
2430 template<typename _Key, typename _Val, typename _Hash1, typename _Eq1,
│ │ │ -
2431 typename _Alloc, typename _Hash2, typename _Eq2>
│ │ │ -
2432 struct _Hash_merge_helper<
│ │ │ -
2433 _GLIBCXX_STD_C::unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>,
│ │ │ -
2434 _Hash2, _Eq2>
│ │ │ -
2435 {
│ │ │ -
2436 private:
│ │ │ -
2437 template<typename... _Tp>
│ │ │ -
2438 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>;
│ │ │ -
2439 template<typename... _Tp>
│ │ │ -
2440 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>;
│ │ │ -
2441
│ │ │ -
2442 friend unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>;
│ │ │ -
2443
│ │ │ -
2444 static auto&
│ │ │ -
2445 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ -
2446 { return __map._M_h; }
│ │ │ -
2447
│ │ │ -
2448 static auto&
│ │ │ -
2449 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ -
2450 { return __map._M_h; }
│ │ │ -
2451 };
│ │ │ -
2452#endif // node_extract
│ │ │ -
2453
│ │ │ -
2454_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
2455} // namespace std
│ │ │ -
2456
│ │ │ -
2457#endif /* _UNORDERED_MAP_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
│ │ │ +
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 {
│ │ │ +
1998 return std::lexicographical_compare_three_way(__x.begin(), __x.end(),
│ │ │ +
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
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
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:866
│ │ │ +
constexpr complex< _Tp > operator*(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x times y.
Definition complex:434
│ │ │ +
__bool_constant< true > true_type
The type used as a compile-time boolean with true value.
Definition type_traits:116
│ │ │ +
__bool_constant< false > false_type
The type used as a compile-time boolean with false value.
Definition type_traits:119
│ │ │ +
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 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.
│ │ │ -
__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.
│ │ │ -
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.
│ │ │ -
_Hashtable::reference reference
Iterator-related typedefs.
│ │ │ -
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.
│ │ │ -
_Hashtable::iterator iterator
Iterator-related typedefs.
│ │ │ -
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.
│ │ │ -
iterator insert(const_iterator __hint, node_type &&__nh)
Re-insert an extracted node.
│ │ │ -
__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.
│ │ │ -
_Hashtable::mapped_type mapped_type
Public typedefs.
│ │ │ -
auto find(const _Kt &__x) -> decltype(_M_h._M_find_tr(__x))
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.
│ │ │ -
_Hashtable::value_type value_type
Public typedefs.
│ │ │ -
iterator emplace(_Args &&... __args)
Attempts to build and insert a std::pair into the unordered_multimap.
│ │ │ -
node_type extract(const key_type &__key)
Extract a node.
│ │ │ -
bool contains(const key_type &__x) const
Finds whether an element with the given key exists.
│ │ │ -
_Hashtable::const_reference const_reference
Iterator-related typedefs.
│ │ │ -
iterator insert(node_type &&__nh)
Re-insert an extracted node.
│ │ │ -
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.
│ │ │ -
_Hashtable::hasher hasher
Public typedefs.
│ │ │ -
_Hashtable::local_iterator local_iterator
Iterator-related typedefs.
│ │ │ -
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.
│ │ │ -
auto count(const _Kt &__x) const -> decltype(_M_h._M_count_tr(__x))
Finds the number of elements.
│ │ │ -
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.
│ │ │ -
_Hashtable::pointer pointer
Iterator-related typedefs.
│ │ │ -
_Hashtable::allocator_type allocator_type
Public typedefs.
│ │ │ -
const_local_iterator begin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ -
auto find(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__x))
Tries to locate an element in an unordered_multimap.
│ │ │ -
_Hashtable::const_local_iterator const_local_iterator
Iterator-related typedefs.
│ │ │ -
unordered_multimap(unordered_multimap &&)=default
Move constructor.
│ │ │ -
unordered_multimap(const allocator_type &__a)
Creates an unordered_multimap with no elements.
│ │ │ -
_Hashtable::difference_type difference_type
Iterator-related typedefs.
│ │ │ -
_Hashtable::size_type size_type
Iterator-related typedefs.
│ │ │ -
_Hashtable::const_pointer const_pointer
Iterator-related typedefs.
│ │ │ -
__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.
│ │ │ -
_Hashtable::const_iterator const_iterator
Iterator-related typedefs.
│ │ │ -
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
│ │ │ -
_Hashtable::key_type key_type
Public typedefs.
│ │ │ -
node_type extract(const_iterator __pos)
Extract a node.
│ │ │ -
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.
│ │ │ -
auto equal_range(const _Kt &__x) -> decltype(_M_h._M_equal_range_tr(__x))
Finds a subsequence matching given key.
│ │ │ -
_Hashtable::key_equal key_equal
Public typedefs.
│ │ │ -
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.
│ │ │ -
auto equal_range(const _Kt &__x) const -> decltype(_M_h._M_equal_range_tr(__x))
Finds a subsequence matching given key.
│ │ │ -
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.
│ │ │ -
_Hashtable::iterator iterator
Iterator-related typedefs.
│ │ │ -
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.
│ │ │ -
node_type extract(const key_type &__key)
Extract a node.
│ │ │ -
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.
│ │ │ -
auto find(const _Kt &__x) -> decltype(_M_h._M_find_tr(__x))
Tries to locate an element in an unordered_map.
│ │ │ -
unordered_map & operator=(initializer_list< value_type > __l)
Unordered_map list assignment operator.
│ │ │ -
_Hashtable::const_pointer const_pointer
Iterator-related typedefs.
│ │ │ -
auto find(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__x))
Tries to locate an element in an unordered_map.
│ │ │ -
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.
│ │ │ -
iterator try_emplace(const_iterator __hint, const key_type &__k, _Args &&... __args)
Attempts to build and insert a std::pair into the unordered_map.
│ │ │ -
node_type extract(const_iterator __pos)
Extract a node.
│ │ │ -
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, node_type &&__nh)
Re-insert an extracted node.
│ │ │ -
_Hashtable::reference reference
Iterator-related typedefs.
│ │ │ -
iterator insert(const_iterator __hint, const value_type &__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ -
iterator end() noexcept
│ │ │ -
_Hashtable::allocator_type allocator_type
Public typedefs.
│ │ │ -
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 equal_range(const _Kt &__x) -> decltype(_M_h._M_equal_range_tr(__x))
Finds a subsequence matching given key.
│ │ │ -
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.
│ │ │ -
_Hashtable::mapped_type mapped_type
Public typedefs.
│ │ │ -
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.
│ │ │ -
_Hashtable::hasher hasher
Public typedefs.
│ │ │ -
pair< iterator, bool > insert_or_assign(const key_type &__k, _Obj &&__obj)
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.
│ │ │ -
pair< iterator, bool > try_emplace(const key_type &__k, _Args &&... __args)
Attempts to build and insert a std::pair into the unordered_map.
│ │ │ -
const_iterator begin() const noexcept
│ │ │ -
key_equal key_eq() const
Returns the key comparison object with which the unordered_map was constructed.
│ │ │ -
_Hashtable::const_reference const_reference
Iterator-related typedefs.
│ │ │ -
_Hashtable::key_equal key_equal
Public typedefs.
│ │ │ -
_Hashtable::local_iterator local_iterator
Iterator-related typedefs.
│ │ │ -
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.
│ │ │ -
_Hashtable::pointer pointer
Iterator-related typedefs.
│ │ │ -
iterator insert_or_assign(const_iterator __hint, const key_type &__k, _Obj &&__obj)
Attempts to insert a std::pair into the unordered_map.
│ │ │ -
unordered_map(const allocator_type &__a)
Creates an unordered_map with no elements.
│ │ │ -
_Hashtable::key_type key_type
Public typedefs.
│ │ │ -
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.
│ │ │ -
auto equal_range(const _Kt &__x) const -> decltype(_M_h._M_equal_range_tr(__x))
Finds a subsequence matching given key.
│ │ │ -
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.
│ │ │ -
_Hashtable::const_iterator const_iterator
Iterator-related typedefs.
│ │ │ -
_Hashtable::size_type size_type
Iterator-related typedefs.
│ │ │ -
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.
│ │ │ -
_Hashtable::difference_type difference_type
Iterator-related typedefs.
│ │ │ -
auto count(const _Kt &__x) const -> decltype(_M_h._M_count_tr(__x))
Finds the number of elements.
│ │ │ -
_Hashtable::const_local_iterator const_local_iterator
Iterator-related typedefs.
│ │ │ -
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.
│ │ │ -
insert_return_type insert(node_type &&__nh)
Re-insert an extracted node.
│ │ │ -
_Hashtable::value_type value_type
Public typedefs.
│ │ │ -
void rehash(size_type __n)
May rehash the unordered_map.
│ │ │ -
const_iterator cbegin() const noexcept
│ │ │ - │ │ │ - │ │ │ + │ │ │ +
is_nothrow_default_constructible
Definition type_traits:1245
│ │ │ +
is_assignable
Definition type_traits:1277
│ │ │ +
is_copy_assignable
Definition type_traits:1287
│ │ │ +
is_trivially_destructible
Definition type_traits:1459
│ │ │ +
Uniform interface to all allocator types.
│ │ │ +
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.
│ │ │ +
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.
│ │ │ +
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.
│ │ │ +
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 the contents of an initializer_list into forward_list after the specified iterator.
│ │ │ +
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.
│ │ │ +
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.
│ │ │ +
__remove_return_type remove(const _Tp &__val)
Remove all elements equal to value.
│ │ │ +
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 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.
│ │ │ +
Uniform interface to all pointer-like types.
Definition ptr_traits.h:178
│ │ │ +
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(_Alloc &__a, size_type __n)
Allocate memory.
│ │ │ +
static constexpr void deallocate(_Alloc &__a, pointer __p, size_type __n)
Deallocate memory.
│ │ │ +
static constexpr size_type max_size(const _Alloc &__a) noexcept
The maximum supported allocation size.
│ │ │ + │ │ │ + │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -unordered_map.h │ │ │ │ +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// unordered_map implementation -*- C++ -*- │ │ │ │ +1// -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2010-2025 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2008-2025 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,3189 +21,2378 @@ │ │ │ │ 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 │ │ │ │ +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{unordered_map} │ │ │ │ +27 * Do not attempt to use it directly. @headername{forward_list} │ │ │ │ 28 */ │ │ │ │ 29 │ │ │ │ -30#ifndef _UNORDERED_MAP_H │ │ │ │ -31#define _UNORDERED_MAP_H │ │ │ │ +30#ifndef _FORWARD_LIST_H │ │ │ │ +31#define _FORWARD_LIST_H 1 │ │ │ │ 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>; │ │ │ │ -49 │ │ │ │ -50 template, │ │ │ │ -53 typename ___P_r_e_d = _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 ___T_r = _____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 _____u_m_a_p___h_a_s_h_t_a_b_l_e = ___H_a_s_h_t_a_b_l_e_<___K_e_y_,_ _s_t_d_:_:_p_a_i_r_<_c_o_n_s_t_ ___K_e_y_,_ ___T_p_>, │ │ │ │ -57 _Alloc, __detail::_Select1st, │ │ │ │ -58 ___P_r_e_d, ___H_a_s_h, │ │ │ │ -59 __detail::_Mod_range_hashing, │ │ │ │ -60 __detail::_Default_ranged_hash, │ │ │ │ -61 __detail::_Prime_rehash_policy, ___T_r>; │ │ │ │ +33#ifdef _GLIBCXX_SYSHDR │ │ │ │ +34#pragma GCC system_header │ │ │ │ +35#endif │ │ │ │ +36 │ │ │ │ +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 /// 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 ___P_r_e_d = _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 ___T_r = _____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 _____u_m_m_a_p___h_a_s_h_t_a_b_l_e = ___H_a_s_h_t_a_b_l_e_<___K_e_y_,_ _s_t_d_:_:_p_a_i_r_<_c_o_n_s_t_ ___K_e_y_,_ ___T_p_>, │ │ │ │ -74 _Alloc, __detail::_Select1st, │ │ │ │ -75 ___P_r_e_d, ___H_a_s_h, │ │ │ │ -76 __detail::_Mod_range_hashing, │ │ │ │ -77 __detail::_Default_ranged_hash, │ │ │ │ -78 __detail::_Prime_rehash_policy, ___T_r>; │ │ │ │ -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<_Value>. │ │ │ │ -95 * @tparam _Pred Predicate function object type, defaults │ │ │ │ -96 * to equal_to<_Value>. │ │ │ │ -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 ___P_r_e_d = _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 _____u_m_a_p___h_a_s_h_t_a_b_l_e_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_> ___H_a_s_h_t_a_b_l_e; │ │ │ │ -115 ___H_a_s_h_t_a_b_l_e _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 │ │ │ │ +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 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e │ │ │ │ +70 { │ │ │ │ +71 using ___B_a_s_e___p_t_r = ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e*; │ │ │ │ +72 │ │ │ │ +73 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e() = default; │ │ │ │ +74 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e(___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e&& __x) noexcept │ │ │ │ +75 : _M_next(__x._M_next) │ │ │ │ +76 { __x._M_next = nullptr; } │ │ │ │ +77 │ │ │ │ +78 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e(const ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e&) = delete; │ │ │ │ +79 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e& operator=(const ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e&) = delete; │ │ │ │ +80 │ │ │ │ +81 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e& │ │ │ │ +82 operator=(___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e&& __x) noexcept │ │ │ │ +83 { │ │ │ │ +84 _M_next = __x._M_next; │ │ │ │ +85 __x._M_next = nullptr; │ │ │ │ +86 return *this; │ │ │ │ +87 } │ │ │ │ +88 │ │ │ │ +89 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* _M_next = nullptr; │ │ │ │ +90 │ │ │ │ +91 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* │ │ │ │ +92 _M_transfer_after(___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* __begin, │ │ │ │ +93 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* __end) noexcept │ │ │ │ +94 { │ │ │ │ +95 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* _____k_e_e_p = __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 = _____k_e_e_p; │ │ │ │ +104 return __end; │ │ │ │ +105 } │ │ │ │ +106 │ │ │ │ +107 void │ │ │ │ +108 _M_reverse_after() noexcept │ │ │ │ +109 { │ │ │ │ +110 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* _____t_a_i_l = _M_next; │ │ │ │ +111 if (!_____t_a_i_l) │ │ │ │ +112 return; │ │ │ │ +113 while (___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* _____t_e_m_p = _____t_a_i_l->_M_next) │ │ │ │ +114 { │ │ │ │ +115 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* _____k_e_e_p = _M_next; │ │ │ │ +116 _M_next = _____t_e_m_p; │ │ │ │ +117 _____t_a_i_l->_M_next = _____t_e_m_p->_M_next; │ │ │ │ +118 _M_next->_M_next = _____k_e_e_p; │ │ │ │ +119 } │ │ │ │ +120 } │ │ │ │ +121 │ │ │ │ +122 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* _M_base_ptr() { return this; } │ │ │ │ +123 const ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* _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 ___F_w_d___l_i_s_t___n_o_d_e │ │ │ │ +134 : public ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e │ │ │ │ +135 { │ │ │ │ +136 using ___N_o_d_e___p_t_r = ___F_w_d___l_i_s_t___n_o_d_e*; │ │ │ │ +137 │ │ │ │ +138 ___F_w_d___l_i_s_t___n_o_d_e() = default; │ │ │ │ +139 │ │ │ │ +140 __gnu_cxx::__aligned_buffer<_Tp> _M_storage; │ │ │ │ +141 │ │ │ │ +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 /// 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& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -163 const _k_e_y___e_q_u_a_l& _____e_q_l = _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, _____h_f, _____e_q_l, __a) │ │ │ │ -166 { } │ │ │ │ +150 ___N_o_d_e___p_t_r │ │ │ │ +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 ___F_w_d___l_i_s_t___i_t_e_r_a_t_o_r │ │ │ │ +164 { │ │ │ │ +165 typedef ___F_w_d___l_i_s_t___i_t_e_r_a_t_o_r_<___T_p_> ___S_e_l_f; │ │ │ │ +166 typedef ___F_w_d___l_i_s_t___n_o_d_e_<___T_p_> ___N_o_d_e; │ │ │ │ 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(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __last, │ │ │ │ -183 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -184 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -185 const _k_e_y___e_q_u_a_l& _____e_q_l = _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, _____h_f, _____e_q_l, __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& _____u_m_a_p, │ │ │ │ -211 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -212 : _M_h(_____u_m_a_p._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(_u_n_o_r_d_e_r_e_d___m_a_p&& __umap, │ │ │ │ -221 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __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& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -240 const _k_e_y___e_q_u_a_l& _____e_q_l = _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, _____h_f, _____e_q_l, __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 _a_l_l_o_c_a_t_o_r___t_y_p_e& __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(_s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -250 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -251 : _u_n_o_r_d_e_r_e_d___m_a_p(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -252 { } │ │ │ │ -253 │ │ │ │ -254 template │ │ │ │ -255 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ -256 _s_i_z_e___t_y_p_e __n, │ │ │ │ -257 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -258 : _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) │ │ │ │ -259 { } │ │ │ │ +168 typedef _Tp value_type; │ │ │ │ +169 typedef _Tp* pointer; │ │ │ │ +170 typedef _Tp& reference; │ │ │ │ +171 typedef _p_t_r_d_i_f_f___t _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ +172 typedef _s_t_d_:_:_f_o_r_w_a_r_d___i_t_e_r_a_t_o_r___t_a_g _i_t_e_r_a_t_o_r___c_a_t_e_g_o_r_y; │ │ │ │ +173 │ │ │ │ +174 ___F_w_d___l_i_s_t___i_t_e_r_a_t_o_r() noexcept │ │ │ │ +175 : _M_node() { } │ │ │ │ +176 │ │ │ │ +177 explicit │ │ │ │ +178 ___F_w_d___l_i_s_t___i_t_e_r_a_t_o_r(___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* __n) noexcept │ │ │ │ +179 : _M_node(__n) { } │ │ │ │ +180 │ │ │ │ +181 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +182 reference │ │ │ │ +183 operator*() const noexcept │ │ │ │ +184 { return *static_cast<___N_o_d_e*>(this->_M_node)->_M_valptr(); } │ │ │ │ +185 │ │ │ │ +186 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +187 pointer │ │ │ │ +188 operator->() const noexcept │ │ │ │ +189 { return static_cast<___N_o_d_e*>(this->_M_node)->_M_valptr(); } │ │ │ │ +190 │ │ │ │ +191 ___S_e_l_f& │ │ │ │ +192 operator++() noexcept │ │ │ │ +193 { │ │ │ │ +194 _M_node = _M_node->_M_next; │ │ │ │ +195 return *this; │ │ │ │ +196 } │ │ │ │ +197 │ │ │ │ +198 ___S_e_l_f │ │ │ │ +199 operator++(int) noexcept │ │ │ │ +200 { │ │ │ │ +201 ___S_e_l_f _____t_m_p(*this); │ │ │ │ +202 _M_node = _M_node->_M_next; │ │ │ │ +203 return _____t_m_p; │ │ │ │ +204 } │ │ │ │ +205 │ │ │ │ +206 /** │ │ │ │ +207 * @brief Forward list iterator equality comparison. │ │ │ │ +208 */ │ │ │ │ +209 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +210 friend bool │ │ │ │ +_2_1_1 _o_p_e_r_a_t_o_r_=_=(const ___S_e_l_f& __x, const ___S_e_l_f& __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 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +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 ___F_w_d___l_i_s_t___c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +250 { │ │ │ │ +251 typedef ___F_w_d___l_i_s_t___c_o_n_s_t___i_t_e_r_a_t_o_r_<___T_p_> ___S_e_l_f; │ │ │ │ +252 typedef const ___F_w_d___l_i_s_t___n_o_d_e_<___T_p_> ___N_o_d_e; │ │ │ │ +253 typedef ___F_w_d___l_i_s_t___i_t_e_r_a_t_o_r_<___T_p_> _i_t_e_r_a_t_o_r; │ │ │ │ +254 │ │ │ │ +255 typedef _Tp value_type; │ │ │ │ +256 typedef const _Tp* pointer; │ │ │ │ +257 typedef const _Tp& reference; │ │ │ │ +258 typedef _p_t_r_d_i_f_f___t _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ +259 typedef _s_t_d_:_:_f_o_r_w_a_r_d___i_t_e_r_a_t_o_r___t_a_g _i_t_e_r_a_t_o_r___c_a_t_e_g_o_r_y; │ │ │ │ 260 │ │ │ │ -261 template │ │ │ │ -262 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ -263 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -264 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -265 : _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) │ │ │ │ -266 { } │ │ │ │ +261 ___F_w_d___l_i_s_t___c_o_n_s_t___i_t_e_r_a_t_o_r() noexcept │ │ │ │ +262 : _M_node() { } │ │ │ │ +263 │ │ │ │ +264 explicit │ │ │ │ +265 ___F_w_d___l_i_s_t___c_o_n_s_t___i_t_e_r_a_t_o_r(const ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* __n) noexcept │ │ │ │ +266 : _M_node(__n) { } │ │ │ │ 267 │ │ │ │ -268 _u_n_o_r_d_e_r_e_d___m_a_p(initializer_list __l, │ │ │ │ -269 _s_i_z_e___t_y_p_e __n, │ │ │ │ -270 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -271 : _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) │ │ │ │ -272 { } │ │ │ │ -273 │ │ │ │ -274 _u_n_o_r_d_e_r_e_d___m_a_p(initializer_list __l, │ │ │ │ -275 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -276 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -277 : _u_n_o_r_d_e_r_e_d___m_a_p(__l, __n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -278 { } │ │ │ │ -279 │ │ │ │ -280#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -281 /** │ │ │ │ -282 * @brief Builds an %unordered_map from a range. │ │ │ │ -283 * @since C++23 │ │ │ │ -284 * @param __rg An input range of elements that can be converted to │ │ │ │ -285 * the maps's value type. │ │ │ │ -286 * @param __n Minimal initial number of buckets. │ │ │ │ -287 * @param __hf A hash functor. │ │ │ │ -288 * @param __eql A key equality functor. │ │ │ │ -289 * @param __a An allocator object. │ │ │ │ -290 * │ │ │ │ -291 * Create an %unordered_map consisting of copies of the elements in the │ │ │ │ -292 * range. This is linear in N (where N is `std::ranges::size(__rg)`). │ │ │ │ -293 */ │ │ │ │ -294 template<__detail::__container_compatible_range _Rg> │ │ │ │ -295 _u_n_o_r_d_e_r_e_d___m_a_p(from_range_t, _Rg&& __rg, │ │ │ │ -296 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -297 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -298 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ -299 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()) │ │ │ │ -300 : _M_h(__n, __hf, __eql, __a) │ │ │ │ -301 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -302 │ │ │ │ -303 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -304 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ -containers │ │ │ │ -305 template<__detail::__container_compatible_range _Rg> │ │ │ │ -306 _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) │ │ │ │ -307 : _M_h(0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -308 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -309 │ │ │ │ -310 template<__detail::__container_compatible_range _Rg> │ │ │ │ -311 _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, │ │ │ │ -312 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -313 : _M_h(__n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -314 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -315 │ │ │ │ -316 template<__detail::__container_compatible_range _Rg> │ │ │ │ -317 _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, │ │ │ │ -318 const _h_a_s_h_e_r& __hf, const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -319 : _M_h(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -320 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -321#endif │ │ │ │ -322 │ │ │ │ -323 /// Copy assignment operator. │ │ │ │ -324 _u_n_o_r_d_e_r_e_d___m_a_p& │ │ │ │ -_3_2_5 _o_p_e_r_a_t_o_r_=(const _u_n_o_r_d_e_r_e_d___m_a_p&) = default; │ │ │ │ -326 │ │ │ │ -327 /// Move assignment operator. │ │ │ │ -328 _u_n_o_r_d_e_r_e_d___m_a_p& │ │ │ │ -_3_2_9 _o_p_e_r_a_t_o_r_=(_u_n_o_r_d_e_r_e_d___m_a_p&&) = default; │ │ │ │ -330 │ │ │ │ -331 /** │ │ │ │ -332 * @brief %Unordered_map list assignment operator. │ │ │ │ -333 * @param __l An initializer_list. │ │ │ │ -334 * │ │ │ │ -335 * This function fills an %unordered_map with copies of the elements in │ │ │ │ -336 * the initializer list @a __l. │ │ │ │ -337 * │ │ │ │ -338 * Note that the assignment completely changes the %unordered_map and │ │ │ │ -339 * that the resulting %unordered_map's size is the same as the number │ │ │ │ -340 * of elements assigned. │ │ │ │ -341 */ │ │ │ │ -342 _u_n_o_r_d_e_r_e_d___m_a_p& │ │ │ │ -_3_4_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) │ │ │ │ -344 { │ │ │ │ -345 _M_h = _____l; │ │ │ │ -346 return *this; │ │ │ │ -347 } │ │ │ │ -348 │ │ │ │ -349 /// Returns the allocator object used by the %unordered_map. │ │ │ │ -350 _a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ -_3_5_1 _g_e_t___a_l_l_o_c_a_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -352 { return _M_h.get_allocator(); } │ │ │ │ -353 │ │ │ │ -354 // size and capacity: │ │ │ │ -355 │ │ │ │ -356 /// Returns true if the %unordered_map is empty. │ │ │ │ -357 _GLIBCXX_NODISCARD bool │ │ │ │ -_3_5_8 _e_m_p_t_y() _c_o_n_s_t noexcept │ │ │ │ -359 { return _M_h.empty(); } │ │ │ │ -360 │ │ │ │ -361 /// Returns the size of the %unordered_map. │ │ │ │ -362 _s_i_z_e___t_y_p_e │ │ │ │ -_3_6_3 _s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ -364 { return _M_h.size(); } │ │ │ │ -365 │ │ │ │ -366 /// Returns the maximum size of the %unordered_map. │ │ │ │ -367 _s_i_z_e___t_y_p_e │ │ │ │ -_3_6_8 _m_a_x___s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ -369 { return _M_h.max_size(); } │ │ │ │ -370 │ │ │ │ -371 // iterators. │ │ │ │ -372 │ │ │ │ -373 /** │ │ │ │ -374 * Returns a read/write iterator that points to the first element in the │ │ │ │ -375 * %unordered_map. │ │ │ │ -376 */ │ │ │ │ -377 _i_t_e_r_a_t_o_r │ │ │ │ -_3_7_8 _b_e_g_i_n() noexcept │ │ │ │ -379 { return _M_h.begin(); } │ │ │ │ -380 │ │ │ │ -381 ///@{ │ │ │ │ -382 /** │ │ │ │ -383 * Returns a read-only (constant) iterator that points to the first │ │ │ │ -384 * element in the %unordered_map. │ │ │ │ -385 */ │ │ │ │ -386 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_3_8_7 _b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ -388 { return _M_h.begin(); } │ │ │ │ -389 │ │ │ │ -390 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_3_9_1 _c_b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ -392 { return _M_h.begin(); } │ │ │ │ -393 ///@} │ │ │ │ -394 │ │ │ │ -395 /** │ │ │ │ -396 * Returns a read/write iterator that points one past the last element in │ │ │ │ -397 * the %unordered_map. │ │ │ │ -398 */ │ │ │ │ -399 _i_t_e_r_a_t_o_r │ │ │ │ -_4_0_0 _e_n_d() noexcept │ │ │ │ -401 { return _M_h.end(); } │ │ │ │ -402 │ │ │ │ -403 ///@{ │ │ │ │ -404 /** │ │ │ │ -405 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ -406 * element in the %unordered_map. │ │ │ │ -407 */ │ │ │ │ -408 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_4_0_9 _e_n_d() _c_o_n_s_t noexcept │ │ │ │ -410 { return _M_h.end(); } │ │ │ │ -411 │ │ │ │ -412 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_4_1_3 _c_e_n_d() _c_o_n_s_t noexcept │ │ │ │ -414 { return _M_h.end(); } │ │ │ │ -415 ///@} │ │ │ │ -416 │ │ │ │ -417 // modifiers. │ │ │ │ -418 │ │ │ │ -419 /** │ │ │ │ -420 * @brief Attempts to build and insert a std::pair into the │ │ │ │ -421 * %unordered_map. │ │ │ │ -422 * │ │ │ │ -423 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ -424 * std::piecewise_contruct for passing arguments to each │ │ │ │ -425 * part of the pair constructor). │ │ │ │ -426 * │ │ │ │ -427 * @return A pair, of which the first element is an iterator that points │ │ │ │ -428 * to the possibly inserted pair, and the second is a bool that │ │ │ │ -429 * is true if the pair was actually inserted. │ │ │ │ -430 * │ │ │ │ -431 * This function attempts to build and insert a (key, value) %pair into │ │ │ │ -432 * the %unordered_map. │ │ │ │ -433 * An %unordered_map relies on unique keys and thus a %pair is only │ │ │ │ -434 * inserted if its first element (the key) is not already present in the │ │ │ │ -435 * %unordered_map. │ │ │ │ -436 * │ │ │ │ -437 * Insertion requires amortized constant time. │ │ │ │ -438 */ │ │ │ │ -439 template │ │ │ │ -440 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_4_4_1 _e_m_p_l_a_c_e(___A_r_g_s&&... _____a_r_g_s) │ │ │ │ -442 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); } │ │ │ │ +268 ___F_w_d___l_i_s_t___c_o_n_s_t___i_t_e_r_a_t_o_r(const _i_t_e_r_a_t_o_r& __iter) noexcept │ │ │ │ +269 : _M_node(__iter._M_node) { } │ │ │ │ +270 │ │ │ │ +271 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +272 reference │ │ │ │ +273 operator*() const noexcept │ │ │ │ +274 { return *static_cast<___N_o_d_e*>(this->_M_node)->_M_valptr(); } │ │ │ │ +275 │ │ │ │ +276 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +277 pointer │ │ │ │ +278 operator->() const noexcept │ │ │ │ +279 { return static_cast<___N_o_d_e*>(this->_M_node)->_M_valptr(); } │ │ │ │ +280 │ │ │ │ +281 ___S_e_l_f& │ │ │ │ +282 operator++() noexcept │ │ │ │ +283 { │ │ │ │ +284 _M_node = _M_node->_M_next; │ │ │ │ +285 return *this; │ │ │ │ +286 } │ │ │ │ +287 │ │ │ │ +288 ___S_e_l_f │ │ │ │ +289 operator++(int) noexcept │ │ │ │ +290 { │ │ │ │ +291 ___S_e_l_f _____t_m_p(*this); │ │ │ │ +292 _M_node = _M_node->_M_next; │ │ │ │ +293 return _____t_m_p; │ │ │ │ +294 } │ │ │ │ +295 │ │ │ │ +296 /** │ │ │ │ +297 * @brief Forward list const_iterator equality comparison. │ │ │ │ +298 */ │ │ │ │ +299 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +300 friend bool │ │ │ │ +_3_0_1 _o_p_e_r_a_t_o_r_=_=(const ___S_e_l_f& __x, const ___S_e_l_f& __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 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +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 forward_list; │ │ │ │ +340 template 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 │ │ │ │ +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 { │ │ │ │ +408 return pointer_traits<_Base_ptr>:: │ │ │ │ +409 pointer_to(const_cast<_Node_base&>(*this)); │ │ │ │ +410 } │ │ │ │ +411 }; │ │ │ │ +412 │ │ │ │ +413 /** │ │ │ │ +414 * @brief A helper node class for %forward_list. │ │ │ │ +415 */ │ │ │ │ +416 template │ │ │ │ +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 _s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_M_u._M_data); } │ │ │ │ 443 │ │ │ │ -444 /** │ │ │ │ -445 * @brief Attempts to build and insert a std::pair into the │ │ │ │ -446 * %unordered_map. │ │ │ │ -447 * │ │ │ │ -448 * @param __pos An iterator that serves as a hint as to where the pair │ │ │ │ -449 * should be inserted. │ │ │ │ -450 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ -451 * std::piecewise_contruct for passing arguments to each │ │ │ │ -452 * part of the pair constructor). │ │ │ │ -453 * @return An iterator that points to the element with key of the │ │ │ │ -454 * std::pair built from @a __args (may or may not be that │ │ │ │ -455 * std::pair). │ │ │ │ -456 * │ │ │ │ -457 * This function is not concerned about whether the insertion took place, │ │ │ │ -458 * and thus does not return a boolean like the single-argument emplace() │ │ │ │ -459 * does. │ │ │ │ -460 * Note that the first parameter is only a hint and can potentially │ │ │ │ -461 * improve the performance of the insertion process. A bad hint would │ │ │ │ -462 * cause no gains in efficiency. │ │ │ │ -463 * │ │ │ │ -464 * See │ │ │ │ -465 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -466 * for more on @a hinting. │ │ │ │ -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 _____p_o_s, ___A_r_g_s&&... _____a_r_g_s) │ │ │ │ -473 { return _M_h.emplace_hint(_____p_o_s, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); } │ │ │ │ -474 │ │ │ │ -475#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -476 /// Extract a node. │ │ │ │ -477 node_type │ │ │ │ -_4_7_8 _e_x_t_r_a_c_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s) │ │ │ │ -479 { │ │ │ │ -480 __glibcxx_assert(_____p_o_s != _e_n_d()); │ │ │ │ -481 return _M_h.extract(_____p_o_s); │ │ │ │ -482 } │ │ │ │ -483 │ │ │ │ -484 /// Extract a node. │ │ │ │ -485 node_type │ │ │ │ -_4_8_6 _e_x_t_r_a_c_t(const _k_e_y___t_y_p_e& _____k_e_y) │ │ │ │ -487 { return _M_h.extract(_____k_e_y); } │ │ │ │ -488 │ │ │ │ -489 /// Re-insert an extracted node. │ │ │ │ -490 insert_return_type │ │ │ │ -_4_9_1 _i_n_s_e_r_t(node_type&& _____n_h) │ │ │ │ -492 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(_____n_h)); } │ │ │ │ -493 │ │ │ │ -494 /// Re-insert an extracted node. │ │ │ │ -495 _i_t_e_r_a_t_o_r │ │ │ │ -_4_9_6 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r, node_type&& _____n_h) │ │ │ │ -497 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(_____n_h)).position; } │ │ │ │ -498#endif // node_extract │ │ │ │ -499 │ │ │ │ -500#ifdef __glibcxx_unordered_map_try_emplace // C++ >= 17 && HOSTED │ │ │ │ -501 /** │ │ │ │ -502 * @brief Attempts to build and insert a std::pair into the │ │ │ │ -503 * %unordered_map. │ │ │ │ -504 * │ │ │ │ -505 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ -506 * the unordered_map. │ │ │ │ -507 * @param __args Arguments used to generate the .second for a │ │ │ │ -508 * new pair instance. │ │ │ │ -509 * │ │ │ │ -510 * @return A pair, of which the first element is an iterator that points │ │ │ │ -511 * to the possibly inserted pair, and the second is a bool that │ │ │ │ -512 * is true if the pair was actually inserted. │ │ │ │ -513 * │ │ │ │ -514 * This function attempts to build and insert a (key, value) %pair into │ │ │ │ -515 * the %unordered_map. │ │ │ │ -516 * An %unordered_map relies on unique keys and thus a %pair is only │ │ │ │ -517 * inserted if its first element (the key) is not already present in the │ │ │ │ -518 * %unordered_map. │ │ │ │ -519 * If a %pair is not inserted, this function has no effect. │ │ │ │ -520 * │ │ │ │ -521 * Insertion requires amortized constant time. │ │ │ │ -522 */ │ │ │ │ -523 template │ │ │ │ -524 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_5_2_5 _t_r_y___e_m_p_l_a_c_e(const _k_e_y___t_y_p_e& _____k, ___A_r_g_s&&... _____a_r_g_s) │ │ │ │ -526 { │ │ │ │ -527 return _M_h.try_emplace(_c_e_n_d(), _____k, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); │ │ │ │ -528 } │ │ │ │ -529 │ │ │ │ -530 // move-capable overload │ │ │ │ -531 template │ │ │ │ -532 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -533 _t_r_y___e_m_p_l_a_c_e(_k_e_y___t_y_p_e&& _____k, ___A_r_g_s&&... _____a_r_g_s) │ │ │ │ -534 { │ │ │ │ -535 return _M_h.try_emplace(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(_____k), │ │ │ │ -536 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); │ │ │ │ -537 } │ │ │ │ -538 │ │ │ │ -539 /** │ │ │ │ -540 * @brief Attempts to build and insert a std::pair into the │ │ │ │ -541 * %unordered_map. │ │ │ │ -542 * │ │ │ │ -543 * @param __hint An iterator that serves as a hint as to where the pair │ │ │ │ -544 * should be inserted. │ │ │ │ -545 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ -546 * the unordered_map. │ │ │ │ -547 * @param __args Arguments used to generate the .second for a │ │ │ │ -548 * new pair instance. │ │ │ │ -549 * @return An iterator that points to the element with key of the │ │ │ │ -550 * std::pair built from @a __args (may or may not be that │ │ │ │ -551 * std::pair). │ │ │ │ -552 * │ │ │ │ -553 * This function is not concerned about whether the insertion took place, │ │ │ │ -554 * and thus does not return a boolean like the single-argument emplace() │ │ │ │ -555 * does. However, if insertion did not take place, │ │ │ │ -556 * this function has no effect. │ │ │ │ -557 * Note that the first parameter is only a hint and can potentially │ │ │ │ -558 * improve the performance of the insertion process. A bad hint would │ │ │ │ -559 * cause no gains in efficiency. │ │ │ │ -560 * │ │ │ │ -561 * See │ │ │ │ -562 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -563 * for more on @a hinting. │ │ │ │ -564 * │ │ │ │ -565 * Insertion requires amortized constant time. │ │ │ │ -566 */ │ │ │ │ -567 template │ │ │ │ -568 _i_t_e_r_a_t_o_r │ │ │ │ -_5_6_9 _t_r_y___e_m_p_l_a_c_e(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, const _k_e_y___t_y_p_e& _____k, │ │ │ │ -570 ___A_r_g_s&&... _____a_r_g_s) │ │ │ │ -571 { │ │ │ │ -572 return _M_h.try_emplace(_____h_i_n_t, _____k, │ │ │ │ -573 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...).first; │ │ │ │ -574 } │ │ │ │ -575 │ │ │ │ -576 // move-capable overload │ │ │ │ -577 template │ │ │ │ -578 _i_t_e_r_a_t_o_r │ │ │ │ -579 _t_r_y___e_m_p_l_a_c_e(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, _k_e_y___t_y_p_e&& _____k, ___A_r_g_s&&... _____a_r_g_s) │ │ │ │ -580 { │ │ │ │ -581 return _M_h.try_emplace(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(_____k), │ │ │ │ -582 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...).first; │ │ │ │ -583 } │ │ │ │ -584#endif // __glibcxx_unordered_map_try_emplace │ │ │ │ -585 │ │ │ │ -586 ///@{ │ │ │ │ -587 /** │ │ │ │ -588 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ -589 │ │ │ │ -590 * @param __x Pair to be inserted (see std::make_pair for easy │ │ │ │ -591 * creation of pairs). │ │ │ │ -592 * │ │ │ │ -593 * @return A pair, of which the first element is an iterator that │ │ │ │ -594 * points to the possibly inserted pair, and the second is │ │ │ │ -595 * a bool that is true if the pair was actually inserted. │ │ │ │ -596 * │ │ │ │ -597 * This function attempts to insert a (key, value) %pair into the │ │ │ │ -598 * %unordered_map. An %unordered_map relies on unique keys and thus a │ │ │ │ -599 * %pair is only inserted if its first element (the key) is not already │ │ │ │ -600 * present in the %unordered_map. │ │ │ │ -601 * │ │ │ │ -602 * Insertion requires amortized constant time. │ │ │ │ -603 */ │ │ │ │ -604 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_6_0_5 _i_n_s_e_r_t(const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -606 { return _M_h.insert(__x); } │ │ │ │ -607 │ │ │ │ -608 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -609 // 2354. Unnecessary copying when inserting into maps with braced-init │ │ │ │ -610 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_6_1_1 _i_n_s_e_r_t(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -612 { return _M_h.insert(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -613 │ │ │ │ -614 template │ │ │ │ -615 _____e_n_a_b_l_e___i_f___t_<_i_s___c_o_n_s_t_r_u_c_t_i_b_l_e_<_v_a_l_u_e___t_y_p_e_,_ ___P_a_i_r_&_&_>_:_:_v_a_l_u_e, │ │ │ │ -616 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_>> │ │ │ │ -_6_1_7 _i_n_s_e_r_t(___P_a_i_r&& __x) │ │ │ │ -618 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ -619 ///@} │ │ │ │ -620 │ │ │ │ -621 ///@{ │ │ │ │ -622 /** │ │ │ │ -623 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ -624 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ -625 * pair should be inserted. │ │ │ │ -626 * @param __x Pair to be inserted (see std::make_pair for easy creation │ │ │ │ -627 * of pairs). │ │ │ │ -628 * @return An iterator that points to the element with key of │ │ │ │ -629 * @a __x (may or may not be the %pair passed in). │ │ │ │ -630 * │ │ │ │ -631 * This function is not concerned about whether the insertion took place, │ │ │ │ -632 * and thus does not return a boolean like the single-argument insert() │ │ │ │ -633 * does. Note that the first parameter is only a hint and can │ │ │ │ -634 * potentially improve the performance of the insertion process. A bad │ │ │ │ -635 * hint would cause no gains in efficiency. │ │ │ │ -636 * │ │ │ │ -637 * See │ │ │ │ -638 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -639 * for more on @a hinting. │ │ │ │ -640 * │ │ │ │ -641 * Insertion requires amortized constant time. │ │ │ │ -642 */ │ │ │ │ -643 _i_t_e_r_a_t_o_r │ │ │ │ -_6_4_4 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -645 { return _M_h.insert(_____h_i_n_t, __x); } │ │ │ │ -646 │ │ │ │ -647 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -648 // 2354. Unnecessary copying when inserting into maps with braced-init │ │ │ │ -649 _i_t_e_r_a_t_o_r │ │ │ │ -_6_5_0 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, _v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -651 { return _M_h.insert(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -652 │ │ │ │ -653 template │ │ │ │ -654 _____e_n_a_b_l_e___i_f___t_<_i_s___c_o_n_s_t_r_u_c_t_i_b_l_e_<_v_a_l_u_e___t_y_p_e_,_ ___P_a_i_r_&_&_>_:_:_v_a_l_u_e, _i_t_e_r_a_t_o_r> │ │ │ │ -_6_5_5 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, ___P_a_i_r&& __x) │ │ │ │ -656 { return _M_h.emplace_hint(_____h_i_n_t, _s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ -657 ///@} │ │ │ │ +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 │ │ │ │ +455 class _Iterator │ │ │ │ +456 { │ │ │ │ +457 using _Node = __fwdlist::_Node<_Ptr>; │ │ │ │ +458 using _Base_ptr │ │ │ │ +459 = typename __fwdlist::_Node_base<__ptr_rebind<_Ptr, void>>::_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 = forward_iterator_tag; │ │ │ │ +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 _o_p_e_r_a_t_o_r_*() 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 │ │ │ │ +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 _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 │ │ │ │ +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 = __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; │ │ │ │ +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 ___F_w_d___l_i_s_t___b_a_s_e │ │ │ │ +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 _r_e_b_i_n_d___t_r_a_i_t_s_<___T_p_>; │ │ │ │ +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 = _____a_l_l_o_c___r_e_b_i_n_d_<___A_l_l_o_c_,_ ___N_o_d_e_>; │ │ │ │ +615 using ___N_o_d_e___a_l_l_o_c___t_r_a_i_t_s = _____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 ___N_o_d_e___a_l_l_o_c___t_r_a_i_t_s_:_:_p_o_i_n_t_e_r; │ │ │ │ +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&& _____f_l, _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(_____f_l._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 ___F_w_d___l_i_s_t___b_a_s_e() = default; │ │ │ │ +655 │ │ │ │ +656 ___F_w_d___l_i_s_t___b_a_s_e(_Node_alloc_type&& __a) │ │ │ │ +657 : _M_impl(_s_t_d_:_:_m_o_v_e(__a)) { } │ │ │ │ 658 │ │ │ │ -659 /** │ │ │ │ -660 * @brief A template function that attempts to insert a range of │ │ │ │ -661 * elements. │ │ │ │ -662 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -663 * inserted. │ │ │ │ -664 * @param __last Iterator pointing to the end of the range. │ │ │ │ -665 * │ │ │ │ -666 * Complexity similar to that of the range constructor. │ │ │ │ -667 */ │ │ │ │ -668 template │ │ │ │ -669 void │ │ │ │ -_6_7_0 _i_n_s_e_r_t(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __last) │ │ │ │ -671 { _M_h.insert(__first, __last); } │ │ │ │ +659 // When allocators are always equal. │ │ │ │ +660 ___F_w_d___l_i_s_t___b_a_s_e(___F_w_d___l_i_s_t___b_a_s_e&& _____l_s_t, _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(_____l_s_t._M_impl), _s_t_d_:_:_m_o_v_e(__a)) │ │ │ │ +663 { } │ │ │ │ +664 │ │ │ │ +665 // When allocators are not always equal. │ │ │ │ +666 ___F_w_d___l_i_s_t___b_a_s_e(___F_w_d___l_i_s_t___b_a_s_e&& _____l_s_t, _Node_alloc_type&& __a); │ │ │ │ +667 │ │ │ │ +668 ___F_w_d___l_i_s_t___b_a_s_e(___F_w_d___l_i_s_t___b_a_s_e&&) = default; │ │ │ │ +669 │ │ │ │ +670 _~___F_w_d___l_i_s_t___b_a_s_e() │ │ │ │ +671 { _M_erase_after(_M_impl._M_head._M_base_ptr(), nullptr); } │ │ │ │ 672 │ │ │ │ -673 /** │ │ │ │ -674 * @brief Attempts to insert a list of elements into the %unordered_map. │ │ │ │ -675 * @param __l A std::initializer_list of elements │ │ │ │ -676 * to be inserted. │ │ │ │ -677 * │ │ │ │ -678 * Complexity similar to that of the range constructor. │ │ │ │ -679 */ │ │ │ │ -680 void │ │ │ │ -_6_8_1 _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) │ │ │ │ -682 { _M_h.insert(_____l); } │ │ │ │ +673 protected: │ │ │ │ +674#if ! _GLIBCXX_INLINE_VERSION │ │ │ │ +675 // XXX GLIBCXX_ABI Deprecated │ │ │ │ +676 _Node* │ │ │ │ +677 _M_get_node() │ │ │ │ +678 { │ │ │ │ +679 auto _____p_t_r = ___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 _s_t_d_:_:_____t_o___a_d_d_r_e_s_s(_____p_t_r); │ │ │ │ +681 } │ │ │ │ +682#endif │ │ │ │ 683 │ │ │ │ -684#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -685 /** │ │ │ │ -686 * @brief Inserts a range of elements. │ │ │ │ -687 * @since C++23 │ │ │ │ -688 * @param __rg An input range of elements that can be converted to │ │ │ │ -689 * the map's value type. │ │ │ │ -690 */ │ │ │ │ -691 template<__detail::__container_compatible_range _Rg> │ │ │ │ -692 void │ │ │ │ -693 _i_n_s_e_r_t___r_a_n_g_e(___R_g&& _____r_g) │ │ │ │ -694 { │ │ │ │ -695 auto __first = ranges::begin(_____r_g); │ │ │ │ -696 const auto __last = ranges::end(_____r_g); │ │ │ │ -697 for (; __first != __last; ++__first) │ │ │ │ -698 _M_h.emplace(*__first); │ │ │ │ -699 } │ │ │ │ -700#endif │ │ │ │ -701 │ │ │ │ -702#ifdef __glibcxx_unordered_map_try_emplace // >= C++17 && HOSTED │ │ │ │ -703 /** │ │ │ │ -704 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ -705 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ -706 * the map. │ │ │ │ -707 * @param __obj Argument used to generate the .second for a pair │ │ │ │ -708 * instance. │ │ │ │ -709 * │ │ │ │ -710 * @return A pair, of which the first element is an iterator that │ │ │ │ -711 * points to the possibly inserted pair, and the second is │ │ │ │ -712 * a bool that is true if the pair was actually inserted. │ │ │ │ -713 * │ │ │ │ -714 * This function attempts to insert a (key, value) %pair into the │ │ │ │ -715 * %unordered_map. An %unordered_map relies on unique keys and thus a │ │ │ │ -716 * %pair is only inserted if its first element (the key) is not already │ │ │ │ -717 * present in the %unordered_map. │ │ │ │ -718 * If the %pair was already in the %unordered_map, the .second of │ │ │ │ -719 * the %pair is assigned from __obj. │ │ │ │ -720 * │ │ │ │ -721 * Insertion requires amortized constant time. │ │ │ │ -722 */ │ │ │ │ -723 template │ │ │ │ -724 pair │ │ │ │ -_7_2_5 _i_n_s_e_r_t___o_r___a_s_s_i_g_n(const _k_e_y___t_y_p_e& _____k, _Obj&& _____o_b_j) │ │ │ │ -726 { │ │ │ │ -727 auto _____r_e_t = _M_h.try_emplace(_c_e_n_d(), _____k, │ │ │ │ -728 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j)); │ │ │ │ -729 if (!_____r_e_t.second) │ │ │ │ -730 _____r_e_t.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j); │ │ │ │ -731 return _____r_e_t; │ │ │ │ -732 } │ │ │ │ +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 ___N_o_d_e___a_l_l_o_c___t_r_a_i_t_s_:_:_p_o_i_n_t_e_r _Ptr; │ │ │ │ +691 auto _____p_t_r = _s_t_d_:_:_p_o_i_n_t_e_r___t_r_a_i_t_s_<___P_t_r_>_:_:_p_o_i_n_t_e_r___t_o(*__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(), _____p_t_r, 1); │ │ │ │ +693#endif │ │ │ │ +694 } │ │ │ │ +695 │ │ │ │ +696 template │ │ │ │ +697 _Node_ptr │ │ │ │ +698 _M_create_node(___A_r_g_s&&... _____a_r_g_s) │ │ │ │ +699 { │ │ │ │ +700 auto& _____a_l_l_o_c = _M_get_Node_allocator(); │ │ │ │ +701 auto __guard = _s_t_d_:_:_____a_l_l_o_c_a_t_e___g_u_a_r_d_e_d___o_b_j(_____a_l_l_o_c); │ │ │ │ +702 _Node_alloc_traits::construct(_____a_l_l_o_c, __guard->_M_valptr(), │ │ │ │ +703 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); │ │ │ │ +704 auto __p = __guard.release(); │ │ │ │ +705#if _GLIBCXX_USE_ALLOC_PTR_FOR_FWD_LIST │ │ │ │ +706 return __p; │ │ │ │ +707#else │ │ │ │ +708 return _s_t_d_:_:_____t_o___a_d_d_r_e_s_s(__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& _____a_l_l_o_c = _M_get_Node_allocator(); │ │ │ │ +718 // Destroy the element │ │ │ │ +719 _Node_alloc_traits::destroy(_____a_l_l_o_c, __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 _____p_o_s, ___A_r_g_s&&... _____a_r_g_s); │ │ │ │ +730 │ │ │ │ +731 _Base_ptr │ │ │ │ +732 _M_erase_after(_Base_ptr _____p_o_s); │ │ │ │ 733 │ │ │ │ -734 // move-capable overload │ │ │ │ -735 template │ │ │ │ -736 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -737 _i_n_s_e_r_t___o_r___a_s_s_i_g_n(_k_e_y___t_y_p_e&& _____k, _Obj&& _____o_b_j) │ │ │ │ -738 { │ │ │ │ -739 auto _____r_e_t = _M_h.try_emplace(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(_____k), │ │ │ │ -740 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j)); │ │ │ │ -741 if (!_____r_e_t.second) │ │ │ │ -742 _____r_e_t.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j); │ │ │ │ -743 return _____r_e_t; │ │ │ │ -744 } │ │ │ │ -745 │ │ │ │ -746 /** │ │ │ │ -747 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ -748 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ -749 * pair should be inserted. │ │ │ │ -750 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ -751 * the unordered_map. │ │ │ │ -752 * @param __obj Argument used to generate the .second for a pair │ │ │ │ -753 * instance. │ │ │ │ -754 * @return An iterator that points to the element with key of │ │ │ │ -755 * @a __x (may or may not be the %pair passed in). │ │ │ │ -756 * │ │ │ │ -757 * This function is not concerned about whether the insertion took place, │ │ │ │ -758 * and thus does not return a boolean like the single-argument insert() │ │ │ │ -759 * does. │ │ │ │ -760 * If the %pair was already in the %unordered map, the .second of │ │ │ │ -761 * the %pair is assigned from __obj. │ │ │ │ -762 * Note that the first parameter is only a hint and can │ │ │ │ -763 * potentially improve the performance of the insertion process. A bad │ │ │ │ -764 * hint would cause no gains in efficiency. │ │ │ │ -765 * │ │ │ │ -766 * See │ │ │ │ -767 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -768 * for more on @a hinting. │ │ │ │ -769 * │ │ │ │ -770 * Insertion requires amortized constant time. │ │ │ │ -771 */ │ │ │ │ -772 template │ │ │ │ -773 _i_t_e_r_a_t_o_r │ │ │ │ -_7_7_4 _i_n_s_e_r_t___o_r___a_s_s_i_g_n(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, const _k_e_y___t_y_p_e& _____k, │ │ │ │ -775 _Obj&& _____o_b_j) │ │ │ │ -776 { │ │ │ │ -777 auto _____r_e_t = _M_h.try_emplace(_____h_i_n_t, _____k, _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j)); │ │ │ │ -778 if (!_____r_e_t.second) │ │ │ │ -779 _____r_e_t.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j); │ │ │ │ -780 return _____r_e_t.first; │ │ │ │ -781 } │ │ │ │ -782 │ │ │ │ -783 // move-capable overload │ │ │ │ -784 template │ │ │ │ -785 _i_t_e_r_a_t_o_r │ │ │ │ -786 _i_n_s_e_r_t___o_r___a_s_s_i_g_n(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, _k_e_y___t_y_p_e&& _____k, _Obj&& _____o_b_j) │ │ │ │ -787 { │ │ │ │ -788 auto _____r_e_t = _M_h.try_emplace(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(_____k), │ │ │ │ -789 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j)); │ │ │ │ -790 if (!_____r_e_t.second) │ │ │ │ -791 _____r_e_t.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j); │ │ │ │ -792 return _____r_e_t.first; │ │ │ │ -793 } │ │ │ │ -794#endif // unordered_map_try_emplace │ │ │ │ -795 │ │ │ │ -796 ///@{ │ │ │ │ -797 /** │ │ │ │ -798 * @brief Erases an element from an %unordered_map. │ │ │ │ -799 * @param __position An iterator pointing to the element to be erased. │ │ │ │ -800 * @return An iterator pointing to the element immediately following │ │ │ │ -801 * @a __position prior to the element being erased. If no such │ │ │ │ -802 * element exists, end() is returned. │ │ │ │ -803 * │ │ │ │ -804 * This function erases an element, pointed to by the given iterator, │ │ │ │ -805 * from an %unordered_map. │ │ │ │ -806 * Note that this function only erases the element, and that if the │ │ │ │ -807 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ -808 * any way. Managing the pointer is the user's responsibility. │ │ │ │ -809 */ │ │ │ │ -810 _i_t_e_r_a_t_o_r │ │ │ │ -_8_1_1 _e_r_a_s_e(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n) │ │ │ │ -812 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ +734 _Base_ptr │ │ │ │ +735 _M_erase_after(_Base_ptr _____p_o_s, _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 ___F_w_d___l_i_s_t___b_a_s_e<_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 ___F_w_d___l_i_s_t___b_a_s_e_<___T_p_,_ ___A_l_l_o_c_> ___B_a_s_e; │ │ │ │ +778 typedef ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e ___N_o_d_e___b_a_s_e; │ │ │ │ +779 typedef typename _Base::_Node _Node; │ │ │ │ +780 typedef typename ___B_a_s_e_:_:___N_o_d_e___a_l_l_o_c___t_y_p_e ___N_o_d_e___a_l_l_o_c___t_y_p_e; │ │ │ │ +781 typedef typename ___B_a_s_e_:_:___N_o_d_e___a_l_l_o_c___t_r_a_i_t_s ___N_o_d_e___a_l_l_o_c___t_r_a_i_t_s; │ │ │ │ +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_>> ___A_l_l_o_c___t_r_a_i_t_s; │ │ │ │ +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 _s_t_d_:_:_p_t_r_d_i_f_f___t _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ +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& _____a_l) noexcept │ │ │ │ +811 : ___B_a_s_e(___N_o_d_e___a_l_l_o_c___t_y_p_e(_____a_l)) │ │ │ │ +812 { } │ │ │ │ 813 │ │ │ │ -814 // LWG 2059. │ │ │ │ -815 _i_t_e_r_a_t_o_r │ │ │ │ -_8_1_6 _e_r_a_s_e(_i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n) │ │ │ │ -817 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ -818 ///@} │ │ │ │ -819 │ │ │ │ -820 /** │ │ │ │ -821 * @brief Erases elements according to the provided key. │ │ │ │ -822 * @param __x Key of element to be erased. │ │ │ │ -823 * @return The number of elements erased. │ │ │ │ -824 * │ │ │ │ -825 * This function erases all the elements located by the given key from │ │ │ │ -826 * an %unordered_map. For an %unordered_map the result of this function │ │ │ │ -827 * can only be 0 (not present) or 1 (present). │ │ │ │ -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 _s_i_z_e___t_y_p_e │ │ │ │ -_8_3_3 _e_r_a_s_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -834 { return _M_h.erase(__x); } │ │ │ │ +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 _____t_y_p_e___i_d_e_n_t_i_t_y___t_<___A_l_l_o_c_>& _____a_l) │ │ │ │ +821 : ___B_a_s_e(___N_o_d_e___a_l_l_o_c___t_y_p_e(_____a_l)) │ │ │ │ +822 { _M_range_initialize(__list._b_e_g_i_n(), __list._e_n_d()); } │ │ │ │ +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&& _____a_l, │ │ │ │ +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(_____a_l)) │ │ │ │ +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 /** │ │ │ │ -837 * @brief Erases a [__first,__last) range of elements from an │ │ │ │ -838 * %unordered_map. │ │ │ │ -839 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -840 * erased. │ │ │ │ -841 * @param __last Iterator pointing to the end of the range to │ │ │ │ -842 * be erased. │ │ │ │ -843 * @return The iterator @a __last. │ │ │ │ -844 * │ │ │ │ -845 * This function erases a sequence of elements from an %unordered_map. │ │ │ │ -846 * Note that this function only erases the elements, and that if │ │ │ │ -847 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ -848 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -849 */ │ │ │ │ -850 _i_t_e_r_a_t_o_r │ │ │ │ -_8_5_1 _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) │ │ │ │ -852 { return _M_h.erase(__first, __last); } │ │ │ │ -853 │ │ │ │ -854 /** │ │ │ │ -855 * Erases all elements in an %unordered_map. │ │ │ │ -856 * Note that this function only erases the elements, and that if the │ │ │ │ -857 * elements themselves are pointers, the pointed-to memory is not touched │ │ │ │ -858 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -859 */ │ │ │ │ -860 void │ │ │ │ -_8_6_1 _c_l_e_a_r() noexcept │ │ │ │ -862 { _M_h.clear(); } │ │ │ │ -863 │ │ │ │ -864 /** │ │ │ │ -865 * @brief Swaps data with another %unordered_map. │ │ │ │ -866 * @param __x An %unordered_map of the same element and allocator │ │ │ │ -867 * types. │ │ │ │ -868 * │ │ │ │ -869 * This exchanges the elements between two %unordered_map in constant │ │ │ │ -870 * time. │ │ │ │ -871 * Note that the global std::swap() function is specialized such that │ │ │ │ -872 * std::swap(m1,m2) will feed to this function. │ │ │ │ -873 */ │ │ │ │ -874 void │ │ │ │ -_8_7_5 _s_w_a_p(_u_n_o_r_d_e_r_e_d___m_a_p& __x) │ │ │ │ -876 noexcept( noexcept(_M_h.swap(__x._M_h)) ) │ │ │ │ -877 { _M_h.swap(__x._M_h); } │ │ │ │ -878 │ │ │ │ -879#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -880 template │ │ │ │ -881 friend class std::_Hash_merge_helper; │ │ │ │ -882 │ │ │ │ -883 template │ │ │ │ -884 void │ │ │ │ -885 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_>& _____s_o_u_r_c_e) │ │ │ │ -886 { │ │ │ │ -887 if constexpr (_i_s___s_a_m_e___v_<___H_2_,_ ___H_a_s_h_> && _i_s___s_a_m_e___v_<___P_2_,_ ___P_r_e_d_>) │ │ │ │ -888 if (_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____s_o_u_r_c_e) == this) [[_____u_n_l_i_k_e_l_y____]] │ │ │ │ -889 return; │ │ │ │ -890 │ │ │ │ -891 using ___M_e_r_g_e___h_e_l_p_e_r = ___H_a_s_h___m_e_r_g_e___h_e_l_p_e_r_<_u_n_o_r_d_e_r_e_d___m_a_p_,_ ___H_2_,_ ___P_2_>; │ │ │ │ -892 _M_h._M_merge_unique(_Merge_helper::_S_get_table(_____s_o_u_r_c_e)); │ │ │ │ -893 } │ │ │ │ -894 │ │ │ │ -895 template │ │ │ │ -896 void │ │ │ │ -897 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ -898 { │ │ │ │ -899 using _Merge_helper = _Hash_merge_helper; │ │ │ │ -900 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ -901 } │ │ │ │ -902 │ │ │ │ -903 template │ │ │ │ -904 void │ │ │ │ -905 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>& __source) │ │ │ │ -906 { │ │ │ │ -907 using _Merge_helper = _Hash_merge_helper; │ │ │ │ -908 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ -909 } │ │ │ │ -910 │ │ │ │ -911 template │ │ │ │ -912 void │ │ │ │ -913 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ -914 { merge(__source); } │ │ │ │ -915#endif // node_extract │ │ │ │ -916 │ │ │ │ -917 // observers. │ │ │ │ -918 │ │ │ │ -919 /// Returns the hash functor object with which the %unordered_map was │ │ │ │ -920 /// constructed. │ │ │ │ -921 _h_a_s_h_e_r │ │ │ │ -_9_2_2 _h_a_s_h___f_u_n_c_t_i_o_n() const │ │ │ │ -923 { return _M_h.hash_function(); } │ │ │ │ -924 │ │ │ │ -925 /// Returns the key comparison object with which the %unordered_map was │ │ │ │ -926 /// constructed. │ │ │ │ -927 _k_e_y___e_q_u_a_l │ │ │ │ -_9_2_8 _k_e_y___e_q() const │ │ │ │ -929 { return _M_h.key_eq(); } │ │ │ │ -930 │ │ │ │ -931 // lookup. │ │ │ │ +836 _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, │ │ │ │ +837 _t_r_u_e___t_y_p_e) │ │ │ │ +838 noexcept │ │ │ │ +839 : _Base(_s_t_d_:_:_m_o_v_e(__list), _Node_alloc_type(__al), _t_r_u_e___t_y_p_e{}) │ │ │ │ +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 _____t_y_p_e___i_d_e_n_t_i_t_y___t_<___A_l_l_o_c_>& _____a_l) │ │ │ │ +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), ___N_o_d_e___a_l_l_o_c___t_y_p_e(_____a_l), │ │ │ │ +852 _t_y_p_e_n_a_m_e ___N_o_d_e___a_l_l_o_c___t_r_a_i_t_s::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& _____a_l = _Alloc()) │ │ │ │ +865 : ___B_a_s_e(___N_o_d_e___a_l_l_o_c___t_y_p_e(_____a_l)) │ │ │ │ +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& _____a_l = _Alloc()) │ │ │ │ +879 : ___B_a_s_e(___N_o_d_e___a_l_l_o_c___t_y_p_e(_____a_l)) │ │ │ │ +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(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __last, │ │ │ │ +895 const _Alloc& _____a_l = _Alloc()) │ │ │ │ +896 : ___B_a_s_e(___N_o_d_e___a_l_l_o_c___t_y_p_e(_____a_l)) │ │ │ │ +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(_f_r_o_m___r_a_n_g_e___t, ___R_g&& _____r_g, const _Alloc& __a = _Alloc()) │ │ │ │ +910 : _Base(_Node_alloc_type(__a)) │ │ │ │ +911 { │ │ │ │ +912 auto _____t_o = this->_M_impl._M_head._M_base_ptr(); │ │ │ │ +913 auto __first = ranges::begin(_____r_g); │ │ │ │ +914 const auto __last = ranges::end(_____r_g); │ │ │ │ +915 for (; __first != __last; ++__first) │ │ │ │ +916 { │ │ │ │ +917 _____t_o->_M_next = this->_M_create_node(*__first)->_M_base_ptr(); │ │ │ │ +918 _____t_o = _____t_o->_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 : ___B_a_s_e(___N_o_d_e___a_l_l_o_c___t_r_a_i_t_s::_S_select_on_copy( │ │ │ │ +930 __list._M_get_Node_allocator())) │ │ │ │ +931 { _M_range_initialize(__list._b_e_g_i_n(), __list._e_n_d()); } │ │ │ │ 932 │ │ │ │ -933 ///@{ │ │ │ │ -934 /** │ │ │ │ -935 * @brief Tries to locate an element in an %unordered_map. │ │ │ │ -936 * @param __x Key to be located. │ │ │ │ -937 * @return Iterator pointing to sought-after element, or end() if not │ │ │ │ -938 * found. │ │ │ │ -939 * │ │ │ │ -940 * This function takes a key and tries to locate the element with which │ │ │ │ -941 * the key matches. If successful the function returns an iterator │ │ │ │ -942 * pointing to the sought after element. If unsuccessful it returns the │ │ │ │ -943 * past-the-end ( @c end() ) iterator. │ │ │ │ -944 */ │ │ │ │ -945 _i_t_e_r_a_t_o_r │ │ │ │ -_9_4_6 _f_i_n_d(const _k_e_y___t_y_p_e& __x) │ │ │ │ -947 { return _M_h.find(__x); } │ │ │ │ -948 │ │ │ │ -949#if __cplusplus > 201703L │ │ │ │ -950 template │ │ │ │ -951 auto │ │ │ │ -_9_5_2 _f_i_n_d(const ___K_t& __x) -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -953 { return _M_h._M_find_tr(__x); } │ │ │ │ -954#endif │ │ │ │ -955 │ │ │ │ -956 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_9_5_7 _f_i_n_d(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -958 { return _M_h.find(__x); } │ │ │ │ -959 │ │ │ │ -960#if __cplusplus > 201703L │ │ │ │ -961 template │ │ │ │ -962 auto │ │ │ │ -_9_6_3 _f_i_n_d(const ___K_t& __x) const -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -964 { return _M_h._M_find_tr(__x); } │ │ │ │ -965#endif │ │ │ │ -966 ///@} │ │ │ │ -967 │ │ │ │ -968 ///@{ │ │ │ │ -969 /** │ │ │ │ -970 * @brief Finds the number of elements. │ │ │ │ -971 * @param __x Key to count. │ │ │ │ -972 * @return Number of elements with specified key. │ │ │ │ -973 * │ │ │ │ -974 * This function only makes sense for %unordered_multimap; for │ │ │ │ -975 * %unordered_map the result will either be 0 (not present) or 1 │ │ │ │ -976 * (present). │ │ │ │ -977 */ │ │ │ │ -978 _s_i_z_e___t_y_p_e │ │ │ │ -_9_7_9 _c_o_u_n_t(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -980 { return _M_h.count(__x); } │ │ │ │ -981 │ │ │ │ -982#if __cplusplus > 201703L │ │ │ │ -983 template │ │ │ │ -984 auto │ │ │ │ -_9_8_5 _c_o_u_n_t(const ___K_t& __x) const -> decltype(_M_h._M_count_tr(__x)) │ │ │ │ -986 { return _M_h._M_count_tr(__x); } │ │ │ │ -987#endif │ │ │ │ -988 ///@} │ │ │ │ -989 │ │ │ │ -990#if __cplusplus > 201703L │ │ │ │ -991 ///@{ │ │ │ │ -992 /** │ │ │ │ -993 * @brief Finds whether an element with the given key exists. │ │ │ │ -994 * @param __x Key of elements to be located. │ │ │ │ -995 * @return True if there is any element with the specified key. │ │ │ │ -996 */ │ │ │ │ -997 bool │ │ │ │ -_9_9_8 _c_o_n_t_a_i_n_s(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -999 { return _M_h.find(__x) != _M_h.end(); } │ │ │ │ -1000 │ │ │ │ -1001 template │ │ │ │ -1002 auto │ │ │ │ -_1_0_0_3 _c_o_n_t_a_i_n_s(const ___K_t& __x) const │ │ │ │ -1004 -> decltype(_M_h._M_find_tr(__x), _v_o_i_d(), true) │ │ │ │ -1005 { return _M_h._M_find_tr(__x) != _M_h.end(); } │ │ │ │ -1006 ///@} │ │ │ │ -1007#endif │ │ │ │ -1008 │ │ │ │ -1009 ///@{ │ │ │ │ -1010 /** │ │ │ │ -1011 * @brief Finds a subsequence matching given key. │ │ │ │ -1012 * @param __x Key to be located. │ │ │ │ -1013 * @return Pair of iterators that possibly points to the subsequence │ │ │ │ -1014 * matching given key. │ │ │ │ -1015 * │ │ │ │ -1016 * This function probably only makes sense for %unordered_multimap. │ │ │ │ -1017 */ │ │ │ │ -1018 _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_1_9 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -1020 { return _M_h.equal_range(__x); } │ │ │ │ -1021 │ │ │ │ -1022#if __cplusplus > 201703L │ │ │ │ -1023 template │ │ │ │ -1024 auto │ │ │ │ -_1_0_2_5 _e_q_u_a_l___r_a_n_g_e(const ___K_t& __x) │ │ │ │ -1026 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -1027 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ -1028#endif │ │ │ │ -1029 │ │ │ │ -1030 _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_3_1 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -1032 { return _M_h.equal_range(__x); } │ │ │ │ -1033 │ │ │ │ -1034#if __cplusplus > 201703L │ │ │ │ -1035 template │ │ │ │ -1036 auto │ │ │ │ -_1_0_3_7 _e_q_u_a_l___r_a_n_g_e(const ___K_t& __x) const │ │ │ │ -1038 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -1039 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ -1040#endif │ │ │ │ -1041 ///@} │ │ │ │ -1042 │ │ │ │ -1043 ///@{ │ │ │ │ -1044 /** │ │ │ │ -1045 * @brief Subscript ( @c [] ) access to %unordered_map data. │ │ │ │ -1046 * @param __k The key for which data should be retrieved. │ │ │ │ -1047 * @return A reference to the data of the (key,data) %pair. │ │ │ │ -1048 * │ │ │ │ -1049 * Allows for easy lookup with the subscript ( @c [] )operator. Returns │ │ │ │ -1050 * data associated with the key specified in subscript. If the key does │ │ │ │ -1051 * not exist, a pair with that key is created using default values, which │ │ │ │ -1052 * is then returned. │ │ │ │ -1053 * │ │ │ │ -1054 * Lookup requires constant time. │ │ │ │ -1055 */ │ │ │ │ -1056 _m_a_p_p_e_d___t_y_p_e& │ │ │ │ -_1_0_5_7 _o_p_e_r_a_t_o_r_[_](const _k_e_y___t_y_p_e& _____k) │ │ │ │ -1058 { return _M_h[_____k]; } │ │ │ │ -1059 │ │ │ │ -1060 _m_a_p_p_e_d___t_y_p_e& │ │ │ │ -_1_0_6_1 _o_p_e_r_a_t_o_r_[_](_k_e_y___t_y_p_e&& _____k) │ │ │ │ -1062 { return _M_h[_s_t_d_:_:_m_o_v_e(_____k)]; } │ │ │ │ -1063 ///@} │ │ │ │ -1064 │ │ │ │ -1065 ///@{ │ │ │ │ -1066 /** │ │ │ │ -1067 * @brief Access to %unordered_map data. │ │ │ │ -1068 * @param __k The key for which data should be retrieved. │ │ │ │ -1069 * @return A reference to the data whose key is equal to @a __k, if │ │ │ │ -1070 * such a data is present in the %unordered_map. │ │ │ │ -1071 * @throw std::out_of_range If no such data is present. │ │ │ │ -1072 */ │ │ │ │ -1073 _m_a_p_p_e_d___t_y_p_e& │ │ │ │ -_1_0_7_4 _a_t(const _k_e_y___t_y_p_e& _____k) │ │ │ │ -1075 { return _M_h.at(_____k); } │ │ │ │ -1076 │ │ │ │ -1077 const _m_a_p_p_e_d___t_y_p_e& │ │ │ │ -_1_0_7_8 _a_t(const _k_e_y___t_y_p_e& _____k) const │ │ │ │ -1079 { return _M_h.at(_____k); } │ │ │ │ -1080 ///@} │ │ │ │ -1081 │ │ │ │ -1082 // bucket interface. │ │ │ │ -1083 │ │ │ │ -1084 /// Returns the number of buckets of the %unordered_map. │ │ │ │ -1085 _s_i_z_e___t_y_p_e │ │ │ │ -_1_0_8_6 _b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ -1087 { return _M_h.bucket_count(); } │ │ │ │ -1088 │ │ │ │ -1089 /// Returns the maximum number of buckets of the %unordered_map. │ │ │ │ -1090 _s_i_z_e___t_y_p_e │ │ │ │ -_1_0_9_1 _m_a_x___b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ -1092 { return _M_h.max_bucket_count(); } │ │ │ │ -1093 │ │ │ │ -1094 /* │ │ │ │ -1095 * @brief Returns the number of elements in a given bucket. │ │ │ │ -1096 * @param __n A bucket index. │ │ │ │ -1097 * @return The number of elements in the bucket. │ │ │ │ -1098 */ │ │ │ │ -1099 _s_i_z_e___t_y_p_e │ │ │ │ -1100 bucket_size(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1101 { return _M_h.bucket_size(__n); } │ │ │ │ -1102 │ │ │ │ -1103 /* │ │ │ │ -1104 * @brief Returns the bucket index of a given element. │ │ │ │ -1105 * @param __key A key instance. │ │ │ │ -1106 * @return The key bucket index. │ │ │ │ -1107 */ │ │ │ │ -1108 _s_i_z_e___t_y_p_e │ │ │ │ -1109 bucket(const _k_e_y___t_y_p_e& __key) const │ │ │ │ -1110 { return _M_h.bucket(__key); } │ │ │ │ -1111 │ │ │ │ -1112 /** │ │ │ │ -1113 * @brief Returns a read/write iterator pointing to the first bucket │ │ │ │ -1114 * element. │ │ │ │ -1115 * @param __n The bucket index. │ │ │ │ -1116 * @return A read/write local iterator. │ │ │ │ -1117 */ │ │ │ │ -1118 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_1_1_9 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1120 { return _M_h.begin(__n); } │ │ │ │ -1121 │ │ │ │ -1122 ///@{ │ │ │ │ -1123 /** │ │ │ │ -1124 * @brief Returns a read-only (constant) iterator pointing to the first │ │ │ │ -1125 * bucket element. │ │ │ │ -1126 * @param __n The bucket index. │ │ │ │ -1127 * @return A read-only local iterator. │ │ │ │ -1128 */ │ │ │ │ -1129 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_1_3_0 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1131 { return _M_h.begin(__n); } │ │ │ │ -1132 │ │ │ │ -1133 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_1_3_4 _c_b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1135 { return _M_h.cbegin(__n); } │ │ │ │ -1136 ///@} │ │ │ │ -1137 │ │ │ │ -1138 /** │ │ │ │ -1139 * @brief Returns a read/write iterator pointing to one past the last │ │ │ │ -1140 * bucket elements. │ │ │ │ -1141 * @param __n The bucket index. │ │ │ │ -1142 * @return A read/write local iterator. │ │ │ │ -1143 */ │ │ │ │ -1144 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_1_4_5 _e_n_d(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1146 { return _M_h.end(__n); } │ │ │ │ -1147 │ │ │ │ -1148 ///@{ │ │ │ │ -1149 /** │ │ │ │ -1150 * @brief Returns a read-only (constant) iterator pointing to one past │ │ │ │ -1151 * the last bucket elements. │ │ │ │ -1152 * @param __n The bucket index. │ │ │ │ -1153 * @return A read-only local iterator. │ │ │ │ +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_> _____i_l, │ │ │ │ +953 const _Alloc& _____a_l = _Alloc()) │ │ │ │ +954 : ___B_a_s_e(___N_o_d_e___a_l_l_o_c___t_y_p_e(_____a_l)) │ │ │ │ +955 { _M_range_initialize(_____i_l.begin(), _____i_l.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& │ │ │ │ +973 _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 _____m_o_v_e___s_t_o_r_a_g_e = │ │ │ │ +994 _Node_alloc_traits::_S_propagate_on_move_assign() │ │ │ │ +995 || _Node_alloc_traits::_S_always_equal(); │ │ │ │ +996 if constexpr (!_____m_o_v_e___s_t_o_r_a_g_e) │ │ │ │ +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_> _____i_l) │ │ │ │ +1027 { │ │ │ │ +1028 _a_s_s_i_g_n(_____i_l); │ │ │ │ +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(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __last) │ │ │ │ +1048 { │ │ │ │ +1049 if constexpr (_i_s___a_s_s_i_g_n_a_b_l_e<_Tp, decltype(*__first)>::value) │ │ │ │ +1050 { │ │ │ │ +1051 auto _____p_r_e_v = _b_e_f_o_r_e___b_e_g_i_n(); │ │ │ │ +1052 auto _____c_u_r_r = _b_e_g_i_n(); │ │ │ │ +1053 auto __end = _e_n_d(); │ │ │ │ +1054 while (_____c_u_r_r != __end && __first != __last) │ │ │ │ +1055 { │ │ │ │ +1056 *_____c_u_r_r = *__first; │ │ │ │ +1057 ++_____p_r_e_v; │ │ │ │ +1058 ++_____c_u_r_r; │ │ │ │ +1059 ++__first; │ │ │ │ +1060 } │ │ │ │ +1061 if (__first != __last) │ │ │ │ +1062 _i_n_s_e_r_t___a_f_t_e_r(_____p_r_e_v, __first, __last); │ │ │ │ +1063 else if (_____c_u_r_r != __end) │ │ │ │ +1064 _e_r_a_s_e___a_f_t_e_r(_____p_r_e_v, __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 _a_s_s_i_g_n___r_a_n_g_e(___R_g&& _____r_g) │ │ │ │ +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(_____r_g); │ │ │ │ +1086 const auto __last = ranges::end(_____r_g); │ │ │ │ +1087 _i_t_e_r_a_t_o_r _____p_r_e_v = _b_e_f_o_r_e___b_e_g_i_n(); │ │ │ │ +1088 _i_t_e_r_a_t_o_r _____c_u_r_r = _b_e_g_i_n(); │ │ │ │ +1089 const _i_t_e_r_a_t_o_r __end = _e_n_d(); │ │ │ │ +1090 │ │ │ │ +1091 while (_____c_u_r_r != __end && __first != __last) │ │ │ │ +1092 { │ │ │ │ +1093 *_____c_u_r_r = *__first; │ │ │ │ +1094 _____p_r_e_v = _____c_u_r_r; │ │ │ │ +1095 ++__first; │ │ │ │ +1096 ++_____c_u_r_r; │ │ │ │ +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 _____p_r_e_v = _b_e_f_o_r_e___b_e_g_i_n(); │ │ │ │ +1125 auto _____c_u_r_r = _b_e_g_i_n(); │ │ │ │ +1126 auto __end = _e_n_d(); │ │ │ │ +1127 while (_____c_u_r_r != __end && __n > 0) │ │ │ │ +1128 { │ │ │ │ +1129 *_____c_u_r_r = __val; │ │ │ │ +1130 ++_____p_r_e_v; │ │ │ │ +1131 ++_____c_u_r_r; │ │ │ │ +1132 --__n; │ │ │ │ +1133 } │ │ │ │ +1134 if (__n > 0) │ │ │ │ +1135 _i_n_s_e_r_t___a_f_t_e_r(_____p_r_e_v, __n, __val); │ │ │ │ +1136 else if (_____c_u_r_r != __end) │ │ │ │ +1137 _e_r_a_s_e___a_f_t_e_r(_____p_r_e_v, __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 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_1_5_6 _e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1157 { return _M_h.end(__n); } │ │ │ │ +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_> _____i_l) │ │ │ │ +1157 { _a_s_s_i_g_n(_____i_l.begin(), _____i_l.end()); } │ │ │ │ 1158 │ │ │ │ -1159 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_1_6_0 _c_e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1161 { return _M_h.cend(__n); } │ │ │ │ -1162 ///@} │ │ │ │ +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() _c_o_n_s_t noexcept │ │ │ │ +1162 { return allocator_type(this->_M_get_Node_allocator()); } │ │ │ │ 1163 │ │ │ │ -1164 // hash policy. │ │ │ │ +1164 // 23.3.4.3 iterators: │ │ │ │ 1165 │ │ │ │ -1166 /// Returns the average number of elements per bucket. │ │ │ │ -1167 float │ │ │ │ -_1_1_6_8 _l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -1169 { return _M_h.load_factor(); } │ │ │ │ -1170 │ │ │ │ -1171 /// Returns a positive number that the %unordered_map tries to keep the │ │ │ │ -1172 /// load factor less than or equal to. │ │ │ │ -1173 float │ │ │ │ -_1_1_7_4 _m_a_x___l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -1175 { return _M_h.max_load_factor(); } │ │ │ │ -1176 │ │ │ │ -1177 /** │ │ │ │ -1178 * @brief Change the %unordered_map maximum load factor. │ │ │ │ -1179 * @param __z The new maximum load factor. │ │ │ │ -1180 */ │ │ │ │ -1181 void │ │ │ │ -_1_1_8_2 _m_a_x___l_o_a_d___f_a_c_t_o_r(float _____z) │ │ │ │ -1183 { _M_h.max_load_factor(_____z); } │ │ │ │ +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 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +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 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +1181 const_iterator │ │ │ │ +_1_1_8_2 _b_e_f_o_r_e___b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ +1183 { return const_iterator(this->_M_impl._M_head._M_base_ptr()); } │ │ │ │ 1184 │ │ │ │ 1185 /** │ │ │ │ -1186 * @brief May rehash the %unordered_map. │ │ │ │ -1187 * @param __n The new number of buckets. │ │ │ │ -1188 * │ │ │ │ -1189 * Rehash will occur only if the new number of buckets respect the │ │ │ │ -1190 * %unordered_map maximum load factor. │ │ │ │ -1191 */ │ │ │ │ -1192 void │ │ │ │ -_1_1_9_3 _r_e_h_a_s_h(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1194 { _M_h.rehash(__n); } │ │ │ │ -1195 │ │ │ │ -1196 /** │ │ │ │ -1197 * @brief Prepare the %unordered_map for a specified number of │ │ │ │ -1198 * elements. │ │ │ │ -1199 * @param __n Number of elements required. │ │ │ │ -1200 * │ │ │ │ -1201 * Same as rehash(ceil(n / max_load_factor())). │ │ │ │ -1202 */ │ │ │ │ -1203 void │ │ │ │ -_1_2_0_4 _r_e_s_e_r_v_e(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1205 { _M_h.reserve(__n); } │ │ │ │ -1206 │ │ │ │ -1207 template │ │ │ │ -1209 friend bool │ │ │ │ -1210 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_>&, │ │ │ │ -1211 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_>&); │ │ │ │ -1212 }; │ │ │ │ +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 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +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 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +1200 const_iterator │ │ │ │ +_1_2_0_1 _b_e_g_i_n() _c_o_n_s_t 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 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +1210 _i_t_e_r_a_t_o_r │ │ │ │ +_1_2_1_1 _e_n_d() noexcept │ │ │ │ +1212 { return iterator(nullptr); } │ │ │ │ 1213 │ │ │ │ -1214#if __cpp_deduction_guides >= 201606 │ │ │ │ -1215 │ │ │ │ -1216 template>, │ │ │ │ -1218 typename _Pred = equal_to<__iter_key_t<_InputIterator>>, │ │ │ │ -1219 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, │ │ │ │ -1220 typename = _RequireInputIter<_InputIterator>, │ │ │ │ -1221 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -1222 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -1223 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1224 unordered_map(_InputIterator, _InputIterator, │ │ │ │ -1225 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 = {}, │ │ │ │ -1226 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ -1227 -> unordered_map<__iter_key_t<_InputIterator>, │ │ │ │ -1228 __iter_val_t<_InputIterator>, │ │ │ │ -1229 _Hash, _Pred, _Allocator>; │ │ │ │ -1230 │ │ │ │ -1231 template, │ │ │ │ -1232 typename _Pred = equal_to<_Key>, │ │ │ │ -1233 typename _Allocator = allocator>, │ │ │ │ -1234 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -1235 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -1236 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1237 unordered_map(initializer_list>, │ │ │ │ -1238 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 = {}, │ │ │ │ -1239 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ -1240 -> unordered_map<_Key, _Tp, _Hash, _Pred, _Allocator>; │ │ │ │ -1241 │ │ │ │ -1242 template, │ │ │ │ -1244 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1245 unordered_map(_InputIterator, _InputIterator, │ │ │ │ -1246 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) │ │ │ │ -1247 -> unordered_map<__iter_key_t<_InputIterator>, │ │ │ │ -1248 __iter_val_t<_InputIterator>, │ │ │ │ -1249 hash<__iter_key_t<_InputIterator>>, │ │ │ │ -1250 equal_to<__iter_key_t<_InputIterator>>, │ │ │ │ -1251 _Allocator>; │ │ │ │ -1252 │ │ │ │ -1253 template, │ │ │ │ -1255 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1256 unordered_map(_InputIterator, _InputIterator, _Allocator) │ │ │ │ -1257 -> unordered_map<__iter_key_t<_InputIterator>, │ │ │ │ -1258 __iter_val_t<_InputIterator>, │ │ │ │ -1259 hash<__iter_key_t<_InputIterator>>, │ │ │ │ -1260 equal_to<__iter_key_t<_InputIterator>>, │ │ │ │ -1261 _Allocator>; │ │ │ │ +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 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +1220 const_iterator │ │ │ │ +_1_2_2_1 _e_n_d() _c_o_n_s_t 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 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +1230 const_iterator │ │ │ │ +_1_2_3_1 _c_b_e_g_i_n() _c_o_n_s_t 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 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +1240 const_iterator │ │ │ │ +_1_2_4_1 _c_b_e_f_o_r_e___b_e_g_i_n() _c_o_n_s_t 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 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +1250 const_iterator │ │ │ │ +_1_2_5_1 _c_e_n_d() _c_o_n_s_t 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 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +1259 bool │ │ │ │ +_1_2_6_0 _e_m_p_t_y() _c_o_n_s_t noexcept │ │ │ │ +1261 { return this->_M_impl._M_head._M_next == nullptr; } │ │ │ │ 1262 │ │ │ │ -1263 template, │ │ │ │ -1265 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -1266 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1267 unordered_map(_InputIterator, _InputIterator, │ │ │ │ -1268 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, │ │ │ │ -1269 _Hash, _Allocator) │ │ │ │ -1270 -> unordered_map<__iter_key_t<_InputIterator>, │ │ │ │ -1271 __iter_val_t<_InputIterator>, _Hash, │ │ │ │ -1272 equal_to<__iter_key_t<_InputIterator>>, _Allocator>; │ │ │ │ -1273 │ │ │ │ -1274 template> │ │ │ │ -1276 unordered_map(initializer_list>, │ │ │ │ -1277 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, │ │ │ │ -1278 _Allocator) │ │ │ │ -1279 -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; │ │ │ │ -1280 │ │ │ │ -1281 template> │ │ │ │ -1283 unordered_map(initializer_list>, _Allocator) │ │ │ │ -1284 -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; │ │ │ │ +1263 /** │ │ │ │ +1264 * Returns the largest possible number of elements of %forward_list. │ │ │ │ +1265 */ │ │ │ │ +1266 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +1267 size_type │ │ │ │ +_1_2_6_8 _m_a_x___s_i_z_e() _c_o_n_s_t 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 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +1278 reference │ │ │ │ +_1_2_7_9 _f_r_o_n_t() │ │ │ │ +1280 { │ │ │ │ +1281 __glibcxx_requires_nonempty(); │ │ │ │ +1282 _Node& _____f_r_o_n_t = static_cast<_Node&>(*this->_M_impl._M_head._M_next); │ │ │ │ +1283 return *_____f_r_o_n_t._M_valptr(); │ │ │ │ +1284 } │ │ │ │ 1285 │ │ │ │ -1286 template, │ │ │ │ -1288 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1289 unordered_map(initializer_list>, │ │ │ │ -1290 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, │ │ │ │ -1291 _Hash, _Allocator) │ │ │ │ -1292 -> unordered_map<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>; │ │ │ │ -1293 │ │ │ │ -1294#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -1295 template>, │ │ │ │ -1297 __not_allocator_like _Pred = equal_to<__detail::__range_key_type<_Rg>>, │ │ │ │ -1298 __allocator_like _Allocator = │ │ │ │ -1299 allocator<__detail::__range_to_alloc_type<_Rg>>> │ │ │ │ -1300 unordered_map(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 = │ │ │ │ -{}, │ │ │ │ -1301 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ -1302 -> unordered_map<__detail::__range_key_type<_Rg>, │ │ │ │ -1303 __detail::__range_mapped_type<_Rg>, │ │ │ │ -1304 _Hash, _Pred, _Allocator>; │ │ │ │ -1305 │ │ │ │ -1306 template │ │ │ │ -1308 unordered_map(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, │ │ │ │ -1309 _Allocator) │ │ │ │ -1310 -> unordered_map<__detail::__range_key_type<_Rg>, │ │ │ │ -1311 __detail::__range_mapped_type<_Rg>, │ │ │ │ -1312 hash<__detail::__range_key_type<_Rg>>, │ │ │ │ -1313 equal_to<__detail::__range_key_type<_Rg>>, │ │ │ │ -1314 _Allocator>; │ │ │ │ -1315 │ │ │ │ -1316 template │ │ │ │ -1318 unordered_map(from_range_t, _Rg&&, _Allocator) │ │ │ │ -1319 -> unordered_map<__detail::__range_key_type<_Rg>, │ │ │ │ -1320 __detail::__range_mapped_type<_Rg>, │ │ │ │ -1321 hash<__detail::__range_key_type<_Rg>>, │ │ │ │ -1322 equal_to<__detail::__range_key_type<_Rg>>, │ │ │ │ -1323 _Allocator>; │ │ │ │ -1324 │ │ │ │ -1325 template │ │ │ │ -1328 unordered_map(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, │ │ │ │ -1329 _Hash, _Allocator) │ │ │ │ -1330 -> unordered_map<__detail::__range_key_type<_Rg>, │ │ │ │ -1331 __detail::__range_mapped_type<_Rg>, │ │ │ │ -1332 _Hash, equal_to<__detail::__range_key_type<_Rg>>, │ │ │ │ -1333 _Allocator>; │ │ │ │ -1334#endif │ │ │ │ -1335#endif │ │ │ │ -1336 │ │ │ │ -1337 /** │ │ │ │ -1338 * @brief A standard container composed of equivalent keys │ │ │ │ -1339 * (possibly containing multiple of each key value) that associates │ │ │ │ -1340 * values of another type with the keys. │ │ │ │ -1341 * │ │ │ │ -1342 * @ingroup unordered_associative_containers │ │ │ │ -1343 * @headerfile unordered_map │ │ │ │ -1344 * @since C++11 │ │ │ │ -1345 * │ │ │ │ -1346 * @tparam _Key Type of key objects. │ │ │ │ -1347 * @tparam _Tp Type of mapped objects. │ │ │ │ -1348 * @tparam _Hash Hashing function object type, defaults to hash<_Value>. │ │ │ │ -1349 * @tparam _Pred Predicate function object type, defaults │ │ │ │ -1350 * to equal_to<_Value>. │ │ │ │ -1351 * @tparam _Alloc Allocator type, defaults to │ │ │ │ -1352 * std::allocator>. │ │ │ │ +1286 /** │ │ │ │ +1287 * Returns a read-only (constant) reference to the data at the first │ │ │ │ +1288 * element of the %forward_list. │ │ │ │ +1289 */ │ │ │ │ +1290 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +1291 const_reference │ │ │ │ +_1_2_9_2 _f_r_o_n_t() const │ │ │ │ +1293 { │ │ │ │ +1294 __glibcxx_requires_nonempty(); │ │ │ │ +1295 _Node& _____f_r_o_n_t = static_cast<_Node&>(*this->_M_impl._M_head._M_next); │ │ │ │ +1296 return *_____f_r_o_n_t._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(___A_r_g_s&&... _____a_r_g_s) │ │ │ │ +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_>(_____a_r_g_s)...); │ │ │ │ +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 * Meets the requirements of a container, and │ │ │ │ -1355 * unordered associative container │ │ │ │ -1356 * │ │ │ │ -1357 * The resulting value type of the container is std::pair. │ │ │ │ -1358 * │ │ │ │ -1359 * Base is _Hashtable, dispatched at compile time via template │ │ │ │ -1360 * alias __ummap_hashtable. │ │ │ │ -1361 */ │ │ │ │ -1362 template, │ │ │ │ -1364 typename _Pred = equal_to<_Key>, │ │ │ │ -1365 typename _Alloc = allocator>> │ │ │ │ -_1_3_6_6 class _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ +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 typedef _____u_m_m_a_p___h_a_s_h_t_a_b_l_e_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_> ___H_a_s_h_t_a_b_l_e; │ │ │ │ -1369 ___H_a_s_h_t_a_b_l_e _M_h; │ │ │ │ -1370 │ │ │ │ -1371 public: │ │ │ │ -1372 // typedefs: │ │ │ │ -1373 ///@{ │ │ │ │ -1374 /// Public typedefs. │ │ │ │ -_1_3_7_5 typedef typename _Hashtable::key_type _k_e_y___t_y_p_e; │ │ │ │ -_1_3_7_6 typedef typename _Hashtable::value_type _v_a_l_u_e___t_y_p_e; │ │ │ │ -_1_3_7_7 typedef typename _Hashtable::mapped_type _m_a_p_p_e_d___t_y_p_e; │ │ │ │ -_1_3_7_8 typedef typename _Hashtable::hasher _h_a_s_h_e_r; │ │ │ │ -_1_3_7_9 typedef typename _Hashtable::key_equal _k_e_y___e_q_u_a_l; │ │ │ │ -_1_3_8_0 typedef typename _Hashtable::allocator_type _a_l_l_o_c_a_t_o_r___t_y_p_e; │ │ │ │ -1381 ///@} │ │ │ │ -1382 │ │ │ │ -1383 ///@{ │ │ │ │ -1384 /// Iterator-related typedefs. │ │ │ │ -_1_3_8_5 typedef typename _Hashtable::pointer _p_o_i_n_t_e_r; │ │ │ │ -_1_3_8_6 typedef typename _Hashtable::const_pointer _c_o_n_s_t___p_o_i_n_t_e_r; │ │ │ │ -_1_3_8_7 typedef typename _Hashtable::reference _r_e_f_e_r_e_n_c_e; │ │ │ │ -_1_3_8_8 typedef typename _Hashtable::const_reference _c_o_n_s_t___r_e_f_e_r_e_n_c_e; │ │ │ │ -_1_3_8_9 typedef typename _Hashtable::iterator _i_t_e_r_a_t_o_r; │ │ │ │ -_1_3_9_0 typedef typename _Hashtable::const_iterator _c_o_n_s_t___i_t_e_r_a_t_o_r; │ │ │ │ -_1_3_9_1 typedef typename _Hashtable::local_iterator _l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ -_1_3_9_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_9_3 typedef typename _Hashtable::size_type _s_i_z_e___t_y_p_e; │ │ │ │ -_1_3_9_4 typedef typename _Hashtable::difference_type _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ -1395 ///@} │ │ │ │ -1396 │ │ │ │ -1397#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -1398 using node_type = typename _Hashtable::node_type; │ │ │ │ -1399#endif │ │ │ │ -1400 │ │ │ │ -1401 //construct/destroy/copy │ │ │ │ -1402 │ │ │ │ -1403 /// Default constructor. │ │ │ │ -_1_4_0_4 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p() = default; │ │ │ │ -1405 │ │ │ │ -1406 /** │ │ │ │ -1407 * @brief Default constructor creates no elements. │ │ │ │ -1408 * @param __n Mnimal initial number of buckets. │ │ │ │ -1409 * @param __hf A hash functor. │ │ │ │ -1410 * @param __eql A key equality functor. │ │ │ │ -1411 * @param __a An allocator object. │ │ │ │ -1412 */ │ │ │ │ -1413 explicit │ │ │ │ -_1_4_1_4 _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, │ │ │ │ -1415 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -1416 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ -1417 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()) │ │ │ │ -1418 : _M_h(__n, _____h_f, _____e_q_l, __a) │ │ │ │ -1419 { } │ │ │ │ -1420 │ │ │ │ -1421 /** │ │ │ │ -1422 * @brief Builds an %unordered_multimap from a range. │ │ │ │ -1423 * @param __first An input iterator. │ │ │ │ -1424 * @param __last An input iterator. │ │ │ │ -1425 * @param __n Minimal initial number of buckets. │ │ │ │ -1426 * @param __hf A hash functor. │ │ │ │ -1427 * @param __eql A key equality functor. │ │ │ │ -1428 * @param __a An allocator object. │ │ │ │ -1429 * │ │ │ │ -1430 * Create an %unordered_multimap consisting of copies of the elements │ │ │ │ -1431 * from [__first,__last). This is linear in N (where N is │ │ │ │ -1432 * distance(__first,__last)). │ │ │ │ -1433 */ │ │ │ │ -1434 template │ │ │ │ -_1_4_3_5 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __last, │ │ │ │ -1436 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -1437 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -1438 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ -1439 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()) │ │ │ │ -1440 : _M_h(__first, __last, __n, _____h_f, _____e_q_l, __a) │ │ │ │ -1441 { } │ │ │ │ -1442 │ │ │ │ -1443 /// Copy constructor. │ │ │ │ -_1_4_4_4 _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; │ │ │ │ -1445 │ │ │ │ -1446 /// Move constructor. │ │ │ │ -_1_4_4_7 _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; │ │ │ │ -1448 │ │ │ │ -1449 /** │ │ │ │ -1450 * @brief Creates an %unordered_multimap with no elements. │ │ │ │ -1451 * @param __a An allocator object. │ │ │ │ -1452 */ │ │ │ │ -1453 explicit │ │ │ │ -_1_4_5_4 _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) │ │ │ │ -1455 : _M_h(__a) │ │ │ │ -1456 { } │ │ │ │ -1457 │ │ │ │ -1458 /* │ │ │ │ -1459 * @brief Copy constructor with allocator argument. │ │ │ │ -1460 * @param __uset Input %unordered_multimap to copy. │ │ │ │ -1461 * @param __a An allocator object. │ │ │ │ -1462 */ │ │ │ │ -1463 _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& _____u_m_m_a_p, │ │ │ │ -1464 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1465 : _M_h(_____u_m_m_a_p._M_h, __a) │ │ │ │ -1466 { } │ │ │ │ -1467 │ │ │ │ -1468 /* │ │ │ │ -1469 * @brief Move constructor with allocator argument. │ │ │ │ -1470 * @param __uset Input %unordered_multimap to move. │ │ │ │ -1471 * @param __a An allocator object. │ │ │ │ -1472 */ │ │ │ │ -1473 _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&& __ummap, │ │ │ │ -1474 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1475 noexcept( noexcept(_Hashtable(_s_t_d_:_:_m_o_v_e(__ummap._M_h), __a)) ) │ │ │ │ -1476 : _M_h(_s_t_d_:_:_m_o_v_e(__ummap._M_h), __a) │ │ │ │ -1477 { } │ │ │ │ -1478 │ │ │ │ -1479 /** │ │ │ │ -1480 * @brief Builds an %unordered_multimap from an initializer_list. │ │ │ │ -1481 * @param __l An initializer_list. │ │ │ │ -1482 * @param __n Minimal initial number of buckets. │ │ │ │ -1483 * @param __hf A hash functor. │ │ │ │ -1484 * @param __eql A key equality functor. │ │ │ │ -1485 * @param __a An allocator object. │ │ │ │ +1368 _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), │ │ │ │ +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 _____p_o_s, ___A_r_g_s&&... _____a_r_g_s) │ │ │ │ +1410 { return iterator(this->_M_insert_after(_____p_o_s, │ │ │ │ +1411 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...)); } │ │ │ │ +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 _____p_o_s, const _Tp& __val) │ │ │ │ +1427 { return iterator(this->_M_insert_after(_____p_o_s, __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 _____p_o_s, _Tp&& __val) │ │ │ │ +1434 { return _i_t_e_r_a_t_o_r(this->_M_insert_after(_____p_o_s, _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 │ │ │ │ +1452 _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 * Create an %unordered_multimap consisting of copies of the elements in │ │ │ │ -1488 * the list. This is linear in N (where N is @a __l.size()). │ │ │ │ +1487 * This operation is linear in the number of elements inserted and │ │ │ │ +1488 * does not invalidate iterators and references. │ │ │ │ 1489 */ │ │ │ │ -_1_4_9_0 _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, │ │ │ │ -1491 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -1492 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -1493 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ -1494 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()) │ │ │ │ -1495 : _M_h(_____l, __n, _____h_f, _____e_q_l, __a) │ │ │ │ -1496 { } │ │ │ │ -1497 │ │ │ │ -1498 _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 _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1499 : _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) │ │ │ │ -1500 { } │ │ │ │ -1501 │ │ │ │ -1502 _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 _h_a_s_h_e_r& __hf, │ │ │ │ -1503 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1504 : _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1505 { } │ │ │ │ -1506 │ │ │ │ -1507 template │ │ │ │ -1508 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ -1509 _s_i_z_e___t_y_p_e __n, │ │ │ │ -1510 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1511 : _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) │ │ │ │ -1512 { } │ │ │ │ -1513 │ │ │ │ -1514 template │ │ │ │ -1515 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ -1516 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -1517 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1518 : _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) │ │ │ │ -1519 { } │ │ │ │ -1520 │ │ │ │ -1521 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(initializer_list __l, │ │ │ │ -1522 _s_i_z_e___t_y_p_e __n, │ │ │ │ -1523 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1524 : _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) │ │ │ │ -1525 { } │ │ │ │ -1526 │ │ │ │ -1527 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(initializer_list __l, │ │ │ │ -1528 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -1529 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1530 : _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) │ │ │ │ -1531 { } │ │ │ │ -1532 │ │ │ │ -1533#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -1534 /** │ │ │ │ -1535 * @brief Builds an %unordered_multimap from a range. │ │ │ │ -1536 * @since C++23 │ │ │ │ -1537 * @param __rg An input range of elements that can be converted to │ │ │ │ -1538 * the maps's value type. │ │ │ │ -1539 * @param __n Minimal initial number of buckets. │ │ │ │ -1540 * @param __hf A hash functor. │ │ │ │ -1541 * @param __eql A key equality functor. │ │ │ │ -1542 * @param __a An allocator object. │ │ │ │ -1543 * │ │ │ │ -1544 * Create an %unordered_multimap consisting of copies of the elements in │ │ │ │ -1545 * the range. This is linear in N (where N is `std::ranges::size(__rg)`). │ │ │ │ -1546 */ │ │ │ │ -1547 template<__detail::__container_compatible_range _Rg> │ │ │ │ -1548 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(from_range_t, _Rg&& __rg, │ │ │ │ -1549 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -1550 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -1551 const _k_e_y___e_q_u_a_l& __eql = _k_e_y___e_q_u_a_l(), │ │ │ │ -1552 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()) │ │ │ │ -1553 : _M_h(__n, __hf, __eql, __a) │ │ │ │ -1554 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -1555 │ │ │ │ -1556 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1557 // 2713. More missing allocator-extended constructors for unordered │ │ │ │ -containers │ │ │ │ -1558 template<__detail::__container_compatible_range _Rg> │ │ │ │ -1559 _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) │ │ │ │ -1560 : _M_h(0, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1561 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -1562 │ │ │ │ -1563 template<__detail::__container_compatible_range _Rg> │ │ │ │ -1564 _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, │ │ │ │ -1565 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1566 : _M_h(__n, _h_a_s_h_e_r(), _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1567 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -1568 │ │ │ │ -1569 template<__detail::__container_compatible_range _Rg> │ │ │ │ -1570 _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, │ │ │ │ -1571 const _h_a_s_h_e_r& __hf, const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1572 : _M_h(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -1573 { insert_range(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg)); } │ │ │ │ -1574#endif │ │ │ │ -1575 │ │ │ │ -1576 /// Copy assignment operator. │ │ │ │ -1577 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& │ │ │ │ -_1_5_7_8 _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; │ │ │ │ -1579 │ │ │ │ -1580 /// Move assignment operator. │ │ │ │ -1581 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& │ │ │ │ -_1_5_8_2 _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; │ │ │ │ -1583 │ │ │ │ -1584 /** │ │ │ │ -1585 * @brief %Unordered_multimap list assignment operator. │ │ │ │ -1586 * @param __l An initializer_list. │ │ │ │ -1587 * │ │ │ │ -1588 * This function fills an %unordered_multimap with copies of the │ │ │ │ -1589 * elements in the initializer list @a __l. │ │ │ │ -1590 * │ │ │ │ -1591 * Note that the assignment completely changes the %unordered_multimap │ │ │ │ -1592 * and that the resulting %unordered_multimap's size is the same as the │ │ │ │ -1593 * number of elements assigned. │ │ │ │ -1594 */ │ │ │ │ -1595 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& │ │ │ │ -_1_5_9_6 _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) │ │ │ │ -1597 { │ │ │ │ -1598 _M_h = _____l; │ │ │ │ -1599 return *this; │ │ │ │ -1600 } │ │ │ │ +1490 iterator │ │ │ │ +_1_4_9_1 _i_n_s_e_r_t___a_f_t_e_r(const_iterator _____p_o_s, _s_t_d_:_:_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<___T_p_> _____i_l) │ │ │ │ +1492 { return _i_n_s_e_r_t___a_f_t_e_r(_____p_o_s, _____i_l.begin(), _____i_l.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 _i_n_s_e_r_t___r_a_n_g_e___a_f_t_e_r(const_iterator _____p_o_s_i_t_i_o_n, ___R_g&& _____r_g) │ │ │ │ +1513 { │ │ │ │ +1514 _f_o_r_w_a_r_d___l_i_s_t _____t_m_p(_f_r_o_m___r_a_n_g_e, _s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(_____r_g), │ │ │ │ +1515 _g_e_t___a_l_l_o_c_a_t_o_r()); │ │ │ │ +1516 return _M_splice_after(_____p_o_s_i_t_i_o_n, _____t_m_p.before_begin(), _____t_m_p.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 _____p_o_s) │ │ │ │ +1539 { return iterator(this->_M_erase_after(_____p_o_s._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 _____p_o_s, const_iterator __last) │ │ │ │ +1562 { │ │ │ │ +1563 return iterator(this->_M_erase_after(_____p_o_s._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 │ │ │ │ +1600 _r_e_s_i_z_e(size_type _____s_z); │ │ │ │ 1601 │ │ │ │ -1602 /// Returns the allocator object used by the %unordered_multimap. │ │ │ │ -1603 _a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ -_1_6_0_4 _g_e_t___a_l_l_o_c_a_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -1605 { return _M_h.get_allocator(); } │ │ │ │ -1606 │ │ │ │ -1607 // size and capacity: │ │ │ │ -1608 │ │ │ │ -1609 /// Returns true if the %unordered_multimap is empty. │ │ │ │ -1610 _GLIBCXX_NODISCARD bool │ │ │ │ -_1_6_1_1 _e_m_p_t_y() _c_o_n_s_t noexcept │ │ │ │ -1612 { return _M_h.empty(); } │ │ │ │ -1613 │ │ │ │ -1614 /// Returns the size of the %unordered_multimap. │ │ │ │ -1615 _s_i_z_e___t_y_p_e │ │ │ │ -_1_6_1_6 _s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ -1617 { return _M_h.size(); } │ │ │ │ -1618 │ │ │ │ -1619 /// Returns the maximum size of the %unordered_multimap. │ │ │ │ -1620 _s_i_z_e___t_y_p_e │ │ │ │ -_1_6_2_1 _m_a_x___s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ -1622 { return _M_h.max_size(); } │ │ │ │ -1623 │ │ │ │ -1624 // iterators. │ │ │ │ -1625 │ │ │ │ -1626 /** │ │ │ │ -1627 * Returns a read/write iterator that points to the first element in the │ │ │ │ -1628 * %unordered_multimap. │ │ │ │ -1629 */ │ │ │ │ -1630 _i_t_e_r_a_t_o_r │ │ │ │ -_1_6_3_1 _b_e_g_i_n() noexcept │ │ │ │ -1632 { return _M_h.begin(); } │ │ │ │ -1633 │ │ │ │ -1634 ///@{ │ │ │ │ -1635 /** │ │ │ │ -1636 * Returns a read-only (constant) iterator that points to the first │ │ │ │ -1637 * element in the %unordered_multimap. │ │ │ │ -1638 */ │ │ │ │ -1639 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_1_6_4_0 _b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ -1641 { return _M_h.begin(); } │ │ │ │ -1642 │ │ │ │ -1643 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_1_6_4_4 _c_b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ -1645 { return _M_h.begin(); } │ │ │ │ -1646 ///@} │ │ │ │ -1647 │ │ │ │ -1648 /** │ │ │ │ -1649 * Returns a read/write iterator that points one past the last element in │ │ │ │ -1650 * the %unordered_multimap. │ │ │ │ -1651 */ │ │ │ │ -1652 _i_t_e_r_a_t_o_r │ │ │ │ -_1_6_5_3 _e_n_d() noexcept │ │ │ │ -1654 { return _M_h.end(); } │ │ │ │ -1655 │ │ │ │ -1656 ///@{ │ │ │ │ -1657 /** │ │ │ │ -1658 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ -1659 * element in the %unordered_multimap. │ │ │ │ -1660 */ │ │ │ │ -1661 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_1_6_6_2 _e_n_d() _c_o_n_s_t noexcept │ │ │ │ -1663 { return _M_h.end(); } │ │ │ │ -1664 │ │ │ │ -1665 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_1_6_6_6 _c_e_n_d() _c_o_n_s_t noexcept │ │ │ │ -1667 { return _M_h.end(); } │ │ │ │ -1668 ///@} │ │ │ │ -1669 │ │ │ │ -1670 // modifiers. │ │ │ │ +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 _r_e_s_i_z_e(size_type _____s_z, 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 _____p_o_s, _f_o_r_w_a_r_d___l_i_s_t&& __list) noexcept │ │ │ │ +1644 { │ │ │ │ +1645 if (!__list.empty()) │ │ │ │ +1646 _M_splice_after(_____p_o_s, __list.before_begin(), __list.end()); │ │ │ │ +1647 } │ │ │ │ +1648 │ │ │ │ +1649 void │ │ │ │ +1650 _s_p_l_i_c_e___a_f_t_e_r(const_iterator _____p_o_s, _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(_____p_o_s, _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 │ │ │ │ +1664 _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 Attempts to build and insert a std::pair into the │ │ │ │ -1674 * %unordered_multimap. │ │ │ │ -1675 * │ │ │ │ -1676 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ -1677 * std::piecewise_contruct for passing arguments to each │ │ │ │ -1678 * part of the pair constructor). │ │ │ │ +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 * @return An iterator that points to the inserted pair. │ │ │ │ -1681 * │ │ │ │ -1682 * This function attempts to build and insert a (key, value) %pair into │ │ │ │ -1683 * the %unordered_multimap. │ │ │ │ -1684 * │ │ │ │ -1685 * Insertion requires amortized constant time. │ │ │ │ -1686 */ │ │ │ │ -1687 template │ │ │ │ -1688 _i_t_e_r_a_t_o_r │ │ │ │ -_1_6_8_9 _e_m_p_l_a_c_e(___A_r_g_s&&... _____a_r_g_s) │ │ │ │ -1690 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); } │ │ │ │ -1691 │ │ │ │ -1692 /** │ │ │ │ -1693 * @brief Attempts to build and insert a std::pair into the │ │ │ │ -1694 * %unordered_multimap. │ │ │ │ -1695 * │ │ │ │ -1696 * @param __pos An iterator that serves as a hint as to where the pair │ │ │ │ -1697 * should be inserted. │ │ │ │ -1698 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ -1699 * std::piecewise_contruct for passing arguments to each │ │ │ │ -1700 * part of the pair constructor). │ │ │ │ -1701 * @return An iterator that points to the element with key of the │ │ │ │ -1702 * std::pair built from @a __args. │ │ │ │ -1703 * │ │ │ │ -1704 * Note that the first parameter is only a hint and can potentially │ │ │ │ -1705 * improve the performance of the insertion process. A bad hint would │ │ │ │ -1706 * cause no gains in efficiency. │ │ │ │ -1707 * │ │ │ │ -1708 * See │ │ │ │ -1709 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -1710 * for more on @a hinting. │ │ │ │ +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 _____p_o_s, _f_o_r_w_a_r_d___l_i_s_t&&, │ │ │ │ +1688 const_iterator _____b_e_f_o_r_e, const_iterator __last) noexcept │ │ │ │ +1689 { _M_splice_after(_____p_o_s, _____b_e_f_o_r_e, __last); } │ │ │ │ +1690 │ │ │ │ +1691 void │ │ │ │ +_1_6_9_2 _s_p_l_i_c_e___a_f_t_e_r(const_iterator _____p_o_s, _f_o_r_w_a_r_d___l_i_s_t&, │ │ │ │ +1693 const_iterator _____b_e_f_o_r_e, const_iterator __last) noexcept │ │ │ │ +1694 { _M_splice_after(_____p_o_s, _____b_e_f_o_r_e, __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 = _v_o_i_d; │ │ │ │ +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 * Insertion requires amortized constant time. │ │ │ │ -1713 */ │ │ │ │ -1714 template │ │ │ │ -1715 _i_t_e_r_a_t_o_r │ │ │ │ -_1_7_1_6 _e_m_p_l_a_c_e___h_i_n_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s, ___A_r_g_s&&... _____a_r_g_s) │ │ │ │ -1717 { return _M_h.emplace_hint(_____p_o_s, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); } │ │ │ │ -1718 │ │ │ │ -1719 ///@{ │ │ │ │ -1720 /** │ │ │ │ -1721 * @brief Inserts a std::pair into the %unordered_multimap. │ │ │ │ -1722 * @param __x Pair to be inserted (see std::make_pair for easy │ │ │ │ -1723 * creation of pairs). │ │ │ │ -1724 * │ │ │ │ -1725 * @return An iterator that points to the inserted pair. │ │ │ │ +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 _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 * Insertion requires amortized constant time. │ │ │ │ -1728 */ │ │ │ │ -1729 _i_t_e_r_a_t_o_r │ │ │ │ -_1_7_3_0 _i_n_s_e_r_t(const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -1731 { return _M_h.insert(__x); } │ │ │ │ -1732 │ │ │ │ -1733 _i_t_e_r_a_t_o_r │ │ │ │ -_1_7_3_4 _i_n_s_e_r_t(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -1735 { return _M_h.insert(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -1736 │ │ │ │ -1737 template │ │ │ │ -1738 _____e_n_a_b_l_e___i_f___t_<_i_s___c_o_n_s_t_r_u_c_t_i_b_l_e_<_v_a_l_u_e___t_y_p_e_,_ ___P_a_i_r_&_&_>_:_:_v_a_l_u_e, _i_t_e_r_a_t_o_r> │ │ │ │ -_1_7_3_9 _i_n_s_e_r_t(___P_a_i_r&& __x) │ │ │ │ -1740 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ -1741 ///@} │ │ │ │ -1742 │ │ │ │ -1743 ///@{ │ │ │ │ -1744 /** │ │ │ │ -1745 * @brief Inserts a std::pair into the %unordered_multimap. │ │ │ │ -1746 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ -1747 * pair should be inserted. │ │ │ │ -1748 * @param __x Pair to be inserted (see std::make_pair for easy creation │ │ │ │ -1749 * of pairs). │ │ │ │ -1750 * @return An iterator that points to the element with key of │ │ │ │ -1751 * @a __x (may or may not be the %pair passed in). │ │ │ │ -1752 * │ │ │ │ -1753 * Note that the first parameter is only a hint and can potentially │ │ │ │ -1754 * improve the performance of the insertion process. A bad hint would │ │ │ │ -1755 * cause no gains in efficiency. │ │ │ │ -1756 * │ │ │ │ -1757 * See │ │ │ │ -1758 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -1759 * for more on @a hinting. │ │ │ │ -1760 * │ │ │ │ -1761 * Insertion requires amortized constant time. │ │ │ │ -1762 */ │ │ │ │ -1763 _i_t_e_r_a_t_o_r │ │ │ │ -_1_7_6_4 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -1765 { return _M_h.insert(_____h_i_n_t, __x); } │ │ │ │ -1766 │ │ │ │ -1767 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1768 // 2354. Unnecessary copying when inserting into maps with braced-init │ │ │ │ -1769 _i_t_e_r_a_t_o_r │ │ │ │ -_1_7_7_0 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, _v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -1771 { return _M_h.insert(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -1772 │ │ │ │ -1773 template │ │ │ │ -1774 _____e_n_a_b_l_e___i_f___t_<_i_s___c_o_n_s_t_r_u_c_t_i_b_l_e_<_v_a_l_u_e___t_y_p_e_,_ ___P_a_i_r_&_&_>_:_:_v_a_l_u_e, _i_t_e_r_a_t_o_r> │ │ │ │ -_1_7_7_5 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, ___P_a_i_r&& __x) │ │ │ │ -1776 { return _M_h.emplace_hint(_____h_i_n_t, _s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ -1777 ///@} │ │ │ │ -1778 │ │ │ │ -1779 /** │ │ │ │ -1780 * @brief A template function that attempts to insert a range of │ │ │ │ -1781 * elements. │ │ │ │ -1782 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -1783 * inserted. │ │ │ │ -1784 * @param __last Iterator pointing to the end of the range. │ │ │ │ -1785 * │ │ │ │ -1786 * Complexity similar to that of the range constructor. │ │ │ │ -1787 */ │ │ │ │ -1788 template │ │ │ │ -1789 void │ │ │ │ -_1_7_9_0 _i_n_s_e_r_t(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __last) │ │ │ │ -1791 { _M_h.insert(__first, __last); } │ │ │ │ -1792 │ │ │ │ -1793 /** │ │ │ │ -1794 * @brief Attempts to insert a list of elements into the │ │ │ │ -1795 * %unordered_multimap. │ │ │ │ -1796 * @param __l A std::initializer_list of elements │ │ │ │ -1797 * to be inserted. │ │ │ │ -1798 * │ │ │ │ -1799 * Complexity similar to that of the range constructor. │ │ │ │ -1800 */ │ │ │ │ -1801 void │ │ │ │ -_1_8_0_2 _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) │ │ │ │ -1803 { _M_h.insert(_____l); } │ │ │ │ -1804 │ │ │ │ -1805#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -1806 /** │ │ │ │ -1807 * @brief Inserts a range of elements. │ │ │ │ -1808 * @since C++23 │ │ │ │ -1809 * @param __rg An input range of elements that can be converted to │ │ │ │ -1810 * the maps's value type. │ │ │ │ -1811 */ │ │ │ │ -1812 template<__detail::__container_compatible_range _Rg> │ │ │ │ -1813 void │ │ │ │ -1814 _i_n_s_e_r_t___r_a_n_g_e(___R_g&& _____r_g) │ │ │ │ -1815 { │ │ │ │ -1816 auto __first = ranges::begin(_____r_g); │ │ │ │ -1817 const auto __last = ranges::end(_____r_g); │ │ │ │ -1818 if (__first == __last) │ │ │ │ -1819 return; │ │ │ │ -1820 │ │ │ │ -1821 if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>) │ │ │ │ -1822 _M_h._M_rehash_insert(_s_i_z_e___t_y_p_e(ranges::distance(_____r_g))); │ │ │ │ -1823 else │ │ │ │ -1824 _M_h._M_rehash_insert(1); │ │ │ │ -1825 │ │ │ │ -1826 for (; __first != __last; ++__first) │ │ │ │ -1827 _M_h.emplace(*__first); │ │ │ │ -1828 } │ │ │ │ -1829#endif │ │ │ │ -1830 │ │ │ │ -1831#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -1832 /// Extract a node. │ │ │ │ -1833 node_type │ │ │ │ -_1_8_3_4 _e_x_t_r_a_c_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s) │ │ │ │ -1835 { │ │ │ │ -1836 __glibcxx_assert(_____p_o_s != _e_n_d()); │ │ │ │ -1837 return _M_h.extract(_____p_o_s); │ │ │ │ -1838 } │ │ │ │ -1839 │ │ │ │ -1840 /// Extract a node. │ │ │ │ -1841 node_type │ │ │ │ -_1_8_4_2 _e_x_t_r_a_c_t(const _k_e_y___t_y_p_e& _____k_e_y) │ │ │ │ -1843 { return _M_h.extract(_____k_e_y); } │ │ │ │ -1844 │ │ │ │ -1845 /// Re-insert an extracted node. │ │ │ │ -1846 _i_t_e_r_a_t_o_r │ │ │ │ -_1_8_4_7 _i_n_s_e_r_t(node_type&& _____n_h) │ │ │ │ -1848 { return _M_h._M_reinsert_node_multi(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(_____n_h)); } │ │ │ │ -1849 │ │ │ │ -1850 /// Re-insert an extracted node. │ │ │ │ -1851 _i_t_e_r_a_t_o_r │ │ │ │ -_1_8_5_2 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____h_i_n_t, node_type&& _____n_h) │ │ │ │ -1853 { return _M_h._M_reinsert_node_multi(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(_____n_h)); } │ │ │ │ -1854#endif // node_extract │ │ │ │ -1855 │ │ │ │ -1856 ///@{ │ │ │ │ -1857 /** │ │ │ │ -1858 * @brief Erases an element from an %unordered_multimap. │ │ │ │ -1859 * @param __position An iterator pointing to the element to be erased. │ │ │ │ -1860 * @return An iterator pointing to the element immediately following │ │ │ │ -1861 * @a __position prior to the element being erased. If no such │ │ │ │ -1862 * element exists, end() is returned. │ │ │ │ -1863 * │ │ │ │ -1864 * This function erases an element, pointed to by the given iterator, │ │ │ │ -1865 * from an %unordered_multimap. │ │ │ │ -1866 * Note that this function only erases the element, and that if the │ │ │ │ -1867 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ -1868 * any way. Managing the pointer is the user's responsibility. │ │ │ │ -1869 */ │ │ │ │ -1870 _i_t_e_r_a_t_o_r │ │ │ │ -_1_8_7_1 _e_r_a_s_e(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n) │ │ │ │ -1872 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ -1873 │ │ │ │ -1874 // LWG 2059. │ │ │ │ -1875 _i_t_e_r_a_t_o_r │ │ │ │ -_1_8_7_6 _e_r_a_s_e(_i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n) │ │ │ │ -1877 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ -1878 ///@} │ │ │ │ -1879 │ │ │ │ -1880 /** │ │ │ │ -1881 * @brief Erases elements according to the provided key. │ │ │ │ -1882 * @param __x Key of elements to be erased. │ │ │ │ -1883 * @return The number of elements erased. │ │ │ │ -1884 * │ │ │ │ -1885 * This function erases all the elements located by the given key from │ │ │ │ -1886 * an %unordered_multimap. │ │ │ │ -1887 * Note that this function only erases the element, and that if the │ │ │ │ -1888 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ -1889 * any way. Managing the pointer is the user's responsibility. │ │ │ │ -1890 */ │ │ │ │ -1891 _s_i_z_e___t_y_p_e │ │ │ │ -_1_8_9_2 _e_r_a_s_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -1893 { return _M_h.erase(__x); } │ │ │ │ -1894 │ │ │ │ -1895 /** │ │ │ │ -1896 * @brief Erases a [__first,__last) range of elements from an │ │ │ │ -1897 * %unordered_multimap. │ │ │ │ -1898 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -1899 * erased. │ │ │ │ -1900 * @param __last Iterator pointing to the end of the range to │ │ │ │ -1901 * be erased. │ │ │ │ -1902 * @return The iterator @a __last. │ │ │ │ -1903 * │ │ │ │ -1904 * This function erases a sequence of elements from an │ │ │ │ -1905 * %unordered_multimap. │ │ │ │ -1906 * Note that this function only erases the elements, and that if │ │ │ │ -1907 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ -1908 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -1909 */ │ │ │ │ -1910 _i_t_e_r_a_t_o_r │ │ │ │ -_1_9_1_1 _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) │ │ │ │ -1912 { return _M_h.erase(__first, __last); } │ │ │ │ -1913 │ │ │ │ -1914 /** │ │ │ │ -1915 * Erases all elements in an %unordered_multimap. │ │ │ │ -1916 * Note that this function only erases the elements, and that if the │ │ │ │ -1917 * elements themselves are pointers, the pointed-to memory is not touched │ │ │ │ -1918 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -1919 */ │ │ │ │ -1920 void │ │ │ │ -_1_9_2_1 _c_l_e_a_r() noexcept │ │ │ │ -1922 { _M_h.clear(); } │ │ │ │ -1923 │ │ │ │ -1924 /** │ │ │ │ -1925 * @brief Swaps data with another %unordered_multimap. │ │ │ │ -1926 * @param __x An %unordered_multimap of the same element and allocator │ │ │ │ -1927 * types. │ │ │ │ -1928 * │ │ │ │ -1929 * This exchanges the elements between two %unordered_multimap in │ │ │ │ -1930 * constant time. │ │ │ │ -1931 * Note that the global std::swap() function is specialized such that │ │ │ │ -1932 * std::swap(m1,m2) will feed to this function. │ │ │ │ -1933 */ │ │ │ │ -1934 void │ │ │ │ -_1_9_3_5 _s_w_a_p(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& __x) │ │ │ │ -1936 noexcept( noexcept(_M_h.swap(__x._M_h)) ) │ │ │ │ -1937 { _M_h.swap(__x._M_h); } │ │ │ │ -1938 │ │ │ │ -1939#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -1940 template │ │ │ │ -1941 friend class std::_Hash_merge_helper; │ │ │ │ -1942 │ │ │ │ -1943 template │ │ │ │ -1944 void │ │ │ │ -1945 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_>& _____s_o_u_r_c_e) │ │ │ │ -1946 { │ │ │ │ -1947 if constexpr (_i_s___s_a_m_e___v_<___H_2_,_ ___H_a_s_h_> && _i_s___s_a_m_e___v_<___P_2_,_ ___P_r_e_d_>) │ │ │ │ -1948 if (_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____s_o_u_r_c_e) == this) [[_____u_n_l_i_k_e_l_y____]] │ │ │ │ -1949 return; │ │ │ │ -1950 │ │ │ │ -1951 using ___M_e_r_g_e___h_e_l_p_e_r │ │ │ │ -1952 = ___H_a_s_h___m_e_r_g_e___h_e_l_p_e_r_<_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_,_ ___H_2_,_ ___P_2_>; │ │ │ │ -1953 _M_h._M_merge_multi(_Merge_helper::_S_get_table(_____s_o_u_r_c_e)); │ │ │ │ -1954 } │ │ │ │ +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(___P_r_e_d _____p_r_e_d); │ │ │ │ +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(___B_i_n_P_r_e_d _____b_i_n_a_r_y___p_r_e_d); │ │ │ │ +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 │ │ │ │ +1801 _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 │ │ │ │ +1826 _s_o_r_t(___C_o_m_p __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(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __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 _i_t_e_r_a_t_o_r │ │ │ │ +1850 _M_splice_after(const_iterator _____p_o_s, const_iterator _____b_e_f_o_r_e, │ │ │ │ +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 _____p_o_s, 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, 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#_e_n_d_i_f │ │ │ │ +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 _s_t_d_:_:_____a_l_l_o_c___o_n___m_o_v_e(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.begin()), │ │ │ │ +1904 std::make_move_iterator(__list.end())); │ │ │ │ +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::value_type, │ │ │ │ +1950 typename _Allocator = allocator<_ValT>, │ │ │ │ +1951 typename = _RequireInputIter<_InputIterator>, │ │ │ │ +1952 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1953 forward_list(_InputIterator, _InputIterator, _Allocator = _Allocator()) │ │ │ │ +1954 -> forward_list<_ValT, _Allocator>; │ │ │ │ 1955 │ │ │ │ -1956 template │ │ │ │ -1957 void │ │ │ │ -1958 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ -1959 { │ │ │ │ -1960 using _Merge_helper │ │ │ │ -1961 = _Hash_merge_helper; │ │ │ │ -1962 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ -1963 } │ │ │ │ -1964 │ │ │ │ -1965 template │ │ │ │ -1966 void │ │ │ │ -1967 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>& __source) │ │ │ │ -1968 { │ │ │ │ -1969 using _Merge_helper │ │ │ │ -1970 = _Hash_merge_helper; │ │ │ │ -1971 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ -1972 } │ │ │ │ -1973 │ │ │ │ -1974 template │ │ │ │ -1975 void │ │ │ │ -1976 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ -1977 { merge(__source); } │ │ │ │ -1978#endif // node_extract │ │ │ │ +1956#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ +1957 template>> │ │ │ │ +1959 forward_list(from_range_t, _Rg&&, _Allocator = _Allocator()) │ │ │ │ +1960 -> forward_list, _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_>& _____l_x, │ │ │ │ +1978 const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& _____l_y); │ │ │ │ 1979 │ │ │ │ -1980 // observers. │ │ │ │ -1981 │ │ │ │ -1982 /// Returns the hash functor object with which the %unordered_multimap │ │ │ │ -1983 /// was constructed. │ │ │ │ -1984 _h_a_s_h_e_r │ │ │ │ -_1_9_8_5 _h_a_s_h___f_u_n_c_t_i_o_n() const │ │ │ │ -1986 { return _M_h.hash_function(); } │ │ │ │ -1987 │ │ │ │ -1988 /// Returns the key comparison object with which the %unordered_multimap │ │ │ │ -1989 /// was constructed. │ │ │ │ -1990 _k_e_y___e_q_u_a_l │ │ │ │ -_1_9_9_1 _k_e_y___e_q() const │ │ │ │ -1992 { return _M_h.key_eq(); } │ │ │ │ -1993 │ │ │ │ -1994 // lookup. │ │ │ │ -1995 │ │ │ │ -1996 ///@{ │ │ │ │ -1997 /** │ │ │ │ -1998 * @brief Tries to locate an element in an %unordered_multimap. │ │ │ │ -1999 * @param __x Key to be located. │ │ │ │ -2000 * @return Iterator pointing to sought-after element, or end() if not │ │ │ │ -2001 * found. │ │ │ │ -2002 * │ │ │ │ -2003 * This function takes a key and tries to locate the element with which │ │ │ │ -2004 * the key matches. If successful the function returns an iterator │ │ │ │ -2005 * pointing to the sought after element. If unsuccessful it returns the │ │ │ │ -2006 * past-the-end ( @c end() ) iterator. │ │ │ │ -2007 */ │ │ │ │ -2008 _i_t_e_r_a_t_o_r │ │ │ │ -_2_0_0_9 _f_i_n_d(const _k_e_y___t_y_p_e& __x) │ │ │ │ -2010 { return _M_h.find(__x); } │ │ │ │ -2011 │ │ │ │ -2012#if __cplusplus > 201703L │ │ │ │ -2013 template │ │ │ │ -2014 auto │ │ │ │ -_2_0_1_5 _f_i_n_d(const ___K_t& __x) -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -2016 { return _M_h._M_find_tr(__x); } │ │ │ │ -2017#endif │ │ │ │ -2018 │ │ │ │ -2019 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_2_0_2_0 _f_i_n_d(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -2021 { return _M_h.find(__x); } │ │ │ │ +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 [[_n_o_d_i_s_c_a_r_d]] │ │ │ │ +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.begin(), __x.end(), │ │ │ │ +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 │ │ │ │ +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#if __cplusplus > 201703L │ │ │ │ -2024 template │ │ │ │ -2025 auto │ │ │ │ -_2_0_2_6 _f_i_n_d(const ___K_t& __x) const -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -2027 { return _M_h._M_find_tr(__x); } │ │ │ │ -2028#endif │ │ │ │ -2029 ///@} │ │ │ │ +2023 /// Based on operator== │ │ │ │ +2024 template │ │ │ │ +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 ///@{ │ │ │ │ -2032 /** │ │ │ │ -2033 * @brief Finds the number of elements. │ │ │ │ -2034 * @param __x Key to count. │ │ │ │ -2035 * @return Number of elements with specified key. │ │ │ │ -2036 */ │ │ │ │ -2037 _s_i_z_e___t_y_p_e │ │ │ │ -_2_0_3_8 _c_o_u_n_t(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -2039 { return _M_h.count(__x); } │ │ │ │ -2040 │ │ │ │ -2041#if __cplusplus > 201703L │ │ │ │ -2042 template │ │ │ │ -2043 auto │ │ │ │ -_2_0_4_4 _c_o_u_n_t(const ___K_t& __x) const -> decltype(_M_h._M_count_tr(__x)) │ │ │ │ -2045 { return _M_h._M_count_tr(__x); } │ │ │ │ -2046#endif │ │ │ │ -2047 ///@} │ │ │ │ -2048 │ │ │ │ -2049#if __cplusplus > 201703L │ │ │ │ -2050 ///@{ │ │ │ │ -2051 /** │ │ │ │ -2052 * @brief Finds whether an element with the given key exists. │ │ │ │ -2053 * @param __x Key of elements to be located. │ │ │ │ -2054 * @return True if there is any element with the specified key. │ │ │ │ -2055 */ │ │ │ │ -2056 bool │ │ │ │ -_2_0_5_7 _c_o_n_t_a_i_n_s(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -2058 { return _M_h.find(__x) != _M_h.end(); } │ │ │ │ -2059 │ │ │ │ -2060 template │ │ │ │ -2061 auto │ │ │ │ -_2_0_6_2 _c_o_n_t_a_i_n_s(const ___K_t& __x) const │ │ │ │ -2063 -> decltype(_M_h._M_find_tr(__x), _v_o_i_d(), true) │ │ │ │ -2064 { return _M_h._M_find_tr(__x) != _M_h.end(); } │ │ │ │ -2065 ///@} │ │ │ │ -2066#endif │ │ │ │ +2031 /// Based on operator< │ │ │ │ +2032 template │ │ │ │ +2033 [[__nodiscard__]] │ │ │ │ +2034 inline bool │ │ │ │ +2035 _o_p_e_r_a_t_o_r_>(const forward_list<_Tp, _Alloc>& __lx, │ │ │ │ +2036 const forward_list<_Tp, _Alloc>& __ly) │ │ │ │ +2037 { return (__ly < __lx); } │ │ │ │ +2038 │ │ │ │ +2039 /// Based on operator< │ │ │ │ +2040 template │ │ │ │ +2041 [[__nodiscard__]] │ │ │ │ +2042 inline bool │ │ │ │ +2043 _o_p_e_r_a_t_o_r_>_=(const forward_list<_Tp, _Alloc>& __lx, │ │ │ │ +2044 const forward_list<_Tp, _Alloc>& __ly) │ │ │ │ +2045 { return !(__lx < __ly); } │ │ │ │ +2046 │ │ │ │ +2047 /// Based on operator< │ │ │ │ +2048 template │ │ │ │ +2049 [[__nodiscard__]] │ │ │ │ +2050 inline bool │ │ │ │ +2051 _o_p_e_r_a_t_o_r_<_=(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 │ │ │ │ +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_>& _____l_x, │ │ │ │ +2060 _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& _____l_y) │ │ │ │ +2061 noexcept(noexcept(_____l_x.swap(_____l_y))) │ │ │ │ +2062 { _____l_x.swap(_____l_y); } │ │ │ │ +2063 │ │ │ │ +2064_GLIBCXX_END_NAMESPACE_CONTAINER │ │ │ │ +2065_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +2066} // namespace std │ │ │ │ 2067 │ │ │ │ -2068 ///@{ │ │ │ │ -2069 /** │ │ │ │ -2070 * @brief Finds a subsequence matching given key. │ │ │ │ -2071 * @param __x Key to be located. │ │ │ │ -2072 * @return Pair of iterators that possibly points to the subsequence │ │ │ │ -2073 * matching given key. │ │ │ │ -2074 */ │ │ │ │ -2075 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _i_t_e_r_a_t_o_r_> │ │ │ │ -_2_0_7_6 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -2077 { return _M_h.equal_range(__x); } │ │ │ │ -2078 │ │ │ │ -2079#if __cplusplus > 201703L │ │ │ │ -2080 template │ │ │ │ -2081 auto │ │ │ │ -_2_0_8_2 _e_q_u_a_l___r_a_n_g_e(const ___K_t& __x) │ │ │ │ -2083 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -2084 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ -2085#endif │ │ │ │ -2086 │ │ │ │ -2087 _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_0_8_8 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -2089 { return _M_h.equal_range(__x); } │ │ │ │ -2090 │ │ │ │ -2091#if __cplusplus > 201703L │ │ │ │ -2092 template │ │ │ │ -2093 auto │ │ │ │ -_2_0_9_4 _e_q_u_a_l___r_a_n_g_e(const ___K_t& __x) const │ │ │ │ -2095 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -2096 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ -2097#endif │ │ │ │ -2098 ///@} │ │ │ │ -2099 │ │ │ │ -2100 // bucket interface. │ │ │ │ -2101 │ │ │ │ -2102 /// Returns the number of buckets of the %unordered_multimap. │ │ │ │ -2103 _s_i_z_e___t_y_p_e │ │ │ │ -_2_1_0_4 _b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ -2105 { return _M_h.bucket_count(); } │ │ │ │ -2106 │ │ │ │ -2107 /// Returns the maximum number of buckets of the %unordered_multimap. │ │ │ │ -2108 _s_i_z_e___t_y_p_e │ │ │ │ -_2_1_0_9 _m_a_x___b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ -2110 { return _M_h.max_bucket_count(); } │ │ │ │ -2111 │ │ │ │ -2112 /* │ │ │ │ -2113 * @brief Returns the number of elements in a given bucket. │ │ │ │ -2114 * @param __n A bucket index. │ │ │ │ -2115 * @return The number of elements in the bucket. │ │ │ │ -2116 */ │ │ │ │ -2117 _s_i_z_e___t_y_p_e │ │ │ │ -2118 bucket_size(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -2119 { return _M_h.bucket_size(__n); } │ │ │ │ -2120 │ │ │ │ -2121 /* │ │ │ │ -2122 * @brief Returns the bucket index of a given element. │ │ │ │ -2123 * @param __key A key instance. │ │ │ │ -2124 * @return The key bucket index. │ │ │ │ -2125 */ │ │ │ │ -2126 _s_i_z_e___t_y_p_e │ │ │ │ -2127 bucket(const _k_e_y___t_y_p_e& __key) const │ │ │ │ -2128 { return _M_h.bucket(__key); } │ │ │ │ -2129 │ │ │ │ -2130 /** │ │ │ │ -2131 * @brief Returns a read/write iterator pointing to the first bucket │ │ │ │ -2132 * element. │ │ │ │ -2133 * @param __n The bucket index. │ │ │ │ -2134 * @return A read/write local iterator. │ │ │ │ -2135 */ │ │ │ │ -2136 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_2_1_3_7 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) │ │ │ │ -2138 { return _M_h.begin(__n); } │ │ │ │ -2139 │ │ │ │ -2140 ///@{ │ │ │ │ -2141 /** │ │ │ │ -2142 * @brief Returns a read-only (constant) iterator pointing to the first │ │ │ │ -2143 * bucket element. │ │ │ │ -2144 * @param __n The bucket index. │ │ │ │ -2145 * @return A read-only local iterator. │ │ │ │ -2146 */ │ │ │ │ -2147 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_2_1_4_8 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -2149 { return _M_h.begin(__n); } │ │ │ │ -2150 │ │ │ │ -2151 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_2_1_5_2 _c_b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -2153 { return _M_h.cbegin(__n); } │ │ │ │ -2154 ///@} │ │ │ │ -2155 │ │ │ │ -2156 /** │ │ │ │ -2157 * @brief Returns a read/write iterator pointing to one past the last │ │ │ │ -2158 * bucket elements. │ │ │ │ -2159 * @param __n The bucket index. │ │ │ │ -2160 * @return A read/write local iterator. │ │ │ │ -2161 */ │ │ │ │ -2162 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_2_1_6_3 _e_n_d(_s_i_z_e___t_y_p_e __n) │ │ │ │ -2164 { return _M_h.end(__n); } │ │ │ │ -2165 │ │ │ │ -2166 ///@{ │ │ │ │ -2167 /** │ │ │ │ -2168 * @brief Returns a read-only (constant) iterator pointing to one past │ │ │ │ -2169 * the last bucket elements. │ │ │ │ -2170 * @param __n The bucket index. │ │ │ │ -2171 * @return A read-only local iterator. │ │ │ │ -2172 */ │ │ │ │ -2173 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_2_1_7_4 _e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -2175 { return _M_h.end(__n); } │ │ │ │ -2176 │ │ │ │ -2177 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_2_1_7_8 _c_e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -2179 { return _M_h.cend(__n); } │ │ │ │ -2180 ///@} │ │ │ │ -2181 │ │ │ │ -2182 // hash policy. │ │ │ │ -2183 │ │ │ │ -2184 /// Returns the average number of elements per bucket. │ │ │ │ -2185 float │ │ │ │ -_2_1_8_6 _l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -2187 { return _M_h.load_factor(); } │ │ │ │ -2188 │ │ │ │ -2189 /// Returns a positive number that the %unordered_multimap tries to keep │ │ │ │ -2190 /// the load factor less than or equal to. │ │ │ │ -2191 float │ │ │ │ -_2_1_9_2 _m_a_x___l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -2193 { return _M_h.max_load_factor(); } │ │ │ │ -2194 │ │ │ │ -2195 /** │ │ │ │ -2196 * @brief Change the %unordered_multimap maximum load factor. │ │ │ │ -2197 * @param __z The new maximum load factor. │ │ │ │ -2198 */ │ │ │ │ -2199 void │ │ │ │ -_2_2_0_0 _m_a_x___l_o_a_d___f_a_c_t_o_r(float _____z) │ │ │ │ -2201 { _M_h.max_load_factor(_____z); } │ │ │ │ -2202 │ │ │ │ -2203 /** │ │ │ │ -2204 * @brief May rehash the %unordered_multimap. │ │ │ │ -2205 * @param __n The new number of buckets. │ │ │ │ -2206 * │ │ │ │ -2207 * Rehash will occur only if the new number of buckets respect the │ │ │ │ -2208 * %unordered_multimap maximum load factor. │ │ │ │ -2209 */ │ │ │ │ -2210 void │ │ │ │ -_2_2_1_1 _r_e_h_a_s_h(_s_i_z_e___t_y_p_e __n) │ │ │ │ -2212 { _M_h.rehash(__n); } │ │ │ │ -2213 │ │ │ │ -2214 /** │ │ │ │ -2215 * @brief Prepare the %unordered_multimap for a specified number of │ │ │ │ -2216 * elements. │ │ │ │ -2217 * @param __n Number of elements required. │ │ │ │ -2218 * │ │ │ │ -2219 * Same as rehash(ceil(n / max_load_factor())). │ │ │ │ -2220 */ │ │ │ │ -2221 void │ │ │ │ -_2_2_2_2 _r_e_s_e_r_v_e(_s_i_z_e___t_y_p_e __n) │ │ │ │ -2223 { _M_h.reserve(__n); } │ │ │ │ -2224 │ │ │ │ -2225 template │ │ │ │ -2227 friend bool │ │ │ │ -2228 operator==(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p<___K_e_y_1, ___T_p_1, │ │ │ │ -2229 ___H_a_s_h_1, ___P_r_e_d_1, _Alloc1>&, │ │ │ │ -2230 const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p<___K_e_y_1, ___T_p_1, │ │ │ │ -2231 ___H_a_s_h_1, ___P_r_e_d_1, _Alloc1>&); │ │ │ │ -2232 }; │ │ │ │ -2233 │ │ │ │ -2234#if __cpp_deduction_guides >= 201606 │ │ │ │ -2235 │ │ │ │ -2236 template>, │ │ │ │ -2238 typename _Pred = equal_to<__iter_key_t<_InputIterator>>, │ │ │ │ -2239 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, │ │ │ │ -2240 typename = _RequireInputIter<_InputIterator>, │ │ │ │ -2241 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -2242 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -2243 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2244 unordered_multimap(_InputIterator, _InputIterator, │ │ │ │ -2245 _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 = {}, │ │ │ │ -2246 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ -2247 _Allocator = _Allocator()) │ │ │ │ -2248 -> unordered_multimap<__iter_key_t<_InputIterator>, │ │ │ │ -2249 __iter_val_t<_InputIterator>, _Hash, _Pred, │ │ │ │ -2250 _Allocator>; │ │ │ │ -2251 │ │ │ │ -2252 template, │ │ │ │ -2253 typename _Pred = equal_to<_Key>, │ │ │ │ -2254 typename _Allocator = allocator>, │ │ │ │ -2255 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -2256 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -2257 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2258 unordered_multimap(initializer_list>, │ │ │ │ -2259 _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 = {}, │ │ │ │ -2260 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ -2261 _Allocator = _Allocator()) │ │ │ │ -2262 -> unordered_multimap<_Key, _Tp, _Hash, _Pred, _Allocator>; │ │ │ │ -2263 │ │ │ │ -2264 template, │ │ │ │ -2266 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2267 unordered_multimap(_InputIterator, _InputIterator, │ │ │ │ -2268 _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) │ │ │ │ -2269 -> unordered_multimap<__iter_key_t<_InputIterator>, │ │ │ │ -2270 __iter_val_t<_InputIterator>, │ │ │ │ -2271 hash<__iter_key_t<_InputIterator>>, │ │ │ │ -2272 equal_to<__iter_key_t<_InputIterator>>, _Allocator>; │ │ │ │ -2273 │ │ │ │ -2274 template, │ │ │ │ -2276 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2277 unordered_multimap(_InputIterator, _InputIterator, _Allocator) │ │ │ │ -2278 -> unordered_multimap<__iter_key_t<_InputIterator>, │ │ │ │ -2279 __iter_val_t<_InputIterator>, │ │ │ │ -2280 hash<__iter_key_t<_InputIterator>>, │ │ │ │ -2281 equal_to<__iter_key_t<_InputIterator>>, _Allocator>; │ │ │ │ -2282 │ │ │ │ -2283 template, │ │ │ │ -2285 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -2286 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2287 unordered_multimap(_InputIterator, _InputIterator, │ │ │ │ -2288 _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, │ │ │ │ -2289 _Allocator) │ │ │ │ -2290 -> unordered_multimap<__iter_key_t<_InputIterator>, │ │ │ │ -2291 __iter_val_t<_InputIterator>, _Hash, │ │ │ │ -2292 equal_to<__iter_key_t<_InputIterator>>, _Allocator>; │ │ │ │ -2293 │ │ │ │ -2294 template> │ │ │ │ -2296 unordered_multimap(initializer_list>, │ │ │ │ -2297 _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, │ │ │ │ -2298 _Allocator) │ │ │ │ -2299 -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; │ │ │ │ -2300 │ │ │ │ -2301 template> │ │ │ │ -2303 unordered_multimap(initializer_list>, _Allocator) │ │ │ │ -2304 -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; │ │ │ │ -2305 │ │ │ │ -2306 template, │ │ │ │ -2308 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2309 unordered_multimap(initializer_list>, │ │ │ │ -2310 _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, │ │ │ │ -2311 _Hash, _Allocator) │ │ │ │ -2312 -> unordered_multimap<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>; │ │ │ │ -2313 │ │ │ │ -2314#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -2315 template>, │ │ │ │ -2317 __not_allocator_like _Pred = equal_to<__detail::__range_key_type<_Rg>>, │ │ │ │ -2318 __allocator_like _Allocator = │ │ │ │ -2319 allocator<__detail::__range_to_alloc_type<_Rg>>> │ │ │ │ -2320 unordered_multimap(from_range_t, _Rg&&, │ │ │ │ -2321 _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 = {}, │ │ │ │ -2322 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ -2323 _Allocator = _Allocator()) │ │ │ │ -2324 -> unordered_multimap<__detail::__range_key_type<_Rg>, │ │ │ │ -2325 __detail::__range_mapped_type<_Rg>, │ │ │ │ -2326 _Hash, _Pred, _Allocator>; │ │ │ │ -2327 │ │ │ │ -2328 template │ │ │ │ -2330 unordered_multimap(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, │ │ │ │ -2331 _Allocator) │ │ │ │ -2332 -> unordered_multimap<__detail::__range_key_type<_Rg>, │ │ │ │ -2333 __detail::__range_mapped_type<_Rg>, │ │ │ │ -2334 hash<__detail::__range_key_type<_Rg>>, │ │ │ │ -2335 equal_to<__detail::__range_key_type<_Rg>>, │ │ │ │ -2336 _Allocator>; │ │ │ │ -2337 │ │ │ │ -2338 template │ │ │ │ -2340 unordered_multimap(from_range_t, _Rg&&, _Allocator) │ │ │ │ -2341 -> unordered_multimap<__detail::__range_key_type<_Rg>, │ │ │ │ -2342 __detail::__range_mapped_type<_Rg>, │ │ │ │ -2343 hash<__detail::__range_key_type<_Rg>>, │ │ │ │ -2344 equal_to<__detail::__range_key_type<_Rg>>, │ │ │ │ -2345 _Allocator>; │ │ │ │ -2346 │ │ │ │ -2347 template │ │ │ │ -2350 unordered_multimap(from_range_t, _Rg&&, │ │ │ │ -2351 _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, │ │ │ │ -2352 _Hash, _Allocator) │ │ │ │ -2353 -> unordered_multimap<__detail::__range_key_type<_Rg>, │ │ │ │ -2354 __detail::__range_mapped_type<_Rg>, │ │ │ │ -2355 _Hash, equal_to<__detail::__range_key_type<_Rg>>, │ │ │ │ -2356 _Allocator>; │ │ │ │ -2357#endif │ │ │ │ -2358#endif │ │ │ │ -2359 │ │ │ │ -2360 template │ │ │ │ -2361 inline void │ │ │ │ -2362 swap(unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -2363 unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -2364 noexcept(noexcept(__x.swap(__y))) │ │ │ │ -2365 { __x.swap(__y); } │ │ │ │ -2366 │ │ │ │ -2367 template │ │ │ │ -2368 inline void │ │ │ │ -2369 swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -2370 unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -2371 noexcept(noexcept(__x.swap(__y))) │ │ │ │ -2372 { __x.swap(__y); } │ │ │ │ -2373 │ │ │ │ -2374 template │ │ │ │ -2375 inline bool │ │ │ │ -2376 operator==(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -2377 const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -2378 { return __x._M_h._M_equal(__y._M_h); } │ │ │ │ -2379 │ │ │ │ -2380#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ -2381 template │ │ │ │ -2382 inline bool │ │ │ │ -2383 operator!=(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -2384 const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -2385 { return !(__x == __y); } │ │ │ │ -2386#endif │ │ │ │ -2387 │ │ │ │ -2388 template │ │ │ │ -2389 inline bool │ │ │ │ -2390 operator==(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -2391 const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -2392 { return __x._M_h._M_equal(__y._M_h); } │ │ │ │ -2393 │ │ │ │ -2394#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ -2395 template │ │ │ │ -2396 inline bool │ │ │ │ -2397 operator!=(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -2398 const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -2399 { return !(__x == __y); } │ │ │ │ -2400#endif │ │ │ │ -2401 │ │ │ │ -2402_GLIBCXX_END_NAMESPACE_CONTAINER │ │ │ │ -2403 │ │ │ │ -2404#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -2405 // Allow std::unordered_map access to internals of compatible maps. │ │ │ │ -2406 template │ │ │ │ -2408 struct _Hash_merge_helper< │ │ │ │ -2409 _GLIBCXX_STD_C::unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>, │ │ │ │ -2410 _Hash2, _Eq2> │ │ │ │ -2411 { │ │ │ │ -2412 private: │ │ │ │ -2413 template │ │ │ │ -2414 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>; │ │ │ │ -2415 template │ │ │ │ -2416 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>; │ │ │ │ -2417 │ │ │ │ -2418 friend unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>; │ │ │ │ -2419 │ │ │ │ -2420 static auto& │ │ │ │ -2421 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ -2422 { return __map._M_h; } │ │ │ │ -2423 │ │ │ │ -2424 static auto& │ │ │ │ -2425 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ -2426 { return __map._M_h; } │ │ │ │ -2427 }; │ │ │ │ -2428 │ │ │ │ -2429 // Allow std::unordered_multimap access to internals of compatible maps. │ │ │ │ -2430 template │ │ │ │ -2432 struct _Hash_merge_helper< │ │ │ │ -2433 _GLIBCXX_STD_C::unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>, │ │ │ │ -2434 _Hash2, _Eq2> │ │ │ │ -2435 { │ │ │ │ -2436 private: │ │ │ │ -2437 template │ │ │ │ -2438 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>; │ │ │ │ -2439 template │ │ │ │ -2440 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>; │ │ │ │ -2441 │ │ │ │ -2442 friend unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>; │ │ │ │ -2443 │ │ │ │ -2444 static auto& │ │ │ │ -2445 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ -2446 { return __map._M_h; } │ │ │ │ -2447 │ │ │ │ -2448 static auto& │ │ │ │ -2449 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ -2450 { return __map._M_h; } │ │ │ │ -2451 }; │ │ │ │ -2452#endif // node_extract │ │ │ │ -2453 │ │ │ │ -2454_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -2455} // namespace std │ │ │ │ -2456 │ │ │ │ -2457#endif /* _UNORDERED_MAP_H */ │ │ │ │ -_s_t_l___f_u_n_c_t_i_o_n_._h │ │ │ │ +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 │ │ │ │ -_f_u_n_c_t_i_o_n_a_l___h_a_s_h_._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_:_:_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_:_:_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_:_:_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_:_:_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 │ │ │ │ +The type used as a compile-time boolean with true value. │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_1_6 │ │ │ │ +_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_1_9 │ │ │ │ _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_:_:_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_2 │ │ │ │ _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_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_6_7 │ │ │ │ -_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_1_8_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::reference reference │ │ │ │ -Iterator-related typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_8_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(iterator __position) │ │ │ │ -Erases an element from an unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_7_6 │ │ │ │ -_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_6_6_2 │ │ │ │ -_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_8_9_2 │ │ │ │ -_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_0_7_6 │ │ │ │ -_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_0_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::iterator iterator │ │ │ │ -Iterator-related typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_8_9 │ │ │ │ -_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_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 │ │ │ │ +_s_t_d_:_:_i_s___s_a_m_e │ │ │ │ +is_same │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_5_4_0 │ │ │ │ +_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_2_4_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_2_7_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_2_8_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_4_5_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_:_:___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_:_:_b_e_g_i_n │ │ │ │ iterator begin() noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_3_1 │ │ │ │ -_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_4_0 │ │ │ │ -_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_:_1_9_8_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 │ │ │ │ -iterator insert(const_iterator __hint, node_type &&__nh) │ │ │ │ -Re-insert an extracted node. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_5_2 │ │ │ │ -_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_7_7_5 │ │ │ │ -_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_:_1_9_9_1 │ │ │ │ -_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_3_8 │ │ │ │ -_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_2_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_m_a_p_p_e_d___t_y_p_e │ │ │ │ -_Hashtable::mapped_type mapped_type │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_7_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_f_i_n_d │ │ │ │ -auto find(const _Kt &__x) -> decltype(_M_h._M_find_tr(__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_1_5 │ │ │ │ -_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_1_6_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 │ │ │ │ -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_7_9_0 │ │ │ │ -_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_5_9_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(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_1_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ -_Hashtable::value_type value_type │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_7_6 │ │ │ │ -_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_6_8_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_x_t_r_a_c_t │ │ │ │ -node_type extract(const key_type &__key) │ │ │ │ -Extract a node. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_4_2 │ │ │ │ -_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_0_5_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_o_n_s_t___r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::const_reference const_reference │ │ │ │ -Iterator-related typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_8_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(node_type &&__nh) │ │ │ │ -Re-insert an extracted node. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_4_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_8_7_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_n_d │ │ │ │ +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_:_:_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_:_:_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 _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_5_3 │ │ │ │ -_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_3_7 │ │ │ │ -_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_1_9_2 │ │ │ │ -_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_3_4 │ │ │ │ -_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_3_0 │ │ │ │ -_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_:_:_h_a_s_h_e_r │ │ │ │ -_Hashtable::hasher hasher │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_7_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::local_iterator local_iterator │ │ │ │ -Iterator-related typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_9_1 │ │ │ │ -_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_2_2 │ │ │ │ -_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_0_8_8 │ │ │ │ -_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_3_5 │ │ │ │ -_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 │ │ │ │ +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 the contents of an initializer_list into forward_list after the │ │ │ │ +specified iterator. │ │ │ │ +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_:_:_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 │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_2_1 │ │ │ │ -_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_0_9 │ │ │ │ -_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_4_9_0 │ │ │ │ -_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 │ │ │ │ -auto count(const _Kt &__x) const -> decltype(_M_h._M_count_tr(__x)) │ │ │ │ -Finds the number of elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_4_4 │ │ │ │ -_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_1_1 │ │ │ │ -_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_1_7_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_p_o_i_n_t_e_r │ │ │ │ -_Hashtable::pointer pointer │ │ │ │ -Iterator-related typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_8_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ -_Hashtable::allocator_type allocator_type │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_8_0 │ │ │ │ -_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_1_4_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_f_i_n_d │ │ │ │ -auto find(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__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_2_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_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 │ │ │ │ -Iterator-related typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_9_2 │ │ │ │ -_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_5_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ -_Hashtable::difference_type difference_type │ │ │ │ -Iterator-related typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_9_4 │ │ │ │ -_s_t_d_:_:_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 │ │ │ │ -_Hashtable::size_type size_type │ │ │ │ -Iterator-related typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_9_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ -_Hashtable::const_pointer const_pointer │ │ │ │ -Iterator-related typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_8_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 │ │ │ │ -__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_3_9 │ │ │ │ -_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_0_6_2 │ │ │ │ -_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_3_5 │ │ │ │ -_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_1_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::const_iterator const_iterator │ │ │ │ -Iterator-related typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_9_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 │ │ │ │ -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_0_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_e_n_d │ │ │ │ +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_:_:_r_e_m_o_v_e │ │ │ │ +__remove_return_type remove(const _Tp &__val) │ │ │ │ +Remove all elements equal to value. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._t_c_c_:_2_8_5 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_c_e_n_d │ │ │ │ const_iterator cend() const noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_6_6 │ │ │ │ -_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_2_1 │ │ │ │ -_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_1_5_2 │ │ │ │ -_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 │ │ │ │ +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 │ │ │ │ -Returns true if the unordered_multimap is empty. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_1_1 │ │ │ │ -_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_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_y_p_e │ │ │ │ -_Hashtable::key_type key_type │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_7_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_x_t_r_a_c_t │ │ │ │ -node_type extract(const_iterator __pos) │ │ │ │ -Extract a node. │ │ │ │ -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_:_:_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_1_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_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_7_6_4 │ │ │ │ -_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_1_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(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_1_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, 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_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 │ │ │ │ -auto equal_range(const _Kt &__x) -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -Finds a subsequence matching given key. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_8_2 │ │ │ │ -_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_u_a_l │ │ │ │ -_Hashtable::key_equal key_equal │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_7_9 │ │ │ │ -_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_0_4 │ │ │ │ -_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_0_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 │ │ │ │ -auto equal_range(const _Kt &__x) const -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -Finds a subsequence matching given key. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_9_4 │ │ │ │ -_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_5_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::iterator iterator │ │ │ │ -Iterator-related typedefs. │ │ │ │ -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_1_8_2 │ │ │ │ -_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_0_7_8 │ │ │ │ -_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_:_9_9_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_x_t_r_a_c_t │ │ │ │ -node_type extract(const key_type &__key) │ │ │ │ -Extract a node. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_8_6 │ │ │ │ -_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_7_0 │ │ │ │ -_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 │ │ │ │ +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 │ │ │ │ -Returns the allocator object used by the unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_3_5_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_f_i_n_d │ │ │ │ -auto find(const _Kt &__x) -> decltype(_M_h._M_find_tr(__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_5_2 │ │ │ │ -_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_4_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ -_Hashtable::const_pointer const_pointer │ │ │ │ -Iterator-related typedefs. │ │ │ │ -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_:_:_f_i_n_d │ │ │ │ -auto find(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__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_6_3 │ │ │ │ -_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_:_6_8_1 │ │ │ │ -_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_5_5 │ │ │ │ -_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_1_9 │ │ │ │ -_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_0_7_4 │ │ │ │ -_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_5_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_t_r_y___e_m_p_l_a_c_e │ │ │ │ -iterator try_emplace(const_iterator __hint, const key_type &__k, _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_:_5_6_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_e_x_t_r_a_c_t │ │ │ │ -node_type extract(const_iterator __pos) │ │ │ │ -Extract a node. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_7_8 │ │ │ │ -_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_0_5 │ │ │ │ -_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_0_4 │ │ │ │ -_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_3_4 │ │ │ │ -_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_3_1 │ │ │ │ -_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, node_type &&__nh) │ │ │ │ -Re-insert an extracted node. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_9_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::reference reference │ │ │ │ -Iterator-related typedefs. │ │ │ │ -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_4_4 │ │ │ │ -_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_0_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ -_Hashtable::allocator_type allocator_type │ │ │ │ -Public typedefs. │ │ │ │ -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_:_9_7_9 │ │ │ │ -_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_5_8 │ │ │ │ -_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_3_3 │ │ │ │ -_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_5_7 │ │ │ │ -_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_5_6 │ │ │ │ -_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 │ │ │ │ -auto equal_range(const _Kt &__x) -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -Finds a subsequence matching given key. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_0_2_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_0_3 │ │ │ │ -_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_6_8 │ │ │ │ -_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_0_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()=default │ │ │ │ -Default constructor. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_m_a_p_p_e_d___t_y_p_e │ │ │ │ -_Hashtable::mapped_type mapped_type │ │ │ │ -Public typedefs. │ │ │ │ -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_3_0 │ │ │ │ -_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_4_1 │ │ │ │ -_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_6_0 │ │ │ │ -_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_6_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, 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_1_7 │ │ │ │ -_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_6_1 │ │ │ │ -_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_1_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_h_a_s_h_e_r │ │ │ │ -_Hashtable::hasher hasher │ │ │ │ -Public typedefs. │ │ │ │ -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_:_:_i_n_s_e_r_t___o_r___a_s_s_i_g_n │ │ │ │ -pair< iterator, bool > insert_or_assign(const key_type &__k, _Obj &&__obj) │ │ │ │ -Attempts to insert a std::pair into the unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_7_2_5 │ │ │ │ -_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_6_1 │ │ │ │ -_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_5_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_t_r_y___e_m_p_l_a_c_e │ │ │ │ -pair< iterator, bool > try_emplace(const key_type &__k, _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_:_5_2_5 │ │ │ │ -_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_:_3_8_7 │ │ │ │ -_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_2_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_o_n_s_t___r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::const_reference const_reference │ │ │ │ -Iterator-related typedefs. │ │ │ │ -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___e_q_u_a_l │ │ │ │ -_Hashtable::key_equal key_equal │ │ │ │ -Public typedefs. │ │ │ │ -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_:_:_l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::local_iterator local_iterator │ │ │ │ -Iterator-related typedefs. │ │ │ │ -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_1_6 │ │ │ │ -_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_1_3 │ │ │ │ -_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_4_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_p_o_i_n_t_e_r │ │ │ │ -_Hashtable::pointer pointer │ │ │ │ -Iterator-related typedefs. │ │ │ │ -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_:_:_i_n_s_e_r_t___o_r___a_s_s_i_g_n │ │ │ │ -iterator insert_or_assign(const_iterator __hint, const key_type &__k, _Obj │ │ │ │ -&&__obj) │ │ │ │ -Attempts to insert a std::pair into the unordered_map. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_7_7_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(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_y_p_e │ │ │ │ -_Hashtable::key_type key_type │ │ │ │ -Public typedefs. │ │ │ │ -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_0_8_6 │ │ │ │ -_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_7_8 │ │ │ │ -_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_2_2 │ │ │ │ -_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 │ │ │ │ -auto equal_range(const _Kt &__x) const -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -Finds a subsequence matching given key. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_0_3_7 │ │ │ │ -_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_:_:_c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::const_iterator const_iterator │ │ │ │ -Iterator-related typedefs. │ │ │ │ -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_:_:_s_i_z_e___t_y_p_e │ │ │ │ -_Hashtable::size_type size_type │ │ │ │ -Iterator-related typedefs. │ │ │ │ -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_4_6 │ │ │ │ -_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_6_8 │ │ │ │ -_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_1_1 │ │ │ │ -_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_:_8_7_5 │ │ │ │ -_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_1_9 │ │ │ │ -_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_1_7_4 │ │ │ │ -_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_:_:_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ -_Hashtable::difference_type difference_type │ │ │ │ -Iterator-related typedefs. │ │ │ │ -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_:_:_c_o_u_n_t │ │ │ │ -auto count(const _Kt &__x) const -> decltype(_M_h._M_count_tr(__x)) │ │ │ │ -Finds the number of elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_9_8_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_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 │ │ │ │ -Iterator-related typedefs. │ │ │ │ -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_0_9_1 │ │ │ │ -_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_7_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_i_n_s_e_r_t │ │ │ │ -insert_return_type insert(node_type &&__nh) │ │ │ │ -Re-insert an extracted node. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_4_9_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ -_Hashtable::value_type value_type │ │ │ │ -Public typedefs. │ │ │ │ -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_1_9_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_c_b_e_g_i_n │ │ │ │ +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_:_:_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 _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_3_9_1 │ │ │ │ +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_:_:_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_:_:_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_:_:_a_u_t_o___p_t_r___r_e_f │ │ │ │ DDeeffiinniittiioonn _a_u_t_o___p_t_r_._h_:_4_9 │ │ │ │ -_h_a_s_h_t_a_b_l_e_._h │ │ │ │ +_____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_:_:_a_l_l_o_c_a_t_e │ │ │ │ +static constexpr pointer allocate(_Alloc &__a, size_type __n) │ │ │ │ +Allocate memory. │ │ │ │ +DDeeffiinniittiioonn _b_i_t_s_/_a_l_l_o_c___t_r_a_i_t_s_._h_:_3_8_4 │ │ │ │ +_____g_n_u___c_x_x_:_:_____a_l_l_o_c___t_r_a_i_t_s_:_:_d_e_a_l_l_o_c_a_t_e │ │ │ │ +static constexpr void deallocate(_Alloc &__a, pointer __p, size_type __n) │ │ │ │ +Deallocate memory. │ │ │ │ +DDeeffiinniittiioonn _b_i_t_s_/_a_l_l_o_c___t_r_a_i_t_s_._h_:_4_1_6 │ │ │ │ +_____g_n_u___c_x_x_:_:_____a_l_l_o_c___t_r_a_i_t_s_:_:_m_a_x___s_i_z_e │ │ │ │ +static constexpr size_type max_size(const _Alloc &__a) noexcept │ │ │ │ +The maximum supported allocation size. │ │ │ │ +DDeeffiinniittiioonn _b_i_t_s_/_a_l_l_o_c___t_r_a_i_t_s_._h_:_4_7_4 │ │ │ │ +_a_l_l_o_c___t_r_a_i_t_s_._h │ │ │ │ +_s_t_l___i_t_e_r_a_t_o_r_._h │ │ │ │ * _b_i_t_s │ │ │ │ - * _u_n_o_r_d_e_r_e_d___m_a_p_._h │ │ │ │ + * _f_o_r_w_a_r_d___l_i_s_t_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00392.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: unique_lock.h File Reference │ │ │ +libstdc++: gslice_array.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,38 +48,38 @@ │ │ │ /* @license-end */ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ Classes | │ │ │ Namespaces
│ │ │ -
unique_lock.h File Reference
│ │ │ +
gslice_array.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ Classes

class  std::unique_lock< _Mutex >
class  std::gslice_array< _Tp >
 
│ │ │ │ │ │ │ │ │ │ │ │

│ │ │ Namespaces

namespace  std
 
│ │ │

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 <valarray>.

│ │ │ │ │ │ -

Definition in file unique_lock.h.

│ │ │ +

Definition in file gslice_array.h.

│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,17 +1,17 @@ │ │ │ │ libstdc++ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ -unique_lock.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_:_:_u_n_i_q_u_e___l_o_c_k_<_ ___M_u_t_e_x_ _> │ │ │ │ +class   _s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_<_ ___T_p_ _> │ │ │ │   │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │   │ │ │ │ ********** 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 _g_s_l_i_c_e___a_r_r_a_y_._h. │ │ │ │ * _b_i_t_s │ │ │ │ - * _u_n_i_q_u_e___l_o_c_k_._h │ │ │ │ + * _g_s_l_i_c_e___a_r_r_a_y_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00392_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: unique_lock.h Source File │ │ │ +libstdc++: gslice_array.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,20 +45,20 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
unique_lock.h
│ │ │ +
gslice_array.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// std::unique_lock implementation -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// The template and inlines for the -*- C++ -*- gslice_array class.
│ │ │
2
│ │ │ -
3// Copyright (C) 2008-2025 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 1997-2025 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
│ │ │ @@ -72,268 +72,243 @@ │ │ │
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
│ │ │ +
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{mutex}
│ │ │ +
27 * Do not attempt to use it directly. @headername{valarray}
│ │ │
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
│ │ │ +
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 _Mutex>
│ │ │ +
61 template<typename _Tp>
│ │ │
│ │ │ - │ │ │ + │ │ │
63 {
│ │ │
64 public:
│ │ │ -
65 typedef _Mutex mutex_type;
│ │ │ +
65 typedef _Tp value_type;
│ │ │
66
│ │ │ -
67 unique_lock() noexcept
│ │ │ -
68 : _M_device(0), _M_owns(false)
│ │ │ -
69 { }
│ │ │ -
70
│ │ │ - │ │ │ -
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
│ │ │ - │ │ │ -
84 unique_lock(mutex_type& __m, try_to_lock_t)
│ │ │ -
85 : _M_device(std::__addressof(__m)), _M_owns(_M_device->try_lock())
│ │ │ -
86 { }
│ │ │ -
87
│ │ │ - │ │ │ -
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>
│ │ │ - │ │ │ -
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,
│ │ │ - │ │ │ -
107 : _M_device(std::__addressof(__m)),
│ │ │ -
108 _M_owns(_M_device->try_lock_for(__rtime))
│ │ │ -
109 { }
│ │ │ -
110
│ │ │ - │ │ │ -
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 _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
│ │ │ - │ │ │ -
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 };
│ │ │ +
67 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
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<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
│ │ │ + │ │ │ +
132
│ │ │ +
133#if __cplusplus < 201103L
│ │ │ +
134 // not implemented
│ │ │ +
135 gslice_array();
│ │ │ +
136#else
│ │ │ +
137 public:
│ │ │ +
138 gslice_array() = delete;
│ │ │ +
139#endif
│ │ │ +
140 };
│ │ │ +
│ │ │ +
141
│ │ │ +
142 template<typename _Tp>
│ │ │ +
143 inline
│ │ │ + │ │ │ +
145 const valarray<size_t>& __i)
│ │ │ +
146 : _M_array(__a), _M_index(__i) {}
│ │ │ +
147
│ │ │ +
148 template<typename _Tp>
│ │ │ +
149 inline
│ │ │ +
150 gslice_array<_Tp>::gslice_array(const gslice_array<_Tp>& __a)
│ │ │ +
151 : _M_array(__a._M_array), _M_index(__a._M_index) {}
│ │ │ +
152
│ │ │ +
153 template<typename _Tp>
│ │ │ +
154 inline gslice_array<_Tp>&
│ │ │ +
155 gslice_array<_Tp>::operator=(const gslice_array<_Tp>& __a)
│ │ │ +
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 }
│ │ │
│ │ │ -
241
│ │ │ -
242 /// Swap overload for unique_lock objects.
│ │ │ -
243 /// @relates unique_lock
│ │ │ -
244 template<typename _Mutex>
│ │ │ -
245 inline void
│ │ │ -
│ │ │ - │ │ │ -
247 { __x.swap(__y); }
│ │ │ +
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 }
│ │ │
│ │ │ -
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
│ │ │ +
178
│ │ │ +
179 template<typename _Tp>
│ │ │ +
180 template<class _Dom>
│ │ │ +
181 inline void
│ │ │ + │ │ │ +
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 */
│ │ │
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:218
│ │ │ -
Try to acquire ownership of the mutex without blocking.
Definition std_mutex.h:221
│ │ │ -
Assume the calling thread has already obtained mutex ownership and manage it.
Definition std_mutex.h:225
│ │ │ -
A movable scoped lock type.
Definition unique_lock.h:63
│ │ │ -
void swap(unique_lock< _Mutex > &__x, unique_lock< _Mutex > &__y) noexcept
Swap overload for unique_lock objects.
│ │ │ - │ │ │ +
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.
│ │ │ +
gslice_array & operator=(const gslice_array &)
Assignment operator. Assigns slice elements to corresponding elements of a.
│ │ │ +
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.
│ │ │ +
gslice_array(const gslice_array &)
Copy constructor. Both slices refer to the same underlying array.
│ │ │ +
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,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -unique_lock.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// std::unique_lock implementation -*- C++ -*- │ │ │ │ +1// The template and inlines for the -*- C++ -*- gslice_array class. │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2008-2025 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 1997-2025 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,280 +21,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// . │ │ │ │ 24 │ │ │ │ -25/** @file bits/unique_lock.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{mutex} │ │ │ │ +27 * Do not attempt to use it directly. @headername{valarray} │ │ │ │ 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 │ │ │ │ +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 _u_n_i_q_u_e___l_o_c_k │ │ │ │ +61 template │ │ │ │ +_6_2 class _g_s_l_i_c_e___a_r_r_a_y │ │ │ │ 63 { │ │ │ │ 64 public: │ │ │ │ -65 typedef ___M_u_t_e_x mutex_type; │ │ │ │ +65 typedef _Tp value_type; │ │ │ │ 66 │ │ │ │ -67 _u_n_i_q_u_e___l_o_c_k() noexcept │ │ │ │ -68 : _M_device(0), _M_owns(false) │ │ │ │ -69 { } │ │ │ │ -70 │ │ │ │ -71 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ -72 explicit _u_n_i_q_u_e___l_o_c_k(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 _u_n_i_q_u_e___l_o_c_k(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 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ -84 _u_n_i_q_u_e___l_o_c_k(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 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ -89 _u_n_i_q_u_e___l_o_c_k(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 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ -97 _u_n_i_q_u_e___l_o_c_k(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_>& _____a_t_i_m_e) │ │ │ │ -99 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____m)), │ │ │ │ -100 _M_owns(_M_device->try_lock_until(_____a_t_i_m_e)) │ │ │ │ -101 { } │ │ │ │ -102 │ │ │ │ -103 template │ │ │ │ -104 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ -105 _u_n_i_q_u_e___l_o_c_k(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_>& _____r_t_i_m_e) │ │ │ │ -107 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____m)), │ │ │ │ -108 _M_owns(_M_device->try_lock_for(_____r_t_i_m_e)) │ │ │ │ -109 { } │ │ │ │ -110 │ │ │ │ -111 _~_u_n_i_q_u_e___l_o_c_k() │ │ │ │ -112 { │ │ │ │ -113 if (_M_owns) │ │ │ │ -114 unlock(); │ │ │ │ -115 } │ │ │ │ -116 │ │ │ │ -117 _u_n_i_q_u_e___l_o_c_k(const _u_n_i_q_u_e___l_o_c_k&) = delete; │ │ │ │ -118 _u_n_i_q_u_e___l_o_c_k& operator=(const _u_n_i_q_u_e___l_o_c_k&) = delete; │ │ │ │ -119 │ │ │ │ -120 _u_n_i_q_u_e___l_o_c_k(_u_n_i_q_u_e___l_o_c_k&& _____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 _u_n_i_q_u_e___l_o_c_k& operator=(_u_n_i_q_u_e___l_o_c_k&& _____u) noexcept │ │ │ │ -128 { │ │ │ │ -129 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -130 // 4172. unique_lock self-move-assignment is broken │ │ │ │ -131 _u_n_i_q_u_e___l_o_c_k(_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; │ │ │ │ +67 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +68 // 253. valarray helper functions are almost entirely useless │ │ │ │ +69 │ │ │ │ +70 /// Copy constructor. Both slices refer to the same underlying array. │ │ │ │ +_7_1 _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. │ │ │ │ +_7_5 _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 void _o_p_e_r_a_t_o_r_=(const ___E_x_p_r_<___D_o_m_,_ ___T_p_>&) const; │ │ │ │ +104 template │ │ │ │ +105 void _o_p_e_r_a_t_o_r_*_=(const ___E_x_p_r_<___D_o_m_,_ ___T_p_>&) const; │ │ │ │ +106 template │ │ │ │ +107 void _o_p_e_r_a_t_o_r_/_=(const ___E_x_p_r_<___D_o_m_,_ ___T_p_>&) const; │ │ │ │ +108 template │ │ │ │ +109 void _o_p_e_r_a_t_o_r_%_=(const ___E_x_p_r_<___D_o_m_,_ ___T_p_>&) const; │ │ │ │ +110 template │ │ │ │ +111 void _o_p_e_r_a_t_o_r_+_=(const ___E_x_p_r_<___D_o_m_,_ ___T_p_>&) const; │ │ │ │ +112 template │ │ │ │ +113 void _o_p_e_r_a_t_o_r_-_=(const ___E_x_p_r_<___D_o_m_,_ ___T_p_>&) const; │ │ │ │ +114 template │ │ │ │ +115 void _o_p_e_r_a_t_o_r_^_=(const ___E_x_p_r_<___D_o_m_,_ ___T_p_>&) const; │ │ │ │ +116 template │ │ │ │ +117 void _o_p_e_r_a_t_o_r_&_=(const ___E_x_p_r_<___D_o_m_,_ ___T_p_>&) const; │ │ │ │ +118 template │ │ │ │ +119 void _o_p_e_r_a_t_o_r_|_=(const ___E_x_p_r_<___D_o_m_,_ ___T_p_>&) const; │ │ │ │ +120 template │ │ │ │ +121 void _o_p_e_r_a_t_o_r_<_<_=(const ___E_x_p_r_<___D_o_m_,_ ___T_p_>&) const; │ │ │ │ +122 template │ │ │ │ +123 void _o_p_e_r_a_t_o_r_>_>_=(const ___E_x_p_r_<___D_o_m_,_ ___T_p_>&) const; │ │ │ │ +124 │ │ │ │ +125 private: │ │ │ │ +126 ___A_r_r_a_y_<___T_p_> _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 _g_s_l_i_c_e___a_r_r_a_y(___A_r_r_a_y_<___T_p_>, 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 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(___A_r_r_a_y_<___T_p_> __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 │ │ │ │ +150 gslice_array<_Tp>::gslice_array(const gslice_array<_Tp>& __a) │ │ │ │ +151 : _M_array(__a._M_array), _M_index(__a._M_index) {} │ │ │ │ +152 │ │ │ │ +153 template │ │ │ │ +154 inline gslice_array<_Tp>& │ │ │ │ +155 _g_s_l_i_c_e___a_r_r_a_y_<___T_p_>_:_:_o_p_e_r_a_t_o_r_=(const gslice_array<_Tp>& __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 │ │ │ │ -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_>& _____a_t_i_m_e) │ │ │ │ -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 │ │ │ │ +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, ___A_r_r_a_y_<_s_i_z_e___t_>(_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 _M_owns = _M_device->try_lock_until(_____a_t_i_m_e); │ │ │ │ -176 return _M_owns; │ │ │ │ +175 std::__valarray_copy(___A_r_r_a_y_<___T_p_>(_____v), _____v.size(), │ │ │ │ +176 _M_array, ___A_r_r_a_y_<_s_i_z_e___t_>(_M_index)); │ │ │ │ 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_>& _____r_t_i_m_e) │ │ │ │ -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(_____r_t_i_m_e); │ │ │ │ -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 } │ │ │ │ +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 ___E_x_p_r_<___D_o_m_,_ ___T_p_>& __e) const │ │ │ │ +183 { │ │ │ │ +184 std::__valarray_copy (__e, _M_index.size(), _M_array, │ │ │ │ +185 ___A_r_r_a_y_<_s_i_z_e___t_>(_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 void │ │ │ │ -209 swap(_u_n_i_q_u_e___l_o_c_k& _____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* _____r_e_t = _M_device; │ │ │ │ -219 _M_device = 0; │ │ │ │ -220 _M_owns = false; │ │ │ │ -221 return _____r_e_t; │ │ │ │ -222 } │ │ │ │ +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_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 _m_u_t_e_x() 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(_u_n_i_q_u_e___l_o_c_k_<___M_u_t_e_x_>& __x, _u_n_i_q_u_e___l_o_c_k_<___M_u_t_e_x_>& __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 │ │ │ │ -_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 │ │ │ │ +224_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +225} // namespace │ │ │ │ +226 │ │ │ │ +227#endif /* _GSLICE_ARRAY_H */ │ │ │ │ _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_:_:_m_u_t_e_x │ │ │ │ -DDeeffiinniittiioonn _s_t_d___m_u_t_e_x_._h_:_9_9 │ │ │ │ -_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_1_8 │ │ │ │ -_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_2_1 │ │ │ │ -_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_2_5 │ │ │ │ -_s_t_d_:_:_u_n_i_q_u_e___l_o_c_k │ │ │ │ -A movable scoped lock type. │ │ │ │ -DDeeffiinniittiioonn _u_n_i_q_u_e___l_o_c_k_._h_:_6_3 │ │ │ │ -_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_:_:_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_= │ │ │ │ +gslice_array & operator=(const gslice_array &) │ │ │ │ +Assignment operator. Assigns slice elements to corresponding elements of a. │ │ │ │ +_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_:_:_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. │ │ │ │ +_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. │ │ │ │ _s_t_d_:_:_a_u_t_o___p_t_r___r_e_f │ │ │ │ DDeeffiinniittiioonn _a_u_t_o___p_t_r_._h_:_4_9 │ │ │ │ * _b_i_t_s │ │ │ │ - * _u_n_i_q_u_e___l_o_c_k_._h │ │ │ │ + * _g_s_l_i_c_e___a_r_r_a_y_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00395.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: this_thread_sleep.h File Reference │ │ │ +libstdc++: stream_iterator.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -46,46 +46,42 @@ │ │ │ /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ │ │ │ $(document).ready(function(){initNavTree('a00395.html',''); initResizable(); }); │ │ │ /* @license-end */ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -Namespaces | │ │ │ -Functions
│ │ │ -
this_thread_sleep.h File Reference
│ │ │ +Classes | │ │ │ +Namespaces
│ │ │ +
stream_iterator.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ +Classes

class  std::istream_iterator< _Tp, _CharT, _Traits, _Dist >
 
class  std::ostream_iterator< _Tp, _CharT, _Traits >
 
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ -

│ │ │ Namespaces

namespace  std
 
namespace  std::this_thread
 
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │

│ │ │ -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)
 
│ │ │

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 <iterator>.

│ │ │ │ │ │ -

Definition in file this_thread_sleep.h.

│ │ │ +

Definition in file stream_iterator.h.

│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,25 +1,19 @@ │ │ │ │ libstdc++ │ │ │ │ -_N_a_m_e_s_p_a_c_e_s | _F_u_n_c_t_i_o_n_s │ │ │ │ -this_thread_sleep.h File Reference │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ +stream_iterator.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 │ │ │ │ -  │ │ │ │ -namespace   _s_t_d_:_:_t_h_i_s___t_h_r_e_a_d │ │ │ │ +CCllaasssseess │ │ │ │ +class   _s_t_d_:_:_i_s_t_r_e_a_m___i_t_e_r_a_t_o_r_<_ ___T_p_,_ ___C_h_a_r_T_,_ ___T_r_a_i_t_s_,_ ___D_i_s_t_ _> │ │ │ │   │ │ │ │ -FFuunnccttiioonnss │ │ │ │ -template<_t_y_p_e_n_a_m_e _Rep , _t_y_p_e_n_a_m_e ___P_e_r_i_o_d > │ │ │ │ -_v_o_i_d  _s_t_d_:_:_t_h_i_s___t_h_r_e_a_d_:_:_s_l_e_e_p___f_o_r (_c_o_n_s_t _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n< _Rep, ___P_e_r_i_o_d > │ │ │ │ - &_____r_t_i_m_e) │ │ │ │ +class   _s_t_d_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r_<_ ___T_p_,_ ___C_h_a_r_T_,_ ___T_r_a_i_t_s_ _> │ │ │ │   │ │ │ │ -template<_t_y_p_e_n_a_m_e ___C_l_o_c_k , _t_y_p_e_n_a_m_e ___D_u_r_a_t_i_o_n > │ │ │ │ -_v_o_i_d  _s_t_d_:_:_t_h_i_s___t_h_r_e_a_d_:_:_s_l_e_e_p___u_n_t_i_l (_c_o_n_s_t _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 > &_____a_t_i_m_e) │ │ │ │ +NNaammeessppaacceess │ │ │ │ +namespace   _s_t_d │ │ │ │   │ │ │ │ ********** 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 _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h. │ │ │ │ * _b_i_t_s │ │ │ │ - * _t_h_i_s___t_h_r_e_a_d___s_l_e_e_p_._h │ │ │ │ + * _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00395_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: this_thread_sleep.h Source File │ │ │ +libstdc++: stream_iterator.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,20 +45,20 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
this_thread_sleep.h
│ │ │ +
stream_iterator.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// Stream iterators
│ │ │
2
│ │ │ -
3// Copyright (C) 2008-2025 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2001-2025 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
│ │ │ @@ -72,127 +72,310 @@ │ │ │
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/stream_iterator.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{iterator}
│ │ │
28 */
│ │ │
29
│ │ │ -
30#ifndef _GLIBCXX_THIS_THREAD_SLEEP_H
│ │ │ -
31#define _GLIBCXX_THIS_THREAD_SLEEP_H 1
│ │ │ +
30#ifndef _STREAM_ITERATOR_H
│ │ │ +
31#define _STREAM_ITERATOR_H 1
│ │ │
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#ifndef _GLIBCXX_USE_NANOSLEEP
│ │ │ -
63 void
│ │ │ - │ │ │ -
65#endif
│ │ │ -
66
│ │ │ -
67 /// this_thread::sleep_for
│ │ │ -
68 template<typename _Rep, typename _Period>
│ │ │ -
69 inline void
│ │ │ -
│ │ │ - │ │ │ -
71 {
│ │ │ -
72 if (__rtime <= __rtime.zero())
│ │ │ -
73 return;
│ │ │ -
74 auto __s = chrono::duration_cast<chrono::seconds>(__rtime);
│ │ │ -
75 auto __ns = chrono::duration_cast<chrono::nanoseconds>(__rtime - __s);
│ │ │ -
76#ifdef _GLIBCXX_USE_NANOSLEEP
│ │ │ -
77 struct ::timespec __ts =
│ │ │ -
78 {
│ │ │ -
79 static_cast<std::time_t>(__s.count()),
│ │ │ -
80 static_cast<long>(__ns.count())
│ │ │ -
81 };
│ │ │ -
82 while (::nanosleep(&__ts, &__ts) == -1 && errno == EINTR)
│ │ │ -
83 { }
│ │ │ -
84#else
│ │ │ - │ │ │ -
86#endif
│ │ │ -
87 }
│ │ │ -
│ │ │ -
88
│ │ │ -
89 /// this_thread::sleep_until
│ │ │ -
90 template<typename _Clock, typename _Duration>
│ │ │ -
91 inline void
│ │ │ -
│ │ │ - │ │ │ -
93 {
│ │ │ -
94#if __cplusplus > 201703L
│ │ │ -
95 static_assert(chrono::is_clock_v<_Clock>);
│ │ │ -
96#endif
│ │ │ -
97 auto __now = _Clock::now();
│ │ │ -
98 if (_Clock::is_steady)
│ │ │ -
99 {
│ │ │ -
100 if (__now < __atime)
│ │ │ - │ │ │ -
102 return;
│ │ │ -
103 }
│ │ │ -
104 while (__now < __atime)
│ │ │ -
105 {
│ │ │ - │ │ │ -
107 __now = _Clock::now();
│ │ │ -
108 }
│ │ │ -
109 }
│ │ │ -
│ │ │ -
110#endif // ! NO_SLEEP
│ │ │ -
111 } // namespace this_thread
│ │ │ -
112
│ │ │ -
113 /// @}
│ │ │ -
114
│ │ │ -
115_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
116} // namespace
│ │ │ -
117#endif // C++11
│ │ │ +
37#include <iosfwd>
│ │ │ +
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
│ │ │ +
48 * @{
│ │ │ +
49 */
│ │ │ +
50
│ │ │ +
51// Ignore warnings about std::iterator.
│ │ │ +
52#pragma GCC diagnostic push
│ │ │ +
53#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
│ │ │ +
54
│ │ │ +
55 /// Provides input iterator semantics for streams.
│ │ │ +
56 template<typename _Tp, typename _CharT = char,
│ │ │ +
57 typename _Traits = char_traits<_CharT>, typename _Dist = ptrdiff_t>
│ │ │ +
│ │ │ + │ │ │ +
59 : public iterator<input_iterator_tag, _Tp, _Dist, const _Tp*, const _Tp&>
│ │ │ +
60 {
│ │ │ +
61 public:
│ │ │ +
62 typedef _CharT char_type;
│ │ │ +
63 typedef _Traits traits_type;
│ │ │ + │ │ │ +
65
│ │ │ +
66 private:
│ │ │ +
67 istream_type* _M_stream;
│ │ │ +
68 _Tp _M_value;
│ │ │ +
69 // This bool becomes false at end-of-stream. It should be sufficient to
│ │ │ +
70 // check _M_stream != nullptr instead, but historically we did not set
│ │ │ +
71 // _M_stream to null when reaching the end, so we need to keep this flag.
│ │ │ +
72 bool _M_ok;
│ │ │ +
73
│ │ │ +
74 public:
│ │ │ +
75 /// Construct end of input stream iterator.
│ │ │ +
│ │ │ + │ │ │ + │ │ │ +
78 : _M_stream(0), _M_value(), _M_ok(false) {}
│ │ │ +
│ │ │ +
79
│ │ │ +
80 /// Construct start of input stream iterator.
│ │ │ +
│ │ │ + │ │ │ +
82 : _M_stream(std::__addressof(__s)), _M_ok(true)
│ │ │ +
83 { _M_read(); }
│ │ │ +
│ │ │ +
84
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
88 : _M_stream(__obj._M_stream), _M_value(__obj._M_value),
│ │ │ +
89 _M_ok(__obj._M_ok)
│ │ │ +
90 { }
│ │ │ +
91
│ │ │ +
92#if __cplusplus > 201703L && __cpp_lib_concepts
│ │ │ +
93 constexpr
│ │ │ +
94 istream_iterator(default_sentinel_t)
│ │ │ +
95 noexcept(is_nothrow_default_constructible_v<_Tp>)
│ │ │ +
96 : istream_iterator() { }
│ │ │ +
97#endif
│ │ │ +
98
│ │ │ +
99#if __cplusplus >= 201103L
│ │ │ +
100 istream_iterator& operator=(const istream_iterator&) = default;
│ │ │ +
101 ~istream_iterator() = default;
│ │ │ +
102#endif
│ │ │ +
103
│ │ │ +
104 _GLIBCXX_NODISCARD
│ │ │ +
105 const _Tp&
│ │ │ +
106 operator*() const _GLIBCXX_NOEXCEPT
│ │ │ +
107 {
│ │ │ +
108 __glibcxx_requires_cond(_M_ok,
│ │ │ +
109 _M_message(__gnu_debug::__msg_deref_istream)
│ │ │ +
110 ._M_iterator(*this));
│ │ │ +
111 return _M_value;
│ │ │ +
112 }
│ │ │ +
113
│ │ │ +
114 _GLIBCXX_NODISCARD
│ │ │ +
115 const _Tp*
│ │ │ +
116 operator->() const _GLIBCXX_NOEXCEPT
│ │ │ +
117 { return std::__addressof((operator*())); }
│ │ │
118
│ │ │ -
119#endif // _GLIBCXX_THIS_THREAD_SLEEP_H
│ │ │ - │ │ │ - │ │ │ -
duration< int64_t > seconds
seconds
Definition chrono.h:901
│ │ │ -
duration< int64_t, nano > nanoseconds
nanoseconds
Definition chrono.h:892
│ │ │ + │ │ │ +
120 operator++()
│ │ │ +
121 {
│ │ │ +
122 __glibcxx_requires_cond(_M_ok,
│ │ │ +
123 _M_message(__gnu_debug::__msg_inc_istream)
│ │ │ +
124 ._M_iterator(*this));
│ │ │ +
125 _M_read();
│ │ │ +
126 return *this;
│ │ │ +
127 }
│ │ │ +
128
│ │ │ + │ │ │ +
130 operator++(int)
│ │ │ +
131 {
│ │ │ +
132 __glibcxx_requires_cond(_M_ok,
│ │ │ +
133 _M_message(__gnu_debug::__msg_inc_istream)
│ │ │ +
134 ._M_iterator(*this));
│ │ │ +
135 istream_iterator __tmp = *this;
│ │ │ +
136 _M_read();
│ │ │ +
137 return __tmp;
│ │ │ +
138 }
│ │ │ +
139
│ │ │ +
140 private:
│ │ │ +
141 bool
│ │ │ +
142 _M_equal(const istream_iterator& __x) const _GLIBCXX_NOEXCEPT
│ │ │ +
143 {
│ │ │ +
144 // Ideally this would just return _M_stream == __x._M_stream,
│ │ │ +
145 // but code compiled with old versions never sets _M_stream to null.
│ │ │ +
146 return (_M_ok == __x._M_ok) && (!_M_ok || _M_stream == __x._M_stream);
│ │ │ +
147 }
│ │ │ +
148
│ │ │ +
149 void
│ │ │ +
150 _M_read()
│ │ │ +
151 {
│ │ │ +
152 if (_M_stream && !(*_M_stream >> _M_value))
│ │ │ +
153 {
│ │ │ +
154 _M_stream = 0;
│ │ │ +
155 _M_ok = false;
│ │ │ +
156 }
│ │ │ +
157 }
│ │ │ +
158
│ │ │ +
159 /// Return true if the iterators refer to the same stream,
│ │ │ +
160 /// or are both at end-of-stream.
│ │ │ +
161 _GLIBCXX_NODISCARD
│ │ │ +
162 friend bool
│ │ │ +
│ │ │ + │ │ │ + │ │ │ +
165 { return __x._M_equal(__y); }
│ │ │ +
│ │ │ +
166
│ │ │ +
167#if __cpp_impl_three_way_comparison < 201907L
│ │ │ +
168 /// Return true if the iterators refer to different streams,
│ │ │ +
169 /// or if one is at end-of-stream and the other is not.
│ │ │ +
170 _GLIBCXX_NODISCARD
│ │ │ +
171 friend bool
│ │ │ +
172 operator!=(const istream_iterator& __x, const istream_iterator& __y)
│ │ │ + │ │ │ +
174 { return !__x._M_equal(__y); }
│ │ │ +
175#endif
│ │ │ +
176
│ │ │ +
177#if __cplusplus > 201703L && __cpp_lib_concepts
│ │ │ +
178 [[nodiscard]]
│ │ │ +
179 friend bool
│ │ │ +
180 operator==(const istream_iterator& __i, default_sentinel_t) noexcept
│ │ │ +
181 { return !__i._M_stream; }
│ │ │ +
182#endif
│ │ │ +
183 };
│ │ │ +
│ │ │ +
184
│ │ │ +
185 /**
│ │ │ +
186 * @brief Provides output iterator semantics for streams.
│ │ │ +
187 *
│ │ │ +
188 * This class provides an iterator to write to an ostream. The type Tp is
│ │ │ +
189 * the only type written by this iterator and there must be an
│ │ │ +
190 * operator<<(Tp) defined.
│ │ │ +
191 *
│ │ │ +
192 * @tparam _Tp The type to write to the ostream.
│ │ │ +
193 * @tparam _CharT The ostream char_type.
│ │ │ +
194 * @tparam _Traits The ostream char_traits.
│ │ │ +
195 */
│ │ │ +
196 template<typename _Tp, typename _CharT = char,
│ │ │ +
197 typename _Traits = char_traits<_CharT> >
│ │ │ +
│ │ │ + │ │ │ +
199 : public iterator<output_iterator_tag, void, void, void, void>
│ │ │ +
200 {
│ │ │ +
201 public:
│ │ │ +
202 ///@{
│ │ │ +
203 /// Public typedef
│ │ │ +
204#if __cplusplus > 201703L
│ │ │ + │ │ │ +
206#endif
│ │ │ +
207 typedef _CharT char_type;
│ │ │ +
208 typedef _Traits traits_type;
│ │ │ + │ │ │ +
210 ///@}
│ │ │ +
211
│ │ │ +
212 private:
│ │ │ +
213 ostream_type* _M_stream;
│ │ │ +
214 const _CharT* _M_string;
│ │ │ +
215
│ │ │ +
216 public:
│ │ │ +
217 /// Construct from an ostream.
│ │ │ +
│ │ │ + │ │ │ +
219 : _M_stream(std::__addressof(__s)), _M_string(0) {}
│ │ │ +
│ │ │ +
220
│ │ │ +
221 /**
│ │ │ +
222 * Construct from an ostream.
│ │ │ +
223 *
│ │ │ +
224 * The delimiter string @a c is written to the stream after every Tp
│ │ │ +
225 * written to the stream. The delimiter is not copied, and thus must
│ │ │ +
226 * not be destroyed while this iterator is in use.
│ │ │ +
227 *
│ │ │ +
228 * @param __s Underlying ostream to write to.
│ │ │ +
229 * @param __c CharT delimiter string to insert.
│ │ │ +
230 */
│ │ │ +
│ │ │ + │ │ │ +
232 : _M_stream(std::__addressof(__s)), _M_string(__c) { }
│ │ │ +
│ │ │ +
233
│ │ │ +
234 /// Copy constructor.
│ │ │ +
│ │ │ + │ │ │ +
236 : _M_stream(__obj._M_stream), _M_string(__obj._M_string) { }
│ │ │ +
│ │ │ +
237
│ │ │ +
238#if __cplusplus >= 201103L
│ │ │ +
239 ostream_iterator& operator=(const ostream_iterator&) = default;
│ │ │ +
240#endif
│ │ │ +
241
│ │ │ +
242 /// Writes @a value to underlying ostream using operator<<. If
│ │ │ +
243 /// constructed with delimiter string, writes delimiter to ostream.
│ │ │ + │ │ │ +
│ │ │ +
245 operator=(const _Tp& __value)
│ │ │ +
246 {
│ │ │ +
247 __glibcxx_requires_cond(_M_stream != 0,
│ │ │ +
248 _M_message(__gnu_debug::__msg_output_ostream)
│ │ │ +
249 ._M_iterator(*this));
│ │ │ +
250 *_M_stream << __value;
│ │ │ +
251 if (_M_string)
│ │ │ +
252 *_M_stream << _M_string;
│ │ │ +
253 return *this;
│ │ │ +
254 }
│ │ │ +
│ │ │ +
255
│ │ │ +
256 _GLIBCXX_NODISCARD
│ │ │ + │ │ │ +
258 operator*() _GLIBCXX_NOEXCEPT
│ │ │ +
259 { return *this; }
│ │ │ +
260
│ │ │ +
261 ostream_iterator&
│ │ │ +
262 operator++() _GLIBCXX_NOEXCEPT
│ │ │ +
263 { return *this; }
│ │ │ +
264
│ │ │ + │ │ │ +
266 operator++(int) _GLIBCXX_NOEXCEPT
│ │ │ +
267 { return *this; }
│ │ │ +
268 };
│ │ │ +
│ │ │ +
269#pragma GCC diagnostic pop
│ │ │ +
270
│ │ │ +
271 /// @} group iterators
│ │ │ +
272
│ │ │ +
273_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
274} // namespace
│ │ │ +
275
│ │ │ +
276#endif
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:52
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
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
│ │ │ - │ │ │ +
is_nothrow_default_constructible
Definition type_traits:1245
│ │ │ +
is_nothrow_copy_constructible
Definition type_traits:1254
│ │ │ +
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.
│ │ │ +
ostream_iterator(ostream_type &__s, const _CharT *__c) noexcept
│ │ │ +
_Traits traits_type
Public typedef.
│ │ │ +
ostream_iterator & operator=(const _Tp &__value)
Writes value to underlying ostream using operator<<. If constructed with delimiter string,...
│ │ │ +
basic_ostream< _CharT, _Traits > ostream_type
Public typedef.
│ │ │ +
ostream_iterator(const ostream_iterator &__obj) noexcept
Copy constructor.
│ │ │ + │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -this_thread_sleep.h │ │ │ │ +stream_iterator.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// Stream iterators │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2008-2025 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2001-2025 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,133 +21,331 @@ │ │ │ │ 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/stream_iterator.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{iterator} │ │ │ │ 28 */ │ │ │ │ 29 │ │ │ │ -30#ifndef _GLIBCXX_THIS_THREAD_SLEEP_H │ │ │ │ -31#define _GLIBCXX_THIS_THREAD_SLEEP_H 1 │ │ │ │ +30#ifndef _STREAM_ITERATOR_H │ │ │ │ +31#define _STREAM_ITERATOR_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_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 this_thread │ │ │ │ -59 { │ │ │ │ -60#ifndef _GLIBCXX_NO_SLEEP │ │ │ │ -61 │ │ │ │ -62#ifndef _GLIBCXX_USE_NANOSLEEP │ │ │ │ -63 void │ │ │ │ -64 __sleep_for(_c_h_r_o_n_o_:_:_s_e_c_o_n_d_s, _c_h_r_o_n_o_:_:_n_a_n_o_s_e_c_o_n_d_s); │ │ │ │ -65#endif │ │ │ │ -66 │ │ │ │ -67 /// this_thread::sleep_for │ │ │ │ -68 template │ │ │ │ -69 inline void │ │ │ │ -_7_0 _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_>& _____r_t_i_m_e) │ │ │ │ -71 { │ │ │ │ -72 if (_____r_t_i_m_e <= _____r_t_i_m_e.zero()) │ │ │ │ -73 return; │ │ │ │ -74 auto _____s = chrono::duration_cast(_____r_t_i_m_e); │ │ │ │ -75 auto _____n_s = chrono::duration_cast(_____r_t_i_m_e - _____s); │ │ │ │ -76#ifdef _GLIBCXX_USE_NANOSLEEP │ │ │ │ -77 struct ::timespec _____t_s = │ │ │ │ -78 { │ │ │ │ -79 static_cast<_s_t_d_:_:_t_i_m_e___t>(_____s.count()), │ │ │ │ -80 static_cast(_____n_s.count()) │ │ │ │ -81 }; │ │ │ │ -82 while (::nanosleep(&_____t_s, &_____t_s) == -1 && errno == _E_I_N_T_R) │ │ │ │ -83 { } │ │ │ │ -84#else │ │ │ │ -85 _____s_l_e_e_p___f_o_r(_____s, _____n_s); │ │ │ │ -86#endif │ │ │ │ -87 } │ │ │ │ -88 │ │ │ │ -89 /// this_thread::sleep_until │ │ │ │ -90 template │ │ │ │ -91 inline void │ │ │ │ -_9_2 _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_>& _____a_t_i_m_e) │ │ │ │ -93 { │ │ │ │ -94#if __cplusplus > 201703L │ │ │ │ -95 static_assert(chrono::is_clock_v<_Clock>); │ │ │ │ -96#endif │ │ │ │ -97 auto _____n_o_w = _Clock::now(); │ │ │ │ -98 if (_Clock::is_steady) │ │ │ │ -99 { │ │ │ │ -100 if (_____n_o_w < _____a_t_i_m_e) │ │ │ │ -101 _s_l_e_e_p___f_o_r(_____a_t_i_m_e - _____n_o_w); │ │ │ │ -102 return; │ │ │ │ -103 } │ │ │ │ -104 while (_____n_o_w < _____a_t_i_m_e) │ │ │ │ -105 { │ │ │ │ -106 _s_l_e_e_p___f_o_r(_____a_t_i_m_e - _____n_o_w); │ │ │ │ -107 _____n_o_w = _Clock::now(); │ │ │ │ -108 } │ │ │ │ -109 } │ │ │ │ -110#endif // ! NO_SLEEP │ │ │ │ -111 } // namespace this_thread │ │ │ │ -112 │ │ │ │ -113 /// @} │ │ │ │ -114 │ │ │ │ -115_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -116} // namespace │ │ │ │ -117#endif // C++11 │ │ │ │ +37#include <_i_o_s_f_w_d> │ │ │ │ +38#include <_b_i_t_s_/_m_o_v_e_._h> │ │ │ │ +39#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> │ │ │ │ +40#include <_d_e_b_u_g_/_d_e_b_u_g_._h> │ │ │ │ +41 │ │ │ │ +42namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +43{ │ │ │ │ +44_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +45 │ │ │ │ +46 /** │ │ │ │ +47 * @addtogroup iterators │ │ │ │ +48 * @{ │ │ │ │ +49 */ │ │ │ │ +50 │ │ │ │ +51// Ignore warnings about std::iterator. │ │ │ │ +52#pragma GCC diagnostic push │ │ │ │ +53#pragma GCC diagnostic ignored "-Wdeprecated-declarations" │ │ │ │ +54 │ │ │ │ +55 /// Provides input iterator semantics for streams. │ │ │ │ +56 template, typename _Dist = ptrdiff_t> │ │ │ │ +_5_8 class _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ +59 : public _i_t_e_r_a_t_o_r │ │ │ │ +60 { │ │ │ │ +61 public: │ │ │ │ +62 typedef _CharT char_type; │ │ │ │ +63 typedef _Traits traits_type; │ │ │ │ +64 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; │ │ │ │ +65 │ │ │ │ +66 private: │ │ │ │ +67 _i_s_t_r_e_a_m___t_y_p_e* _M_stream; │ │ │ │ +68 _Tp _M_value; │ │ │ │ +69 // This bool becomes false at end-of-stream. It should be sufficient to │ │ │ │ +70 // check _M_stream != nullptr instead, but historically we did not set │ │ │ │ +71 // _M_stream to null when reaching the end, so we need to keep this flag. │ │ │ │ +72 bool _M_ok; │ │ │ │ +73 │ │ │ │ +74 public: │ │ │ │ +75 /// Construct end of input stream iterator. │ │ │ │ +_7_6 ___G_L_I_B_C_X_X___C_O_N_S_T_E_X_P_R _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r() │ │ │ │ +77 ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T___I_F(_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<_Tp>::value) │ │ │ │ +78 : _M_stream(0), _M_value(), _M_ok(_f_a_l_s_e) {} │ │ │ │ +79 │ │ │ │ +80 /// Construct start of input stream iterator. │ │ │ │ +_8_1 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r(_i_s_t_r_e_a_m___t_y_p_e& _____s) │ │ │ │ +82 : _M_stream(_s_t_d::_____a_d_d_r_e_s_s_o_f(_____s)), _M_ok(_t_r_u_e) │ │ │ │ +83 { _M_read(); } │ │ │ │ +84 │ │ │ │ +85 ___G_L_I_B_C_X_X___C_O_N_S_T_E_X_P_R │ │ │ │ +86 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r(const _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& _____o_b_j) │ │ │ │ +87 ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T___I_F(_i_s___n_o_t_h_r_o_w___c_o_p_y___c_o_n_s_t_r_u_c_t_i_b_l_e_<___T_p_>_:_:_v_a_l_u_e) │ │ │ │ +88 : _M_stream(_____o_b_j._M_stream), _M_value(_____o_b_j._M_value), │ │ │ │ +89 _M_ok(_____o_b_j._M_ok) │ │ │ │ +90 { } │ │ │ │ +91 │ │ │ │ +92#if __cplusplus > 201703L && __cpp_lib_concepts │ │ │ │ +93 constexpr │ │ │ │ +94 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r(default_sentinel_t) │ │ │ │ +95 noexcept(is_nothrow_default_constructible_v<_Tp>) │ │ │ │ +96 : _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r() { } │ │ │ │ +97#endif │ │ │ │ +98 │ │ │ │ +99#if __cplusplus >= 201103L │ │ │ │ +100 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& operator=(const _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r&) = default; │ │ │ │ +101 ~istream_iterator() = default; │ │ │ │ +102#endif │ │ │ │ +103 │ │ │ │ +104 _GLIBCXX_NODISCARD │ │ │ │ +105 const _Tp& │ │ │ │ +106 operator*() const _GLIBCXX_NOEXCEPT │ │ │ │ +107 { │ │ │ │ +108 __glibcxx_requires_cond(_M_ok, │ │ │ │ +109 _M_message(__gnu_debug::__msg_deref_istream) │ │ │ │ +110 ._M_iterator(*this)); │ │ │ │ +111 return _M_value; │ │ │ │ +112 } │ │ │ │ +113 │ │ │ │ +114 _GLIBCXX_NODISCARD │ │ │ │ +115 const _Tp* │ │ │ │ +116 operator->() const _GLIBCXX_NOEXCEPT │ │ │ │ +117 { return _s_t_d_:_:_____a_d_d_r_e_s_s_o_f((operator*())); } │ │ │ │ 118 │ │ │ │ -119#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_:_:_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_:_:_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 │ │ │ │ +119 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& │ │ │ │ +120 operator++() │ │ │ │ +121 { │ │ │ │ +122 __glibcxx_requires_cond(_M_ok, │ │ │ │ +123 _M_message(__gnu_debug::__msg_inc_istream) │ │ │ │ +124 ._M_iterator(*this)); │ │ │ │ +125 _M_read(); │ │ │ │ +126 return *this; │ │ │ │ +127 } │ │ │ │ +128 │ │ │ │ +129 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ +130 operator++(int) │ │ │ │ +131 { │ │ │ │ +132 __glibcxx_requires_cond(_M_ok, │ │ │ │ +133 _M_message(__gnu_debug::__msg_inc_istream) │ │ │ │ +134 ._M_iterator(*this)); │ │ │ │ +135 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r __tmp = *this; │ │ │ │ +136 _M_read(); │ │ │ │ +137 return __tmp; │ │ │ │ +138 } │ │ │ │ +139 │ │ │ │ +140 private: │ │ │ │ +141 bool │ │ │ │ +142 _M_equal(const _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& __x) const _GLIBCXX_NOEXCEPT │ │ │ │ +143 { │ │ │ │ +144 // Ideally this would just return _M_stream == __x._M_stream, │ │ │ │ +145 // but code compiled with old versions never sets _M_stream to null. │ │ │ │ +146 return (_M_ok == __x._M_ok) && (!_M_ok || _M_stream == __x._M_stream); │ │ │ │ +147 } │ │ │ │ +148 │ │ │ │ +149 void │ │ │ │ +150 _M_read() │ │ │ │ +151 { │ │ │ │ +152 if (_M_stream && !(*_M_stream >> _M_value)) │ │ │ │ +153 { │ │ │ │ +154 _M_stream = 0; │ │ │ │ +155 _M_ok = false; │ │ │ │ +156 } │ │ │ │ +157 } │ │ │ │ +158 │ │ │ │ +159 /// Return true if the iterators refer to the same stream, │ │ │ │ +160 /// or are both at end-of-stream. │ │ │ │ +161 _GLIBCXX_NODISCARD │ │ │ │ +162 friend bool │ │ │ │ +_1_6_3 _o_p_e_r_a_t_o_r_=_=(const _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& __x, const _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& __y) │ │ │ │ +164 ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ +165 { return __x._M_equal(__y); } │ │ │ │ +166 │ │ │ │ +167#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ +168 /// Return true if the iterators refer to different streams, │ │ │ │ +169 /// or if one is at end-of-stream and the other is not. │ │ │ │ +170 _GLIBCXX_NODISCARD │ │ │ │ +171 friend bool │ │ │ │ +172 operator!=(const _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& __x, const _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& __y) │ │ │ │ +173 ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ +174 { return !__x._M_equal(__y); } │ │ │ │ +175#endif │ │ │ │ +176 │ │ │ │ +177#if __cplusplus > 201703L && __cpp_lib_concepts │ │ │ │ +178 [[nodiscard]] │ │ │ │ +179 friend bool │ │ │ │ +180 _o_p_e_r_a_t_o_r_=_=(const _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& __i, default_sentinel_t) noexcept │ │ │ │ +181 { return !__i._M_stream; } │ │ │ │ +182#endif │ │ │ │ +183 }; │ │ │ │ +184 │ │ │ │ +185 /** │ │ │ │ +186 * @brief Provides output iterator semantics for streams. │ │ │ │ +187 * │ │ │ │ +188 * This class provides an iterator to write to an ostream. The type Tp is │ │ │ │ +189 * the only type written by this iterator and there must be an │ │ │ │ +190 * operator<<(Tp) defined. │ │ │ │ +191 * │ │ │ │ +192 * @tparam _Tp The type to write to the ostream. │ │ │ │ +193 * @tparam _CharT The ostream char_type. │ │ │ │ +194 * @tparam _Traits The ostream char_traits. │ │ │ │ +195 */ │ │ │ │ +196 template > │ │ │ │ +_1_9_8 class _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ +199 : public _i_t_e_r_a_t_o_r │ │ │ │ +200 { │ │ │ │ +201 public: │ │ │ │ +202 ///@{ │ │ │ │ +203 /// Public typedef │ │ │ │ +204#if __cplusplus > 201703L │ │ │ │ +_2_0_5 using _d_i_f_f_e_r_e_n_c_e___t_y_p_e = _p_t_r_d_i_f_f___t; │ │ │ │ +206#endif │ │ │ │ +_2_0_7 typedef _CharT _c_h_a_r___t_y_p_e; │ │ │ │ +_2_0_8 typedef _Traits _t_r_a_i_t_s___t_y_p_e; │ │ │ │ +_2_0_9 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; │ │ │ │ +210 ///@} │ │ │ │ +211 │ │ │ │ +212 private: │ │ │ │ +213 _o_s_t_r_e_a_m___t_y_p_e* _M_stream; │ │ │ │ +214 const _CharT* _M_string; │ │ │ │ +215 │ │ │ │ +216 public: │ │ │ │ +217 /// Construct from an ostream. │ │ │ │ +_2_1_8 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r(_o_s_t_r_e_a_m___t_y_p_e& _____s) ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ +219 : _M_stream(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____s)), _M_string(0) {} │ │ │ │ +220 │ │ │ │ +221 /** │ │ │ │ +222 * Construct from an ostream. │ │ │ │ +223 * │ │ │ │ +224 * The delimiter string @a c is written to the stream after every Tp │ │ │ │ +225 * written to the stream. The delimiter is not copied, and thus must │ │ │ │ +226 * not be destroyed while this iterator is in use. │ │ │ │ +227 * │ │ │ │ +228 * @param __s Underlying ostream to write to. │ │ │ │ +229 * @param __c CharT delimiter string to insert. │ │ │ │ +230 */ │ │ │ │ +_2_3_1 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r(_o_s_t_r_e_a_m___t_y_p_e& _____s, const _CharT* __c) ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ +232 : _M_stream(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____s)), _M_string(__c) { } │ │ │ │ +233 │ │ │ │ +234 /// Copy constructor. │ │ │ │ +_2_3_5 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r(const _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r& _____o_b_j) ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ +236 : _M_stream(_____o_b_j._M_stream), _M_string(_____o_b_j._M_string) { } │ │ │ │ +237 │ │ │ │ +238#if __cplusplus >= 201103L │ │ │ │ +239 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r& operator=(const _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r&) = default; │ │ │ │ +240#endif │ │ │ │ +241 │ │ │ │ +242 /// Writes @a value to underlying ostream using operator<<. If │ │ │ │ +243 /// constructed with delimiter string, writes delimiter to ostream. │ │ │ │ +244 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r& │ │ │ │ +_2_4_5 _o_p_e_r_a_t_o_r_=(const _Tp& __value) │ │ │ │ +246 { │ │ │ │ +247 __glibcxx_requires_cond(_M_stream != 0, │ │ │ │ +248 _M_message(__gnu_debug::__msg_output_ostream) │ │ │ │ +249 ._M_iterator(*this)); │ │ │ │ +250 *_M_stream << __value; │ │ │ │ +251 if (_M_string) │ │ │ │ +252 *_M_stream << _M_string; │ │ │ │ +253 return *this; │ │ │ │ +254 } │ │ │ │ +255 │ │ │ │ +256 _GLIBCXX_NODISCARD │ │ │ │ +257 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r& │ │ │ │ +258 operator*() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ +259 { return *this; } │ │ │ │ +260 │ │ │ │ +261 ostream_iterator& │ │ │ │ +262 operator++() _GLIBCXX_NOEXCEPT │ │ │ │ +263 { return *this; } │ │ │ │ +264 │ │ │ │ +265 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r& │ │ │ │ +266 operator++(int) _GLIBCXX_NOEXCEPT │ │ │ │ +267 { return *this; } │ │ │ │ +268 }; │ │ │ │ +269#pragma GCC diagnostic pop │ │ │ │ +270 │ │ │ │ +271 /// @} group iterators │ │ │ │ +272 │ │ │ │ +273_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +274} // namespace │ │ │ │ +275 │ │ │ │ +276#endif │ │ │ │ +_i_o_s_f_w_d │ │ │ │ +_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_:_:_____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_:_:_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_:_9_2 │ │ │ │ -_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_:_7_0 │ │ │ │ -_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_:_:_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_2_4_5 │ │ │ │ +_s_t_d_:_:_i_s___n_o_t_h_r_o_w___c_o_p_y___c_o_n_s_t_r_u_c_t_i_b_l_e │ │ │ │ +is_nothrow_copy_constructible │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_2_5_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_:_:_i_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ +Provides input iterator semantics for streams. │ │ │ │ +DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_6_0 │ │ │ │ +_s_t_d_:_:_i_s_t_r_e_a_m___i_t_e_r_a_t_o_r_:_:_i_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ +istream_iterator(istream_type &__s) │ │ │ │ +Construct start of input stream iterator. │ │ │ │ +DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_8_1 │ │ │ │ +_s_t_d_:_:_i_s_t_r_e_a_m___i_t_e_r_a_t_o_r_:_:_i_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ +constexpr istream_iterator() noexcept(/*conditional */) │ │ │ │ +Construct end of input stream iterator. │ │ │ │ +DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_7_6 │ │ │ │ +_s_t_d_:_:_i_s_t_r_e_a_m___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_=_= │ │ │ │ +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. │ │ │ │ +DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_1_6_3 │ │ │ │ +_s_t_d_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ +Provides output iterator semantics for streams. │ │ │ │ +DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_2_0_0 │ │ │ │ +_s_t_d_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r_:_:_c_h_a_r___t_y_p_e │ │ │ │ +_CharT char_type │ │ │ │ +Public typedef. │ │ │ │ +DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_2_0_7 │ │ │ │ +_s_t_d_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ +ostream_iterator(ostream_type &__s) noexcept │ │ │ │ +Construct from an ostream. │ │ │ │ +DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_2_1_8 │ │ │ │ +_s_t_d_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ +ostream_iterator(ostream_type &__s, const _CharT *__c) noexcept │ │ │ │ +DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_2_3_1 │ │ │ │ +_s_t_d_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r_:_:_t_r_a_i_t_s___t_y_p_e │ │ │ │ +_Traits traits_type │ │ │ │ +Public typedef. │ │ │ │ +DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_2_0_8 │ │ │ │ +_s_t_d_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ +ostream_iterator & operator=(const _Tp &__value) │ │ │ │ +Writes value to underlying ostream using operator<<. If constructed with │ │ │ │ +delimiter string,... │ │ │ │ +DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_2_4_5 │ │ │ │ +_s_t_d_:_:_o_s_t_r_e_a_m___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 typedef. │ │ │ │ +DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_2_0_9 │ │ │ │ +_s_t_d_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ +ostream_iterator(const ostream_iterator &__obj) noexcept │ │ │ │ +Copy constructor. │ │ │ │ +DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_2_3_5 │ │ │ │ _s_t_d_:_:_a_u_t_o___p_t_r___r_e_f │ │ │ │ DDeeffiinniittiioonn _a_u_t_o___p_t_r_._h_:_4_9 │ │ │ │ * _b_i_t_s │ │ │ │ - * _t_h_i_s___t_h_r_e_a_d___s_l_e_e_p_._h │ │ │ │ + * _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00398.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stringfwd.h File Reference │ │ │ +libstdc++: std_mutex.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -46,46 +46,58 @@ │ │ │ /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ │ │ │ $(document).ready(function(){initNavTree('a00398.html',''); initResizable(); }); │ │ │ /* @license-end */ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ +Classes | │ │ │ Namespaces | │ │ │ -Typedefs
│ │ │ -
stringfwd.h File Reference
│ │ │ +Variables
│ │ │ +
std_mutex.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ +Classes

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
 
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ -Typedefs

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

│ │ │ +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 <string>.

│ │ │ +

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

│ │ │ │ │ │ -

Definition in file stringfwd.h.

│ │ │ +

Definition in file std_mutex.h.

│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,23 +1,32 @@ │ │ │ │ libstdc++ │ │ │ │ -_N_a_m_e_s_p_a_c_e_s | _T_y_p_e_d_e_f_s │ │ │ │ -stringfwd.h File Reference │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _V_a_r_i_a_b_l_e_s │ │ │ │ +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_:_:_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 │ │ │ │   │ │ │ │ -TTyyppeeddeeffss │ │ │ │ - _t_y_p_e_d_e_f _b_a_s_i_c___s_t_r_i_n_g< char >  _s_t_d_:_:_s_t_r_i_n_g │ │ │ │ -  │ │ │ │ -_t_y_p_e_d_e_f _b_a_s_i_c___s_t_r_i_n_g< _c_h_a_r_1_6___t >  _s_t_d_:_:_u_1_6_s_t_r_i_n_g │ │ │ │ +VVaarriiaabblleess │ │ │ │ + _c_o_n_s_t_e_x_p_r _a_d_o_p_t___l_o_c_k___t  _s_t_d_:_:_a_d_o_p_t___l_o_c_k │ │ │ │   │ │ │ │ -_t_y_p_e_d_e_f _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 │ │ │ │ + _c_o_n_s_t_e_x_p_r _d_e_f_e_r___l_o_c_k___t  _s_t_d_:_:_d_e_f_e_r___l_o_c_k │ │ │ │   │ │ │ │ - _t_y_p_e_d_e_f _b_a_s_i_c___s_t_r_i_n_g< wchar_t >  _s_t_d_:_:_w_s_t_r_i_n_g │ │ │ │ +_c_o_n_s_t_e_x_p_r _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_r_i_n_g_f_w_d_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _s_t_d___m_u_t_e_x_._h. │ │ │ │ * _b_i_t_s │ │ │ │ - * _s_t_r_i_n_g_f_w_d_._h │ │ │ │ + * _s_t_d___m_u_t_e_x_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00398.js │ │ │ ├── js-beautify {} │ │ │ │ @@ -1,6 +1,5 @@ │ │ │ │ var a00398 = [ │ │ │ │ - ["string", "a00398.html#ga32db3d9898c44d3b3a578b560f7758cc", null], │ │ │ │ - ["u16string", "a00398.html#ga957ec6dee9435a81e37f7f70e711bf09", null], │ │ │ │ - ["u32string", "a00398.html#ga83ce9bd7fd0896013d6ef39113119bf5", null], │ │ │ │ - ["wstring", "a00398.html#gacc5a707e71ec50089cb9f653282f22f7", null] │ │ │ │ + ["adopt_lock", "a00398.html#gad21e19f3b9b1166718c228219723e130", null], │ │ │ │ + ["defer_lock", "a00398.html#gaef1e52b34e2d2d6e3850bbd28ff7546a", null], │ │ │ │ + ["try_to_lock", "a00398.html#ga845da3c3459b8dc4c6f690039b797dfc", null] │ │ │ │ ]; │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00398_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stringfwd.h Source File │ │ │ +libstdc++: std_mutex.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,20 +45,20 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
stringfwd.h
│ │ │ +
std_mutex.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// <string> Forward declarations -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// std::mutex implementation -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2001-2025 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2003-2025 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
│ │ │ @@ -72,104 +72,282 @@ │ │ │
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/std_mutex.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{mutex}
│ │ │
28 */
│ │ │
29
│ │ │ -
30//
│ │ │ -
31// ISO C++ 14882: 21 Strings library
│ │ │ -
32//
│ │ │ -
33
│ │ │ -
34#ifndef _STRINGFWD_H
│ │ │ -
35#define _STRINGFWD_H 1
│ │ │ +
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#ifdef _GLIBCXX_SYSHDR
│ │ │ -
38#pragma GCC system_header
│ │ │ -
39#endif
│ │ │ +
37#if __cplusplus < 201103L
│ │ │ +
38# include <bits/c++0x_warning.h>
│ │ │ +
39#else
│ │ │
40
│ │ │ -
41#include <bits/c++config.h>
│ │ │ -
42#include <bits/memoryfwd.h>
│ │ │ -
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;
│ │ │ +
41#include <errno.h> // EBUSY
│ │ │ +
42#include <bits/functexcept.h>
│ │ │ +
43#include <bits/gthr.h>
│ │ │ +
44
│ │ │ +
45namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
46{
│ │ │ +
47_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
48
│ │ │ +
49 /**
│ │ │ +
50 * @defgroup mutexes Mutexes
│ │ │ +
51 * @ingroup concurrency
│ │ │ +
52 *
│ │ │ +
53 * Classes for mutex support.
│ │ │ +
54 * @{
│ │ │ +
55 */
│ │ │
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
│ │ │ +
57#ifdef _GLIBCXX_HAS_GTHREADS
│ │ │ +
58 /// @cond undocumented
│ │ │ +
59
│ │ │ +
60 // Common base class for std::mutex and std::timed_mutex
│ │ │ +
61 class __mutex_base
│ │ │ +
62 {
│ │ │ +
63 protected:
│ │ │ +
64 typedef __gthread_mutex_t __native_type;
│ │ │ +
65
│ │ │ +
66#ifdef __GTHREAD_MUTEX_INIT
│ │ │ +
67 __native_type _M_mutex = __GTHREAD_MUTEX_INIT;
│ │ │ +
68
│ │ │ +
69 constexpr __mutex_base() noexcept = default;
│ │ │ +
70#else
│ │ │ +
71 __native_type _M_mutex;
│ │ │ +
72
│ │ │ +
73 __mutex_base() noexcept
│ │ │ +
74 {
│ │ │ +
75 // XXX EAGAIN, ENOMEM, EPERM, EBUSY(may), EINVAL(may)
│ │ │ +
76 __GTHREAD_MUTEX_INIT_FUNCTION(&_M_mutex);
│ │ │ +
77 }
│ │ │ +
78
│ │ │ +
79 ~__mutex_base() noexcept { __gthread_mutex_destroy(&_M_mutex); }
│ │ │ +
80#endif
│ │ │ +
81
│ │ │ +
82 __mutex_base(const __mutex_base&) = delete;
│ │ │ +
83 __mutex_base& operator=(const __mutex_base&) = delete;
│ │ │ +
84 };
│ │ │ +
85 /// @endcond
│ │ │ +
86
│ │ │ +
87 /** The standard mutex type.
│ │ │ +
88 *
│ │ │ +
89 * A simple, non-recursive, non-timed mutex.
│ │ │ +
90 *
│ │ │ +
91 * Do not call `lock()` and `unlock()` directly, use a scoped lock type
│ │ │ +
92 * such as `std::unique_lock`, `std::lock_guard`, or (since C++17)
│ │ │ +
93 * `std::scoped_lock`.
│ │ │ +
94 *
│ │ │ +
95 * @headerfile mutex
│ │ │ +
96 * @since C++11
│ │ │ +
97 */
│ │ │ +
│ │ │ +
98 class mutex : private __mutex_base
│ │ │ +
99 {
│ │ │ +
100 public:
│ │ │ + │ │ │ +
102
│ │ │ +
103#ifdef __GTHREAD_MUTEX_INIT
│ │ │ +
104 constexpr
│ │ │ +
105#endif
│ │ │ +
106 mutex() noexcept = default;
│ │ │ +
107 ~mutex() = default;
│ │ │ +
108
│ │ │ +
109 mutex(const mutex&) = delete;
│ │ │ +
110 mutex& operator=(const mutex&) = delete;
│ │ │ +
111
│ │ │ +
112 void
│ │ │ +
113 lock()
│ │ │ +
114 {
│ │ │ +
115 int __e = __gthread_mutex_lock(&_M_mutex);
│ │ │ +
116
│ │ │ +
117 // EINVAL, EAGAIN, EBUSY, EINVAL, EDEADLK(may)
│ │ │ +
118 if (__e)
│ │ │ +
119 __throw_system_error(__e);
│ │ │ +
120 }
│ │ │ +
121
│ │ │ +
122 _GLIBCXX_NODISCARD
│ │ │ +
123 bool
│ │ │ +
124 try_lock() noexcept
│ │ │ +
125 {
│ │ │ +
126 // XXX EINVAL, EAGAIN, EBUSY
│ │ │ +
127 return !__gthread_mutex_trylock(&_M_mutex);
│ │ │ +
128 }
│ │ │ +
129
│ │ │ +
130 void
│ │ │ +
131 unlock()
│ │ │ +
132 {
│ │ │ +
133 // XXX EINVAL, EAGAIN, EPERM
│ │ │ +
134 __gthread_mutex_unlock(&_M_mutex);
│ │ │ +
135 }
│ │ │ +
136
│ │ │ + │ │ │ +
138 native_handle() noexcept
│ │ │ +
139 { return &_M_mutex; }
│ │ │ +
140 };
│ │ │ +
│ │ │ +
141
│ │ │ +
142 /// @cond undocumented
│ │ │ +
143
│ │ │ +
144 // Implementation details for std::condition_variable
│ │ │ +
145 class __condvar
│ │ │ +
146 {
│ │ │ +
147 using timespec = __gthread_time_t;
│ │ │ +
148
│ │ │ +
149 public:
│ │ │ +
150 __condvar() noexcept
│ │ │ +
151 {
│ │ │ +
152#ifndef __GTHREAD_COND_INIT
│ │ │ + │ │ │ +
154#endif
│ │ │ +
155 }
│ │ │ +
156
│ │ │ +
157 ~__condvar()
│ │ │ +
158 {
│ │ │ +
159 int __e __attribute__((__unused__)) = __gthread_cond_destroy(&_M_cond);
│ │ │ +
160 __glibcxx_assert(__e != EBUSY); // threads are still blocked
│ │ │ +
161 }
│ │ │ +
162
│ │ │ +
163 __condvar(const __condvar&) = delete;
│ │ │ +
164 __condvar& operator=(const __condvar&) = delete;
│ │ │ +
165
│ │ │ +
166 __gthread_cond_t* native_handle() noexcept { return &_M_cond; }
│ │ │ +
167
│ │ │ +
168 // Expects: Calling thread has locked __m.
│ │ │ +
169 void
│ │ │ +
170 wait(mutex& __m)
│ │ │ +
171 {
│ │ │ +
172 int __e __attribute__((__unused__))
│ │ │ +
173 = __gthread_cond_wait(&_M_cond, __m.native_handle());
│ │ │ +
174 __glibcxx_assert(__e == 0);
│ │ │ +
175 }
│ │ │ +
176
│ │ │ +
177 void
│ │ │ +
178 wait_until(mutex& __m, timespec& __abs_time)
│ │ │ +
179 {
│ │ │ +
180 __gthread_cond_timedwait(&_M_cond, __m.native_handle(), &__abs_time);
│ │ │ +
181 }
│ │ │ +
182
│ │ │ +
183#ifdef _GLIBCXX_USE_PTHREAD_COND_CLOCKWAIT
│ │ │ +
184 void
│ │ │ +
185 wait_until(mutex& __m, clockid_t __clock, timespec& __abs_time)
│ │ │ +
186 {
│ │ │ +
187 pthread_cond_clockwait(&_M_cond, __m.native_handle(), __clock,
│ │ │ +
188 &__abs_time);
│ │ │ +
189 }
│ │ │ +
190#endif
│ │ │ +
191
│ │ │ +
192 void
│ │ │ +
193 notify_one() noexcept
│ │ │ +
194 {
│ │ │ +
195 int __e __attribute__((__unused__)) = __gthread_cond_signal(&_M_cond);
│ │ │ +
196 __glibcxx_assert(__e == 0);
│ │ │ +
197 }
│ │ │ +
198
│ │ │ +
199 void
│ │ │ +
200 notify_all() noexcept
│ │ │ +
201 {
│ │ │ +
202 int __e __attribute__((__unused__)) = __gthread_cond_broadcast(&_M_cond);
│ │ │ +
203 __glibcxx_assert(__e == 0);
│ │ │ +
204 }
│ │ │ +
205
│ │ │ +
206 protected:
│ │ │ +
207#ifdef __GTHREAD_COND_INIT
│ │ │ +
208 __gthread_cond_t _M_cond = __GTHREAD_COND_INIT;
│ │ │ +
209#else
│ │ │ +
210 __gthread_cond_t _M_cond;
│ │ │ +
211#endif
│ │ │ +
212 };
│ │ │ +
213 /// @endcond
│ │ │ +
214
│ │ │ +
215#endif // _GLIBCXX_HAS_GTHREADS
│ │ │ +
216
│ │ │ +
217 /// Do not acquire ownership of the mutex.
│ │ │ +
218 struct defer_lock_t { explicit defer_lock_t() = default; };
│ │ │ +
219
│ │ │ +
220 /// Try to acquire ownership of the mutex without blocking.
│ │ │ +
221 struct try_to_lock_t { explicit try_to_lock_t() = default; };
│ │ │ +
222
│ │ │ +
223 /// Assume the calling thread has already obtained mutex ownership
│ │ │ +
224 /// and manage it.
│ │ │ +
225 struct adopt_lock_t { explicit adopt_lock_t() = default; };
│ │ │ +
226
│ │ │ +
227 /// Tag used to prevent a scoped lock from acquiring ownership of a mutex.
│ │ │ + │ │ │ +
229
│ │ │ +
230 /// Tag used to prevent a scoped lock from blocking if a mutex is locked.
│ │ │ + │ │ │ +
232
│ │ │ +
233 /// Tag used to make a scoped lock take ownership of a locked mutex.
│ │ │ + │ │ │ +
235
│ │ │ +
236 /** @brief A simple scoped lock type.
│ │ │ +
237 *
│ │ │ +
238 * A lock_guard controls mutex ownership within a scope, releasing
│ │ │ +
239 * ownership in the destructor.
│ │ │ +
240 *
│ │ │ +
241 * @headerfile mutex
│ │ │ +
242 * @since C++11
│ │ │ +
243 */
│ │ │ +
244 template<typename _Mutex>
│ │ │ +
│ │ │ + │ │ │ +
246 {
│ │ │ +
247 public:
│ │ │ +
248 typedef _Mutex mutex_type;
│ │ │ +
249
│ │ │ +
250 [[__nodiscard__]]
│ │ │ +
251 explicit lock_guard(mutex_type& __m) : _M_device(__m)
│ │ │ +
252 { _M_device.lock(); }
│ │ │ +
253
│ │ │ +
254 [[__nodiscard__]]
│ │ │ +
255 lock_guard(mutex_type& __m, adopt_lock_t) noexcept : _M_device(__m)
│ │ │ +
256 { } // calling thread owns mutex
│ │ │ +
257
│ │ │ + │ │ │ +
259 { _M_device.unlock(); }
│ │ │ +
260
│ │ │ +
261 lock_guard(const lock_guard&) = delete;
│ │ │ +
262 lock_guard& operator=(const lock_guard&) = delete;
│ │ │ +
263
│ │ │ +
264 private:
│ │ │ +
265 mutex_type& _M_device;
│ │ │ +
266 };
│ │ │ +
│ │ │ +
267
│ │ │ +
268 /// @} group mutexes
│ │ │ +
269_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
270} // namespace
│ │ │ +
271#endif // C++11
│ │ │ +
272#endif // _GLIBCXX_MUTEX_H
│ │ │ + │ │ │ + │ │ │ +
constexpr try_to_lock_t try_to_lock
Tag used to prevent a scoped lock from blocking if a mutex is locked.
Definition std_mutex.h:231
│ │ │ +
constexpr adopt_lock_t adopt_lock
Tag used to make a scoped lock take ownership of a locked mutex.
Definition std_mutex.h:234
│ │ │ +
constexpr defer_lock_t defer_lock
Tag used to prevent a scoped lock from acquiring ownership of a mutex.
Definition std_mutex.h:228
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ - │ │ │ + │ │ │ +
Do not acquire ownership of the mutex.
Definition std_mutex.h:218
│ │ │ +
Try to acquire ownership of the mutex without blocking.
Definition std_mutex.h:221
│ │ │ +
Assume the calling thread has already obtained mutex ownership and manage it.
Definition std_mutex.h:225
│ │ │ +
A simple scoped lock type.
Definition std_mutex.h:246
│ │ │ + │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -stringfwd.h │ │ │ │ +std_mutex.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// std::mutex implementation -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2001-2025 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2003-2025 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,110 +21,290 @@ │ │ │ │ 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/std_mutex.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{mutex} │ │ │ │ 28 */ │ │ │ │ 29 │ │ │ │ -30// │ │ │ │ -31// ISO C++ 14882: 21 Strings library │ │ │ │ -32// │ │ │ │ -33 │ │ │ │ -34#ifndef _STRINGFWD_H │ │ │ │ -35#define _STRINGFWD_H 1 │ │ │ │ +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#ifdef _GLIBCXX_SYSHDR │ │ │ │ -38#pragma GCC system_header │ │ │ │ -39#endif │ │ │ │ +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_+_+_c_o_n_f_i_g_._h> │ │ │ │ -42#include <_b_i_t_s_/_m_e_m_o_r_y_f_w_d_._h> │ │ │ │ -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 char_traits; │ │ │ │ +41#include // EBUSY │ │ │ │ +42#include <_b_i_t_s_/_f_u_n_c_t_e_x_c_e_p_t_._h> │ │ │ │ +43#include │ │ │ │ +44 │ │ │ │ +45namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +46{ │ │ │ │ +47_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +48 │ │ │ │ +49 /** │ │ │ │ +50 * @defgroup mutexes Mutexes │ │ │ │ +51 * @ingroup concurrency │ │ │ │ +52 * │ │ │ │ +53 * Classes for mutex support. │ │ │ │ +54 * @{ │ │ │ │ +55 */ │ │ │ │ 56 │ │ │ │ -57 template<> struct char_traits; │ │ │ │ -58 │ │ │ │ -59 template<> struct char_traits; │ │ │ │ -60 │ │ │ │ -61#ifdef _GLIBCXX_USE_CHAR8_T │ │ │ │ -62 template<> struct char_traits; │ │ │ │ -63#endif │ │ │ │ -64 │ │ │ │ -65#if __cplusplus >= 201103L │ │ │ │ -66 template<> struct char_traits; │ │ │ │ -67 template<> struct char_traits; │ │ │ │ -68#endif │ │ │ │ -69 │ │ │ │ -70_GLIBCXX_BEGIN_NAMESPACE_CXX11 │ │ │ │ -71 │ │ │ │ -72 template, │ │ │ │ -73 typename _Alloc = allocator<_CharT> > │ │ │ │ -74 class basic_string; │ │ │ │ -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; │ │ │ │ -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 │ │ │ │ +57#ifdef _GLIBCXX_HAS_GTHREADS │ │ │ │ +58 /// @cond undocumented │ │ │ │ +59 │ │ │ │ +60 // Common base class for std::mutex and std::timed_mutex │ │ │ │ +61 class __mutex_base │ │ │ │ +62 { │ │ │ │ +63 protected: │ │ │ │ +64 typedef __gthread_mutex_t __native_type; │ │ │ │ +65 │ │ │ │ +66#ifdef __GTHREAD_MUTEX_INIT │ │ │ │ +67 __native_type _M_mutex = __GTHREAD_MUTEX_INIT; │ │ │ │ +68 │ │ │ │ +69 constexpr __mutex_base() noexcept = default; │ │ │ │ +70#else │ │ │ │ +71 __native_type _M_mutex; │ │ │ │ +72 │ │ │ │ +73 __mutex_base() noexcept │ │ │ │ +74 { │ │ │ │ +75 // XXX EAGAIN, ENOMEM, EPERM, EBUSY(may), EINVAL(may) │ │ │ │ +76 __GTHREAD_MUTEX_INIT_FUNCTION(&_M_mutex); │ │ │ │ +77 } │ │ │ │ +78 │ │ │ │ +79 ~__mutex_base() noexcept { __gthread_mutex_destroy(&_M_mutex); } │ │ │ │ +80#endif │ │ │ │ +81 │ │ │ │ +82 __mutex_base(const __mutex_base&) = delete; │ │ │ │ +83 __mutex_base& operator=(const __mutex_base&) = delete; │ │ │ │ +84 }; │ │ │ │ +85 /// @endcond │ │ │ │ +86 │ │ │ │ +87 /** The standard mutex type. │ │ │ │ +88 * │ │ │ │ +89 * A simple, non-recursive, non-timed mutex. │ │ │ │ +90 * │ │ │ │ +91 * Do not call `lock()` and `unlock()` directly, use a scoped lock type │ │ │ │ +92 * such as `std::unique_lock`, `std::lock_guard`, or (since C++17) │ │ │ │ +93 * `std::scoped_lock`. │ │ │ │ +94 * │ │ │ │ +95 * @headerfile mutex │ │ │ │ +96 * @since C++11 │ │ │ │ +97 */ │ │ │ │ +_9_8 class _m_u_t_e_x : private __mutex_base │ │ │ │ +99 { │ │ │ │ +100 public: │ │ │ │ +101 typedef _____n_a_t_i_v_e___t_y_p_e* _n_a_t_i_v_e___h_a_n_d_l_e___t_y_p_e; │ │ │ │ +102 │ │ │ │ +103#ifdef __GTHREAD_MUTEX_INIT │ │ │ │ +104 constexpr │ │ │ │ +105#endif │ │ │ │ +106 _m_u_t_e_x() noexcept = default; │ │ │ │ +107 _~_m_u_t_e_x() = default; │ │ │ │ +108 │ │ │ │ +109 _m_u_t_e_x(const _m_u_t_e_x&) = delete; │ │ │ │ +110 _m_u_t_e_x& operator=(const _m_u_t_e_x&) = delete; │ │ │ │ +111 │ │ │ │ +112 void │ │ │ │ +113 lock() │ │ │ │ +114 { │ │ │ │ +115 int __e = __gthread_mutex_lock(&_M_mutex); │ │ │ │ +116 │ │ │ │ +117 // EINVAL, EAGAIN, EBUSY, EINVAL, EDEADLK(may) │ │ │ │ +118 if (__e) │ │ │ │ +119 __throw_system_error(__e); │ │ │ │ +120 } │ │ │ │ +121 │ │ │ │ +122 _GLIBCXX_NODISCARD │ │ │ │ +123 bool │ │ │ │ +124 try_lock() noexcept │ │ │ │ +125 { │ │ │ │ +126 // XXX EINVAL, EAGAIN, EBUSY │ │ │ │ +127 return !__gthread_mutex_trylock(&_M_mutex); │ │ │ │ +128 } │ │ │ │ +129 │ │ │ │ +130 void │ │ │ │ +131 unlock() │ │ │ │ +132 { │ │ │ │ +133 // XXX EINVAL, EAGAIN, EPERM │ │ │ │ +134 __gthread_mutex_unlock(&_M_mutex); │ │ │ │ +135 } │ │ │ │ +136 │ │ │ │ +137 _n_a_t_i_v_e___h_a_n_d_l_e___t_y_p_e │ │ │ │ +138 native_handle() noexcept │ │ │ │ +139 { return &_M_mutex; } │ │ │ │ +140 }; │ │ │ │ +141 │ │ │ │ +142 /// @cond undocumented │ │ │ │ +143 │ │ │ │ +144 // Implementation details for std::condition_variable │ │ │ │ +145 class __condvar │ │ │ │ +146 { │ │ │ │ +147 using _t_i_m_e_s_p_e_c = __gthread_time_t; │ │ │ │ +148 │ │ │ │ +149 public: │ │ │ │ +150 __condvar() noexcept │ │ │ │ +151 { │ │ │ │ +152#ifndef __GTHREAD_COND_INIT │ │ │ │ +153 _____G_T_H_R_E_A_D___C_O_N_D___I_N_I_T___F_U_N_C_T_I_O_N(&_M_cond); │ │ │ │ +154#endif │ │ │ │ +155 } │ │ │ │ +156 │ │ │ │ +157 ~__condvar() │ │ │ │ +158 { │ │ │ │ +159 int __e __attribute__((__unused__)) = __gthread_cond_destroy(&_M_cond); │ │ │ │ +160 __glibcxx_assert(__e != EBUSY); // threads are still blocked │ │ │ │ +161 } │ │ │ │ +162 │ │ │ │ +163 __condvar(const __condvar&) = delete; │ │ │ │ +164 __condvar& operator=(const __condvar&) = delete; │ │ │ │ +165 │ │ │ │ +166 __gthread_cond_t* native_handle() noexcept { return &_M_cond; } │ │ │ │ +167 │ │ │ │ +168 // Expects: Calling thread has locked __m. │ │ │ │ +169 void │ │ │ │ +170 wait(mutex& __m) │ │ │ │ +171 { │ │ │ │ +172 int __e __attribute__((__unused__)) │ │ │ │ +173 = __gthread_cond_wait(&_M_cond, __m.native_handle()); │ │ │ │ +174 __glibcxx_assert(__e == 0); │ │ │ │ +175 } │ │ │ │ +176 │ │ │ │ +177 void │ │ │ │ +178 wait_until(mutex& __m, timespec& __abs_time) │ │ │ │ +179 { │ │ │ │ +180 __gthread_cond_timedwait(&_M_cond, __m.native_handle(), &__abs_time); │ │ │ │ +181 } │ │ │ │ +182 │ │ │ │ +183#ifdef _GLIBCXX_USE_PTHREAD_COND_CLOCKWAIT │ │ │ │ +184 void │ │ │ │ +185 wait_until(mutex& __m, clockid_t __clock, timespec& __abs_time) │ │ │ │ +186 { │ │ │ │ +187 pthread_cond_clockwait(&_M_cond, __m.native_handle(), __clock, │ │ │ │ +188 &__abs_time); │ │ │ │ +189 } │ │ │ │ +190#endif │ │ │ │ +191 │ │ │ │ +192 void │ │ │ │ +193 notify_one() noexcept │ │ │ │ +194 { │ │ │ │ +195 int __e __attribute__((__unused__)) = __gthread_cond_signal(&_M_cond); │ │ │ │ +196 __glibcxx_assert(__e == 0); │ │ │ │ +197 } │ │ │ │ +198 │ │ │ │ +199 void │ │ │ │ +200 notify_all() noexcept │ │ │ │ +201 { │ │ │ │ +202 int __e __attribute__((__unused__)) = __gthread_cond_broadcast(&_M_cond); │ │ │ │ +203 __glibcxx_assert(__e == 0); │ │ │ │ +204 } │ │ │ │ +205 │ │ │ │ +206 protected: │ │ │ │ +207#ifdef __GTHREAD_COND_INIT │ │ │ │ +208 __gthread_cond_t _M_cond = __GTHREAD_COND_INIT; │ │ │ │ +209#else │ │ │ │ +210 __gthread_cond_t _M_cond; │ │ │ │ +211#endif │ │ │ │ +212 }; │ │ │ │ +213 /// @endcond │ │ │ │ +214 │ │ │ │ +215#endif // _GLIBCXX_HAS_GTHREADS │ │ │ │ +216 │ │ │ │ +217 /// Do not acquire ownership of the mutex. │ │ │ │ +_2_1_8 struct _d_e_f_e_r___l_o_c_k___t { explicit _d_e_f_e_r___l_o_c_k___t() = default; }; │ │ │ │ +219 │ │ │ │ +220 /// Try to acquire ownership of the mutex without blocking. │ │ │ │ +_2_2_1 struct _t_r_y___t_o___l_o_c_k___t { explicit _t_r_y___t_o___l_o_c_k___t() = default; }; │ │ │ │ +222 │ │ │ │ +223 /// Assume the calling thread has already obtained mutex ownership │ │ │ │ +224 /// and manage it. │ │ │ │ +_2_2_5 struct _a_d_o_p_t___l_o_c_k___t { explicit _a_d_o_p_t___l_o_c_k___t() = default; }; │ │ │ │ +226 │ │ │ │ +227 /// Tag used to prevent a scoped lock from acquiring ownership of a mutex. │ │ │ │ +_2_2_8 ___G_L_I_B_C_X_X_1_7___I_N_L_I_N_E constexpr _d_e_f_e_r___l_o_c_k___t _d_e_f_e_r___l_o_c_k { }; │ │ │ │ +229 │ │ │ │ +230 /// Tag used to prevent a scoped lock from blocking if a mutex is locked. │ │ │ │ +_2_3_1 ___G_L_I_B_C_X_X_1_7___I_N_L_I_N_E constexpr _t_r_y___t_o___l_o_c_k___t _t_r_y___t_o___l_o_c_k { }; │ │ │ │ +232 │ │ │ │ +233 /// Tag used to make a scoped lock take ownership of a locked mutex. │ │ │ │ +_2_3_4 ___G_L_I_B_C_X_X_1_7___I_N_L_I_N_E constexpr _a_d_o_p_t___l_o_c_k___t _a_d_o_p_t___l_o_c_k { }; │ │ │ │ +235 │ │ │ │ +236 /** @brief A simple scoped lock type. │ │ │ │ +237 * │ │ │ │ +238 * A lock_guard controls mutex ownership within a scope, releasing │ │ │ │ +239 * ownership in the destructor. │ │ │ │ +240 * │ │ │ │ +241 * @headerfile mutex │ │ │ │ +242 * @since C++11 │ │ │ │ +243 */ │ │ │ │ +244 template │ │ │ │ +_2_4_5 class _l_o_c_k___g_u_a_r_d │ │ │ │ +246 { │ │ │ │ +247 public: │ │ │ │ +248 typedef ___M_u_t_e_x mutex_type; │ │ │ │ +249 │ │ │ │ +250 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +251 explicit _l_o_c_k___g_u_a_r_d(mutex_type& _____m) : _M_device(_____m) │ │ │ │ +252 { _M_device.lock(); } │ │ │ │ +253 │ │ │ │ +254 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +255 _l_o_c_k___g_u_a_r_d(mutex_type& _____m, _a_d_o_p_t___l_o_c_k___t) noexcept : _M_device(_____m) │ │ │ │ +256 { } // calling thread owns mutex │ │ │ │ +257 │ │ │ │ +258 _~_l_o_c_k___g_u_a_r_d() │ │ │ │ +259 { _M_device.unlock(); } │ │ │ │ +260 │ │ │ │ +261 _l_o_c_k___g_u_a_r_d(const _l_o_c_k___g_u_a_r_d&) = delete; │ │ │ │ +262 _l_o_c_k___g_u_a_r_d& operator=(const _l_o_c_k___g_u_a_r_d&) = delete; │ │ │ │ +263 │ │ │ │ +264 private: │ │ │ │ +265 mutex_type& _M_device; │ │ │ │ +266 }; │ │ │ │ +267 │ │ │ │ +268 /// @} group mutexes │ │ │ │ +269_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +270} // namespace │ │ │ │ +271#endif // C++11 │ │ │ │ +272#endif // _GLIBCXX_MUTEX_H │ │ │ │ +_c_+_+_0_x___w_a_r_n_i_n_g_._h │ │ │ │ +_f_u_n_c_t_e_x_c_e_p_t_._h │ │ │ │ +_s_t_d_:_:_t_r_y___t_o___l_o_c_k │ │ │ │ +constexpr try_to_lock_t try_to_lock │ │ │ │ +Tag used to prevent a scoped lock from blocking if a mutex is locked. │ │ │ │ +DDeeffiinniittiioonn _s_t_d___m_u_t_e_x_._h_:_2_3_1 │ │ │ │ +_s_t_d_:_:_a_d_o_p_t___l_o_c_k │ │ │ │ +constexpr adopt_lock_t adopt_lock │ │ │ │ +Tag used to make a scoped lock take ownership of a locked mutex. │ │ │ │ +DDeeffiinniittiioonn _s_t_d___m_u_t_e_x_._h_:_2_3_4 │ │ │ │ +_s_t_d_:_:_d_e_f_e_r___l_o_c_k │ │ │ │ +constexpr defer_lock_t defer_lock │ │ │ │ +Tag used to prevent a scoped lock from acquiring ownership of a mutex. │ │ │ │ +DDeeffiinniittiioonn _s_t_d___m_u_t_e_x_._h_:_2_2_8 │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ +_s_t_d_:_:_m_u_t_e_x │ │ │ │ +DDeeffiinniittiioonn _s_t_d___m_u_t_e_x_._h_:_9_9 │ │ │ │ +_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_1_8 │ │ │ │ +_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_2_1 │ │ │ │ +_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_2_5 │ │ │ │ +_s_t_d_:_:_l_o_c_k___g_u_a_r_d │ │ │ │ +A simple scoped lock type. │ │ │ │ +DDeeffiinniittiioonn _s_t_d___m_u_t_e_x_._h_:_2_4_6 │ │ │ │ _s_t_d_:_:_a_u_t_o___p_t_r___r_e_f │ │ │ │ DDeeffiinniittiioonn _a_u_t_o___p_t_r_._h_:_4_9 │ │ │ │ * _b_i_t_s │ │ │ │ - * _s_t_r_i_n_g_f_w_d_._h │ │ │ │ + * _s_t_d___m_u_t_e_x_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00401.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: streambuf.tcc File Reference │ │ │ +libstdc++: fstream.tcc File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -47,66 +47,56 @@ │ │ │ $(document).ready(function(){initNavTree('a00401.html',''); initResizable(); }); │ │ │ /* @license-end */ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ Namespaces | │ │ │ -Macros | │ │ │ -Functions
│ │ │ -
streambuf.tcc File Reference
│ │ │ +Macros
│ │ │ +
fstream.tcc File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ Namespaces

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

│ │ │ Macros

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

│ │ │ -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 > *, basic_streambuf< _CharT, _Traits > *, bool &)
 
#define _FSTREAM_TCC
 
│ │ │

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 <fstream>.

│ │ │ │ │ │ -

Definition in file streambuf.tcc.

│ │ │ +

Definition in file fstream.tcc.

│ │ │

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ _STREAMBUF_TCC

│ │ │ + │ │ │ +

◆ _FSTREAM_TCC

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ - │ │ │ + │ │ │ │ │ │
#define _STREAMBUF_TCC#define _FSTREAM_TCC
│ │ │
│ │ │ │ │ │ -

Definition at line 35 of file streambuf.tcc.

│ │ │ +

Definition at line 35 of file fstream.tcc.

│ │ │ │ │ │
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,30 +1,21 @@ │ │ │ │ libstdc++ │ │ │ │ -_N_a_m_e_s_p_a_c_e_s | _M_a_c_r_o_s | _F_u_n_c_t_i_o_n_s │ │ │ │ -streambuf.tcc File Reference │ │ │ │ +_N_a_m_e_s_p_a_c_e_s | _M_a_c_r_o_s │ │ │ │ +fstream.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 │ │ │ │   │ │ │ │ MMaaccrrooss │ │ │ │ -#define  ___S_T_R_E_A_M_B_U_F___T_C_C │ │ │ │ -  │ │ │ │ -FFuunnccttiioonnss │ │ │ │ -template<_t_y_p_e_n_a_m_e _CharT , _t_y_p_e_n_a_m_e _Traits > │ │ │ │ -_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 > *_____s_b_i_n, │ │ │ │ - _b_a_s_i_c___s_t_r_e_a_m_b_u_f< _CharT, _Traits > *_____s_b_o_u_t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _CharT , _t_y_p_e_n_a_m_e _Traits > │ │ │ │ -_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 > *, │ │ │ │ - _b_a_s_i_c___s_t_r_e_a_m_b_u_f< _CharT, _Traits > *, bool &) │ │ │ │ +#define  ___F_S_T_R_E_A_M___T_C_C │ │ │ │   │ │ │ │ ********** 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_s_t_r_e_a_m_._t_c_c. │ │ │ │ ********** 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. │ │ │ │ +********** _?◆_? __FFSSTTRREEAAMM__TTCCCC ********** │ │ │ │ +#define _FSTREAM_TCC │ │ │ │ +Definition at line _3_5 of file _f_s_t_r_e_a_m_._t_c_c. │ │ │ │ * _b_i_t_s │ │ │ │ - * _s_t_r_e_a_m_b_u_f_._t_c_c │ │ │ │ + * _f_s_t_r_e_a_m_._t_c_c │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00401_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: streambuf.tcc Source File │ │ │ +libstdc++: fstream.tcc Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,18 +45,18 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
streambuf.tcc
│ │ │ +
fstream.tcc
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// Stream buffer classes -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// File based streams -*- C++ -*-
│ │ │
2
│ │ │
3// Copyright (C) 1997-2025 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)
│ │ │ @@ -72,181 +72,1187 @@ │ │ │
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/fstream.tcc
│ │ │
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{fstream}
│ │ │
28 */
│ │ │
29
│ │ │
30//
│ │ │ -
31// ISO C++ 14882: 27.5 Stream buffers
│ │ │ +
31// ISO C++ 14882: 27.8 File-based streams
│ │ │
32//
│ │ │
33
│ │ │ -
34#ifndef _STREAMBUF_TCC
│ │ │ -
35#define _STREAMBUF_TCC 1
│ │ │ +
34#ifndef _FSTREAM_TCC
│ │ │ +
35#define _FSTREAM_TCC 1
│ │ │
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
│ │ │ +
44#include <bits/cxxabi_forced.h>
│ │ │ +
45#include <bits/move.h> // for swap
│ │ │ +
46#include <cerrno>
│ │ │
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;
│ │ │ - │ │ │ -
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>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ -
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;
│ │ │ - │ │ │ -
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 }
│ │ │ -
141
│ │ │ -
142 template<typename _CharT, typename _Traits>
│ │ │ -
143 inline streamsize
│ │ │ -
144 __copy_streambufs(basic_streambuf<_CharT, _Traits>* __sbin,
│ │ │ -
145 basic_streambuf<_CharT, _Traits>* __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 basic_streambuf<char>;
│ │ │ -
155
│ │ │ -
156 extern template
│ │ │ - │ │ │ -
158 __copy_streambufs(basic_streambuf<char>*,
│ │ │ -
159 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>*,
│ │ │ -
167 basic_streambuf<wchar_t>*);
│ │ │ -
168#endif
│ │ │ -
169#endif
│ │ │ -
170
│ │ │ -
171_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
172} // namespace std
│ │ │ -
173
│ │ │ -
174#pragma GCC diagnostic pop
│ │ │ -
175#endif
│ │ │ -
constexpr const _Tp & min(const _Tp &, const _Tp &)
This does what you think it does.
│ │ │ +
48namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
49{
│ │ │ +
50_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
51
│ │ │ +
52 template<typename _CharT, typename _Traits>
│ │ │ +
53 void
│ │ │ +
54 basic_filebuf<_CharT, _Traits>::
│ │ │ +
55 _M_allocate_internal_buffer()
│ │ │ +
56 {
│ │ │ +
57 // Allocate internal buffer only if one doesn't already exist
│ │ │ +
58 // (either allocated or provided by the user via setbuf).
│ │ │ +
59 if (!_M_buf_allocated && !_M_buf)
│ │ │ +
60 {
│ │ │ +
61 _M_buf = new char_type[_M_buf_size];
│ │ │ +
62 _M_buf_allocated = true;
│ │ │ +
63 }
│ │ │ +
64 }
│ │ │ +
65
│ │ │ +
66 template<typename _CharT, typename _Traits>
│ │ │ +
67 void
│ │ │ +
68 basic_filebuf<_CharT, _Traits>::
│ │ │ +
69 _M_destroy_internal_buffer() throw()
│ │ │ +
70 {
│ │ │ +
71 if (_M_buf_allocated)
│ │ │ +
72 {
│ │ │ +
73 delete [] _M_buf;
│ │ │ +
74 _M_buf = 0;
│ │ │ +
75 _M_buf_allocated = false;
│ │ │ +
76 }
│ │ │ +
77 delete [] _M_ext_buf;
│ │ │ +
78 _M_ext_buf = 0;
│ │ │ +
79 _M_ext_buf_size = 0;
│ │ │ +
80 _M_ext_next = 0;
│ │ │ +
81 _M_ext_end = 0;
│ │ │ +
82 }
│ │ │ +
83
│ │ │ +
84 template<typename _CharT, typename _Traits>
│ │ │ +
│ │ │ + │ │ │ +
86 basic_filebuf() : __streambuf_type(), _M_lock(), _M_file(&_M_lock),
│ │ │ +
87 _M_mode(ios_base::openmode(0)), _M_state_beg(), _M_state_cur(),
│ │ │ +
88 _M_state_last(), _M_buf(0), _M_buf_size(_GLIBCXX_BUFSIZ),
│ │ │ +
89 _M_buf_allocated(false), _M_reading(false), _M_writing(false), _M_pback(),
│ │ │ +
90 _M_pback_cur_save(0), _M_pback_end_save(0), _M_pback_init(false),
│ │ │ +
91 _M_codecvt(0), _M_ext_buf(0), _M_ext_buf_size(0), _M_ext_next(0),
│ │ │ +
92 _M_ext_end(0)
│ │ │ +
93 {
│ │ │ + │ │ │ +
95 }
│ │ │ +
│ │ │ +
96
│ │ │ +
97#if __cplusplus >= 201103L
│ │ │ +
98 template<typename _CharT, typename _Traits>
│ │ │ + │ │ │ + │ │ │ +
101 : __streambuf_type(__rhs),
│ │ │ +
102 _M_lock(), _M_file(std::move(__rhs._M_file), &_M_lock),
│ │ │ +
103 _M_mode(std::__exchange(__rhs._M_mode, ios_base::openmode(0))),
│ │ │ +
104 _M_state_beg(std::move(__rhs._M_state_beg)),
│ │ │ +
105 _M_state_cur(std::move(__rhs._M_state_cur)),
│ │ │ +
106 _M_state_last(std::move(__rhs._M_state_last)),
│ │ │ +
107 _M_buf(std::__exchange(__rhs._M_buf, nullptr)),
│ │ │ +
108 _M_buf_size(std::__exchange(__rhs._M_buf_size, 1)),
│ │ │ +
109 _M_buf_allocated(std::__exchange(__rhs._M_buf_allocated, false)),
│ │ │ +
110 _M_reading(std::__exchange(__rhs._M_reading, false)),
│ │ │ +
111 _M_writing(std::__exchange(__rhs._M_writing, false)),
│ │ │ +
112 _M_pback(__rhs._M_pback),
│ │ │ +
113 _M_pback_cur_save(std::__exchange(__rhs._M_pback_cur_save, nullptr)),
│ │ │ +
114 _M_pback_end_save(std::__exchange(__rhs._M_pback_end_save, nullptr)),
│ │ │ +
115 _M_pback_init(std::__exchange(__rhs._M_pback_init, false)),
│ │ │ +
116 _M_codecvt(__rhs._M_codecvt),
│ │ │ +
117 _M_ext_buf(std::__exchange(__rhs._M_ext_buf, nullptr)),
│ │ │ +
118 _M_ext_buf_size(std::__exchange(__rhs._M_ext_buf_size, 0)),
│ │ │ +
119 _M_ext_next(std::__exchange(__rhs._M_ext_next, nullptr)),
│ │ │ +
120 _M_ext_end(std::__exchange(__rhs._M_ext_end, nullptr))
│ │ │ +
121 {
│ │ │ +
122 __rhs._M_set_buffer(-1);
│ │ │ +
123 __rhs._M_state_last = __rhs._M_state_cur = __rhs._M_state_beg;
│ │ │ +
124 }
│ │ │ +
125
│ │ │ +
126 template<typename _CharT, typename _Traits>
│ │ │ +
127 basic_filebuf<_CharT, _Traits>&
│ │ │ +
128 basic_filebuf<_CharT, _Traits>::
│ │ │ +
129 operator=(basic_filebuf&& __rhs)
│ │ │ +
130 {
│ │ │ +
131 this->close();
│ │ │ +
132 __streambuf_type::operator=(__rhs);
│ │ │ +
133 _M_file.swap(__rhs._M_file);
│ │ │ +
134 _M_mode = std::__exchange(__rhs._M_mode, ios_base::openmode(0));
│ │ │ +
135 _M_state_beg = std::move(__rhs._M_state_beg);
│ │ │ +
136 _M_state_cur = std::move(__rhs._M_state_cur);
│ │ │ +
137 _M_state_last = std::move(__rhs._M_state_last);
│ │ │ +
138 _M_buf = std::__exchange(__rhs._M_buf, nullptr);
│ │ │ +
139 _M_buf_size = std::__exchange(__rhs._M_buf_size, 1);
│ │ │ +
140 _M_buf_allocated = std::__exchange(__rhs._M_buf_allocated, false);
│ │ │ +
141 _M_ext_buf = std::__exchange(__rhs._M_ext_buf, nullptr);
│ │ │ +
142 _M_ext_buf_size = std::__exchange(__rhs._M_ext_buf_size, 0);
│ │ │ +
143 _M_ext_next = std::__exchange(__rhs._M_ext_next, nullptr);
│ │ │ +
144 _M_ext_end = std::__exchange(__rhs._M_ext_end, nullptr);
│ │ │ +
145 _M_reading = std::__exchange(__rhs._M_reading, false);
│ │ │ +
146 _M_writing = std::__exchange(__rhs._M_writing, false);
│ │ │ +
147 _M_pback_cur_save = std::__exchange(__rhs._M_pback_cur_save, nullptr);
│ │ │ +
148 _M_pback_end_save = std::__exchange(__rhs._M_pback_end_save, nullptr);
│ │ │ +
149 _M_pback_init = std::__exchange(__rhs._M_pback_init, false);
│ │ │ +
150 __rhs._M_set_buffer(-1);
│ │ │ +
151 __rhs._M_state_last = __rhs._M_state_cur = __rhs._M_state_beg;
│ │ │ +
152 return *this;
│ │ │ +
153 }
│ │ │ +
154
│ │ │ +
155 template<typename _CharT, typename _Traits>
│ │ │ +
156 void
│ │ │ +
157 basic_filebuf<_CharT, _Traits>::
│ │ │ +
158 swap(basic_filebuf& __rhs)
│ │ │ +
159 {
│ │ │ +
160 __streambuf_type::swap(__rhs);
│ │ │ +
161 _M_file.swap(__rhs._M_file);
│ │ │ +
162 std::swap(_M_mode, __rhs._M_mode);
│ │ │ +
163 std::swap(_M_state_beg, __rhs._M_state_beg);
│ │ │ +
164 std::swap(_M_state_cur, __rhs._M_state_cur);
│ │ │ +
165 std::swap(_M_state_last, __rhs._M_state_last);
│ │ │ +
166 std::swap(_M_buf, __rhs._M_buf);
│ │ │ +
167 std::swap(_M_buf_size, __rhs._M_buf_size);
│ │ │ +
168 std::swap(_M_buf_allocated, __rhs._M_buf_allocated);
│ │ │ +
169 std::swap(_M_ext_buf, __rhs._M_ext_buf);
│ │ │ +
170 std::swap(_M_ext_buf_size, __rhs._M_ext_buf_size);
│ │ │ +
171 std::swap(_M_ext_next, __rhs._M_ext_next);
│ │ │ +
172 std::swap(_M_ext_end, __rhs._M_ext_end);
│ │ │ +
173 std::swap(_M_reading, __rhs._M_reading);
│ │ │ +
174 std::swap(_M_writing, __rhs._M_writing);
│ │ │ +
175 std::swap(_M_pback_cur_save, __rhs._M_pback_cur_save);
│ │ │ +
176 std::swap(_M_pback_end_save, __rhs._M_pback_end_save);
│ │ │ +
177 std::swap(_M_pback_init, __rhs._M_pback_init);
│ │ │ +
178 }
│ │ │ +
179#endif
│ │ │ +
180
│ │ │ +
181 template<typename _CharT, typename _Traits>
│ │ │ +
182 typename basic_filebuf<_CharT, _Traits>::__filebuf_type*
│ │ │ +
│ │ │ + │ │ │ +
184 open(const char* __s, ios_base::openmode __mode)
│ │ │ +
185 {
│ │ │ + │ │ │ +
187 if (!this->is_open())
│ │ │ +
188 {
│ │ │ +
189 _M_file.open(__s, __mode);
│ │ │ +
190 if (this->is_open())
│ │ │ +
191 {
│ │ │ +
192 _M_allocate_internal_buffer();
│ │ │ +
193 _M_mode = __mode;
│ │ │ +
194
│ │ │ +
195 // Setup initial buffer to 'uncommitted' mode.
│ │ │ +
196 _M_reading = false;
│ │ │ +
197 _M_writing = false;
│ │ │ +
198 _M_set_buffer(-1);
│ │ │ +
199
│ │ │ +
200 // Reset to initial state.
│ │ │ +
201 _M_state_last = _M_state_cur = _M_state_beg;
│ │ │ +
202
│ │ │ +
203 // 27.8.1.3,4
│ │ │ +
204 if ((__mode & ios_base::ate)
│ │ │ +
205 && this->seekoff(0, ios_base::end, __mode)
│ │ │ +
206 == pos_type(off_type(-1)))
│ │ │ +
207 this->close();
│ │ │ +
208 else
│ │ │ +
209 __ret = this;
│ │ │ +
210 }
│ │ │ +
211 }
│ │ │ +
212 return __ret;
│ │ │ +
213 }
│ │ │ +
│ │ │ +
214
│ │ │ +
215#if _GLIBCXX_HAVE__WFOPEN && _GLIBCXX_USE_WCHAR_T
│ │ │ +
216 template<typename _CharT, typename _Traits>
│ │ │ + │ │ │ + │ │ │ +
219 open(const wchar_t* __s, ios_base::openmode __mode)
│ │ │ +
220 {
│ │ │ +
221 __filebuf_type *__ret = 0;
│ │ │ +
222 if (!this->is_open())
│ │ │ +
223 {
│ │ │ +
224 _M_file.open(__s, __mode);
│ │ │ +
225 if (this->is_open())
│ │ │ +
226 {
│ │ │ +
227 _M_allocate_internal_buffer();
│ │ │ +
228 _M_mode = __mode;
│ │ │ +
229
│ │ │ +
230 // Setup initial buffer to 'uncommitted' mode.
│ │ │ +
231 _M_reading = false;
│ │ │ +
232 _M_writing = false;
│ │ │ +
233 _M_set_buffer(-1);
│ │ │ +
234
│ │ │ +
235 // Reset to initial state.
│ │ │ +
236 _M_state_last = _M_state_cur = _M_state_beg;
│ │ │ +
237
│ │ │ +
238 // 27.8.1.3,4
│ │ │ +
239 if ((__mode & ios_base::ate)
│ │ │ +
240 && this->seekoff(0, ios_base::end, __mode)
│ │ │ +
241 == pos_type(off_type(-1)))
│ │ │ +
242 this->close();
│ │ │ +
243 else
│ │ │ +
244 __ret = this;
│ │ │ +
245 }
│ │ │ +
246 }
│ │ │ +
│ │ │ +
247 return __ret;
│ │ │ +
248 }
│ │ │ +
249#endif // HAVE__WFOPEN && USE_WCHAR_T
│ │ │ +
250
│ │ │ +
251 template<typename _CharT, typename _Traits>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
254 close()
│ │ │ +
255 {
│ │ │ +
256 if (!this->is_open())
│ │ │ +
257 return 0;
│ │ │ +
258
│ │ │ +
259 bool __testfail = false;
│ │ │ +
260 {
│ │ │ +
261 // NB: Do this here so that re-opened filebufs will be cool...
│ │ │ +
262 struct __close_sentry
│ │ │ +
263 {
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
267 {
│ │ │ +
268 __fb->_M_mode = ios_base::openmode(0);
│ │ │ +
269 __fb->_M_pback_init = false;
│ │ │ +
270 __fb->_M_destroy_internal_buffer();
│ │ │ +
271 __fb->_M_reading = false;
│ │ │ +
272 __fb->_M_writing = false;
│ │ │ +
273 __fb->_M_set_buffer(-1);
│ │ │ +
274 __fb->_M_state_last = __fb->_M_state_cur = __fb->_M_state_beg;
│ │ │ +
275 }
│ │ │ +
276 } __cs (this);
│ │ │ +
277
│ │ │ +
278 __try
│ │ │ +
279 {
│ │ │ +
280 if (!_M_terminate_output())
│ │ │ +
281 __testfail = true;
│ │ │ +
282 }
│ │ │ +
283 __catch(...)
│ │ │ +
284 {
│ │ │ +
285 _M_file.close();
│ │ │ +
286 __throw_exception_again;
│ │ │ +
287 }
│ │ │ +
288 }
│ │ │ +
289
│ │ │ +
290 if (!_M_file.close())
│ │ │ +
291 __testfail = true;
│ │ │ +
292
│ │ │ +
293 if (__testfail)
│ │ │ +
294 return 0;
│ │ │ +
295 else
│ │ │ +
296 return this;
│ │ │ +
297 }
│ │ │ +
│ │ │ +
298
│ │ │ +
299 template<typename _CharT, typename _Traits>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ +
303 {
│ │ │ +
304 streamsize __ret = -1;
│ │ │ +
305 const bool __testin = _M_mode & ios_base::in;
│ │ │ +
306 if (__testin && this->is_open())
│ │ │ +
307 {
│ │ │ +
308 // For a stateful encoding (-1) the pending sequence might be just
│ │ │ +
309 // shift and unshift prefixes with no actual character.
│ │ │ +
310 __ret = this->egptr() - this->gptr();
│ │ │ +
311
│ │ │ +
312#if _GLIBCXX_HAVE_DOS_BASED_FILESYSTEM
│ │ │ +
313 // About this workaround, see libstdc++/20806.
│ │ │ +
314 const bool __testbinary = _M_mode & ios_base::binary;
│ │ │ +
315 if (__check_facet(_M_codecvt).encoding() >= 0
│ │ │ +
316 && __testbinary)
│ │ │ +
317#else
│ │ │ +
318 if (__check_facet(_M_codecvt).encoding() >= 0)
│ │ │ +
319#endif
│ │ │ +
320 __ret += _M_file.showmanyc() / _M_codecvt->max_length();
│ │ │ +
321 }
│ │ │ +
322 return __ret;
│ │ │ + │ │ │ +
│ │ │ +
324
│ │ │ +
325 template<typename _CharT, typename _Traits>
│ │ │ +
326 typename basic_filebuf<_CharT, _Traits>::int_type
│ │ │ +
│ │ │ + │ │ │ + │ │ │ +
329 {
│ │ │ +
330 int_type __ret = traits_type::eof();
│ │ │ +
331 const bool __testin = _M_mode & ios_base::in;
│ │ │ +
332 if (__testin)
│ │ │ +
333 {
│ │ │ +
334 if (_M_writing)
│ │ │ +
335 {
│ │ │ +
336 if (overflow() == traits_type::eof())
│ │ │ +
337 return __ret;
│ │ │ +
338 _M_set_buffer(-1);
│ │ │ +
339 _M_writing = false;
│ │ │ +
340 }
│ │ │ +
341 // Check for pback madness, and if so switch back to the
│ │ │ +
342 // normal buffers and jet outta here before expensive
│ │ │ +
343 // fileops happen...
│ │ │ +
344 _M_destroy_pback();
│ │ │ +
345
│ │ │ +
346 if (this->gptr() < this->egptr())
│ │ │ +
347 return traits_type::to_int_type(*this->gptr());
│ │ │ +
348
│ │ │ +
349 // Get and convert input sequence.
│ │ │ +
350 const size_t __buflen = _M_buf_size > 1 ? _M_buf_size - 1 : 1;
│ │ │ +
351
│ │ │ +
352 // Will be set to true if ::read() returns 0 indicating EOF.
│ │ │ +
353 bool __got_eof = false;
│ │ │ +
354 // Number of internal characters produced.
│ │ │ +
355 streamsize __ilen = 0;
│ │ │ +
356 codecvt_base::result __r = codecvt_base::ok;
│ │ │ +
357 if (__check_facet(_M_codecvt).always_noconv())
│ │ │ +
358 {
│ │ │ +
359 __ilen = _M_file.xsgetn(reinterpret_cast<char*>(this->eback()),
│ │ │ +
360 __buflen);
│ │ │ +
361 if (__ilen == 0)
│ │ │ +
362 __got_eof = true;
│ │ │ +
363 }
│ │ │ +
364 else
│ │ │ +
365 {
│ │ │ +
366 // Worst-case number of external bytes.
│ │ │ +
367 // XXX Not done encoding() == -1.
│ │ │ +
368 const int __enc = _M_codecvt->encoding();
│ │ │ +
369 streamsize __blen; // Minimum buffer size.
│ │ │ +
370 streamsize __rlen; // Number of chars to read.
│ │ │ +
371 if (__enc > 0)
│ │ │ + │ │ │ +
373 else
│ │ │ +
│ │ │ + │ │ │ +
375 __blen = __buflen + _M_codecvt->max_length() - 1;
│ │ │ + │ │ │ +
377 }
│ │ │ +
378 const streamsize __remainder = _M_ext_end - _M_ext_next;
│ │ │ + │ │ │ +
380
│ │ │ +
381 // An imbue in 'read' mode implies first converting the external
│ │ │ +
382 // chars already present.
│ │ │ +
383 if (_M_reading && this->egptr() == this->eback() && __remainder)
│ │ │ +
384 __rlen = 0;
│ │ │ +
385
│ │ │ +
386 // Allocate buffer if necessary and move unconverted
│ │ │ +
387 // bytes to front.
│ │ │ +
388 if (_M_ext_buf_size < __blen)
│ │ │ +
389 {
│ │ │ +
390 char* __buf = new char[__blen];
│ │ │ +
391 if (__remainder)
│ │ │ +
392 __builtin_memcpy(__buf, _M_ext_next, __remainder);
│ │ │ +
393
│ │ │ +
394 delete [] _M_ext_buf;
│ │ │ +
395 _M_ext_buf = __buf;
│ │ │ +
396 _M_ext_buf_size = __blen;
│ │ │ +
397 }
│ │ │ +
398 else if (__remainder)
│ │ │ +
399 __builtin_memmove(_M_ext_buf, _M_ext_next, __remainder);
│ │ │ +
400
│ │ │ +
401 _M_ext_next = _M_ext_buf;
│ │ │ +
402 _M_ext_end = _M_ext_buf + __remainder;
│ │ │ +
403 _M_state_last = _M_state_cur;
│ │ │ +
404
│ │ │ +
405 do
│ │ │ +
406 {
│ │ │ +
407 if (__rlen > 0)
│ │ │ +
408 {
│ │ │ +
409 // Sanity check!
│ │ │ +
410 // This may fail if the return value of
│ │ │ +
411 // codecvt::max_length() is bogus.
│ │ │ +
412 if (_M_ext_end - _M_ext_buf + __rlen > _M_ext_buf_size)
│ │ │ +
413 {
│ │ │ +
414 __throw_ios_failure(__N("basic_filebuf::underflow "
│ │ │ +
│ │ │ +
415 "codecvt::max_length() "
│ │ │ +
416 "is not valid"));
│ │ │ +
417 }
│ │ │ +
418 streamsize __elen = _M_file.xsgetn(_M_ext_end, __rlen);
│ │ │ +
419 if (__elen == 0)
│ │ │ +
420 __got_eof = true;
│ │ │ +
421 else if (__elen == -1)
│ │ │ +
422 break;
│ │ │ +
│ │ │ +
423 _M_ext_end += __elen;
│ │ │ +
424 }
│ │ │ +
425
│ │ │ +
│ │ │ +
426 char_type* __iend = this->eback();
│ │ │ +
427 if (_M_ext_next < _M_ext_end)
│ │ │ +
428 __r = _M_codecvt->in(_M_state_cur, _M_ext_next,
│ │ │ +
429 _M_ext_end, _M_ext_next,
│ │ │ +
430 this->eback(),
│ │ │ +
431 this->eback() + __buflen, __iend);
│ │ │ +
432 if (__r == codecvt_base::noconv)
│ │ │ +
433 {
│ │ │ +
434 size_t __avail = _M_ext_end - _M_ext_buf;
│ │ │ + │ │ │ +
│ │ │ +
436 traits_type::copy(this->eback(),
│ │ │ +
437 reinterpret_cast<char_type*>
│ │ │ +
438 (_M_ext_buf), __ilen);
│ │ │ +
439 _M_ext_next = _M_ext_buf + __ilen;
│ │ │ +
440 }
│ │ │ +
441 else
│ │ │ +
442 __ilen = __iend - this->eback();
│ │ │ +
443
│ │ │ +
444 // _M_codecvt->in may return error while __ilen > 0: this is
│ │ │ +
445 // ok, and actually occurs in case of mixed encodings (e.g.,
│ │ │ +
446 // XML files).
│ │ │ +
447 if (__r == codecvt_base::error)
│ │ │ +
448 break;
│ │ │ +
449
│ │ │ +
450 __rlen = 1;
│ │ │ +
451 }
│ │ │ +
452 while (__ilen == 0 && !__got_eof);
│ │ │ +
453 }
│ │ │ +
454
│ │ │ +
455 if (__ilen > 0)
│ │ │ +
│ │ │ + │ │ │ +
457 _M_set_buffer(__ilen);
│ │ │ +
458 _M_reading = true;
│ │ │ +
│ │ │ +
459 __ret = traits_type::to_int_type(*this->gptr());
│ │ │ +
460 }
│ │ │ +
461 else if (__got_eof)
│ │ │ +
462 {
│ │ │ +
│ │ │ +
463 // If the actual end of file is reached, set 'uncommitted'
│ │ │ +
464 // mode, thus allowing an immediate write without an
│ │ │ +
465 // intervening seek.
│ │ │ +
466 _M_set_buffer(-1);
│ │ │ +
467 _M_reading = false;
│ │ │ +
468 // However, reaching it while looping on partial means that
│ │ │ +
469 // the file has got an incomplete character.
│ │ │ +
470 if (__r == codecvt_base::partial)
│ │ │ +
471 __throw_ios_failure(__N("basic_filebuf::underflow "
│ │ │ +
472 "incomplete character in file"));
│ │ │ +
473 }
│ │ │ +
│ │ │ +
474 else if (__r == codecvt_base::error)
│ │ │ +
475 __throw_ios_failure(__N("basic_filebuf::underflow "
│ │ │ +
476 "invalid byte sequence in file"));
│ │ │ +
│ │ │ +
477 else
│ │ │ +
478 __throw_ios_failure(__N("basic_filebuf::underflow "
│ │ │ +
479 "error reading the file"), errno);
│ │ │ +
│ │ │ + │ │ │ +
481 return __ret;
│ │ │ +
482 }
│ │ │ +
│ │ │ + │ │ │ +
484 template<typename _CharT, typename _Traits>
│ │ │ +
485 typename basic_filebuf<_CharT, _Traits>::int_type
│ │ │ +
│ │ │ + │ │ │ +
487 pbackfail(int_type __i)
│ │ │ +
488 {
│ │ │ +
489 int_type __ret = traits_type::eof();
│ │ │ +
490 const bool __testin = _M_mode & ios_base::in;
│ │ │ +
491 if (__testin)
│ │ │ +
492 {
│ │ │ +
493 if (_M_writing)
│ │ │ +
494 {
│ │ │ +
495 if (overflow() == traits_type::eof())
│ │ │ +
496 return __ret;
│ │ │ +
497 _M_set_buffer(-1);
│ │ │ +
498 _M_writing = false;
│ │ │ +
499 }
│ │ │ +
500 // Remember whether the pback buffer is active, otherwise below
│ │ │ +
501 // we may try to store in it a second char (libstdc++/9761).
│ │ │ +
502 const bool __testpb = _M_pback_init;
│ │ │ +
503 const bool __testeof = traits_type::eq_int_type(__i, __ret);
│ │ │ +
504 int_type __tmp;
│ │ │ +
505 if (this->eback() < this->gptr())
│ │ │ +
506 {
│ │ │ +
507 this->gbump(-1);
│ │ │ +
508 __tmp = traits_type::to_int_type(*this->gptr());
│ │ │ +
509 }
│ │ │ +
510 else if (this->seekoff(-1, ios_base::cur) != pos_type(off_type(-1)))
│ │ │ +
511 {
│ │ │ +
512 __tmp = this->underflow();
│ │ │ +
513 if (traits_type::eq_int_type(__tmp, __ret))
│ │ │ +
514 return __ret;
│ │ │ +
515 }
│ │ │ +
516 else
│ │ │ +
517 {
│ │ │ +
518 // At the beginning of the buffer, need to make a
│ │ │ +
519 // putback position available. But the seek may fail
│ │ │ +
520 // (f.i., at the beginning of a file, see
│ │ │ +
521 // libstdc++/9439) and in that case we return
│ │ │ +
522 // traits_type::eof().
│ │ │ +
523 return __ret;
│ │ │ +
524 }
│ │ │ +
525
│ │ │ +
526 // Try to put back __i into input sequence in one of three ways.
│ │ │ +
527 // Order these tests done in is unspecified by the standard.
│ │ │ +
528 if (!__testeof && traits_type::eq_int_type(__i, __tmp))
│ │ │ +
529 __ret = __i;
│ │ │ +
530 else if (__testeof)
│ │ │ +
531 __ret = traits_type::not_eof(__i);
│ │ │ +
532 else if (!__testpb)
│ │ │ +
533 {
│ │ │ +
534 _M_create_pback();
│ │ │ +
535 _M_reading = true;
│ │ │ +
536 *this->gptr() = traits_type::to_char_type(__i);
│ │ │ +
537 __ret = __i;
│ │ │ +
538 }
│ │ │ +
539 }
│ │ │ +
540 return __ret;
│ │ │ +
541 }
│ │ │ +
│ │ │ +
542
│ │ │ +
543 template<typename _CharT, typename _Traits>
│ │ │ +
544 typename basic_filebuf<_CharT, _Traits>::int_type
│ │ │ +
│ │ │ + │ │ │ +
546 overflow(int_type __c)
│ │ │ +
547 {
│ │ │ +
548 int_type __ret = traits_type::eof();
│ │ │ +
549 const bool __testeof = traits_type::eq_int_type(__c, __ret);
│ │ │ +
550 const bool __testout = (_M_mode & ios_base::out
│ │ │ +
551 || _M_mode & ios_base::app);
│ │ │ +
552 if (__testout)
│ │ │ +
553 {
│ │ │ +
554 if (_M_reading)
│ │ │ +
555 {
│ │ │ +
556 _M_destroy_pback();
│ │ │ +
557 const int __gptr_off = _M_get_ext_pos(_M_state_last);
│ │ │ +
558 if (_M_seek(__gptr_off, ios_base::cur, _M_state_last)
│ │ │ +
559 == pos_type(off_type(-1)))
│ │ │ +
560 return __ret;
│ │ │ +
561 }
│ │ │ +
562 if (this->pbase() < this->pptr())
│ │ │ +
563 {
│ │ │ +
564 // If appropriate, append the overflow char.
│ │ │ +
565 if (!__testeof)
│ │ │ +
566 {
│ │ │ +
567 *this->pptr() = traits_type::to_char_type(__c);
│ │ │ +
568 this->pbump(1);
│ │ │ +
569 }
│ │ │ +
570
│ │ │ +
571 // Convert pending sequence to external representation,
│ │ │ +
572 // and output.
│ │ │ +
573 if (_M_convert_to_external(this->pbase(),
│ │ │ +
574 this->pptr() - this->pbase()))
│ │ │ +
575 {
│ │ │ +
576 _M_set_buffer(0);
│ │ │ +
577 __ret = traits_type::not_eof(__c);
│ │ │ +
578 }
│ │ │ +
579 }
│ │ │ +
580 else if (_M_buf_size > 1)
│ │ │ +
581 {
│ │ │ +
582 // Overflow in 'uncommitted' mode: set _M_writing, set
│ │ │ +
583 // the buffer to the initial 'write' mode, and put __c
│ │ │ +
584 // into the buffer.
│ │ │ +
585 _M_set_buffer(0);
│ │ │ +
586 _M_writing = true;
│ │ │ +
587 if (!__testeof)
│ │ │ +
588 {
│ │ │ +
589 *this->pptr() = traits_type::to_char_type(__c);
│ │ │ +
590 this->pbump(1);
│ │ │ +
591 }
│ │ │ +
592 __ret = traits_type::not_eof(__c);
│ │ │ +
593 }
│ │ │ +
594 else
│ │ │ +
595 {
│ │ │ +
596 // Unbuffered.
│ │ │ +
597 char_type __conv = traits_type::to_char_type(__c);
│ │ │ +
598 if (__testeof || _M_convert_to_external(&__conv, 1))
│ │ │ +
599 {
│ │ │ +
600 _M_writing = true;
│ │ │ +
601 __ret = traits_type::not_eof(__c);
│ │ │ +
602 }
│ │ │ +
603 }
│ │ │ +
604 }
│ │ │ +
605 return __ret;
│ │ │ +
606 }
│ │ │ +
│ │ │ +
607
│ │ │ +
608 template<typename _CharT, typename _Traits>
│ │ │ +
609 bool
│ │ │ + │ │ │ + │ │ │ +
612 {
│ │ │ +
613 // Sizes of external and pending output.
│ │ │ + │ │ │ + │ │ │ +
616 if (__check_facet(_M_codecvt).always_noconv())
│ │ │ +
617 {
│ │ │ +
618 __elen = _M_file.xsputn(reinterpret_cast<char*>(__ibuf), __ilen);
│ │ │ +
619 __plen = __ilen;
│ │ │ +
620 }
│ │ │ +
621 else
│ │ │ +
622 {
│ │ │ +
623 // Worst-case number of external bytes needed.
│ │ │ +
624 // XXX Not done encoding() == -1.
│ │ │ +
625 streamsize __blen = __ilen * _M_codecvt->max_length();
│ │ │ +
626 char* __buf = static_cast<char*>(__builtin_alloca(__blen));
│ │ │ +
627
│ │ │ +
628 char* __bend;
│ │ │ +
629 const char_type* __iend;
│ │ │ +
630 codecvt_base::result __r;
│ │ │ +
631 __r = _M_codecvt->out(_M_state_cur, __ibuf, __ibuf + __ilen,
│ │ │ +
632 __iend, __buf, __buf + __blen, __bend);
│ │ │ +
633
│ │ │ +
634 if (__r == codecvt_base::ok || __r == codecvt_base::partial)
│ │ │ +
635 __blen = __bend - __buf;
│ │ │ +
636 else if (__r == codecvt_base::noconv)
│ │ │ +
637 {
│ │ │ +
638 // Same as the always_noconv case above.
│ │ │ +
639 __buf = reinterpret_cast<char*>(__ibuf);
│ │ │ +
640 __blen = __ilen;
│ │ │ +
641 }
│ │ │ +
642 else
│ │ │ +
643 __throw_ios_failure(__N("basic_filebuf::_M_convert_to_external "
│ │ │ +
644 "conversion error"));
│ │ │ +
645
│ │ │ +
646 __elen = _M_file.xsputn(__buf, __blen);
│ │ │ +
647 __plen = __blen;
│ │ │ +
648
│ │ │ +
649 // Try once more for partial conversions.
│ │ │ +
650 if (__r == codecvt_base::partial && __elen == __plen)
│ │ │ +
651 {
│ │ │ +
652 const char_type* __iresume = __iend;
│ │ │ +
653 streamsize __rlen = this->pptr() - __iend;
│ │ │ +
654 __r = _M_codecvt->out(_M_state_cur, __iresume,
│ │ │ +
655 __iresume + __rlen, __iend, __buf,
│ │ │ +
656 __buf + __blen, __bend);
│ │ │ +
657 if (__r != codecvt_base::error)
│ │ │ +
658 {
│ │ │ +
659 __rlen = __bend - __buf;
│ │ │ +
660 __elen = _M_file.xsputn(__buf, __rlen);
│ │ │ +
661 __plen = __rlen;
│ │ │ +
662 }
│ │ │ +
663 else
│ │ │ +
664 __throw_ios_failure(__N("basic_filebuf::_M_convert_to_external "
│ │ │ +
665 "conversion error"));
│ │ │ +
666 }
│ │ │ +
667 }
│ │ │ +
668 return __elen == __plen;
│ │ │ +
669 }
│ │ │ +
670
│ │ │ +
671 template<typename _CharT, typename _Traits>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
674 xsgetn(_CharT* __s, streamsize __n)
│ │ │ +
675 {
│ │ │ +
676 // Clear out pback buffer before going on to the real deal...
│ │ │ +
677 streamsize __ret = 0;
│ │ │ +
678 if (_M_pback_init)
│ │ │ +
679 {
│ │ │ +
680 if (__n > 0 && this->gptr() == this->eback())
│ │ │ +
681 {
│ │ │ +
682 *__s++ = *this->gptr(); // emulate non-underflowing sbumpc
│ │ │ +
683 this->gbump(1);
│ │ │ +
684 __ret = 1;
│ │ │ +
685 --__n;
│ │ │ +
686 }
│ │ │ +
687 _M_destroy_pback();
│ │ │ +
688 }
│ │ │ +
689 else if (_M_writing)
│ │ │ +
690 {
│ │ │ +
691 if (overflow() == traits_type::eof())
│ │ │ +
692 return __ret;
│ │ │ +
693 _M_set_buffer(-1);
│ │ │ +
694 _M_writing = false;
│ │ │ +
695 }
│ │ │ +
696
│ │ │ +
697 // Optimization in the always_noconv() case, to be generalized in the
│ │ │ +
698 // future: when __n > __buflen we read directly instead of using the
│ │ │ +
699 // buffer repeatedly.
│ │ │ +
700 const bool __testin = _M_mode & ios_base::in;
│ │ │ +
701 const streamsize __buflen = _M_buf_size > 1 ? _M_buf_size - 1 : 1;
│ │ │ +
702
│ │ │ +
703 if (__n > __buflen && __check_facet(_M_codecvt).always_noconv()
│ │ │ +
704 && __testin)
│ │ │ +
705 {
│ │ │ +
706 // First, copy the chars already present in the buffer.
│ │ │ +
707 const streamsize __avail = this->egptr() - this->gptr();
│ │ │ +
708 if (__avail != 0)
│ │ │ +
709 {
│ │ │ +
710 traits_type::copy(__s, this->gptr(), __avail);
│ │ │ +
711 __s += __avail;
│ │ │ +
712 this->setg(this->eback(), this->gptr() + __avail, this->egptr());
│ │ │ +
713 __ret += __avail;
│ │ │ +
714 __n -= __avail;
│ │ │ +
715 }
│ │ │ +
716
│ │ │ +
717 // Need to loop in case of short reads (relatively common
│ │ │ +
718 // with pipes).
│ │ │ + │ │ │ +
720 for (;;)
│ │ │ +
721 {
│ │ │ +
722 __len = _M_file.xsgetn(reinterpret_cast<char*>(__s), __n);
│ │ │ +
723 if (__len == -1)
│ │ │ +
724 __throw_ios_failure(__N("basic_filebuf::xsgetn "
│ │ │ +
725 "error reading the file"), errno);
│ │ │ +
726 if (__len == 0)
│ │ │ +
727 break;
│ │ │ +
728
│ │ │ +
729 __n -= __len;
│ │ │ +
730 __ret += __len;
│ │ │ +
731 if (__n == 0)
│ │ │ +
732 break;
│ │ │ +
733
│ │ │ +
734 __s += __len;
│ │ │ +
735 }
│ │ │ +
736
│ │ │ +
737 if (__n == 0)
│ │ │ +
738 {
│ │ │ +
739 // Set _M_reading. Buffer is already in initial 'read' mode.
│ │ │ +
740 _M_reading = true;
│ │ │ +
741 }
│ │ │ +
742 else if (__len == 0)
│ │ │ +
743 {
│ │ │ +
744 // If end of file is reached, set 'uncommitted'
│ │ │ +
745 // mode, thus allowing an immediate write without
│ │ │ +
746 // an intervening seek.
│ │ │ +
747 _M_set_buffer(-1);
│ │ │ +
748 _M_reading = false;
│ │ │ +
749 }
│ │ │ +
750 }
│ │ │ +
751 else
│ │ │ +
752 __ret += __streambuf_type::xsgetn(__s, __n);
│ │ │ +
753
│ │ │ +
754 return __ret;
│ │ │ +
755 }
│ │ │ +
│ │ │ +
756
│ │ │ +
757 template<typename _CharT, typename _Traits>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
760 xsputn(const _CharT* __s, streamsize __n)
│ │ │ +
761 {
│ │ │ +
762 streamsize __ret = 0;
│ │ │ +
763 // Optimization in the always_noconv() case, to be generalized in the
│ │ │ +
764 // future: when __n is larger than the available capacity we write
│ │ │ +
765 // directly instead of using the buffer.
│ │ │ +
766 const bool __testout = (_M_mode & ios_base::out
│ │ │ +
767 || _M_mode & ios_base::app);
│ │ │ +
768 if (__check_facet(_M_codecvt).always_noconv()
│ │ │ +
769 && __testout && !_M_reading)
│ │ │ +
770 {
│ │ │ +
771 streamsize __bufavail = this->epptr() - this->pptr();
│ │ │ +
772
│ │ │ +
773 // Don't mistake 'uncommitted' mode buffered with unbuffered.
│ │ │ +
774 if (!_M_writing && _M_buf_size > 1)
│ │ │ +
775 __bufavail = _M_buf_size - 1;
│ │ │ +
776
│ │ │ +
777 if (__n >= __bufavail)
│ │ │ +
778 {
│ │ │ +
779 const streamsize __buffill = this->pptr() - this->pbase();
│ │ │ +
780 const char* __buf = reinterpret_cast<const char*>(this->pbase());
│ │ │ +
781 __ret = _M_file.xsputn_2(__buf, __buffill,
│ │ │ +
782 reinterpret_cast<const char*>(__s),
│ │ │ +
783 __n);
│ │ │ +
784 if (__ret == __buffill + __n)
│ │ │ +
785 {
│ │ │ +
786 _M_set_buffer(0);
│ │ │ +
787 _M_writing = true;
│ │ │ +
788 }
│ │ │ +
789 if (__ret > __buffill)
│ │ │ +
790 __ret -= __buffill;
│ │ │ +
791 else
│ │ │ +
792 __ret = 0;
│ │ │ +
793 }
│ │ │ +
794 else
│ │ │ +
795 __ret = __streambuf_type::xsputn(__s, __n);
│ │ │ +
796 }
│ │ │ +
797 else
│ │ │ +
798 __ret = __streambuf_type::xsputn(__s, __n);
│ │ │ +
799 return __ret;
│ │ │ +
800 }
│ │ │ +
│ │ │ +
│ │ │ +
801
│ │ │ +
802 template<typename _CharT, typename _Traits>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
805 setbuf(char_type* __s, streamsize __n)
│ │ │ +
806 {
│ │ │ +
807 if (!this->is_open())
│ │ │ +
808 {
│ │ │ +
809 if (__s == 0 && __n == 0)
│ │ │ +
810 _M_buf_size = 1;
│ │ │ +
811 else if (__s && __n > 0)
│ │ │ +
812 {
│ │ │ +
813 // This is implementation-defined behavior, and assumes that
│ │ │ +
814 // an external char_type array of length __n exists and has
│ │ │ +
815 // been pre-allocated. If this is not the case, things will
│ │ │ +
816 // quickly blow up. When __n > 1, __n - 1 positions will be
│ │ │ +
817 // used for the get area, __n - 1 for the put area and 1
│ │ │ +
818 // position to host the overflow char of a full put area.
│ │ │ +
819 // When __n == 1, 1 position will be used for the get area
│ │ │ +
820 // and 0 for the put area, as in the unbuffered case above.
│ │ │ +
821 _M_buf = __s;
│ │ │ +
822 _M_buf_size = __n;
│ │ │ +
823 }
│ │ │ +
824 }
│ │ │ +
825 return this;
│ │ │ +
826 }
│ │ │ +
│ │ │ +
827
│ │ │ +
828
│ │ │ +
829 // According to 27.8.1.4 p11 - 13, seekoff should ignore the last
│ │ │ +
830 // argument (of type openmode).
│ │ │ +
831 template<typename _CharT, typename _Traits>
│ │ │ +
832 typename basic_filebuf<_CharT, _Traits>::pos_type
│ │ │ +
│ │ │ + │ │ │ +
834 seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode)
│ │ │ +
835 {
│ │ │ +
836 int __width = 0;
│ │ │ +
837 if (_M_codecvt)
│ │ │ +
838 __width = _M_codecvt->encoding();
│ │ │ +
839 if (__width < 0)
│ │ │ +
840 __width = 0;
│ │ │ +
841
│ │ │ +
842 pos_type __ret = pos_type(off_type(-1));
│ │ │ +
843 const bool __testfail = __off != 0 && __width <= 0;
│ │ │ +
844 if (this->is_open() && !__testfail)
│ │ │ +
845 {
│ │ │ +
846 // tellg and tellp queries do not affect any state, unless
│ │ │ +
847 // ! always_noconv and the put sequence is not empty.
│ │ │ +
848 // In that case, determining the position requires converting the
│ │ │ +
849 // put sequence. That doesn't use ext_buf, so requires a flush.
│ │ │ +
850 bool __no_movement = __way == ios_base::cur && __off == 0
│ │ │ +
851 && (!_M_writing || _M_codecvt->always_noconv());
│ │ │ +
852
│ │ │ +
853 // Ditch any pback buffers to avoid confusion.
│ │ │ +
854 if (!__no_movement)
│ │ │ +
855 _M_destroy_pback();
│ │ │ +
856
│ │ │ +
857 // Correct state at destination. Note that this is the correct
│ │ │ +
858 // state for the current position during output, because
│ │ │ +
859 // codecvt::unshift() returns the state to the initial state.
│ │ │ +
860 // This is also the correct state at the end of the file because
│ │ │ +
861 // an unshift sequence should have been written at the end.
│ │ │ +
862 __state_type __state = _M_state_beg;
│ │ │ +
863 off_type __computed_off = __off * __width;
│ │ │ +
864 if (_M_reading && __way == ios_base::cur)
│ │ │ +
865 {
│ │ │ +
866 __state = _M_state_last;
│ │ │ +
867 __computed_off += _M_get_ext_pos(__state);
│ │ │ +
868 }
│ │ │ +
869 if (!__no_movement)
│ │ │ +
870 __ret = _M_seek(__computed_off, __way, __state);
│ │ │ +
871 else
│ │ │ +
872 {
│ │ │ +
873 if (_M_writing)
│ │ │ +
874 __computed_off = this->pptr() - this->pbase();
│ │ │ +
875
│ │ │ +
876 off_type __file_off = _M_file.seekoff(0, ios_base::cur);
│ │ │ +
877 if (__file_off != off_type(-1))
│ │ │ +
878 {
│ │ │ + │ │ │ +
880 __ret.state(__state);
│ │ │ +
881 }
│ │ │ +
882 }
│ │ │ +
883 }
│ │ │ +
884 return __ret;
│ │ │ +
885 }
│ │ │ +
│ │ │ +
886
│ │ │ +
887 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
888 // 171. Strange seekpos() semantics due to joint position
│ │ │ +
889 // According to the resolution of DR 171, seekpos should ignore the last
│ │ │ +
890 // argument (of type openmode).
│ │ │ +
891 template<typename _CharT, typename _Traits>
│ │ │ +
892 typename basic_filebuf<_CharT, _Traits>::pos_type
│ │ │ +
│ │ │ + │ │ │ +
894 seekpos(pos_type __pos, ios_base::openmode)
│ │ │ +
895 {
│ │ │ +
896 pos_type __ret = pos_type(off_type(-1));
│ │ │ +
897 if (this->is_open())
│ │ │ +
898 {
│ │ │ +
899 // Ditch any pback buffers to avoid confusion.
│ │ │ +
900 _M_destroy_pback();
│ │ │ +
901 __ret = _M_seek(off_type(__pos), ios_base::beg, __pos.state());
│ │ │ +
902 }
│ │ │ +
903 return __ret;
│ │ │ +
904 }
│ │ │ +
│ │ │ +
905
│ │ │ +
906 template<typename _CharT, typename _Traits>
│ │ │ +
907 typename basic_filebuf<_CharT, _Traits>::pos_type
│ │ │ + │ │ │ +
909 _M_seek(off_type __off, ios_base::seekdir __way, __state_type __state)
│ │ │ +
910 {
│ │ │ +
911 pos_type __ret = pos_type(off_type(-1));
│ │ │ +
912 if (_M_terminate_output())
│ │ │ +
913 {
│ │ │ +
914 off_type __file_off = _M_file.seekoff(__off, __way);
│ │ │ +
915 if (__file_off != off_type(-1))
│ │ │ +
916 {
│ │ │ +
917 _M_reading = false;
│ │ │ +
918 _M_writing = false;
│ │ │ +
919 _M_ext_next = _M_ext_end = _M_ext_buf;
│ │ │ +
920 _M_set_buffer(-1);
│ │ │ +
921 _M_state_cur = __state;
│ │ │ + │ │ │ +
923 __ret.state(_M_state_cur);
│ │ │ +
924 }
│ │ │ +
925 }
│ │ │ +
926 return __ret;
│ │ │ +
927 }
│ │ │ +
928
│ │ │ +
929 // Returns the distance from the end of the ext buffer to the point
│ │ │ +
930 // corresponding to gptr(). This is a negative value. Updates __state
│ │ │ +
931 // from eback() correspondence to gptr().
│ │ │ +
932 template<typename _CharT, typename _Traits>
│ │ │ +
933 int basic_filebuf<_CharT, _Traits>::
│ │ │ +
934 _M_get_ext_pos(__state_type& __state)
│ │ │ +
935 {
│ │ │ +
936 if (_M_codecvt->always_noconv())
│ │ │ +
937 return this->gptr() - this->egptr();
│ │ │ +
938 else
│ │ │ +
939 {
│ │ │ +
940 // Calculate offset from _M_ext_buf that corresponds to
│ │ │ +
941 // gptr(). Precondition: __state == _M_state_last, which
│ │ │ +
942 // corresponds to eback().
│ │ │ +
943 const int __gptr_off =
│ │ │ +
944 _M_codecvt->length(__state, _M_ext_buf, _M_ext_next,
│ │ │ +
945 this->gptr() - this->eback());
│ │ │ +
946 return _M_ext_buf + __gptr_off - _M_ext_end;
│ │ │ +
947 }
│ │ │ +
948 }
│ │ │ +
949
│ │ │ +
950 template<typename _CharT, typename _Traits>
│ │ │ +
951 bool
│ │ │ +
952 basic_filebuf<_CharT, _Traits>::
│ │ │ +
953 _M_terminate_output()
│ │ │ +
954 {
│ │ │ +
955 // Part one: update the output sequence.
│ │ │ +
956 bool __testvalid = true;
│ │ │ +
957 if (this->pbase() < this->pptr())
│ │ │ +
958 {
│ │ │ +
959 const int_type __tmp = this->overflow();
│ │ │ +
960 if (traits_type::eq_int_type(__tmp, traits_type::eof()))
│ │ │ +
961 __testvalid = false;
│ │ │ +
962 }
│ │ │ +
963
│ │ │ +
964 // Part two: output unshift sequence.
│ │ │ +
965 if (_M_writing && !__check_facet(_M_codecvt).always_noconv()
│ │ │ +
966 && __testvalid)
│ │ │ +
967 {
│ │ │ +
968 // Note: this value is arbitrary, since there is no way to
│ │ │ +
969 // get the length of the unshift sequence from codecvt,
│ │ │ +
970 // without calling unshift.
│ │ │ +
971 const size_t __blen = 128;
│ │ │ +
972 char __buf[__blen];
│ │ │ +
973 codecvt_base::result __r;
│ │ │ +
974 streamsize __ilen = 0;
│ │ │ +
975
│ │ │ +
976 do
│ │ │ +
977 {
│ │ │ +
978 char* __next;
│ │ │ +
979 __r = _M_codecvt->unshift(_M_state_cur, __buf,
│ │ │ +
980 __buf + __blen, __next);
│ │ │ +
981 if (__r == codecvt_base::error)
│ │ │ +
982 __testvalid = false;
│ │ │ +
983 else if (__r == codecvt_base::ok ||
│ │ │ +
984 __r == codecvt_base::partial)
│ │ │ +
985 {
│ │ │ +
986 __ilen = __next - __buf;
│ │ │ +
987 if (__ilen > 0)
│ │ │ +
988 {
│ │ │ +
989 const streamsize __elen = _M_file.xsputn(__buf, __ilen);
│ │ │ +
990 if (__elen != __ilen)
│ │ │ +
991 __testvalid = false;
│ │ │ +
992 }
│ │ │ +
993 }
│ │ │ +
994 }
│ │ │ +
995 while (__r == codecvt_base::partial && __ilen > 0 && __testvalid);
│ │ │ +
996
│ │ │ +
997 if (__testvalid)
│ │ │ +
998 {
│ │ │ +
999 // This second call to overflow() is required by the standard,
│ │ │ +
1000 // but it's not clear why it's needed, since the output buffer
│ │ │ +
1001 // should be empty by this point (it should have been emptied
│ │ │ +
1002 // in the first call to overflow()).
│ │ │ +
1003 const int_type __tmp = this->overflow();
│ │ │ +
1004 if (traits_type::eq_int_type(__tmp, traits_type::eof()))
│ │ │ +
1005 __testvalid = false;
│ │ │ +
1006 }
│ │ │ +
1007 }
│ │ │ +
1008 return __testvalid;
│ │ │ +
1009 }
│ │ │ +
1010
│ │ │ +
1011 template<typename _CharT, typename _Traits>
│ │ │ +
1012 int
│ │ │ +
│ │ │ + │ │ │ +
1014 sync()
│ │ │ +
1015 {
│ │ │ +
1016 // Make sure that the internal buffer resyncs its idea of
│ │ │ +
1017 // the file position with the external file.
│ │ │ +
1018 int __ret = 0;
│ │ │ +
1019 if (this->pbase() < this->pptr())
│ │ │ +
1020 {
│ │ │ +
1021 const int_type __tmp = this->overflow();
│ │ │ +
1022 if (traits_type::eq_int_type(__tmp, traits_type::eof()))
│ │ │ +
1023 __ret = -1;
│ │ │ +
1024 }
│ │ │ +
1025 return __ret;
│ │ │ +
1026 }
│ │ │ +
│ │ │ +
1027
│ │ │ +
1028 template<typename _CharT, typename _Traits>
│ │ │ +
1029 void
│ │ │ +
│ │ │ + │ │ │ +
1031 imbue(const locale& __loc)
│ │ │ +
1032 {
│ │ │ +
1033 bool __testvalid = true;
│ │ │ +
1034
│ │ │ +
1035 const __codecvt_type* const _M_codecvt_tmp
│ │ │ + │ │ │ +
1037
│ │ │ +
1038 if (this->is_open())
│ │ │ +
1039 {
│ │ │ +
1040 // encoding() == -1 is ok only at the beginning.
│ │ │ +
1041 if ((_M_reading || _M_writing)
│ │ │ +
1042 && __check_facet(_M_codecvt).encoding() == -1)
│ │ │ +
1043 __testvalid = false;
│ │ │ +
1044 else
│ │ │ +
1045 {
│ │ │ +
1046 if (_M_reading)
│ │ │ +
1047 {
│ │ │ +
1048 if (__check_facet(_M_codecvt).always_noconv())
│ │ │ +
1049 {
│ │ │ +
1050 if (_M_codecvt_tmp
│ │ │ +
1051 && !__check_facet(_M_codecvt_tmp).always_noconv())
│ │ │ +
1052 __testvalid = this->seekoff(0, ios_base::cur, _M_mode)
│ │ │ +
1053 != pos_type(off_type(-1));
│ │ │ +
1054 }
│ │ │ +
1055 else
│ │ │ +
1056 {
│ │ │ +
1057 // External position corresponding to gptr().
│ │ │ +
1058 _M_ext_next = _M_ext_buf
│ │ │ +
1059 + _M_codecvt->length(_M_state_last, _M_ext_buf,
│ │ │ +
1060 _M_ext_next,
│ │ │ +
1061 this->gptr() - this->eback());
│ │ │ +
1062 const streamsize __remainder = _M_ext_end - _M_ext_next;
│ │ │ +
1063 if (__remainder)
│ │ │ +
1064 __builtin_memmove(_M_ext_buf, _M_ext_next, __remainder);
│ │ │ +
1065
│ │ │ +
1066 _M_ext_next = _M_ext_buf;
│ │ │ +
1067 _M_ext_end = _M_ext_buf + __remainder;
│ │ │ +
1068 _M_set_buffer(-1);
│ │ │ +
1069 _M_state_last = _M_state_cur = _M_state_beg;
│ │ │ +
1070 }
│ │ │ +
1071 }
│ │ │ +
1072 else if (_M_writing && (__testvalid = _M_terminate_output()))
│ │ │ +
1073 _M_set_buffer(-1);
│ │ │ +
1074 }
│ │ │ +
1075 }
│ │ │ +
1076
│ │ │ +
1077 if (__testvalid)
│ │ │ +
1078 _M_codecvt = _M_codecvt_tmp;
│ │ │ +
1079 else
│ │ │ +
1080 _M_codecvt = 0;
│ │ │ +
1081 }
│ │ │ +
│ │ │ +
1082
│ │ │ +
1083 // Inhibit implicit instantiations for required instantiations,
│ │ │ +
1084 // which are defined via explicit instantiations elsewhere.
│ │ │ +
1085#if _GLIBCXX_EXTERN_TEMPLATE
│ │ │ +
1086 extern template class basic_filebuf<char>;
│ │ │ +
1087 extern template class basic_ifstream<char>;
│ │ │ +
1088 extern template class basic_ofstream<char>;
│ │ │ +
1089 extern template class basic_fstream<char>;
│ │ │ +
1090
│ │ │ +
1091#ifdef _GLIBCXX_USE_WCHAR_T
│ │ │ +
1092 extern template class basic_filebuf<wchar_t>;
│ │ │ +
1093 extern template class basic_ifstream<wchar_t>;
│ │ │ +
1094 extern template class basic_ofstream<wchar_t>;
│ │ │ +
1095 extern template class basic_fstream<wchar_t>;
│ │ │ +
1096#endif
│ │ │ +
1097#endif
│ │ │ +
1098
│ │ │ +
1099_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
1100} // namespace std
│ │ │ +
1101
│ │ │ +
1102#pragma GCC diagnostic pop
│ │ │ +
1103#endif
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ +
constexpr const _Tp & min(const _Tp &, const _Tp &)
This does what you think it does.
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
Definition postypes.h:73
│ │ │ -
traits_type::int_type int_type
Definition streambuf:137
│ │ │ -
virtual streamsize xsputn(const char_type *__s, streamsize __n)
Multiple character insertion.
Definition streambuf.tcc:85
│ │ │ - │ │ │ -
virtual streamsize xsgetn(char_type *__s, streamsize __n)
Multiple character extraction.
Definition streambuf.tcc:51
│ │ │ - │ │ │ +
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)
Alters the stream positions.
Definition fstream.tcc:834
│ │ │ +
virtual int_type underflow()
Fetches more data from the controlled sequence.
Definition fstream.tcc:328
│ │ │ +
virtual streamsize showmanyc()
Investigating the data available.
Definition fstream.tcc:302
│ │ │ +
virtual void imbue(const locale &__loc)
Changes translations.
Definition fstream.tcc:1031
│ │ │ +
virtual streamsize xsgetn(char_type *__s, streamsize __n)
Multiple character extraction.
Definition fstream.tcc:674
│ │ │ +
__filebuf_type * close()
Closes the currently associated file.
Definition fstream.tcc:254
│ │ │ +
virtual pos_type seekpos(pos_type __pos, ios_base::openmode __mode=ios_base::in|ios_base::out)
Alters the stream positions.
Definition fstream.tcc:894
│ │ │ +
virtual int_type pbackfail(int_type __c=_Traits::eof())
Tries to back up the input sequence.
Definition fstream.tcc:487
│ │ │ +
virtual streamsize xsputn(const char_type *__s, streamsize __n)
Multiple character insertion.
Definition fstream.tcc:760
│ │ │ +
virtual int_type overflow(int_type __c=_Traits::eof())
Consumes data from the buffer; writes to the controlled sequence.
Definition fstream.tcc:546
│ │ │ +
__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
│ │ │ +
virtual int sync()
Synchronizes the buffer arrays with the controlled sequences.
Definition fstream.tcc:1014
│ │ │ +
virtual __streambuf_type * setbuf(char_type *__s, streamsize __n)
Manipulates the buffer.
Definition fstream.tcc:805
│ │ │ + │ │ │ +
locale _M_buf_locale
Current locale setting.
Definition streambuf:201
│ │ │ +
The base of the I/O class hierarchy.
Definition ios_base.h:266
│ │ │ +
static const seekdir cur
Request a seek relative to the current position within the sequence.
Definition ios_base.h:529
│ │ │ +
static const seekdir beg
Request a seek relative to the beginning of the stream.
Definition ios_base.h:526
│ │ │ +
static const seekdir end
Request a seek relative to the current end of the sequence.
Definition ios_base.h:532
│ │ │ +
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
│ │ │ +
static const openmode binary
Perform input and output in binary mode (as opposed to text mode). This is probably not what you thin...
Definition ios_base.h:495
│ │ │ +
_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 ate
Open and seek to end immediately after opening.
Definition ios_base.h:490
│ │ │ +
Container class for localization functionality.
│ │ │ + │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,11 +1,11 @@ │ │ │ │ libstdc++ │ │ │ │ -streambuf.tcc │ │ │ │ +fstream.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// Stream buffer classes -*- C++ -*- │ │ │ │ +1// File based streams -*- C++ -*- │ │ │ │ 2 │ │ │ │ 3// Copyright (C) 1997-2025 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,187 +21,1217 @@ │ │ │ │ 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/fstream.tcc │ │ │ │ 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{fstream} │ │ │ │ 28 */ │ │ │ │ 29 │ │ │ │ 30// │ │ │ │ -31// ISO C++ 14882: 27.5 Stream buffers │ │ │ │ +31// ISO C++ 14882: 27.8 File-based streams │ │ │ │ 32// │ │ │ │ 33 │ │ │ │ -34#ifndef _STREAMBUF_TCC │ │ │ │ -35#define _STREAMBUF_TCC 1 │ │ │ │ +34#ifndef _FSTREAM_TCC │ │ │ │ +35#define _FSTREAM_TCC 1 │ │ │ │ 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 │ │ │ │ +44#include <_b_i_t_s_/_c_x_x_a_b_i___f_o_r_c_e_d_._h> │ │ │ │ +45#include <_b_i_t_s_/_m_o_v_e_._h> // for swap │ │ │ │ +46#include <_c_e_r_r_n_o> │ │ │ │ 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 _____r_e_t = 0; │ │ │ │ -54 while (_____r_e_t < __n) │ │ │ │ -55 { │ │ │ │ -56 const _s_t_r_e_a_m_s_i_z_e _____b_u_f___l_e_n = this->egptr() - this->gptr(); │ │ │ │ -57 if (_____b_u_f___l_e_n) │ │ │ │ -58 { │ │ │ │ -59 const _s_t_r_e_a_m_s_i_z_e _____r_e_m_a_i_n_i_n_g = __n - _____r_e_t; │ │ │ │ -60 const _s_t_r_e_a_m_s_i_z_e _____l_e_n = _s_t_d_:_:_m_i_n(_____b_u_f___l_e_n, _____r_e_m_a_i_n_i_n_g); │ │ │ │ -61 traits_type::copy(_____s, this->gptr(), _____l_e_n); │ │ │ │ -62 _____r_e_t += _____l_e_n; │ │ │ │ -63 _____s += _____l_e_n; │ │ │ │ -64 this->__safe_gbump(_____l_e_n); │ │ │ │ -65 } │ │ │ │ -66 │ │ │ │ -67 if (_____r_e_t < __n) │ │ │ │ -68 { │ │ │ │ -69 const _i_n_t___t_y_p_e __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 ++_____r_e_t; │ │ │ │ -74 } │ │ │ │ -75 else │ │ │ │ -76 break; │ │ │ │ -77 } │ │ │ │ -78 } │ │ │ │ -79 return _____r_e_t; │ │ │ │ -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 _____r_e_t = 0; │ │ │ │ -88 while (_____r_e_t < __n) │ │ │ │ -89 { │ │ │ │ -90 const _s_t_r_e_a_m_s_i_z_e _____b_u_f___l_e_n = this->epptr() - this->pptr(); │ │ │ │ -91 if (_____b_u_f___l_e_n) │ │ │ │ -92 { │ │ │ │ -93 const _s_t_r_e_a_m_s_i_z_e _____r_e_m_a_i_n_i_n_g = __n - _____r_e_t; │ │ │ │ -94 const _s_t_r_e_a_m_s_i_z_e _____l_e_n = _s_t_d_:_:_m_i_n(_____b_u_f___l_e_n, _____r_e_m_a_i_n_i_n_g); │ │ │ │ -95 traits_type::copy(this->pptr(), _____s, _____l_e_n); │ │ │ │ -96 _____r_e_t += _____l_e_n; │ │ │ │ -97 _____s += _____l_e_n; │ │ │ │ -98 this->__safe_pbump(_____l_e_n); │ │ │ │ -99 } │ │ │ │ -100 │ │ │ │ -101 if (_____r_e_t < __n) │ │ │ │ -102 { │ │ │ │ -103 _i_n_t___t_y_p_e __c = this->overflow(traits_type::to_int_type(*_____s)); │ │ │ │ -104 if (!traits_type::eq_int_type(__c, traits_type::eof())) │ │ │ │ -105 { │ │ │ │ -106 ++_____r_e_t; │ │ │ │ -107 ++_____s; │ │ │ │ -108 } │ │ │ │ -109 else │ │ │ │ -110 break; │ │ │ │ -111 } │ │ │ │ -112 } │ │ │ │ -113 return _____r_e_t; │ │ │ │ -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_>* _____s_b_i_n, │ │ │ │ -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_>* _____s_b_o_u_t, │ │ │ │ -123 bool& _____i_n_e_o_f) │ │ │ │ -124 { │ │ │ │ -125 _s_t_r_e_a_m_s_i_z_e _____r_e_t = 0; │ │ │ │ -126 _____i_n_e_o_f = true; │ │ │ │ -127 typename _Traits::int_type __c = _____s_b_i_n->sgetc(); │ │ │ │ -128 while (!_Traits::eq_int_type(__c, _Traits::eof())) │ │ │ │ -129 { │ │ │ │ -130 __c = _____s_b_o_u_t->sputc(_Traits::to_char_type(__c)); │ │ │ │ -131 if (_Traits::eq_int_type(__c, _Traits::eof())) │ │ │ │ -132 { │ │ │ │ -133 _____i_n_e_o_f = false; │ │ │ │ -134 break; │ │ │ │ -135 } │ │ │ │ -136 ++__ret; │ │ │ │ -137 __c = __sbin->snextc(); │ │ │ │ -138 } │ │ │ │ -139 return __ret; │ │ │ │ -140 } │ │ │ │ -141 │ │ │ │ -142 template │ │ │ │ -143 inline _s_t_r_e_a_m_s_i_z_e │ │ │ │ -144 __copy_streambufs(basic_streambuf<_CharT, _Traits>* __sbin, │ │ │ │ -145 basic_streambuf<_CharT, _Traits>* __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 basic_streambuf; │ │ │ │ -155 │ │ │ │ -156 extern template │ │ │ │ -157 _s_t_r_e_a_m_s_i_z_e │ │ │ │ -158 __copy_streambufs(basic_streambuf*, │ │ │ │ -159 basic_streambuf*); │ │ │ │ -160 │ │ │ │ -161#ifdef _GLIBCXX_USE_WCHAR_T │ │ │ │ -162 extern template class basic_streambuf; │ │ │ │ -163 │ │ │ │ -164 extern template │ │ │ │ -165 _s_t_r_e_a_m_s_i_z_e │ │ │ │ -166 __copy_streambufs(basic_streambuf*, │ │ │ │ -167 basic_streambuf*); │ │ │ │ -168#endif │ │ │ │ -169#endif │ │ │ │ -170 │ │ │ │ -171_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -172} // namespace std │ │ │ │ -173 │ │ │ │ -174#pragma GCC diagnostic pop │ │ │ │ -175#endif │ │ │ │ +48namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +49{ │ │ │ │ +50_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +51 │ │ │ │ +52 template │ │ │ │ +53 void │ │ │ │ +54 basic_filebuf<_CharT, _Traits>:: │ │ │ │ +55 _M_allocate_internal_buffer() │ │ │ │ +56 { │ │ │ │ +57 // Allocate internal buffer only if one doesn't already exist │ │ │ │ +58 // (either allocated or provided by the user via setbuf). │ │ │ │ +59 if (!_M_buf_allocated && !_M_buf) │ │ │ │ +60 { │ │ │ │ +61 _M_buf = new char_type[_M_buf_size]; │ │ │ │ +62 _M_buf_allocated = true; │ │ │ │ +63 } │ │ │ │ +64 } │ │ │ │ +65 │ │ │ │ +66 template │ │ │ │ +67 void │ │ │ │ +68 basic_filebuf<_CharT, _Traits>:: │ │ │ │ +69 _M_destroy_internal_buffer() throw() │ │ │ │ +70 { │ │ │ │ +71 if (_M_buf_allocated) │ │ │ │ +72 { │ │ │ │ +73 delete [] _M_buf; │ │ │ │ +74 _M_buf = 0; │ │ │ │ +75 _M_buf_allocated = false; │ │ │ │ +76 } │ │ │ │ +77 delete [] _M_ext_buf; │ │ │ │ +78 _M_ext_buf = 0; │ │ │ │ +79 _M_ext_buf_size = 0; │ │ │ │ +80 _M_ext_next = 0; │ │ │ │ +81 _M_ext_end = 0; │ │ │ │ +82 } │ │ │ │ +83 │ │ │ │ +84 template │ │ │ │ +_8_5 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +86_ _b_a_s_i_c___f_i_l_e_b_u_f() : _____s_t_r_e_a_m_b_u_f___t_y_p_e(), _M_lock(), _M_file(&_M_lock), │ │ │ │ +87 _M_mode(_i_o_s___b_a_s_e::openmode(0)), _M_state_beg(), _M_state_cur(), │ │ │ │ +88 _M_state_last(), _M_buf(0), _M_buf_size(_GLIBCXX_BUFSIZ), │ │ │ │ +89 _M_buf_allocated(_f_a_l_s_e), _M_reading(_f_a_l_s_e), _M_writing(_f_a_l_s_e), _M_pback(), │ │ │ │ +90 _M_pback_cur_save(0), _M_pback_end_save(0), _M_pback_init(_f_a_l_s_e), │ │ │ │ +91 _M_codecvt(0), _M_ext_buf(0), _M_ext_buf_size(0), _M_ext_next(0), │ │ │ │ +92 _M_ext_end(0) │ │ │ │ +93 { │ │ │ │ +94 _M_codecvt = _s_t_d_:_:_____t_r_y___u_s_e___f_a_c_e_t_<_____c_o_d_e_c_v_t___t_y_p_e_>(this->___M___b_u_f___l_o_c_a_l_e); │ │ │ │ +95 } │ │ │ │ +96 │ │ │ │ +97#if __cplusplus >= 201103L │ │ │ │ +98 template │ │ │ │ +99 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +100_ _b_a_s_i_c___f_i_l_e_b_u_f(_b_a_s_i_c___f_i_l_e_b_u_f&& _____r_h_s) │ │ │ │ +101 : __streambuf_type(_____r_h_s), │ │ │ │ +102 _M_lock(), _M_file(_s_t_d::_m_o_v_e(_____r_h_s._M_file), &_M_lock), │ │ │ │ +103 _M_mode(_s_t_d::__exchange(_____r_h_s._M_mode, _i_o_s___b_a_s_e::openmode(0))), │ │ │ │ +104 _M_state_beg(_s_t_d::_m_o_v_e(_____r_h_s._M_state_beg)), │ │ │ │ +105 _M_state_cur(_s_t_d::_m_o_v_e(_____r_h_s._M_state_cur)), │ │ │ │ +106 _M_state_last(_s_t_d::_m_o_v_e(_____r_h_s._M_state_last)), │ │ │ │ +107 _M_buf(_s_t_d::__exchange(_____r_h_s._M_buf, _n_u_l_l_p_t_r)), │ │ │ │ +108 _M_buf_size(_s_t_d::__exchange(_____r_h_s._M_buf_size, 1)), │ │ │ │ +109 _M_buf_allocated(_s_t_d::__exchange(_____r_h_s._M_buf_allocated, _f_a_l_s_e)), │ │ │ │ +110 _M_reading(_s_t_d::__exchange(_____r_h_s._M_reading, _f_a_l_s_e)), │ │ │ │ +111 _M_writing(_s_t_d::__exchange(_____r_h_s._M_writing, _f_a_l_s_e)), │ │ │ │ +112 _M_pback(_____r_h_s._M_pback), │ │ │ │ +113 _M_pback_cur_save(_s_t_d::__exchange(_____r_h_s._M_pback_cur_save, _n_u_l_l_p_t_r)), │ │ │ │ +114 _M_pback_end_save(_s_t_d::__exchange(_____r_h_s._M_pback_end_save, _n_u_l_l_p_t_r)), │ │ │ │ +115 _M_pback_init(_s_t_d::__exchange(_____r_h_s._M_pback_init, _f_a_l_s_e)), │ │ │ │ +116 _M_codecvt(_____r_h_s._M_codecvt), │ │ │ │ +117 _M_ext_buf(_s_t_d::__exchange(_____r_h_s._M_ext_buf, _n_u_l_l_p_t_r)), │ │ │ │ +118 _M_ext_buf_size(_s_t_d::__exchange(_____r_h_s._M_ext_buf_size, 0)), │ │ │ │ +119 _M_ext_next(_s_t_d::__exchange(_____r_h_s._M_ext_next, _n_u_l_l_p_t_r)), │ │ │ │ +120 _M_ext_end(_s_t_d::__exchange(_____r_h_s._M_ext_end, _n_u_l_l_p_t_r)) │ │ │ │ +121 { │ │ │ │ +122 _____r_h_s._M_set_buffer(-1); │ │ │ │ +123 _____r_h_s._M_state_last = _____r_h_s._M_state_cur = _____r_h_s._M_state_beg; │ │ │ │ +124 } │ │ │ │ +125 │ │ │ │ +126 template │ │ │ │ +127 basic_filebuf<_CharT, _Traits>& │ │ │ │ +128 basic_filebuf<_CharT, _Traits>:: │ │ │ │ +129 operator=(basic_filebuf&& __rhs) │ │ │ │ +130 { │ │ │ │ +131 this->close(); │ │ │ │ +132 __streambuf_type::operator=(__rhs); │ │ │ │ +133 _M_file.swap(__rhs._M_file); │ │ │ │ +134 _M_mode = std::__exchange(__rhs._M_mode, _i_o_s___b_a_s_e_:_:_o_p_e_n_m_o_d_e(0)); │ │ │ │ +135 _M_state_beg = _s_t_d_:_:_m_o_v_e(__rhs._M_state_beg); │ │ │ │ +136 _M_state_cur = _s_t_d_:_:_m_o_v_e(__rhs._M_state_cur); │ │ │ │ +137 _M_state_last = _s_t_d_:_:_m_o_v_e(__rhs._M_state_last); │ │ │ │ +138 _M_buf = std::__exchange(__rhs._M_buf, nullptr); │ │ │ │ +139 _M_buf_size = std::__exchange(__rhs._M_buf_size, 1); │ │ │ │ +140 _M_buf_allocated = std::__exchange(__rhs._M_buf_allocated, false); │ │ │ │ +141 _M_ext_buf = std::__exchange(__rhs._M_ext_buf, nullptr); │ │ │ │ +142 _M_ext_buf_size = std::__exchange(__rhs._M_ext_buf_size, 0); │ │ │ │ +143 _M_ext_next = std::__exchange(__rhs._M_ext_next, nullptr); │ │ │ │ +144 _M_ext_end = std::__exchange(__rhs._M_ext_end, nullptr); │ │ │ │ +145 _M_reading = std::__exchange(__rhs._M_reading, false); │ │ │ │ +146 _M_writing = std::__exchange(__rhs._M_writing, false); │ │ │ │ +147 _M_pback_cur_save = std::__exchange(__rhs._M_pback_cur_save, nullptr); │ │ │ │ +148 _M_pback_end_save = std::__exchange(__rhs._M_pback_end_save, nullptr); │ │ │ │ +149 _M_pback_init = std::__exchange(__rhs._M_pback_init, false); │ │ │ │ +150 __rhs._M_set_buffer(-1); │ │ │ │ +151 __rhs._M_state_last = __rhs._M_state_cur = __rhs._M_state_beg; │ │ │ │ +152 return *this; │ │ │ │ +153 } │ │ │ │ +154 │ │ │ │ +155 template │ │ │ │ +156 void │ │ │ │ +157 basic_filebuf<_CharT, _Traits>:: │ │ │ │ +158 swap(basic_filebuf& __rhs) │ │ │ │ +159 { │ │ │ │ +160 __streambuf_type::swap(__rhs); │ │ │ │ +161 _M_file.swap(__rhs._M_file); │ │ │ │ +162 std::swap(_M_mode, __rhs._M_mode); │ │ │ │ +163 std::swap(_M_state_beg, __rhs._M_state_beg); │ │ │ │ +164 std::swap(_M_state_cur, __rhs._M_state_cur); │ │ │ │ +165 std::swap(_M_state_last, __rhs._M_state_last); │ │ │ │ +166 std::swap(_M_buf, __rhs._M_buf); │ │ │ │ +167 std::swap(_M_buf_size, __rhs._M_buf_size); │ │ │ │ +168 std::swap(_M_buf_allocated, __rhs._M_buf_allocated); │ │ │ │ +169 std::swap(_M_ext_buf, __rhs._M_ext_buf); │ │ │ │ +170 std::swap(_M_ext_buf_size, __rhs._M_ext_buf_size); │ │ │ │ +171 std::swap(_M_ext_next, __rhs._M_ext_next); │ │ │ │ +172 std::swap(_M_ext_end, __rhs._M_ext_end); │ │ │ │ +173 std::swap(_M_reading, __rhs._M_reading); │ │ │ │ +174 std::swap(_M_writing, __rhs._M_writing); │ │ │ │ +175 std::swap(_M_pback_cur_save, __rhs._M_pback_cur_save); │ │ │ │ +176 std::swap(_M_pback_end_save, __rhs._M_pback_end_save); │ │ │ │ +177 std::swap(_M_pback_init, __rhs._M_pback_init); │ │ │ │ +178 } │ │ │ │ +179#endif │ │ │ │ +180 │ │ │ │ +181 template │ │ │ │ +182 typename basic_filebuf<_CharT, _Traits>::__filebuf_type* │ │ │ │ +_1_8_3 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +184_ _o_p_e_n(const char* _____s, ios_base::openmode _____m_o_d_e) │ │ │ │ +185 { │ │ │ │ +186 _____f_i_l_e_b_u_f___t_y_p_e *_____r_e_t = 0; │ │ │ │ +187 if (!this->is_open()) │ │ │ │ +188 { │ │ │ │ +189 _M_file.open(_____s, _____m_o_d_e); │ │ │ │ +190 if (this->is_open()) │ │ │ │ +191 { │ │ │ │ +192 _M_allocate_internal_buffer(); │ │ │ │ +193 _M_mode = _____m_o_d_e; │ │ │ │ +194 │ │ │ │ +195 // Setup initial buffer to 'uncommitted' mode. │ │ │ │ +196 _M_reading = false; │ │ │ │ +197 _M_writing = false; │ │ │ │ +198 _M_set_buffer(-1); │ │ │ │ +199 │ │ │ │ +200 // Reset to initial state. │ │ │ │ +201 _M_state_last = _M_state_cur = _M_state_beg; │ │ │ │ +202 │ │ │ │ +203 // 27.8.1.3,4 │ │ │ │ +204 if ((_____m_o_d_e & _i_o_s___b_a_s_e_:_:_a_t_e) │ │ │ │ +205 && this->seekoff(0, _i_o_s___b_a_s_e_:_:_e_n_d, _____m_o_d_e) │ │ │ │ +206 == pos_type(off_type(-1))) │ │ │ │ +207 this->close(); │ │ │ │ +208 else │ │ │ │ +209 _____r_e_t = this; │ │ │ │ +210 } │ │ │ │ +211 } │ │ │ │ +212 return _____r_e_t; │ │ │ │ +213 } │ │ │ │ +214 │ │ │ │ +215#if _GLIBCXX_HAVE__WFOPEN && _GLIBCXX_USE_WCHAR_T │ │ │ │ +216 template │ │ │ │ +217 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>* │ │ │ │ +218 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +219_ _o_p_e_n(const wchar_t* _____s, ios_base::openmode _____m_o_d_e) │ │ │ │ +220 { │ │ │ │ +221 __filebuf_type *_____r_e_t = 0; │ │ │ │ +222 if (!this->is_open()) │ │ │ │ +223 { │ │ │ │ +224 _M_file.open(_____s, _____m_o_d_e); │ │ │ │ +225 if (this->is_open()) │ │ │ │ +226 { │ │ │ │ +227 _M_allocate_internal_buffer(); │ │ │ │ +228 _M_mode = _____m_o_d_e; │ │ │ │ +229 │ │ │ │ +230 // Setup initial buffer to 'uncommitted' mode. │ │ │ │ +231 _M_reading = false; │ │ │ │ +232 _M_writing = false; │ │ │ │ +233 _M_set_buffer(-1); │ │ │ │ +234 │ │ │ │ +235 // Reset to initial state. │ │ │ │ +236 _M_state_last = _M_state_cur = _M_state_beg; │ │ │ │ +237 │ │ │ │ +238 // 27.8.1.3,4 │ │ │ │ +239 if ((_____m_o_d_e & _i_o_s___b_a_s_e_:_:_a_t_e) │ │ │ │ +240 && this->seekoff(0, _i_o_s___b_a_s_e_:_:_e_n_d, _____m_o_d_e) │ │ │ │ +241 == pos_type(off_type(-1))) │ │ │ │ +242 this->close(); │ │ │ │ +243 else │ │ │ │ +244 _____r_e_t = this; │ │ │ │ +245 } │ │ │ │ +246 } │ │ │ │ +_2_4_7 return _____r_e_t; │ │ │ │ +248 } │ │ │ │ +249#endif // HAVE__WFOPEN && USE_WCHAR_T │ │ │ │ +250 │ │ │ │ +251 template │ │ │ │ +252 typename _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_:_____f_i_l_e_b_u_f___t_y_p_e* │ │ │ │ +_2_5_3 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +254_ _c_l_o_s_e() │ │ │ │ +255 { │ │ │ │ +256 if (!this->is_open()) │ │ │ │ +257 return 0; │ │ │ │ +258 │ │ │ │ +259 bool _____t_e_s_t_f_a_i_l = false; │ │ │ │ +260 { │ │ │ │ +261 // NB: Do this here so that re-opened filebufs will be cool... │ │ │ │ +262 struct _____c_l_o_s_e___s_e_n_t_r_y │ │ │ │ +263 { │ │ │ │ +264 _b_a_s_i_c___f_i_l_e_b_u_f *_____f_b; │ │ │ │ +265 _____c_l_o_s_e___s_e_n_t_r_y (_b_a_s_i_c___f_i_l_e_b_u_f *_____f_b_i): _____f_b(_____f_b_i) { } │ │ │ │ +266 _~_____c_l_o_s_e___s_e_n_t_r_y () │ │ │ │ +267 { │ │ │ │ +268 _____f_b->_M_mode = _i_o_s___b_a_s_e_:_:_o_p_e_n_m_o_d_e(0); │ │ │ │ +269 _____f_b->_M_pback_init = false; │ │ │ │ +270 _____f_b->_M_destroy_internal_buffer(); │ │ │ │ +271 _____f_b->_M_reading = false; │ │ │ │ +272 _____f_b->_M_writing = false; │ │ │ │ +273 _____f_b->_M_set_buffer(-1); │ │ │ │ +274 _____f_b->_M_state_last = _____f_b->_M_state_cur = _____f_b->_M_state_beg; │ │ │ │ +275 } │ │ │ │ +276 } _____c_s (this); │ │ │ │ +277 │ │ │ │ +278 __try │ │ │ │ +279 { │ │ │ │ +280 if (!_M_terminate_output()) │ │ │ │ +281 _____t_e_s_t_f_a_i_l = true; │ │ │ │ +282 } │ │ │ │ +283 __catch(...) │ │ │ │ +284 { │ │ │ │ +285 _M_file.close(); │ │ │ │ +286 __throw_exception_again; │ │ │ │ +287 } │ │ │ │ +288 } │ │ │ │ +289 │ │ │ │ +290 if (!_M_file.close()) │ │ │ │ +291 _____t_e_s_t_f_a_i_l = true; │ │ │ │ +292 │ │ │ │ +293 if (_____t_e_s_t_f_a_i_l) │ │ │ │ +294 return 0; │ │ │ │ +295 else │ │ │ │ +296 return this; │ │ │ │ +297 } │ │ │ │ +298 │ │ │ │ +299 template │ │ │ │ +300 _s_t_r_e_a_m_s_i_z_e │ │ │ │ +_3_0_1 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +302_ _s_h_o_w_m_a_n_y_c() │ │ │ │ +303 { │ │ │ │ +304 _s_t_r_e_a_m_s_i_z_e _____r_e_t = -1; │ │ │ │ +305 const bool _____t_e_s_t_i_n = _M_mode & _i_o_s___b_a_s_e_:_:_i_n; │ │ │ │ +306 if (_____t_e_s_t_i_n && this->is_open()) │ │ │ │ +307 { │ │ │ │ +308 // For a stateful encoding (-1) the pending sequence might be just │ │ │ │ +309 // shift and unshift prefixes with no actual character. │ │ │ │ +310 _____r_e_t = this->egptr() - this->gptr(); │ │ │ │ +311 │ │ │ │ +312#if _GLIBCXX_HAVE_DOS_BASED_FILESYSTEM │ │ │ │ +313 // About this workaround, see libstdc++/20806. │ │ │ │ +314 const bool _____t_e_s_t_b_i_n_a_r_y = _M_mode & _i_o_s___b_a_s_e_:_:_b_i_n_a_r_y; │ │ │ │ +315 if (__check_facet(_M_codecvt).encoding() >= 0 │ │ │ │ +316 && _____t_e_s_t_b_i_n_a_r_y) │ │ │ │ +317#else │ │ │ │ +318 if (__check_facet(_M_codecvt).encoding() >= 0) │ │ │ │ +319#endif │ │ │ │ +320 _____r_e_t += _M_file.showmanyc() / _M_codecvt->max_length(); │ │ │ │ +321 } │ │ │ │ +322 return _____r_e_t; │ │ │ │ +_3_2_3 } │ │ │ │ +324 │ │ │ │ +325 template │ │ │ │ +326 typename basic_filebuf<_CharT, _Traits>::int_type │ │ │ │ +_3_2_7 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +328_ _u_n_d_e_r_f_l_o_w() │ │ │ │ +329 { │ │ │ │ +330 int_type _____r_e_t = traits_type::eof(); │ │ │ │ +331 const bool _____t_e_s_t_i_n = _M_mode & _i_o_s___b_a_s_e_:_:_i_n; │ │ │ │ +332 if (_____t_e_s_t_i_n) │ │ │ │ +333 { │ │ │ │ +334 if (_M_writing) │ │ │ │ +335 { │ │ │ │ +336 if (overflow() == traits_type::eof()) │ │ │ │ +337 return _____r_e_t; │ │ │ │ +338 _M_set_buffer(-1); │ │ │ │ +339 _M_writing = false; │ │ │ │ +340 } │ │ │ │ +341 // Check for pback madness, and if so switch back to the │ │ │ │ +342 // normal buffers and jet outta here before expensive │ │ │ │ +343 // fileops happen... │ │ │ │ +344 _M_destroy_pback(); │ │ │ │ +345 │ │ │ │ +346 if (this->gptr() < this->egptr()) │ │ │ │ +347 return traits_type::to_int_type(*this->gptr()); │ │ │ │ +348 │ │ │ │ +349 // Get and convert input sequence. │ │ │ │ +350 const size_t _____b_u_f_l_e_n = _M_buf_size > 1 ? _M_buf_size - 1 : 1; │ │ │ │ +351 │ │ │ │ +352 // Will be set to true if ::read() returns 0 indicating EOF. │ │ │ │ +353 bool _____g_o_t___e_o_f = false; │ │ │ │ +354 // Number of internal characters produced. │ │ │ │ +355 _s_t_r_e_a_m_s_i_z_e _____i_l_e_n = 0; │ │ │ │ +356 codecvt_base::result __r = codecvt_base::ok; │ │ │ │ +357 if (__check_facet(_M_codecvt).always_noconv()) │ │ │ │ +358 { │ │ │ │ +359 _____i_l_e_n = _M_file.xsgetn(reinterpret_cast(this->eback()), │ │ │ │ +360 _____b_u_f_l_e_n); │ │ │ │ +361 if (_____i_l_e_n == 0) │ │ │ │ +362 _____g_o_t___e_o_f = true; │ │ │ │ +363 } │ │ │ │ +364 else │ │ │ │ +365 { │ │ │ │ +366 // Worst-case number of external bytes. │ │ │ │ +367 // XXX Not done encoding() == -1. │ │ │ │ +368 const int _____e_n_c = _M_codecvt->encoding(); │ │ │ │ +369 _s_t_r_e_a_m_s_i_z_e _____b_l_e_n; // Minimum buffer size. │ │ │ │ +370 _s_t_r_e_a_m_s_i_z_e _____r_l_e_n; // Number of chars to read. │ │ │ │ +371 if (_____e_n_c > 0) │ │ │ │ +372 _____b_l_e_n = _____r_l_e_n = _____b_u_f_l_e_n * _____e_n_c; │ │ │ │ +373 else │ │ │ │ +_3_7_4 { │ │ │ │ +375 _____b_l_e_n = _____b_u_f_l_e_n + _M_codecvt->max_length() - 1; │ │ │ │ +376 _____r_l_e_n = _____b_u_f_l_e_n; │ │ │ │ +377 } │ │ │ │ +378 const _s_t_r_e_a_m_s_i_z_e _____r_e_m_a_i_n_d_e_r = _M_ext_end - _M_ext_next; │ │ │ │ +379 _____r_l_e_n = _____r_l_e_n > _____r_e_m_a_i_n_d_e_r ? _____r_l_e_n - _____r_e_m_a_i_n_d_e_r : 0; │ │ │ │ +380 │ │ │ │ +381 // An imbue in 'read' mode implies first converting the external │ │ │ │ +382 // chars already present. │ │ │ │ +383 if (_M_reading && this->egptr() == this->eback() && _____r_e_m_a_i_n_d_e_r) │ │ │ │ +384 _____r_l_e_n = 0; │ │ │ │ +385 │ │ │ │ +386 // Allocate buffer if necessary and move unconverted │ │ │ │ +387 // bytes to front. │ │ │ │ +388 if (_M_ext_buf_size < _____b_l_e_n) │ │ │ │ +389 { │ │ │ │ +390 char* _____b_u_f = new char[_____b_l_e_n]; │ │ │ │ +391 if (_____r_e_m_a_i_n_d_e_r) │ │ │ │ +392 _____b_u_i_l_t_i_n___m_e_m_c_p_y(_____b_u_f, _M_ext_next, _____r_e_m_a_i_n_d_e_r); │ │ │ │ +393 │ │ │ │ +394 delete [] _M_ext_buf; │ │ │ │ +395 _M_ext_buf = _____b_u_f; │ │ │ │ +396 _M_ext_buf_size = _____b_l_e_n; │ │ │ │ +397 } │ │ │ │ +398 else if (__remainder) │ │ │ │ +399 __builtin_memmove(_M_ext_buf, _M_ext_next, __remainder); │ │ │ │ +400 │ │ │ │ +401 _M_ext_next = _M_ext_buf; │ │ │ │ +402 _M_ext_end = _M_ext_buf + __remainder; │ │ │ │ +403 _M_state_last = _M_state_cur; │ │ │ │ +404 │ │ │ │ +405 do │ │ │ │ +406 { │ │ │ │ +407 if (__rlen > 0) │ │ │ │ +408 { │ │ │ │ +409 // Sanity check! │ │ │ │ +410 // This may fail if the return value of │ │ │ │ +411 // codecvt::max_length() is bogus. │ │ │ │ +412 if (_M_ext_end - _M_ext_buf + __rlen > _M_ext_buf_size) │ │ │ │ +413 { │ │ │ │ +414 __throw_ios_failure(__N("basic_filebuf::underflow " │ │ │ │ +_4_1_5 "codecvt::max_length() " │ │ │ │ +416 "is not valid")); │ │ │ │ +417 } │ │ │ │ +418 _s_t_r_e_a_m_s_i_z_e _____e_l_e_n = _M_file.xsgetn(_M_ext_end, _____r_l_e_n); │ │ │ │ +419 if (_____e_l_e_n == 0) │ │ │ │ +420 _____g_o_t___e_o_f = true; │ │ │ │ +421 else if (_____e_l_e_n == -1) │ │ │ │ +422 break; │ │ │ │ +_4_2_3 _M_ext_end += _____e_l_e_n; │ │ │ │ +424 } │ │ │ │ +425 │ │ │ │ +_4_2_6 char_type* _____i_e_n_d = this->eback(); │ │ │ │ +427 if (_M_ext_next < _M_ext_end) │ │ │ │ +428 __r = _M_codecvt->in(_M_state_cur, _M_ext_next, │ │ │ │ +429 _M_ext_end, _M_ext_next, │ │ │ │ +430 this->eback(), │ │ │ │ +431 this->eback() + _____b_u_f_l_e_n, _____i_e_n_d); │ │ │ │ +432 if (__r == codecvt_base::noconv) │ │ │ │ +433 { │ │ │ │ +434 size_t _____a_v_a_i_l = _M_ext_end - _M_ext_buf; │ │ │ │ +435 _____i_l_e_n = _s_t_d_:_:_m_i_n(_____a_v_a_i_l, _____b_u_f_l_e_n); │ │ │ │ +_4_3_6 traits_type::copy(this->eback(), │ │ │ │ +437 reinterpret_cast │ │ │ │ +438 (_M_ext_buf), _____i_l_e_n); │ │ │ │ +439 _M_ext_next = _M_ext_buf + _____i_l_e_n; │ │ │ │ +440 } │ │ │ │ +441 else │ │ │ │ +442 _____i_l_e_n = _____i_e_n_d - this->eback(); │ │ │ │ +443 │ │ │ │ +444 // _M_codecvt->in may return error while __ilen > 0: this is │ │ │ │ +445 // ok, and actually occurs in case of mixed encodings (e.g., │ │ │ │ +446 // XML files). │ │ │ │ +447 if (__r == codecvt_base::error) │ │ │ │ +448 break; │ │ │ │ +449 │ │ │ │ +450 _____r_l_e_n = 1; │ │ │ │ +451 } │ │ │ │ +452 while (__ilen == 0 && !__got_eof); │ │ │ │ +453 } │ │ │ │ +454 │ │ │ │ +455 if (__ilen > 0) │ │ │ │ +_4_5_6 { │ │ │ │ +457 _M_set_buffer(_____i_l_e_n); │ │ │ │ +458 _M_reading = true; │ │ │ │ +_4_5_9 _____r_e_t = traits_type::to_int_type(*this->gptr()); │ │ │ │ +460 } │ │ │ │ +461 else if (_____g_o_t___e_o_f) │ │ │ │ +462 { │ │ │ │ +_4_6_3 // If the actual end of file is reached, set 'uncommitted' │ │ │ │ +464 // mode, thus allowing an immediate write without an │ │ │ │ +465 // intervening seek. │ │ │ │ +466 _M_set_buffer(-1); │ │ │ │ +467 _M_reading = false; │ │ │ │ +468 // However, reaching it while looping on partial means that │ │ │ │ +469 // the file has got an incomplete character. │ │ │ │ +470 if (__r == codecvt_base::partial) │ │ │ │ +471 __throw_ios_failure(__N("basic_filebuf::underflow " │ │ │ │ +472 "incomplete character in file")); │ │ │ │ +473 } │ │ │ │ +_4_7_4 else if (__r == codecvt_base::error) │ │ │ │ +475 __throw_ios_failure(__N("basic_filebuf::underflow " │ │ │ │ +476 "invalid byte sequence in file")); │ │ │ │ +_4_7_7 else │ │ │ │ +478 __throw_ios_failure(__N("basic_filebuf::underflow " │ │ │ │ +479 "error reading the file"), errno); │ │ │ │ +_4_8_0 } │ │ │ │ +481 return _____r_e_t; │ │ │ │ +482 } │ │ │ │ +_4_8_3 │ │ │ │ +484 template │ │ │ │ +485 typename basic_filebuf<_CharT, _Traits>::int_type │ │ │ │ +_4_8_6 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +487_ _p_b_a_c_k_f_a_i_l(int_type __i) │ │ │ │ +488 { │ │ │ │ +489 int_type _____r_e_t = traits_type::eof(); │ │ │ │ +490 const bool _____t_e_s_t_i_n = _M_mode & _i_o_s___b_a_s_e_:_:_i_n; │ │ │ │ +491 if (_____t_e_s_t_i_n) │ │ │ │ +492 { │ │ │ │ +493 if (_M_writing) │ │ │ │ +494 { │ │ │ │ +495 if (overflow() == traits_type::eof()) │ │ │ │ +496 return _____r_e_t; │ │ │ │ +497 _M_set_buffer(-1); │ │ │ │ +498 _M_writing = false; │ │ │ │ +499 } │ │ │ │ +500 // Remember whether the pback buffer is active, otherwise below │ │ │ │ +501 // we may try to store in it a second char (libstdc++/9761). │ │ │ │ +502 const bool _____t_e_s_t_p_b = _M_pback_init; │ │ │ │ +503 const bool _____t_e_s_t_e_o_f = traits_type::eq_int_type(__i, _____r_e_t); │ │ │ │ +504 int_type _____t_m_p; │ │ │ │ +505 if (this->eback() < this->gptr()) │ │ │ │ +506 { │ │ │ │ +507 this->gbump(-1); │ │ │ │ +508 _____t_m_p = traits_type::to_int_type(*this->gptr()); │ │ │ │ +509 } │ │ │ │ +510 else if (this->seekoff(-1, _i_o_s___b_a_s_e_:_:_c_u_r) != pos_type(off_type(-1))) │ │ │ │ +511 { │ │ │ │ +512 _____t_m_p = this->underflow(); │ │ │ │ +513 if (traits_type::eq_int_type(_____t_m_p, _____r_e_t)) │ │ │ │ +514 return _____r_e_t; │ │ │ │ +515 } │ │ │ │ +516 else │ │ │ │ +517 { │ │ │ │ +518 // At the beginning of the buffer, need to make a │ │ │ │ +519 // putback position available. But the seek may fail │ │ │ │ +520 // (f.i., at the beginning of a file, see │ │ │ │ +521 // libstdc++/9439) and in that case we return │ │ │ │ +522 // traits_type::eof(). │ │ │ │ +523 return _____r_e_t; │ │ │ │ +524 } │ │ │ │ +525 │ │ │ │ +526 // Try to put back __i into input sequence in one of three ways. │ │ │ │ +527 // Order these tests done in is unspecified by the standard. │ │ │ │ +528 if (!_____t_e_s_t_e_o_f && traits_type::eq_int_type(__i, _____t_m_p)) │ │ │ │ +529 _____r_e_t = __i; │ │ │ │ +530 else if (_____t_e_s_t_e_o_f) │ │ │ │ +531 _____r_e_t = traits_type::not_eof(__i); │ │ │ │ +532 else if (!_____t_e_s_t_p_b) │ │ │ │ +533 { │ │ │ │ +534 _M_create_pback(); │ │ │ │ +535 _M_reading = true; │ │ │ │ +536 *this->gptr() = traits_type::to_char_type(__i); │ │ │ │ +537 _____r_e_t = __i; │ │ │ │ +538 } │ │ │ │ +539 } │ │ │ │ +540 return _____r_e_t; │ │ │ │ +541 } │ │ │ │ +542 │ │ │ │ +543 template │ │ │ │ +544 typename basic_filebuf<_CharT, _Traits>::int_type │ │ │ │ +_5_4_5 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +546_ _o_v_e_r_f_l_o_w(int_type __c) │ │ │ │ +547 { │ │ │ │ +548 int_type _____r_e_t = traits_type::eof(); │ │ │ │ +549 const bool _____t_e_s_t_e_o_f = traits_type::eq_int_type(__c, _____r_e_t); │ │ │ │ +550 const bool _____t_e_s_t_o_u_t = (_M_mode & _i_o_s___b_a_s_e_:_:_o_u_t │ │ │ │ +551 || _M_mode & _i_o_s___b_a_s_e_:_:_a_p_p); │ │ │ │ +552 if (_____t_e_s_t_o_u_t) │ │ │ │ +553 { │ │ │ │ +554 if (_M_reading) │ │ │ │ +555 { │ │ │ │ +556 _M_destroy_pback(); │ │ │ │ +557 const int _____g_p_t_r___o_f_f = _M_get_ext_pos(_M_state_last); │ │ │ │ +558 if (_M_seek(_____g_p_t_r___o_f_f, _i_o_s___b_a_s_e_:_:_c_u_r, _M_state_last) │ │ │ │ +559 == pos_type(off_type(-1))) │ │ │ │ +560 return _____r_e_t; │ │ │ │ +561 } │ │ │ │ +562 if (this->pbase() < this->pptr()) │ │ │ │ +563 { │ │ │ │ +564 // If appropriate, append the overflow char. │ │ │ │ +565 if (!_____t_e_s_t_e_o_f) │ │ │ │ +566 { │ │ │ │ +567 *this->pptr() = traits_type::to_char_type(__c); │ │ │ │ +568 this->pbump(1); │ │ │ │ +569 } │ │ │ │ +570 │ │ │ │ +571 // Convert pending sequence to external representation, │ │ │ │ +572 // and output. │ │ │ │ +573 if (_M_convert_to_external(this->pbase(), │ │ │ │ +574 this->pptr() - this->pbase())) │ │ │ │ +575 { │ │ │ │ +576 _M_set_buffer(0); │ │ │ │ +577 _____r_e_t = traits_type::not_eof(__c); │ │ │ │ +578 } │ │ │ │ +579 } │ │ │ │ +580 else if (_M_buf_size > 1) │ │ │ │ +581 { │ │ │ │ +582 // Overflow in 'uncommitted' mode: set _M_writing, set │ │ │ │ +583 // the buffer to the initial 'write' mode, and put __c │ │ │ │ +584 // into the buffer. │ │ │ │ +585 _M_set_buffer(0); │ │ │ │ +586 _M_writing = true; │ │ │ │ +587 if (!_____t_e_s_t_e_o_f) │ │ │ │ +588 { │ │ │ │ +589 *this->pptr() = traits_type::to_char_type(__c); │ │ │ │ +590 this->pbump(1); │ │ │ │ +591 } │ │ │ │ +592 _____r_e_t = traits_type::not_eof(__c); │ │ │ │ +593 } │ │ │ │ +594 else │ │ │ │ +595 { │ │ │ │ +596 // Unbuffered. │ │ │ │ +597 char_type _____c_o_n_v = traits_type::to_char_type(__c); │ │ │ │ +598 if (_____t_e_s_t_e_o_f || _M_convert_to_external(&_____c_o_n_v, 1)) │ │ │ │ +599 { │ │ │ │ +600 _M_writing = true; │ │ │ │ +601 _____r_e_t = traits_type::not_eof(__c); │ │ │ │ +602 } │ │ │ │ +603 } │ │ │ │ +604 } │ │ │ │ +605 return _____r_e_t; │ │ │ │ +606 } │ │ │ │ +607 │ │ │ │ +608 template │ │ │ │ +609 bool │ │ │ │ +610 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +611_ ___M___c_o_n_v_e_r_t___t_o___e_x_t_e_r_n_a_l(_CharT* _____i_b_u_f, _s_t_r_e_a_m_s_i_z_e _____i_l_e_n) │ │ │ │ +612 { │ │ │ │ +613 // Sizes of external and pending output. │ │ │ │ +614 _s_t_r_e_a_m_s_i_z_e _____e_l_e_n; │ │ │ │ +615 _s_t_r_e_a_m_s_i_z_e _____p_l_e_n; │ │ │ │ +616 if (__check_facet(_M_codecvt).always_noconv()) │ │ │ │ +617 { │ │ │ │ +618 _____e_l_e_n = _M_file.xsputn(reinterpret_cast(_____i_b_u_f), _____i_l_e_n); │ │ │ │ +619 _____p_l_e_n = _____i_l_e_n; │ │ │ │ +620 } │ │ │ │ +621 else │ │ │ │ +622 { │ │ │ │ +623 // Worst-case number of external bytes needed. │ │ │ │ +624 // XXX Not done encoding() == -1. │ │ │ │ +625 _s_t_r_e_a_m_s_i_z_e __blen = __ilen * _M_codecvt->max_length(); │ │ │ │ +626 char* __buf = static_cast(__builtin_alloca(__blen)); │ │ │ │ +627 │ │ │ │ +628 char* __bend; │ │ │ │ +629 const char_type* __iend; │ │ │ │ +630 codecvt_base::result __r; │ │ │ │ +631 __r = _M_codecvt->out(_M_state_cur, __ibuf, __ibuf + __ilen, │ │ │ │ +632 __iend, __buf, __buf + __blen, __bend); │ │ │ │ +633 │ │ │ │ +634 if (__r == codecvt_base::ok || __r == codecvt_base::partial) │ │ │ │ +635 __blen = __bend - __buf; │ │ │ │ +636 else if (__r == codecvt_base::noconv) │ │ │ │ +637 { │ │ │ │ +638 // Same as the always_noconv case above. │ │ │ │ +639 __buf = reinterpret_cast(__ibuf); │ │ │ │ +640 __blen = __ilen; │ │ │ │ +641 } │ │ │ │ +642 else │ │ │ │ +643 __throw_ios_failure(__N("basic_filebuf::_M_convert_to_external " │ │ │ │ +644 "conversion error")); │ │ │ │ +645 │ │ │ │ +646 __elen = _M_file.xsputn(__buf, __blen); │ │ │ │ +647 __plen = __blen; │ │ │ │ +648 │ │ │ │ +649 // Try once more for partial conversions. │ │ │ │ +650 if (__r == codecvt_base::partial && __elen == __plen) │ │ │ │ +651 { │ │ │ │ +652 const char_type* __iresume = __iend; │ │ │ │ +653 _s_t_r_e_a_m_s_i_z_e __rlen = this->pptr() - __iend; │ │ │ │ +654 __r = _M_codecvt->out(_M_state_cur, __iresume, │ │ │ │ +655 __iresume + __rlen, __iend, __buf, │ │ │ │ +656 __buf + __blen, __bend); │ │ │ │ +657 if (__r != codecvt_base::error) │ │ │ │ +658 { │ │ │ │ +659 __rlen = __bend - __buf; │ │ │ │ +660 __elen = _M_file.xsputn(__buf, __rlen); │ │ │ │ +661 __plen = __rlen; │ │ │ │ +662 } │ │ │ │ +663 else │ │ │ │ +664 __throw_ios_failure(__N("basic_filebuf::_M_convert_to_external " │ │ │ │ +665 "conversion error")); │ │ │ │ +666 } │ │ │ │ +667 } │ │ │ │ +668 return __elen == __plen; │ │ │ │ +669 } │ │ │ │ +670 │ │ │ │ +671 template │ │ │ │ +672 _s_t_r_e_a_m_s_i_z_e │ │ │ │ +_6_7_3 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +674_ _x_s_g_e_t_n(_CharT* _____s, _s_t_r_e_a_m_s_i_z_e __n) │ │ │ │ +675 { │ │ │ │ +676 // Clear out pback buffer before going on to the real deal... │ │ │ │ +677 _s_t_r_e_a_m_s_i_z_e _____r_e_t = 0; │ │ │ │ +678 if (_M_pback_init) │ │ │ │ +679 { │ │ │ │ +680 if (__n > 0 && this->gptr() == this->eback()) │ │ │ │ +681 { │ │ │ │ +682 *_____s++ = *this->gptr(); // emulate non-underflowing sbumpc │ │ │ │ +683 this->gbump(1); │ │ │ │ +684 _____r_e_t = 1; │ │ │ │ +685 --__n; │ │ │ │ +686 } │ │ │ │ +687 _M_destroy_pback(); │ │ │ │ +688 } │ │ │ │ +689 else if (_M_writing) │ │ │ │ +690 { │ │ │ │ +691 if (overflow() == traits_type::eof()) │ │ │ │ +692 return _____r_e_t; │ │ │ │ +693 _M_set_buffer(-1); │ │ │ │ +694 _M_writing = false; │ │ │ │ +695 } │ │ │ │ +696 │ │ │ │ +697 // Optimization in the always_noconv() case, to be generalized in the │ │ │ │ +698 // future: when __n > __buflen we read directly instead of using the │ │ │ │ +699 // buffer repeatedly. │ │ │ │ +700 const bool _____t_e_s_t_i_n = _M_mode & _i_o_s___b_a_s_e_:_:_i_n; │ │ │ │ +701 const _s_t_r_e_a_m_s_i_z_e _____b_u_f_l_e_n = _M_buf_size > 1 ? _M_buf_size - 1 : 1; │ │ │ │ +702 │ │ │ │ +703 if (__n > _____b_u_f_l_e_n && __check_facet(_M_codecvt).always_noconv() │ │ │ │ +704 && _____t_e_s_t_i_n) │ │ │ │ +705 { │ │ │ │ +706 // First, copy the chars already present in the buffer. │ │ │ │ +707 const _s_t_r_e_a_m_s_i_z_e _____a_v_a_i_l = this->egptr() - this->gptr(); │ │ │ │ +708 if (_____a_v_a_i_l != 0) │ │ │ │ +709 { │ │ │ │ +710 traits_type::copy(_____s, this->gptr(), _____a_v_a_i_l); │ │ │ │ +711 _____s += _____a_v_a_i_l; │ │ │ │ +712 this->setg(this->eback(), this->gptr() + _____a_v_a_i_l, this->egptr()); │ │ │ │ +713 _____r_e_t += _____a_v_a_i_l; │ │ │ │ +714 __n -= _____a_v_a_i_l; │ │ │ │ +715 } │ │ │ │ +716 │ │ │ │ +717 // Need to loop in case of short reads (relatively common │ │ │ │ +718 // with pipes). │ │ │ │ +719 _s_t_r_e_a_m_s_i_z_e _____l_e_n; │ │ │ │ +720 for (;;) │ │ │ │ +721 { │ │ │ │ +722 _____l_e_n = _M_file.xsgetn(reinterpret_cast(_____s), __n); │ │ │ │ +723 if (_____l_e_n == -1) │ │ │ │ +724 __throw_ios_failure(__N("basic_filebuf::xsgetn " │ │ │ │ +725 "error reading the file"), errno); │ │ │ │ +726 if (_____l_e_n == 0) │ │ │ │ +727 break; │ │ │ │ +728 │ │ │ │ +729 __n -= _____l_e_n; │ │ │ │ +730 _____r_e_t += _____l_e_n; │ │ │ │ +731 if (__n == 0) │ │ │ │ +732 break; │ │ │ │ +733 │ │ │ │ +734 _____s += _____l_e_n; │ │ │ │ +735 } │ │ │ │ +736 │ │ │ │ +737 if (__n == 0) │ │ │ │ +738 { │ │ │ │ +739 // Set _M_reading. Buffer is already in initial 'read' mode. │ │ │ │ +740 _M_reading = true; │ │ │ │ +741 } │ │ │ │ +742 else if (_____l_e_n == 0) │ │ │ │ +743 { │ │ │ │ +744 // If end of file is reached, set 'uncommitted' │ │ │ │ +745 // mode, thus allowing an immediate write without │ │ │ │ +746 // an intervening seek. │ │ │ │ +747 _M_set_buffer(-1); │ │ │ │ +748 _M_reading = false; │ │ │ │ +749 } │ │ │ │ +750 } │ │ │ │ +751 else │ │ │ │ +752 _____r_e_t += __streambuf_type::xsgetn(_____s, __n); │ │ │ │ +753 │ │ │ │ +754 return _____r_e_t; │ │ │ │ +755 } │ │ │ │ +756 │ │ │ │ +757 template │ │ │ │ +758 _s_t_r_e_a_m_s_i_z_e │ │ │ │ +_7_5_9 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +760_ _x_s_p_u_t_n(const _CharT* _____s, _s_t_r_e_a_m_s_i_z_e __n) │ │ │ │ +761 { │ │ │ │ +762 _s_t_r_e_a_m_s_i_z_e _____r_e_t = 0; │ │ │ │ +763 // Optimization in the always_noconv() case, to be generalized in the │ │ │ │ +764 // future: when __n is larger than the available capacity we write │ │ │ │ +765 // directly instead of using the buffer. │ │ │ │ +766 const bool _____t_e_s_t_o_u_t = (_M_mode & _i_o_s___b_a_s_e_:_:_o_u_t │ │ │ │ +767 || _M_mode & _i_o_s___b_a_s_e_:_:_a_p_p); │ │ │ │ +768 if (__check_facet(_M_codecvt).always_noconv() │ │ │ │ +769 && _____t_e_s_t_o_u_t && !_M_reading) │ │ │ │ +770 { │ │ │ │ +771 _s_t_r_e_a_m_s_i_z_e _____b_u_f_a_v_a_i_l = this->epptr() - this->pptr(); │ │ │ │ +772 │ │ │ │ +773 // Don't mistake 'uncommitted' mode buffered with unbuffered. │ │ │ │ +774 if (!_M_writing && _M_buf_size > 1) │ │ │ │ +775 _____b_u_f_a_v_a_i_l = _M_buf_size - 1; │ │ │ │ +776 │ │ │ │ +777 if (__n >= _____b_u_f_a_v_a_i_l) │ │ │ │ +778 { │ │ │ │ +779 const _s_t_r_e_a_m_s_i_z_e _____b_u_f_f_i_l_l = this->pptr() - this->pbase(); │ │ │ │ +780 const char* _____b_u_f = reinterpret_cast(this->pbase()); │ │ │ │ +781 _____r_e_t = _M_file.xsputn_2(_____b_u_f, _____b_u_f_f_i_l_l, │ │ │ │ +782 reinterpret_cast(_____s), │ │ │ │ +783 __n); │ │ │ │ +784 if (_____r_e_t == _____b_u_f_f_i_l_l + __n) │ │ │ │ +785 { │ │ │ │ +786 _M_set_buffer(0); │ │ │ │ +787 _M_writing = true; │ │ │ │ +788 } │ │ │ │ +789 if (_____r_e_t > _____b_u_f_f_i_l_l) │ │ │ │ +790 _____r_e_t -= _____b_u_f_f_i_l_l; │ │ │ │ +791 else │ │ │ │ +792 _____r_e_t = 0; │ │ │ │ +793 } │ │ │ │ +794 else │ │ │ │ +795 _____r_e_t = __streambuf_type::xsputn(_____s, __n); │ │ │ │ +796 } │ │ │ │ +797 else │ │ │ │ +798 _____r_e_t = __streambuf_type::xsputn(_____s, __n); │ │ │ │ +799 return _____r_e_t; │ │ │ │ +800 } │ │ │ │ +801 │ │ │ │ +802 template │ │ │ │ +803 typename _b_a_s_i_c___f_i_l_e_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* │ │ │ │ +_8_0_4 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +805_ _s_e_t_b_u_f(char_type* _____s, _s_t_r_e_a_m_s_i_z_e __n) │ │ │ │ +806 { │ │ │ │ +807 if (!this->is_open()) │ │ │ │ +808 { │ │ │ │ +809 if (_____s == 0 && __n == 0) │ │ │ │ +810 _M_buf_size = 1; │ │ │ │ +811 else if (_____s && __n > 0) │ │ │ │ +812 { │ │ │ │ +813 // This is implementation-defined behavior, and assumes that │ │ │ │ +814 // an external char_type array of length __n exists and has │ │ │ │ +815 // been pre-allocated. If this is not the case, things will │ │ │ │ +816 // quickly blow up. When __n > 1, __n - 1 positions will be │ │ │ │ +817 // used for the get area, __n - 1 for the put area and 1 │ │ │ │ +818 // position to host the overflow char of a full put area. │ │ │ │ +819 // When __n == 1, 1 position will be used for the get area │ │ │ │ +820 // and 0 for the put area, as in the unbuffered case above. │ │ │ │ +821 _M_buf = _____s; │ │ │ │ +822 _M_buf_size = __n; │ │ │ │ +823 } │ │ │ │ +824 } │ │ │ │ +825 return this; │ │ │ │ +826 } │ │ │ │ +827 │ │ │ │ +828 │ │ │ │ +829 // According to 27.8.1.4 p11 - 13, seekoff should ignore the last │ │ │ │ +830 // argument (of type openmode). │ │ │ │ +831 template │ │ │ │ +832 typename basic_filebuf<_CharT, _Traits>::pos_type │ │ │ │ +_8_3_3 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +834_ _s_e_e_k_o_f_f(off_type _____o_f_f, ios_base::seekdir _____w_a_y, ios_base::openmode) │ │ │ │ +835 { │ │ │ │ +836 int __width = 0; │ │ │ │ +837 if (_M_codecvt) │ │ │ │ +838 __width = _M_codecvt->encoding(); │ │ │ │ +839 if (__width < 0) │ │ │ │ +840 __width = 0; │ │ │ │ +841 │ │ │ │ +842 pos_type _____r_e_t = pos_type(off_type(-1)); │ │ │ │ +843 const bool _____t_e_s_t_f_a_i_l = _____o_f_f != 0 && __width <= 0; │ │ │ │ +844 if (this->is_open() && !_____t_e_s_t_f_a_i_l) │ │ │ │ +845 { │ │ │ │ +846 // tellg and tellp queries do not affect any state, unless │ │ │ │ +847 // ! always_noconv and the put sequence is not empty. │ │ │ │ +848 // In that case, determining the position requires converting the │ │ │ │ +849 // put sequence. That doesn't use ext_buf, so requires a flush. │ │ │ │ +850 bool _____n_o___m_o_v_e_m_e_n_t = _____w_a_y == _i_o_s___b_a_s_e_:_:_c_u_r && _____o_f_f == 0 │ │ │ │ +851 && (!_M_writing || _M_codecvt->always_noconv()); │ │ │ │ +852 │ │ │ │ +853 // Ditch any pback buffers to avoid confusion. │ │ │ │ +854 if (!_____n_o___m_o_v_e_m_e_n_t) │ │ │ │ +855 _M_destroy_pback(); │ │ │ │ +856 │ │ │ │ +857 // Correct state at destination. Note that this is the correct │ │ │ │ +858 // state for the current position during output, because │ │ │ │ +859 // codecvt::unshift() returns the state to the initial state. │ │ │ │ +860 // This is also the correct state at the end of the file because │ │ │ │ +861 // an unshift sequence should have been written at the end. │ │ │ │ +862 __state_type _____s_t_a_t_e = _M_state_beg; │ │ │ │ +863 off_type _____c_o_m_p_u_t_e_d___o_f_f = _____o_f_f * __width; │ │ │ │ +864 if (_M_reading && _____w_a_y == _i_o_s___b_a_s_e_:_:_c_u_r) │ │ │ │ +865 { │ │ │ │ +866 _____s_t_a_t_e = _M_state_last; │ │ │ │ +867 _____c_o_m_p_u_t_e_d___o_f_f += _M_get_ext_pos(_____s_t_a_t_e); │ │ │ │ +868 } │ │ │ │ +869 if (!_____n_o___m_o_v_e_m_e_n_t) │ │ │ │ +870 _____r_e_t = _M_seek(_____c_o_m_p_u_t_e_d___o_f_f, _____w_a_y, _____s_t_a_t_e); │ │ │ │ +871 else │ │ │ │ +872 { │ │ │ │ +873 if (_M_writing) │ │ │ │ +874 _____c_o_m_p_u_t_e_d___o_f_f = this->pptr() - this->pbase(); │ │ │ │ +875 │ │ │ │ +876 off_type _____f_i_l_e___o_f_f = _M_file.seekoff(0, _i_o_s___b_a_s_e_:_:_c_u_r); │ │ │ │ +877 if (_____f_i_l_e___o_f_f != off_type(-1)) │ │ │ │ +878 { │ │ │ │ +879 _____r_e_t = _____f_i_l_e___o_f_f + _____c_o_m_p_u_t_e_d___o_f_f; │ │ │ │ +880 _____r_e_t.state(_____s_t_a_t_e); │ │ │ │ +881 } │ │ │ │ +882 } │ │ │ │ +883 } │ │ │ │ +884 return _____r_e_t; │ │ │ │ +885 } │ │ │ │ +886 │ │ │ │ +887 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +888 // 171. Strange seekpos() semantics due to joint position │ │ │ │ +889 // According to the resolution of DR 171, seekpos should ignore the last │ │ │ │ +890 // argument (of type openmode). │ │ │ │ +891 template │ │ │ │ +892 typename basic_filebuf<_CharT, _Traits>::pos_type │ │ │ │ +_8_9_3 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +894_ _s_e_e_k_p_o_s(pos_type _____p_o_s, ios_base::openmode) │ │ │ │ +895 { │ │ │ │ +896 pos_type _____r_e_t = pos_type(off_type(-1)); │ │ │ │ +897 if (this->is_open()) │ │ │ │ +898 { │ │ │ │ +899 // Ditch any pback buffers to avoid confusion. │ │ │ │ +900 _M_destroy_pback(); │ │ │ │ +901 _____r_e_t = _M_seek(off_type(_____p_o_s), _i_o_s___b_a_s_e_:_:_b_e_g, _____p_o_s.state()); │ │ │ │ +902 } │ │ │ │ +903 return _____r_e_t; │ │ │ │ +904 } │ │ │ │ +905 │ │ │ │ +906 template │ │ │ │ +907 typename basic_filebuf<_CharT, _Traits>::pos_type │ │ │ │ +908 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +909_ ___M___s_e_e_k(off_type _____o_f_f, ios_base::seekdir _____w_a_y, __state_type _____s_t_a_t_e) │ │ │ │ +910 { │ │ │ │ +911 pos_type _____r_e_t = pos_type(off_type(-1)); │ │ │ │ +912 if (_M_terminate_output()) │ │ │ │ +913 { │ │ │ │ +914 off_type _____f_i_l_e___o_f_f = _M_file.seekoff(_____o_f_f, _____w_a_y); │ │ │ │ +915 if (_____f_i_l_e___o_f_f != off_type(-1)) │ │ │ │ +916 { │ │ │ │ +917 _M_reading = false; │ │ │ │ +918 _M_writing = false; │ │ │ │ +919 _M_ext_next = _M_ext_end = _M_ext_buf; │ │ │ │ +920 _M_set_buffer(-1); │ │ │ │ +921 _M_state_cur = _____s_t_a_t_e; │ │ │ │ +922 _____r_e_t = _____f_i_l_e___o_f_f; │ │ │ │ +923 _____r_e_t.state(_M_state_cur); │ │ │ │ +924 } │ │ │ │ +925 } │ │ │ │ +926 return __ret; │ │ │ │ +927 } │ │ │ │ +928 │ │ │ │ +929 // Returns the distance from the end of the ext buffer to the point │ │ │ │ +930 // corresponding to gptr(). This is a negative value. Updates __state │ │ │ │ +931 // from eback() correspondence to gptr(). │ │ │ │ +932 template │ │ │ │ +933 int basic_filebuf<_CharT, _Traits>:: │ │ │ │ +934 _M_get_ext_pos(__state_type& __state) │ │ │ │ +935 { │ │ │ │ +936 if (_M_codecvt->always_noconv()) │ │ │ │ +937 return this->gptr() - this->egptr(); │ │ │ │ +938 else │ │ │ │ +939 { │ │ │ │ +940 // Calculate offset from _M_ext_buf that corresponds to │ │ │ │ +941 // gptr(). Precondition: __state == _M_state_last, which │ │ │ │ +942 // corresponds to eback(). │ │ │ │ +943 const int __gptr_off = │ │ │ │ +944 _M_codecvt->length(__state, _M_ext_buf, _M_ext_next, │ │ │ │ +945 this->gptr() - this->eback()); │ │ │ │ +946 return _M_ext_buf + __gptr_off - _M_ext_end; │ │ │ │ +947 } │ │ │ │ +948 } │ │ │ │ +949 │ │ │ │ +950 template │ │ │ │ +951 bool │ │ │ │ +952 basic_filebuf<_CharT, _Traits>:: │ │ │ │ +953 _M_terminate_output() │ │ │ │ +954 { │ │ │ │ +955 // Part one: update the output sequence. │ │ │ │ +956 bool __testvalid = true; │ │ │ │ +957 if (this->pbase() < this->pptr()) │ │ │ │ +958 { │ │ │ │ +959 const int_type __tmp = this->overflow(); │ │ │ │ +960 if (traits_type::eq_int_type(__tmp, traits_type::eof())) │ │ │ │ +961 __testvalid = false; │ │ │ │ +962 } │ │ │ │ +963 │ │ │ │ +964 // Part two: output unshift sequence. │ │ │ │ +965 if (_M_writing && !__check_facet(_M_codecvt).always_noconv() │ │ │ │ +966 && __testvalid) │ │ │ │ +967 { │ │ │ │ +968 // Note: this value is arbitrary, since there is no way to │ │ │ │ +969 // get the length of the unshift sequence from codecvt, │ │ │ │ +970 // without calling unshift. │ │ │ │ +971 const size_t __blen = 128; │ │ │ │ +972 char __buf[__blen]; │ │ │ │ +973 codecvt_base::result __r; │ │ │ │ +974 _s_t_r_e_a_m_s_i_z_e __ilen = 0; │ │ │ │ +975 │ │ │ │ +976 do │ │ │ │ +977 { │ │ │ │ +978 char* __next; │ │ │ │ +979 __r = _M_codecvt->unshift(_M_state_cur, __buf, │ │ │ │ +980 __buf + __blen, __next); │ │ │ │ +981 if (__r == codecvt_base::error) │ │ │ │ +982 __testvalid = false; │ │ │ │ +983 else if (__r == codecvt_base::ok || │ │ │ │ +984 __r == codecvt_base::partial) │ │ │ │ +985 { │ │ │ │ +986 __ilen = __next - __buf; │ │ │ │ +987 if (__ilen > 0) │ │ │ │ +988 { │ │ │ │ +989 const _s_t_r_e_a_m_s_i_z_e __elen = _M_file.xsputn(__buf, __ilen); │ │ │ │ +990 if (__elen != __ilen) │ │ │ │ +991 __testvalid = false; │ │ │ │ +992 } │ │ │ │ +993 } │ │ │ │ +994 } │ │ │ │ +995 while (__r == codecvt_base::partial && __ilen > 0 && __testvalid); │ │ │ │ +996 │ │ │ │ +997 if (__testvalid) │ │ │ │ +998 { │ │ │ │ +999 // This second call to overflow() is required by the standard, │ │ │ │ +1000 // but it's not clear why it's needed, since the output buffer │ │ │ │ +1001 // should be empty by this point (it should have been emptied │ │ │ │ +1002 // in the first call to overflow()). │ │ │ │ +1003 const int_type __tmp = this->overflow(); │ │ │ │ +1004 if (traits_type::eq_int_type(__tmp, traits_type::eof())) │ │ │ │ +1005 __testvalid = false; │ │ │ │ +1006 } │ │ │ │ +1007 } │ │ │ │ +1008 return __testvalid; │ │ │ │ +1009 } │ │ │ │ +1010 │ │ │ │ +1011 template │ │ │ │ +1012 int │ │ │ │ +_1_0_1_3 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +1014_ _s_y_n_c() │ │ │ │ +1015 { │ │ │ │ +1016 // Make sure that the internal buffer resyncs its idea of │ │ │ │ +1017 // the file position with the external file. │ │ │ │ +1018 int _____r_e_t = 0; │ │ │ │ +1019 if (this->pbase() < this->pptr()) │ │ │ │ +1020 { │ │ │ │ +1021 const int_type _____t_m_p = this->overflow(); │ │ │ │ +1022 if (traits_type::eq_int_type(_____t_m_p, traits_type::eof())) │ │ │ │ +1023 _____r_e_t = -1; │ │ │ │ +1024 } │ │ │ │ +1025 return _____r_e_t; │ │ │ │ +1026 } │ │ │ │ +1027 │ │ │ │ +1028 template │ │ │ │ +1029 void │ │ │ │ +_1_0_3_0 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +1031_ _i_m_b_u_e(const _l_o_c_a_l_e& _____l_o_c) │ │ │ │ +1032 { │ │ │ │ +1033 bool _____t_e_s_t_v_a_l_i_d = true; │ │ │ │ +1034 │ │ │ │ +1035 const _____c_o_d_e_c_v_t___t_y_p_e* const ___M___c_o_d_e_c_v_t___t_m_p │ │ │ │ +1036 = _____t_r_y___u_s_e___f_a_c_e_t_<_____c_o_d_e_c_v_t___t_y_p_e_>(_____l_o_c); │ │ │ │ +1037 │ │ │ │ +1038 if (this->is_open()) │ │ │ │ +1039 { │ │ │ │ +1040 // encoding() == -1 is ok only at the beginning. │ │ │ │ +1041 if ((_M_reading || _M_writing) │ │ │ │ +1042 && __check_facet(_M_codecvt).encoding() == -1) │ │ │ │ +1043 _____t_e_s_t_v_a_l_i_d = false; │ │ │ │ +1044 else │ │ │ │ +1045 { │ │ │ │ +1046 if (_M_reading) │ │ │ │ +1047 { │ │ │ │ +1048 if (__check_facet(_M_codecvt).always_noconv()) │ │ │ │ +1049 { │ │ │ │ +1050 if (___M___c_o_d_e_c_v_t___t_m_p │ │ │ │ +1051 && !__check_facet(___M___c_o_d_e_c_v_t___t_m_p).always_noconv()) │ │ │ │ +1052 _____t_e_s_t_v_a_l_i_d = this->seekoff(0, _i_o_s___b_a_s_e_:_:_c_u_r, _M_mode) │ │ │ │ +1053 != pos_type(off_type(-1)); │ │ │ │ +1054 } │ │ │ │ +1055 else │ │ │ │ +1056 { │ │ │ │ +1057 // External position corresponding to gptr(). │ │ │ │ +1058 _M_ext_next = _M_ext_buf │ │ │ │ +1059 + _M_codecvt->length(_M_state_last, _M_ext_buf, │ │ │ │ +1060 _M_ext_next, │ │ │ │ +1061 this->gptr() - this->eback()); │ │ │ │ +1062 const _s_t_r_e_a_m_s_i_z_e _____r_e_m_a_i_n_d_e_r = _M_ext_end - _M_ext_next; │ │ │ │ +1063 if (_____r_e_m_a_i_n_d_e_r) │ │ │ │ +1064 _____b_u_i_l_t_i_n___m_e_m_m_o_v_e(_M_ext_buf, _M_ext_next, _____r_e_m_a_i_n_d_e_r); │ │ │ │ +1065 │ │ │ │ +1066 _M_ext_next = _M_ext_buf; │ │ │ │ +1067 _M_ext_end = _M_ext_buf + _____r_e_m_a_i_n_d_e_r; │ │ │ │ +1068 _M_set_buffer(-1); │ │ │ │ +1069 _M_state_last = _M_state_cur = _M_state_beg; │ │ │ │ +1070 } │ │ │ │ +1071 } │ │ │ │ +1072 else if (_M_writing && (_____t_e_s_t_v_a_l_i_d = _M_terminate_output())) │ │ │ │ +1073 _M_set_buffer(-1); │ │ │ │ +1074 } │ │ │ │ +1075 } │ │ │ │ +1076 │ │ │ │ +1077 if (_____t_e_s_t_v_a_l_i_d) │ │ │ │ +1078 _M_codecvt = ___M___c_o_d_e_c_v_t___t_m_p; │ │ │ │ +1079 else │ │ │ │ +1080 _M_codecvt = 0; │ │ │ │ +1081 } │ │ │ │ +1082 │ │ │ │ +1083 // Inhibit implicit instantiations for required instantiations, │ │ │ │ +1084 // which are defined via explicit instantiations elsewhere. │ │ │ │ +1085#if _GLIBCXX_EXTERN_TEMPLATE │ │ │ │ +1086 extern template class _b_a_s_i_c___f_i_l_e_b_u_f_<_c_h_a_r_>; │ │ │ │ +1087 extern template class _b_a_s_i_c___i_f_s_t_r_e_a_m_<_c_h_a_r_>; │ │ │ │ +1088 extern template class _b_a_s_i_c___o_f_s_t_r_e_a_m_<_c_h_a_r_>; │ │ │ │ +1089 extern template class _b_a_s_i_c___f_s_t_r_e_a_m_<_c_h_a_r_>; │ │ │ │ +1090 │ │ │ │ +1091#ifdef _GLIBCXX_USE_WCHAR_T │ │ │ │ +1092 extern template class _b_a_s_i_c___f_i_l_e_b_u_f_<_w_c_h_a_r___t_>; │ │ │ │ +1093 extern template class _b_a_s_i_c___i_f_s_t_r_e_a_m_<_w_c_h_a_r___t_>; │ │ │ │ +1094 extern template class _b_a_s_i_c___o_f_s_t_r_e_a_m_<_w_c_h_a_r___t_>; │ │ │ │ +1095 extern template class _b_a_s_i_c___f_s_t_r_e_a_m_<_w_c_h_a_r___t_>; │ │ │ │ +1096#endif │ │ │ │ +1097#endif │ │ │ │ +1098 │ │ │ │ +1099_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +1100} // namespace std │ │ │ │ +1101 │ │ │ │ +1102#pragma GCC diagnostic pop │ │ │ │ +1103#endif │ │ │ │ +_c_e_r_r_n_o │ │ │ │ +_m_o_v_e_._h │ │ │ │ +_c_x_x_a_b_i___f_o_r_c_e_d_._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_:_:_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_4 │ │ │ │ _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_:_:_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_:_:_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_:_:_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_:_:_x_s_g_e_t_n │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_b_u_f │ │ │ │ +The actual work of input and output (for files). │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_:_9_3 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_b_u_f_:_:_s_e_e_k_o_f_f │ │ │ │ +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. │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_._t_c_c_:_8_3_4 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_b_u_f_:_:_u_n_d_e_r_f_l_o_w │ │ │ │ +virtual int_type underflow() │ │ │ │ +Fetches more data from the controlled sequence. │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_._t_c_c_:_3_2_8 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_b_u_f_:_:_s_h_o_w_m_a_n_y_c │ │ │ │ +virtual streamsize showmanyc() │ │ │ │ +Investigating the data available. │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_._t_c_c_:_3_0_2 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_b_u_f_:_:_i_m_b_u_e │ │ │ │ +virtual void imbue(const locale &__loc) │ │ │ │ +Changes translations. │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_._t_c_c_:_1_0_3_1 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_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 │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_._t_c_c_:_6_7_4 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_b_u_f_:_:_c_l_o_s_e │ │ │ │ +__filebuf_type * close() │ │ │ │ +Closes the currently associated file. │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_._t_c_c_:_2_5_4 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_b_u_f_:_:_s_e_e_k_p_o_s │ │ │ │ +virtual pos_type seekpos(pos_type __pos, ios_base::openmode __mode=ios_base:: │ │ │ │ +in|ios_base::out) │ │ │ │ +Alters the stream positions. │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_._t_c_c_:_8_9_4 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_b_u_f_:_:_p_b_a_c_k_f_a_i_l │ │ │ │ +virtual int_type pbackfail(int_type __c=_Traits::eof()) │ │ │ │ +Tries to back up the input sequence. │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_._t_c_c_:_4_8_7 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_b_u_f_:_:_x_s_p_u_t_n │ │ │ │ +virtual streamsize xsputn(const char_type *__s, streamsize __n) │ │ │ │ +Multiple character insertion. │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_._t_c_c_:_7_6_0 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_b_u_f_:_:_o_v_e_r_f_l_o_w │ │ │ │ +virtual int_type overflow(int_type __c=_Traits::eof()) │ │ │ │ +Consumes data from the buffer; writes to the controlled sequence. │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_._t_c_c_:_5_4_6 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_b_u_f_:_:_o_p_e_n │ │ │ │ +__filebuf_type * open(const char *__s, ios_base::openmode __mode) │ │ │ │ +Opens an external file. │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_._t_c_c_:_1_8_4 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_b_u_f_:_:_b_a_s_i_c___f_i_l_e_b_u_f │ │ │ │ +basic_filebuf() │ │ │ │ +Does not open any files. │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_._t_c_c_:_8_6 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_b_u_f_:_:_s_y_n_c │ │ │ │ +virtual int sync() │ │ │ │ +Synchronizes the buffer arrays with the controlled sequences. │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_._t_c_c_:_1_0_1_4 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_b_u_f_:_:_s_e_t_b_u_f │ │ │ │ +virtual __streambuf_type * setbuf(char_type *__s, streamsize __n) │ │ │ │ +Manipulates the buffer. │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_._t_c_c_:_8_0_5 │ │ │ │ +_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_,_ _t_r_a_i_t_s___t_y_p_e_ _> │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:___M___b_u_f___l_o_c_a_l_e │ │ │ │ +locale _M_buf_locale │ │ │ │ +Current locale setting. │ │ │ │ +DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_2_0_1 │ │ │ │ +_s_t_d_:_:_i_o_s___b_a_s_e │ │ │ │ +The base of the I/O class hierarchy. │ │ │ │ +DDeeffiinniittiioonn _i_o_s___b_a_s_e_._h_:_2_6_6 │ │ │ │ +_s_t_d_:_:_i_o_s___b_a_s_e_:_:_c_u_r │ │ │ │ +static const seekdir cur │ │ │ │ +Request a seek relative to the current position within the sequence. │ │ │ │ +DDeeffiinniittiioonn _i_o_s___b_a_s_e_._h_:_5_2_9 │ │ │ │ +_s_t_d_:_:_i_o_s___b_a_s_e_:_:_b_e_g │ │ │ │ +static const seekdir beg │ │ │ │ +Request a seek relative to the beginning of the stream. │ │ │ │ +DDeeffiinniittiioonn _i_o_s___b_a_s_e_._h_:_5_2_6 │ │ │ │ +_s_t_d_:_:_i_o_s___b_a_s_e_:_:_e_n_d │ │ │ │ +static const seekdir end │ │ │ │ +Request a seek relative to the current end of the sequence. │ │ │ │ +DDeeffiinniittiioonn _i_o_s___b_a_s_e_._h_:_5_3_2 │ │ │ │ +_s_t_d_:_:_i_o_s___b_a_s_e_:_:_i_n │ │ │ │ +static const openmode in │ │ │ │ +Open for input. Default for ifstream and fstream. │ │ │ │ +DDeeffiinniittiioonn _i_o_s___b_a_s_e_._h_:_4_9_8 │ │ │ │ +_s_t_d_:_:_i_o_s___b_a_s_e_:_:_o_u_t │ │ │ │ +static const openmode out │ │ │ │ +Open for output. Default for ofstream and fstream. │ │ │ │ +DDeeffiinniittiioonn _i_o_s___b_a_s_e_._h_:_5_0_1 │ │ │ │ +_s_t_d_:_:_i_o_s___b_a_s_e_:_:_b_i_n_a_r_y │ │ │ │ +static const openmode binary │ │ │ │ +Perform input and output in binary mode (as opposed to text mode). This is │ │ │ │ +probably not what you thin... │ │ │ │ +DDeeffiinniittiioonn _i_o_s___b_a_s_e_._h_:_4_9_5 │ │ │ │ +_s_t_d_:_:_i_o_s___b_a_s_e_:_:_o_p_e_n_m_o_d_e │ │ │ │ +_Ios_Openmode openmode │ │ │ │ +This is a bitmask type. │ │ │ │ +DDeeffiinniittiioonn _i_o_s___b_a_s_e_._h_:_4_8_4 │ │ │ │ +_s_t_d_:_:_i_o_s___b_a_s_e_:_:_a_p_p │ │ │ │ +static const openmode app │ │ │ │ +Seek to end before each write. │ │ │ │ +DDeeffiinniittiioonn _i_o_s___b_a_s_e_._h_:_4_8_7 │ │ │ │ +_s_t_d_:_:_i_o_s___b_a_s_e_:_:_a_t_e │ │ │ │ +static const openmode ate │ │ │ │ +Open and seek to end immediately after opening. │ │ │ │ +DDeeffiinniittiioonn _i_o_s___b_a_s_e_._h_:_4_9_0 │ │ │ │ +_s_t_d_:_:_l_o_c_a_l_e │ │ │ │ +Container class for localization functionality. │ │ │ │ +DDeeffiinniittiioonn _l_o_c_a_l_e___c_l_a_s_s_e_s_._h_:_6_9 │ │ │ │ _s_t_d_:_:_a_u_t_o___p_t_r___r_e_f │ │ │ │ DDeeffiinniittiioonn _a_u_t_o___p_t_r_._h_:_4_9 │ │ │ │ * _b_i_t_s │ │ │ │ - * _s_t_r_e_a_m_b_u_f_._t_c_c │ │ │ │ + * _f_s_t_r_e_a_m_._t_c_c │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00404.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: streambuf_iterator.h File Reference │ │ │ +libstdc++: text_encoding-data.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -46,70 +46,51 @@ │ │ │ /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ │ │ │ $(document).ready(function(){initNavTree('a00404.html',''); initResizable(); }); │ │ │ /* @license-end */ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -Classes | │ │ │ -Namespaces | │ │ │ -Functions
│ │ │ -
streambuf_iterator.h File Reference
│ │ │ +Macros
│ │ │ +
text_encoding-data.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ -Classes

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

│ │ │ -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)
 

│ │ │ +Macros

#define _GLIBCXX_TEXT_ENCODING_UTF8_OFFSET
 
│ │ │

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 <text_encoding>.

│ │ │ │ │ │ -

Definition in file streambuf_iterator.h.

│ │ │ -
│ │ │ +

Definition in file text_encoding-data.h.

│ │ │ +

Macro Definition Documentation

│ │ │ + │ │ │ +

◆ _GLIBCXX_TEXT_ENCODING_UTF8_OFFSET

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define _GLIBCXX_TEXT_ENCODING_UTF8_OFFSET
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 449 of file text_encoding-data.h.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,62 +1,18 @@ │ │ │ │ libstdc++ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _F_u_n_c_t_i_o_n_s │ │ │ │ -streambuf_iterator.h File Reference │ │ │ │ +_M_a_c_r_o_s │ │ │ │ +text_encoding-data.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_ _> │ │ │ │ -  │ │ │ │ -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 (_c_o_n_s_t _CharT │ │ │ │ -_CharT >::__value, _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< *__first, _c_o_n_s_t _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<_t_y_p_e_n_a_m_e _CharT , _t_y_p_e_n_a_m_e _Size > │ │ │ │ - __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 > _____i_t, _Size __n, _CharT │ │ │ │ - *__result, bool _____s_t_r_i_c_t) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _CharT , _t_y_p_e_n_a_m_e ___D_i_s_t_a_n_c_e > │ │ │ │ - __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, _v_o_i_d >::__type  _CharT > &__i, ___D_i_s_t_a_n_c_e __n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _CharT > │ │ │ │ - __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<_t_y_p_e_n_a_m_e _CharT > │ │ │ │ - __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, _c_o_n_s_t _CharT &__val) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _CharT , _t_y_p_e_n_a_m_e _Traits > │ │ │ │ - bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (_c_o_n_s_t │ │ │ │ - _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< _CharT, _Traits > │ │ │ │ - &__a, _c_o_n_s_t _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< │ │ │ │ - _CharT, _Traits > &__b) │ │ │ │ +MMaaccrrooss │ │ │ │ +#define  ___G_L_I_B_C_X_X___T_E_X_T___E_N_C_O_D_I_N_G___U_T_F_8___O_F_F_S_E_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 _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 _t_e_x_t___e_n_c_o_d_i_n_g_-_d_a_t_a_._h. │ │ │ │ +********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__TTEEXXTT__EENNCCOODDIINNGG__UUTTFF88__OOFFFFSSEETT ********** │ │ │ │ +#define _GLIBCXX_TEXT_ENCODING_UTF8_OFFSET │ │ │ │ +Definition at line _4_4_9 of file _t_e_x_t___e_n_c_o_d_i_n_g_-_d_a_t_a_._h. │ │ │ │ * _b_i_t_s │ │ │ │ - * _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h │ │ │ │ + * _t_e_x_t___e_n_c_o_d_i_n_g_-_d_a_t_a_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00404_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: streambuf_iterator.h Source File │ │ │ +libstdc++: text_encoding-data.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,610 +45,952 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
streambuf_iterator.h
│ │ │ +
text_encoding-data.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// Streambuf iterators
│ │ │ +Go to the documentation of this file.
1// Generated by scripts/gen_text_encoding_data.py, do not edit.
│ │ │
2
│ │ │ -
3// Copyright (C) 1997-2025 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/streambuf_iterator.h
│ │ │ -
26 * This is an internal header file, included by other library headers.
│ │ │ -
27 * Do not attempt to use it directly. @headername{iterator}
│ │ │ -
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
│ │ │ -
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&);
│ │ │ -
101
│ │ │ -
102 template<typename _CharT2, typename _Distance>
│ │ │ -
103 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
│ │ │ -
104 void>::__type
│ │ │ - │ │ │ -
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.
│ │ │ -
│ │ │ - │ │ │ -
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;
│ │ │ -
130
│ │ │ -
131 ~istreambuf_iterator() = default;
│ │ │ -
132#endif
│ │ │ -
133
│ │ │ -
134 /// Construct start of input stream iterator.
│ │ │ -
│ │ │ - │ │ │ -
136 : _M_sbuf(__s.rdbuf()), _M_c(traits_type::eof()) { }
│ │ │ -
│ │ │ -
137
│ │ │ -
138 /// Construct start of streambuf iterator.
│ │ │ -
│ │ │ - │ │ │ -
140 : _M_sbuf(__s), _M_c(traits_type::eof()) { }
│ │ │ -
│ │ │ -
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
│ │ │ - │ │ │ -
│ │ │ -
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
│ │ │ - │ │ │ -
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,
│ │ │ -
237 const istreambuf_iterator<_CharT, _Traits>& __b)
│ │ │ -
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,
│ │ │ -
245 const istreambuf_iterator<_CharT, _Traits>& __b)
│ │ │ -
246 { return !__a.equal(__b); }
│ │ │ -
247#endif
│ │ │ -
248
│ │ │ -
249 /// Provides output iterator semantics for streambufs.
│ │ │ -
250 template<typename _CharT, typename _Traits>
│ │ │ -
│ │ │ - │ │ │ -
252 : public iterator<output_iterator_tag, void, void, void, void>
│ │ │ -
253 {
│ │ │ -
254 public:
│ │ │ -
255 // Types:
│ │ │ -
256 ///@{
│ │ │ -
257 /// Public typedefs
│ │ │ -
258#if __cplusplus > 201703L
│ │ │ - │ │ │ -
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,
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
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.
│ │ │ -
│ │ │ - │ │ │ -
287 : _M_sbuf(__s.rdbuf()), _M_failed(!_M_sbuf) { }
│ │ │ -
│ │ │ -
288
│ │ │ -
289 /// Construct output iterator from streambuf.
│ │ │ -
│ │ │ - │ │ │ -
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
│ │ │ -
│ │ │ - │ │ │ -
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,
│ │ │ -
340 ostreambuf_iterator<_CharT> >::__type
│ │ │ -
341 copy(istreambuf_iterator<_CharT> __first,
│ │ │ -
342 istreambuf_iterator<_CharT> __last,
│ │ │ -
343 ostreambuf_iterator<_CharT> __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<bool _IsMove, typename _CharT>
│ │ │ -
356 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
│ │ │ -
357 ostreambuf_iterator<_CharT> >::__type
│ │ │ -
358 __copy_move_a2(_CharT* __first, _CharT* __last,
│ │ │ -
359 ostreambuf_iterator<_CharT> __result)
│ │ │ -
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,
│ │ │ -
369 ostreambuf_iterator<_CharT> >::__type
│ │ │ -
370 __copy_move_a2(const _CharT* __first, const _CharT* __last,
│ │ │ -
371 ostreambuf_iterator<_CharT> __result)
│ │ │ -
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,
│ │ │ -
436 istreambuf_iterator<_CharT> >::__type
│ │ │ -
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
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
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.
│ │ │ -
Provides input iterator semantics for streambufs.
│ │ │ -
basic_streambuf< _CharT, _Traits > streambuf_type
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.
│ │ │ -
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.
│ │ │ - │ │ │ - │ │ │ +
3
│ │ │ +
4// Copyright The GNU Toolchain Authors.
│ │ │ +
5//
│ │ │ +
6// This file is part of the GNU ISO C++ Library. This library is free
│ │ │ +
7// software; you can redistribute it and/or modify it under the
│ │ │ +
8// terms of the GNU General Public License as published by the
│ │ │ +
9// Free Software Foundation; either version 3, or (at your option)
│ │ │ +
10// any later version.
│ │ │ +
11
│ │ │ +
12// This library 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/text_encoding-data.h
│ │ │ +
27 * This is an internal header file, included by other library headers.
│ │ │ +
28 * Do not attempt to use it directly. @headername{text_encoding}
│ │ │ +
29 */
│ │ │ +
30
│ │ │ +
31#ifndef _GLIBCXX_GET_ENCODING_DATA
│ │ │ +
32# error "This is not a public header, do not include it directly"
│ │ │ +
33#endif
│ │ │ +
34
│ │ │ +
35 { 3, "US-ASCII" },
│ │ │ +
36 { 3, "iso-ir-6" },
│ │ │ +
37 { 3, "ANSI_X3.4-1968" },
│ │ │ +
38 { 3, "ANSI_X3.4-1986" },
│ │ │ +
39 { 3, "ISO_646.irv:1991" },
│ │ │ +
40 { 3, "ISO646-US" },
│ │ │ +
41 { 3, "us" },
│ │ │ +
42 { 3, "IBM367" },
│ │ │ +
43 { 3, "cp367" },
│ │ │ +
44 { 3, "csASCII" },
│ │ │ +
45 { 3, "ASCII" }, // libstdc++ extension
│ │ │ +
46 { 4, "ISO_8859-1:1987" },
│ │ │ +
47 { 4, "iso-ir-100" },
│ │ │ +
48 { 4, "ISO_8859-1" },
│ │ │ +
49 { 4, "ISO-8859-1" },
│ │ │ +
50 { 4, "latin1" },
│ │ │ +
51 { 4, "l1" },
│ │ │ +
52 { 4, "IBM819" },
│ │ │ +
53 { 4, "CP819" },
│ │ │ +
54 { 4, "csISOLatin1" },
│ │ │ +
55 { 5, "ISO_8859-2:1987" },
│ │ │ +
56 { 5, "iso-ir-101" },
│ │ │ +
57 { 5, "ISO_8859-2" },
│ │ │ +
58 { 5, "ISO-8859-2" },
│ │ │ +
59 { 5, "latin2" },
│ │ │ +
60 { 5, "l2" },
│ │ │ +
61 { 5, "csISOLatin2" },
│ │ │ +
62 { 6, "ISO_8859-3:1988" },
│ │ │ +
63 { 6, "iso-ir-109" },
│ │ │ +
64 { 6, "ISO_8859-3" },
│ │ │ +
65 { 6, "ISO-8859-3" },
│ │ │ +
66 { 6, "latin3" },
│ │ │ +
67 { 6, "l3" },
│ │ │ +
68 { 6, "csISOLatin3" },
│ │ │ +
69 { 7, "ISO_8859-4:1988" },
│ │ │ +
70 { 7, "iso-ir-110" },
│ │ │ +
71 { 7, "ISO_8859-4" },
│ │ │ +
72 { 7, "ISO-8859-4" },
│ │ │ +
73 { 7, "latin4" },
│ │ │ +
74 { 7, "l4" },
│ │ │ +
75 { 7, "csISOLatin4" },
│ │ │ +
76 { 8, "ISO_8859-5:1988" },
│ │ │ +
77 { 8, "iso-ir-144" },
│ │ │ +
78 { 8, "ISO_8859-5" },
│ │ │ +
79 { 8, "ISO-8859-5" },
│ │ │ +
80 { 8, "cyrillic" },
│ │ │ +
81 { 8, "csISOLatinCyrillic" },
│ │ │ +
82 { 9, "ISO_8859-6:1987" },
│ │ │ +
83 { 9, "iso-ir-127" },
│ │ │ +
84 { 9, "ISO_8859-6" },
│ │ │ +
85 { 9, "ISO-8859-6" },
│ │ │ +
86 { 9, "ECMA-114" },
│ │ │ +
87 { 9, "ASMO-708" },
│ │ │ +
88 { 9, "arabic" },
│ │ │ +
89 { 9, "csISOLatinArabic" },
│ │ │ +
90 { 10, "ISO_8859-7:1987" },
│ │ │ +
91 { 10, "iso-ir-126" },
│ │ │ +
92 { 10, "ISO_8859-7" },
│ │ │ +
93 { 10, "ISO-8859-7" },
│ │ │ +
94 { 10, "ELOT_928" },
│ │ │ +
95 { 10, "ECMA-118" },
│ │ │ +
96 { 10, "greek" },
│ │ │ +
97 { 10, "greek8" },
│ │ │ +
98 { 10, "csISOLatinGreek" },
│ │ │ +
99 { 11, "ISO_8859-8:1988" },
│ │ │ +
100 { 11, "iso-ir-138" },
│ │ │ +
101 { 11, "ISO_8859-8" },
│ │ │ +
102 { 11, "ISO-8859-8" },
│ │ │ +
103 { 11, "hebrew" },
│ │ │ +
104 { 11, "csISOLatinHebrew" },
│ │ │ +
105 { 12, "ISO_8859-9:1989" },
│ │ │ +
106 { 12, "iso-ir-148" },
│ │ │ +
107 { 12, "ISO_8859-9" },
│ │ │ +
108 { 12, "ISO-8859-9" },
│ │ │ +
109 { 12, "latin5" },
│ │ │ +
110 { 12, "l5" },
│ │ │ +
111 { 12, "csISOLatin5" },
│ │ │ +
112 { 13, "ISO-8859-10" },
│ │ │ +
113 { 13, "iso-ir-157" },
│ │ │ +
114 { 13, "l6" },
│ │ │ +
115 { 13, "ISO_8859-10:1992" },
│ │ │ +
116 { 13, "csISOLatin6" },
│ │ │ +
117 { 13, "latin6" },
│ │ │ +
118 { 14, "ISO_6937-2-add" },
│ │ │ +
119 { 14, "iso-ir-142" },
│ │ │ +
120 { 14, "csISOTextComm" },
│ │ │ +
121 { 15, "JIS_X0201" },
│ │ │ +
122 { 15, "X0201" },
│ │ │ +
123 { 15, "csHalfWidthKatakana" },
│ │ │ +
124 { 16, "JIS_Encoding" },
│ │ │ +
125 { 16, "csJISEncoding" },
│ │ │ +
126 { 17, "Shift_JIS" },
│ │ │ +
127 { 17, "MS_Kanji" },
│ │ │ +
128 { 17, "csShiftJIS" },
│ │ │ +
129 { 18, "Extended_UNIX_Code_Packed_Format_for_Japanese" },
│ │ │ +
130 { 18, "csEUCPkdFmtJapanese" },
│ │ │ +
131 { 18, "EUC-JP" },
│ │ │ +
132 { 19, "Extended_UNIX_Code_Fixed_Width_for_Japanese" },
│ │ │ +
133 { 19, "csEUCFixWidJapanese" },
│ │ │ +
134 { 20, "BS_4730" },
│ │ │ +
135 { 20, "iso-ir-4" },
│ │ │ +
136 { 20, "ISO646-GB" },
│ │ │ +
137 { 20, "gb" },
│ │ │ +
138 { 20, "uk" },
│ │ │ +
139 { 20, "csISO4UnitedKingdom" },
│ │ │ +
140 { 21, "SEN_850200_C" },
│ │ │ +
141 { 21, "iso-ir-11" },
│ │ │ +
142 { 21, "ISO646-SE2" },
│ │ │ +
143 { 21, "se2" },
│ │ │ +
144 { 21, "csISO11SwedishForNames" },
│ │ │ +
145 { 22, "IT" },
│ │ │ +
146 { 22, "iso-ir-15" },
│ │ │ +
147 { 22, "ISO646-IT" },
│ │ │ +
148 { 22, "csISO15Italian" },
│ │ │ +
149 { 23, "ES" },
│ │ │ +
150 { 23, "iso-ir-17" },
│ │ │ +
151 { 23, "ISO646-ES" },
│ │ │ +
152 { 23, "csISO17Spanish" },
│ │ │ +
153 { 24, "DIN_66003" },
│ │ │ +
154 { 24, "iso-ir-21" },
│ │ │ +
155 { 24, "de" },
│ │ │ +
156 { 24, "ISO646-DE" },
│ │ │ +
157 { 24, "csISO21German" },
│ │ │ +
158 { 25, "NS_4551-1" },
│ │ │ +
159 { 25, "iso-ir-60" },
│ │ │ +
160 { 25, "ISO646-NO" },
│ │ │ +
161 { 25, "no" },
│ │ │ +
162 { 25, "csISO60DanishNorwegian" },
│ │ │ +
163 { 25, "csISO60Norwegian1" },
│ │ │ +
164 { 26, "NF_Z_62-010" },
│ │ │ +
165 { 26, "iso-ir-69" },
│ │ │ +
166 { 26, "ISO646-FR" },
│ │ │ +
167 { 26, "fr" },
│ │ │ +
168 { 26, "csISO69French" },
│ │ │ +
169 { 27, "ISO-10646-UTF-1" },
│ │ │ +
170 { 27, "csISO10646UTF1" },
│ │ │ +
171 { 28, "ISO_646.basic:1983" },
│ │ │ +
172 { 28, "ref" },
│ │ │ +
173 { 28, "csISO646basic1983" },
│ │ │ +
174 { 29, "INVARIANT" },
│ │ │ +
175 { 29, "csINVARIANT" },
│ │ │ +
176 { 30, "ISO_646.irv:1983" },
│ │ │ +
177 { 30, "iso-ir-2" },
│ │ │ +
178 { 30, "irv" },
│ │ │ +
179 { 30, "csISO2IntlRefVersion" },
│ │ │ +
180 { 31, "NATS-SEFI" },
│ │ │ +
181 { 31, "iso-ir-8-1" },
│ │ │ +
182 { 31, "csNATSSEFI" },
│ │ │ +
183 { 32, "NATS-SEFI-ADD" },
│ │ │ +
184 { 32, "iso-ir-8-2" },
│ │ │ +
185 { 32, "csNATSSEFIADD" },
│ │ │ +
186 { 35, "SEN_850200_B" },
│ │ │ +
187 { 35, "iso-ir-10" },
│ │ │ +
188 { 35, "FI" },
│ │ │ +
189 { 35, "ISO646-FI" },
│ │ │ +
190 { 35, "ISO646-SE" },
│ │ │ +
191 { 35, "se" },
│ │ │ +
192 { 35, "csISO10Swedish" },
│ │ │ +
193 { 36, "KS_C_5601-1987" },
│ │ │ +
194 { 36, "iso-ir-149" },
│ │ │ +
195 { 36, "KS_C_5601-1989" },
│ │ │ +
196 { 36, "KSC_5601" },
│ │ │ +
197 { 36, "korean" },
│ │ │ +
198 { 36, "csKSC56011987" },
│ │ │ +
199 { 37, "ISO-2022-KR" },
│ │ │ +
200 { 37, "csISO2022KR" },
│ │ │ +
201 { 38, "EUC-KR" },
│ │ │ +
202 { 38, "csEUCKR" },
│ │ │ +
203 { 39, "ISO-2022-JP" },
│ │ │ +
204 { 39, "csISO2022JP" },
│ │ │ +
205 { 40, "ISO-2022-JP-2" },
│ │ │ +
206 { 40, "csISO2022JP2" },
│ │ │ +
207 { 41, "JIS_C6220-1969-jp" },
│ │ │ +
208 { 41, "JIS_C6220-1969" },
│ │ │ +
209 { 41, "iso-ir-13" },
│ │ │ +
210 { 41, "katakana" },
│ │ │ +
211 { 41, "x0201-7" },
│ │ │ +
212 { 41, "csISO13JISC6220jp" },
│ │ │ +
213 { 42, "JIS_C6220-1969-ro" },
│ │ │ +
214 { 42, "iso-ir-14" },
│ │ │ +
215 { 42, "jp" },
│ │ │ +
216 { 42, "ISO646-JP" },
│ │ │ +
217 { 42, "csISO14JISC6220ro" },
│ │ │ +
218 { 43, "PT" },
│ │ │ +
219 { 43, "iso-ir-16" },
│ │ │ +
220 { 43, "ISO646-PT" },
│ │ │ +
221 { 43, "csISO16Portuguese" },
│ │ │ +
222 { 44, "greek7-old" },
│ │ │ +
223 { 44, "iso-ir-18" },
│ │ │ +
224 { 44, "csISO18Greek7Old" },
│ │ │ +
225 { 45, "latin-greek" },
│ │ │ +
226 { 45, "iso-ir-19" },
│ │ │ +
227 { 45, "csISO19LatinGreek" },
│ │ │ +
228 { 46, "NF_Z_62-010_(1973)" },
│ │ │ +
229 { 46, "iso-ir-25" },
│ │ │ +
230 { 46, "ISO646-FR1" },
│ │ │ +
231 { 46, "csISO25French" },
│ │ │ +
232 { 47, "Latin-greek-1" },
│ │ │ +
233 { 47, "iso-ir-27" },
│ │ │ +
234 { 47, "csISO27LatinGreek1" },
│ │ │ +
235 { 48, "ISO_5427" },
│ │ │ +
236 { 48, "iso-ir-37" },
│ │ │ +
237 { 48, "csISO5427Cyrillic" },
│ │ │ +
238 { 49, "JIS_C6226-1978" },
│ │ │ +
239 { 49, "iso-ir-42" },
│ │ │ +
240 { 49, "csISO42JISC62261978" },
│ │ │ +
241 { 50, "BS_viewdata" },
│ │ │ +
242 { 50, "iso-ir-47" },
│ │ │ +
243 { 50, "csISO47BSViewdata" },
│ │ │ +
244 { 51, "INIS" },
│ │ │ +
245 { 51, "iso-ir-49" },
│ │ │ +
246 { 51, "csISO49INIS" },
│ │ │ +
247 { 52, "INIS-8" },
│ │ │ +
248 { 52, "iso-ir-50" },
│ │ │ +
249 { 52, "csISO50INIS8" },
│ │ │ +
250 { 53, "INIS-cyrillic" },
│ │ │ +
251 { 53, "iso-ir-51" },
│ │ │ +
252 { 53, "csISO51INISCyrillic" },
│ │ │ +
253 { 54, "ISO_5427:1981" },
│ │ │ +
254 { 54, "iso-ir-54" },
│ │ │ +
255 { 54, "ISO5427Cyrillic1981" },
│ │ │ +
256 { 54, "csISO54271981" },
│ │ │ +
257 { 55, "ISO_5428:1980" },
│ │ │ +
258 { 55, "iso-ir-55" },
│ │ │ +
259 { 55, "csISO5428Greek" },
│ │ │ +
260 { 56, "GB_1988-80" },
│ │ │ +
261 { 56, "iso-ir-57" },
│ │ │ +
262 { 56, "cn" },
│ │ │ +
263 { 56, "ISO646-CN" },
│ │ │ +
264 { 56, "csISO57GB1988" },
│ │ │ +
265 { 57, "GB_2312-80" },
│ │ │ +
266 { 57, "iso-ir-58" },
│ │ │ +
267 { 57, "chinese" },
│ │ │ +
268 { 57, "csISO58GB231280" },
│ │ │ +
269 { 58, "NS_4551-2" },
│ │ │ +
270 { 58, "ISO646-NO2" },
│ │ │ +
271 { 58, "iso-ir-61" },
│ │ │ +
272 { 58, "no2" },
│ │ │ +
273 { 58, "csISO61Norwegian2" },
│ │ │ +
274 { 59, "videotex-suppl" },
│ │ │ +
275 { 59, "iso-ir-70" },
│ │ │ +
276 { 59, "csISO70VideotexSupp1" },
│ │ │ +
277 { 60, "PT2" },
│ │ │ +
278 { 60, "iso-ir-84" },
│ │ │ +
279 { 60, "ISO646-PT2" },
│ │ │ +
280 { 60, "csISO84Portuguese2" },
│ │ │ +
281 { 61, "ES2" },
│ │ │ +
282 { 61, "iso-ir-85" },
│ │ │ +
283 { 61, "ISO646-ES2" },
│ │ │ +
284 { 61, "csISO85Spanish2" },
│ │ │ +
285 { 62, "MSZ_7795.3" },
│ │ │ +
286 { 62, "iso-ir-86" },
│ │ │ +
287 { 62, "ISO646-HU" },
│ │ │ +
288 { 62, "hu" },
│ │ │ +
289 { 62, "csISO86Hungarian" },
│ │ │ +
290 { 63, "JIS_C6226-1983" },
│ │ │ +
291 { 63, "iso-ir-87" },
│ │ │ +
292 { 63, "x0208" },
│ │ │ +
293 { 63, "JIS_X0208-1983" },
│ │ │ +
294 { 63, "csISO87JISX0208" },
│ │ │ +
295 { 64, "greek7" },
│ │ │ +
296 { 64, "iso-ir-88" },
│ │ │ +
297 { 64, "csISO88Greek7" },
│ │ │ +
298 { 65, "ASMO_449" },
│ │ │ +
299 { 65, "ISO_9036" },
│ │ │ +
300 { 65, "arabic7" },
│ │ │ +
301 { 65, "iso-ir-89" },
│ │ │ +
302 { 65, "csISO89ASMO449" },
│ │ │ +
303 { 66, "iso-ir-90" },
│ │ │ +
304 { 66, "csISO90" },
│ │ │ +
305 { 67, "JIS_C6229-1984-a" },
│ │ │ +
306 { 67, "iso-ir-91" },
│ │ │ +
307 { 67, "jp-ocr-a" },
│ │ │ +
308 { 67, "csISO91JISC62291984a" },
│ │ │ +
309 { 68, "JIS_C6229-1984-b" },
│ │ │ +
310 { 68, "iso-ir-92" },
│ │ │ +
311 { 68, "ISO646-JP-OCR-B" },
│ │ │ +
312 { 68, "jp-ocr-b" },
│ │ │ +
313 { 68, "csISO92JISC62991984b" },
│ │ │ +
314 { 69, "JIS_C6229-1984-b-add" },
│ │ │ +
315 { 69, "iso-ir-93" },
│ │ │ +
316 { 69, "jp-ocr-b-add" },
│ │ │ +
317 { 69, "csISO93JIS62291984badd" },
│ │ │ +
318 { 70, "JIS_C6229-1984-hand" },
│ │ │ +
319 { 70, "iso-ir-94" },
│ │ │ +
320 { 70, "jp-ocr-hand" },
│ │ │ +
321 { 70, "csISO94JIS62291984hand" },
│ │ │ +
322 { 71, "JIS_C6229-1984-hand-add" },
│ │ │ +
323 { 71, "iso-ir-95" },
│ │ │ +
324 { 71, "jp-ocr-hand-add" },
│ │ │ +
325 { 71, "csISO95JIS62291984handadd" },
│ │ │ +
326 { 72, "JIS_C6229-1984-kana" },
│ │ │ +
327 { 72, "iso-ir-96" },
│ │ │ +
328 { 72, "csISO96JISC62291984kana" },
│ │ │ +
329 { 73, "ISO_2033-1983" },
│ │ │ +
330 { 73, "iso-ir-98" },
│ │ │ +
331 { 73, "e13b" },
│ │ │ +
332 { 73, "csISO2033" },
│ │ │ +
333 { 74, "ANSI_X3.110-1983" },
│ │ │ +
334 { 74, "iso-ir-99" },
│ │ │ +
335 { 74, "CSA_T500-1983" },
│ │ │ +
336 { 74, "NAPLPS" },
│ │ │ +
337 { 74, "csISO99NAPLPS" },
│ │ │ +
338 { 75, "T.61-7bit" },
│ │ │ +
339 { 75, "iso-ir-102" },
│ │ │ +
340 { 75, "csISO102T617bit" },
│ │ │ +
341 { 76, "T.61-8bit" },
│ │ │ +
342 { 76, "T.61" },
│ │ │ +
343 { 76, "iso-ir-103" },
│ │ │ +
344 { 76, "csISO103T618bit" },
│ │ │ +
345 { 77, "ECMA-cyrillic" },
│ │ │ +
346 { 77, "iso-ir-111" },
│ │ │ +
347 { 77, "KOI8-E" },
│ │ │ +
348 { 77, "csISO111ECMACyrillic" },
│ │ │ +
349 { 78, "CSA_Z243.4-1985-1" },
│ │ │ +
350 { 78, "iso-ir-121" },
│ │ │ +
351 { 78, "ISO646-CA" },
│ │ │ +
352 { 78, "csa7-1" },
│ │ │ +
353 { 78, "csa71" },
│ │ │ +
354 { 78, "ca" },
│ │ │ +
355 { 78, "csISO121Canadian1" },
│ │ │ +
356 { 79, "CSA_Z243.4-1985-2" },
│ │ │ +
357 { 79, "iso-ir-122" },
│ │ │ +
358 { 79, "ISO646-CA2" },
│ │ │ +
359 { 79, "csa7-2" },
│ │ │ +
360 { 79, "csa72" },
│ │ │ +
361 { 79, "csISO122Canadian2" },
│ │ │ +
362 { 80, "CSA_Z243.4-1985-gr" },
│ │ │ +
363 { 80, "iso-ir-123" },
│ │ │ +
364 { 80, "csISO123CSAZ24341985gr" },
│ │ │ +
365 { 81, "ISO_8859-6-E" },
│ │ │ +
366 { 81, "csISO88596E" },
│ │ │ +
367 { 81, "ISO-8859-6-E" },
│ │ │ +
368 { 82, "ISO_8859-6-I" },
│ │ │ +
369 { 82, "csISO88596I" },
│ │ │ +
370 { 82, "ISO-8859-6-I" },
│ │ │ +
371 { 83, "T.101-G2" },
│ │ │ +
372 { 83, "iso-ir-128" },
│ │ │ +
373 { 83, "csISO128T101G2" },
│ │ │ +
374 { 84, "ISO_8859-8-E" },
│ │ │ +
375 { 84, "csISO88598E" },
│ │ │ +
376 { 84, "ISO-8859-8-E" },
│ │ │ +
377 { 85, "ISO_8859-8-I" },
│ │ │ +
378 { 85, "csISO88598I" },
│ │ │ +
379 { 85, "ISO-8859-8-I" },
│ │ │ +
380 { 86, "CSN_369103" },
│ │ │ +
381 { 86, "iso-ir-139" },
│ │ │ +
382 { 86, "csISO139CSN369103" },
│ │ │ +
383 { 87, "JUS_I.B1.002" },
│ │ │ +
384 { 87, "iso-ir-141" },
│ │ │ +
385 { 87, "ISO646-YU" },
│ │ │ +
386 { 87, "js" },
│ │ │ +
387 { 87, "yu" },
│ │ │ +
388 { 87, "csISO141JUSIB1002" },
│ │ │ +
389 { 88, "IEC_P27-1" },
│ │ │ +
390 { 88, "iso-ir-143" },
│ │ │ +
391 { 88, "csISO143IECP271" },
│ │ │ +
392 { 89, "JUS_I.B1.003-serb" },
│ │ │ +
393 { 89, "iso-ir-146" },
│ │ │ +
394 { 89, "serbian" },
│ │ │ +
395 { 89, "csISO146Serbian" },
│ │ │ +
396 { 90, "JUS_I.B1.003-mac" },
│ │ │ +
397 { 90, "macedonian" },
│ │ │ +
398 { 90, "iso-ir-147" },
│ │ │ +
399 { 90, "csISO147Macedonian" },
│ │ │ +
400 { 91, "greek-ccitt" },
│ │ │ +
401 { 91, "iso-ir-150" },
│ │ │ +
402 { 91, "csISO150" },
│ │ │ +
403 { 91, "csISO150GreekCCITT" },
│ │ │ +
404 { 92, "NC_NC00-10:81" },
│ │ │ +
405 { 92, "cuba" },
│ │ │ +
406 { 92, "iso-ir-151" },
│ │ │ +
407 { 92, "ISO646-CU" },
│ │ │ +
408 { 92, "csISO151Cuba" },
│ │ │ +
409 { 93, "ISO_6937-2-25" },
│ │ │ +
410 { 93, "iso-ir-152" },
│ │ │ +
411 { 93, "csISO6937Add" },
│ │ │ +
412 { 94, "GOST_19768-74" },
│ │ │ +
413 { 94, "ST_SEV_358-88" },
│ │ │ +
414 { 94, "iso-ir-153" },
│ │ │ +
415 { 94, "csISO153GOST1976874" },
│ │ │ +
416 { 95, "ISO_8859-supp" },
│ │ │ +
417 { 95, "iso-ir-154" },
│ │ │ +
418 { 95, "latin1-2-5" },
│ │ │ +
419 { 95, "csISO8859Supp" },
│ │ │ +
420 { 96, "ISO_10367-box" },
│ │ │ +
421 { 96, "iso-ir-155" },
│ │ │ +
422 { 96, "csISO10367Box" },
│ │ │ +
423 { 97, "latin-lap" },
│ │ │ +
424 { 97, "lap" },
│ │ │ +
425 { 97, "iso-ir-158" },
│ │ │ +
426 { 97, "csISO158Lap" },
│ │ │ +
427 { 98, "JIS_X0212-1990" },
│ │ │ +
428 { 98, "x0212" },
│ │ │ +
429 { 98, "iso-ir-159" },
│ │ │ +
430 { 98, "csISO159JISX02121990" },
│ │ │ +
431 { 99, "DS_2089" },
│ │ │ +
432 { 99, "DS2089" },
│ │ │ +
433 { 99, "ISO646-DK" },
│ │ │ +
434 { 99, "dk" },
│ │ │ +
435 { 99, "csISO646Danish" },
│ │ │ +
436 { 100, "us-dk" },
│ │ │ +
437 { 100, "csUSDK" },
│ │ │ +
438 { 101, "dk-us" },
│ │ │ +
439 { 101, "csDKUS" },
│ │ │ +
440 { 102, "KSC5636" },
│ │ │ +
441 { 102, "ISO646-KR" },
│ │ │ +
442 { 102, "csKSC5636" },
│ │ │ +
443 { 103, "UNICODE-1-1-UTF-7" },
│ │ │ +
444 { 103, "csUnicode11UTF7" },
│ │ │ +
445 { 104, "ISO-2022-CN" },
│ │ │ +
446 { 104, "csISO2022CN" },
│ │ │ +
447 { 105, "ISO-2022-CN-EXT" },
│ │ │ +
448 { 105, "csISO2022CNEXT" },
│ │ │ +
449#define _GLIBCXX_TEXT_ENCODING_UTF8_OFFSET 414
│ │ │ +
450 { 106, "UTF-8" },
│ │ │ +
451 { 106, "csUTF8" },
│ │ │ +
452 { 109, "ISO-8859-13" },
│ │ │ +
453 { 109, "csISO885913" },
│ │ │ +
454 { 110, "ISO-8859-14" },
│ │ │ +
455 { 110, "iso-ir-199" },
│ │ │ +
456 { 110, "ISO_8859-14:1998" },
│ │ │ +
457 { 110, "ISO_8859-14" },
│ │ │ +
458 { 110, "latin8" },
│ │ │ +
459 { 110, "iso-celtic" },
│ │ │ +
460 { 110, "l8" },
│ │ │ +
461 { 110, "csISO885914" },
│ │ │ +
462 { 111, "ISO-8859-15" },
│ │ │ +
463 { 111, "ISO_8859-15" },
│ │ │ +
464 { 111, "Latin-9" },
│ │ │ +
465 { 111, "csISO885915" },
│ │ │ +
466 { 112, "ISO-8859-16" },
│ │ │ +
467 { 112, "iso-ir-226" },
│ │ │ +
468 { 112, "ISO_8859-16:2001" },
│ │ │ +
469 { 112, "ISO_8859-16" },
│ │ │ +
470 { 112, "latin10" },
│ │ │ +
471 { 112, "l10" },
│ │ │ +
472 { 112, "csISO885916" },
│ │ │ +
473 { 113, "GBK" },
│ │ │ +
474 { 113, "CP936" },
│ │ │ +
475 { 113, "MS936" },
│ │ │ +
476 { 113, "windows-936" },
│ │ │ +
477 { 113, "csGBK" },
│ │ │ +
478 { 114, "GB18030" },
│ │ │ +
479 { 114, "csGB18030" },
│ │ │ +
480 { 115, "OSD_EBCDIC_DF04_15" },
│ │ │ +
481 { 115, "csOSDEBCDICDF0415" },
│ │ │ +
482 { 116, "OSD_EBCDIC_DF03_IRV" },
│ │ │ +
483 { 116, "csOSDEBCDICDF03IRV" },
│ │ │ +
484 { 117, "OSD_EBCDIC_DF04_1" },
│ │ │ +
485 { 117, "csOSDEBCDICDF041" },
│ │ │ +
486 { 118, "ISO-11548-1" },
│ │ │ +
487 { 118, "ISO_11548-1" },
│ │ │ +
488 { 118, "ISO_TR_11548-1" },
│ │ │ +
489 { 118, "csISO115481" },
│ │ │ +
490 { 119, "KZ-1048" },
│ │ │ +
491 { 119, "STRK1048-2002" },
│ │ │ +
492 { 119, "RK1048" },
│ │ │ +
493 { 119, "csKZ1048" },
│ │ │ +
494 { 1000, "ISO-10646-UCS-2" },
│ │ │ +
495 { 1000, "csUnicode" },
│ │ │ +
496 { 1001, "ISO-10646-UCS-4" },
│ │ │ +
497 { 1001, "csUCS4" },
│ │ │ +
498 { 1002, "ISO-10646-UCS-Basic" },
│ │ │ +
499 { 1002, "csUnicodeASCII" },
│ │ │ +
500 { 1003, "ISO-10646-Unicode-Latin1" },
│ │ │ +
501 { 1003, "csUnicodeLatin1" },
│ │ │ +
502 { 1003, "ISO-10646" },
│ │ │ +
503 { 1004, "ISO-10646-J-1" },
│ │ │ +
504 { 1004, "csUnicodeJapanese" },
│ │ │ +
505 { 1005, "ISO-Unicode-IBM-1261" },
│ │ │ +
506 { 1005, "csUnicodeIBM1261" },
│ │ │ +
507 { 1006, "ISO-Unicode-IBM-1268" },
│ │ │ +
508 { 1006, "csUnicodeIBM1268" },
│ │ │ +
509 { 1007, "ISO-Unicode-IBM-1276" },
│ │ │ +
510 { 1007, "csUnicodeIBM1276" },
│ │ │ +
511 { 1008, "ISO-Unicode-IBM-1264" },
│ │ │ +
512 { 1008, "csUnicodeIBM1264" },
│ │ │ +
513 { 1009, "ISO-Unicode-IBM-1265" },
│ │ │ +
514 { 1009, "csUnicodeIBM1265" },
│ │ │ +
515 { 1010, "UNICODE-1-1" },
│ │ │ +
516 { 1010, "csUnicode11" },
│ │ │ +
517 { 1011, "SCSU" },
│ │ │ +
518 { 1011, "csSCSU" },
│ │ │ +
519 { 1012, "UTF-7" },
│ │ │ +
520 { 1012, "csUTF7" },
│ │ │ +
521 { 1013, "UTF-16BE" },
│ │ │ +
522 { 1013, "csUTF16BE" },
│ │ │ +
523 { 1014, "UTF-16LE" },
│ │ │ +
524 { 1014, "csUTF16LE" },
│ │ │ +
525 { 1015, "UTF-16" },
│ │ │ +
526 { 1015, "csUTF16" },
│ │ │ +
527 { 1016, "CESU-8" },
│ │ │ +
528 { 1016, "csCESU8" },
│ │ │ +
529 { 1016, "csCESU-8" },
│ │ │ +
530 { 1017, "UTF-32" },
│ │ │ +
531 { 1017, "csUTF32" },
│ │ │ +
532 { 1018, "UTF-32BE" },
│ │ │ +
533 { 1018, "csUTF32BE" },
│ │ │ +
534 { 1019, "UTF-32LE" },
│ │ │ +
535 { 1019, "csUTF32LE" },
│ │ │ +
536 { 1020, "BOCU-1" },
│ │ │ +
537 { 1020, "csBOCU1" },
│ │ │ +
538 { 1020, "csBOCU-1" },
│ │ │ +
539 { 1021, "UTF-7-IMAP" },
│ │ │ +
540 { 1021, "csUTF7IMAP" },
│ │ │ +
541 { 2000, "ISO-8859-1-Windows-3.0-Latin-1" },
│ │ │ +
542 { 2000, "csWindows30Latin1" },
│ │ │ +
543 { 2001, "ISO-8859-1-Windows-3.1-Latin-1" },
│ │ │ +
544 { 2001, "csWindows31Latin1" },
│ │ │ +
545 { 2002, "ISO-8859-2-Windows-Latin-2" },
│ │ │ +
546 { 2002, "csWindows31Latin2" },
│ │ │ +
547 { 2003, "ISO-8859-9-Windows-Latin-5" },
│ │ │ +
548 { 2003, "csWindows31Latin5" },
│ │ │ +
549 { 2004, "hp-roman8" },
│ │ │ +
550 { 2004, "roman8" },
│ │ │ +
551 { 2004, "r8" },
│ │ │ +
552 { 2004, "csHPRoman8" },
│ │ │ +
553 { 2005, "Adobe-Standard-Encoding" },
│ │ │ +
554 { 2005, "csAdobeStandardEncoding" },
│ │ │ +
555 { 2006, "Ventura-US" },
│ │ │ +
556 { 2006, "csVenturaUS" },
│ │ │ +
557 { 2007, "Ventura-International" },
│ │ │ +
558 { 2007, "csVenturaInternational" },
│ │ │ +
559 { 2008, "DEC-MCS" },
│ │ │ +
560 { 2008, "dec" },
│ │ │ +
561 { 2008, "csDECMCS" },
│ │ │ +
562 { 2009, "IBM850" },
│ │ │ +
563 { 2009, "cp850" },
│ │ │ +
564 { 2009, "850" },
│ │ │ +
565 { 2009, "csPC850Multilingual" },
│ │ │ +
566 { 2010, "IBM852" },
│ │ │ +
567 { 2010, "cp852" },
│ │ │ +
568 { 2010, "852" },
│ │ │ +
569 { 2010, "csPCp852" },
│ │ │ +
570 { 2011, "IBM437" },
│ │ │ +
571 { 2011, "cp437" },
│ │ │ +
572 { 2011, "437" },
│ │ │ +
573 { 2011, "csPC8CodePage437" },
│ │ │ +
574 { 2012, "PC8-Danish-Norwegian" },
│ │ │ +
575 { 2012, "csPC8DanishNorwegian" },
│ │ │ +
576 { 2013, "IBM862" },
│ │ │ +
577 { 2013, "cp862" },
│ │ │ +
578 { 2013, "862" },
│ │ │ +
579 { 2013, "csPC862LatinHebrew" },
│ │ │ +
580 { 2014, "PC8-Turkish" },
│ │ │ +
581 { 2014, "csPC8Turkish" },
│ │ │ +
582 { 2015, "IBM-Symbols" },
│ │ │ +
583 { 2015, "csIBMSymbols" },
│ │ │ +
584 { 2016, "IBM-Thai" },
│ │ │ +
585 { 2016, "csIBMThai" },
│ │ │ +
586 { 2017, "HP-Legal" },
│ │ │ +
587 { 2017, "csHPLegal" },
│ │ │ +
588 { 2018, "HP-Pi-font" },
│ │ │ +
589 { 2018, "csHPPiFont" },
│ │ │ +
590 { 2019, "HP-Math8" },
│ │ │ +
591 { 2019, "csHPMath8" },
│ │ │ +
592 { 2020, "Adobe-Symbol-Encoding" },
│ │ │ +
593 { 2020, "csHPPSMath" },
│ │ │ +
594 { 2021, "HP-DeskTop" },
│ │ │ +
595 { 2021, "csHPDesktop" },
│ │ │ +
596 { 2022, "Ventura-Math" },
│ │ │ +
597 { 2022, "csVenturaMath" },
│ │ │ +
598 { 2023, "Microsoft-Publishing" },
│ │ │ +
599 { 2023, "csMicrosoftPublishing" },
│ │ │ +
600 { 2024, "Windows-31J" },
│ │ │ +
601 { 2024, "csWindows31J" },
│ │ │ +
602 { 2025, "GB2312" },
│ │ │ +
603 { 2025, "csGB2312" },
│ │ │ +
604 { 2026, "Big5" },
│ │ │ +
605 { 2026, "csBig5" },
│ │ │ +
606 { 2027, "macintosh" },
│ │ │ +
607 { 2027, "mac" },
│ │ │ +
608 { 2027, "csMacintosh" },
│ │ │ +
609 { 2028, "IBM037" },
│ │ │ +
610 { 2028, "cp037" },
│ │ │ +
611 { 2028, "ebcdic-cp-us" },
│ │ │ +
612 { 2028, "ebcdic-cp-ca" },
│ │ │ +
613 { 2028, "ebcdic-cp-wt" },
│ │ │ +
614 { 2028, "ebcdic-cp-nl" },
│ │ │ +
615 { 2028, "csIBM037" },
│ │ │ +
616 { 2029, "IBM038" },
│ │ │ +
617 { 2029, "EBCDIC-INT" },
│ │ │ +
618 { 2029, "cp038" },
│ │ │ +
619 { 2029, "csIBM038" },
│ │ │ +
620 { 2030, "IBM273" },
│ │ │ +
621 { 2030, "CP273" },
│ │ │ +
622 { 2030, "csIBM273" },
│ │ │ +
623 { 2031, "IBM274" },
│ │ │ +
624 { 2031, "EBCDIC-BE" },
│ │ │ +
625 { 2031, "CP274" },
│ │ │ +
626 { 2031, "csIBM274" },
│ │ │ +
627 { 2032, "IBM275" },
│ │ │ +
628 { 2032, "EBCDIC-BR" },
│ │ │ +
629 { 2032, "cp275" },
│ │ │ +
630 { 2032, "csIBM275" },
│ │ │ +
631 { 2033, "IBM277" },
│ │ │ +
632 { 2033, "EBCDIC-CP-DK" },
│ │ │ +
633 { 2033, "EBCDIC-CP-NO" },
│ │ │ +
634 { 2033, "csIBM277" },
│ │ │ +
635 { 2034, "IBM278" },
│ │ │ +
636 { 2034, "CP278" },
│ │ │ +
637 { 2034, "ebcdic-cp-fi" },
│ │ │ +
638 { 2034, "ebcdic-cp-se" },
│ │ │ +
639 { 2034, "csIBM278" },
│ │ │ +
640 { 2035, "IBM280" },
│ │ │ +
641 { 2035, "CP280" },
│ │ │ +
642 { 2035, "ebcdic-cp-it" },
│ │ │ +
643 { 2035, "csIBM280" },
│ │ │ +
644 { 2036, "IBM281" },
│ │ │ +
645 { 2036, "EBCDIC-JP-E" },
│ │ │ +
646 { 2036, "cp281" },
│ │ │ +
647 { 2036, "csIBM281" },
│ │ │ +
648 { 2037, "IBM284" },
│ │ │ +
649 { 2037, "CP284" },
│ │ │ +
650 { 2037, "ebcdic-cp-es" },
│ │ │ +
651 { 2037, "csIBM284" },
│ │ │ +
652 { 2038, "IBM285" },
│ │ │ +
653 { 2038, "CP285" },
│ │ │ +
654 { 2038, "ebcdic-cp-gb" },
│ │ │ +
655 { 2038, "csIBM285" },
│ │ │ +
656 { 2039, "IBM290" },
│ │ │ +
657 { 2039, "cp290" },
│ │ │ +
658 { 2039, "EBCDIC-JP-kana" },
│ │ │ +
659 { 2039, "csIBM290" },
│ │ │ +
660 { 2040, "IBM297" },
│ │ │ +
661 { 2040, "cp297" },
│ │ │ +
662 { 2040, "ebcdic-cp-fr" },
│ │ │ +
663 { 2040, "csIBM297" },
│ │ │ +
664 { 2041, "IBM420" },
│ │ │ +
665 { 2041, "cp420" },
│ │ │ +
666 { 2041, "ebcdic-cp-ar1" },
│ │ │ +
667 { 2041, "csIBM420" },
│ │ │ +
668 { 2042, "IBM423" },
│ │ │ +
669 { 2042, "cp423" },
│ │ │ +
670 { 2042, "ebcdic-cp-gr" },
│ │ │ +
671 { 2042, "csIBM423" },
│ │ │ +
672 { 2043, "IBM424" },
│ │ │ +
673 { 2043, "cp424" },
│ │ │ +
674 { 2043, "ebcdic-cp-he" },
│ │ │ +
675 { 2043, "csIBM424" },
│ │ │ +
676 { 2044, "IBM500" },
│ │ │ +
677 { 2044, "CP500" },
│ │ │ +
678 { 2044, "ebcdic-cp-be" },
│ │ │ +
679 { 2044, "ebcdic-cp-ch" },
│ │ │ +
680 { 2044, "csIBM500" },
│ │ │ +
681 { 2045, "IBM851" },
│ │ │ +
682 { 2045, "cp851" },
│ │ │ +
683 { 2045, "851" },
│ │ │ +
684 { 2045, "csIBM851" },
│ │ │ +
685 { 2046, "IBM855" },
│ │ │ +
686 { 2046, "cp855" },
│ │ │ +
687 { 2046, "855" },
│ │ │ +
688 { 2046, "csIBM855" },
│ │ │ +
689 { 2047, "IBM857" },
│ │ │ +
690 { 2047, "cp857" },
│ │ │ +
691 { 2047, "857" },
│ │ │ +
692 { 2047, "csIBM857" },
│ │ │ +
693 { 2048, "IBM860" },
│ │ │ +
694 { 2048, "cp860" },
│ │ │ +
695 { 2048, "860" },
│ │ │ +
696 { 2048, "csIBM860" },
│ │ │ +
697 { 2049, "IBM861" },
│ │ │ +
698 { 2049, "cp861" },
│ │ │ +
699 { 2049, "861" },
│ │ │ +
700 { 2049, "cp-is" },
│ │ │ +
701 { 2049, "csIBM861" },
│ │ │ +
702 { 2050, "IBM863" },
│ │ │ +
703 { 2050, "cp863" },
│ │ │ +
704 { 2050, "863" },
│ │ │ +
705 { 2050, "csIBM863" },
│ │ │ +
706 { 2051, "IBM864" },
│ │ │ +
707 { 2051, "cp864" },
│ │ │ +
708 { 2051, "csIBM864" },
│ │ │ +
709 { 2052, "IBM865" },
│ │ │ +
710 { 2052, "cp865" },
│ │ │ +
711 { 2052, "865" },
│ │ │ +
712 { 2052, "csIBM865" },
│ │ │ +
713 { 2053, "IBM868" },
│ │ │ +
714 { 2053, "CP868" },
│ │ │ +
715 { 2053, "cp-ar" },
│ │ │ +
716 { 2053, "csIBM868" },
│ │ │ +
717 { 2054, "IBM869" },
│ │ │ +
718 { 2054, "cp869" },
│ │ │ +
719 { 2054, "869" },
│ │ │ +
720 { 2054, "cp-gr" },
│ │ │ +
721 { 2054, "csIBM869" },
│ │ │ +
722 { 2055, "IBM870" },
│ │ │ +
723 { 2055, "CP870" },
│ │ │ +
724 { 2055, "ebcdic-cp-roece" },
│ │ │ +
725 { 2055, "ebcdic-cp-yu" },
│ │ │ +
726 { 2055, "csIBM870" },
│ │ │ +
727 { 2056, "IBM871" },
│ │ │ +
728 { 2056, "CP871" },
│ │ │ +
729 { 2056, "ebcdic-cp-is" },
│ │ │ +
730 { 2056, "csIBM871" },
│ │ │ +
731 { 2057, "IBM880" },
│ │ │ +
732 { 2057, "cp880" },
│ │ │ +
733 { 2057, "EBCDIC-Cyrillic" },
│ │ │ +
734 { 2057, "csIBM880" },
│ │ │ +
735 { 2058, "IBM891" },
│ │ │ +
736 { 2058, "cp891" },
│ │ │ +
737 { 2058, "csIBM891" },
│ │ │ +
738 { 2059, "IBM903" },
│ │ │ +
739 { 2059, "cp903" },
│ │ │ +
740 { 2059, "csIBM903" },
│ │ │ +
741 { 2060, "IBM904" },
│ │ │ +
742 { 2060, "cp904" },
│ │ │ +
743 { 2060, "904" },
│ │ │ +
744 { 2060, "csIBBM904" },
│ │ │ +
745 { 2061, "IBM905" },
│ │ │ +
746 { 2061, "CP905" },
│ │ │ +
747 { 2061, "ebcdic-cp-tr" },
│ │ │ +
748 { 2061, "csIBM905" },
│ │ │ +
749 { 2062, "IBM918" },
│ │ │ +
750 { 2062, "CP918" },
│ │ │ +
751 { 2062, "ebcdic-cp-ar2" },
│ │ │ +
752 { 2062, "csIBM918" },
│ │ │ +
753 { 2063, "IBM1026" },
│ │ │ +
754 { 2063, "CP1026" },
│ │ │ +
755 { 2063, "csIBM1026" },
│ │ │ +
756 { 2064, "EBCDIC-AT-DE" },
│ │ │ +
757 { 2064, "csIBMEBCDICATDE" },
│ │ │ +
758 { 2065, "EBCDIC-AT-DE-A" },
│ │ │ +
759 { 2065, "csEBCDICATDEA" },
│ │ │ +
760 { 2066, "EBCDIC-CA-FR" },
│ │ │ +
761 { 2066, "csEBCDICCAFR" },
│ │ │ +
762 { 2067, "EBCDIC-DK-NO" },
│ │ │ +
763 { 2067, "csEBCDICDKNO" },
│ │ │ +
764 { 2068, "EBCDIC-DK-NO-A" },
│ │ │ +
765 { 2068, "csEBCDICDKNOA" },
│ │ │ +
766 { 2069, "EBCDIC-FI-SE" },
│ │ │ +
767 { 2069, "csEBCDICFISE" },
│ │ │ +
768 { 2070, "EBCDIC-FI-SE-A" },
│ │ │ +
769 { 2070, "csEBCDICFISEA" },
│ │ │ +
770 { 2071, "EBCDIC-FR" },
│ │ │ +
771 { 2071, "csEBCDICFR" },
│ │ │ +
772 { 2072, "EBCDIC-IT" },
│ │ │ +
773 { 2072, "csEBCDICIT" },
│ │ │ +
774 { 2073, "EBCDIC-PT" },
│ │ │ +
775 { 2073, "csEBCDICPT" },
│ │ │ +
776 { 2074, "EBCDIC-ES" },
│ │ │ +
777 { 2074, "csEBCDICES" },
│ │ │ +
778 { 2075, "EBCDIC-ES-A" },
│ │ │ +
779 { 2075, "csEBCDICESA" },
│ │ │ +
780 { 2076, "EBCDIC-ES-S" },
│ │ │ +
781 { 2076, "csEBCDICESS" },
│ │ │ +
782 { 2077, "EBCDIC-UK" },
│ │ │ +
783 { 2077, "csEBCDICUK" },
│ │ │ +
784 { 2078, "EBCDIC-US" },
│ │ │ +
785 { 2078, "csEBCDICUS" },
│ │ │ +
786 { 2079, "UNKNOWN-8BIT" },
│ │ │ +
787 { 2079, "csUnknown8BiT" },
│ │ │ +
788 { 2080, "MNEMONIC" },
│ │ │ +
789 { 2080, "csMnemonic" },
│ │ │ +
790 { 2081, "MNEM" },
│ │ │ +
791 { 2081, "csMnem" },
│ │ │ +
792 { 2082, "VISCII" },
│ │ │ +
793 { 2082, "csVISCII" },
│ │ │ +
794 { 2083, "VIQR" },
│ │ │ +
795 { 2083, "csVIQR" },
│ │ │ +
796 { 2084, "KOI8-R" },
│ │ │ +
797 { 2084, "csKOI8R" },
│ │ │ +
798 { 2085, "HZ-GB-2312" },
│ │ │ +
799 { 2086, "IBM866" },
│ │ │ +
800 { 2086, "cp866" },
│ │ │ +
801 { 2086, "866" },
│ │ │ +
802 { 2086, "csIBM866" },
│ │ │ +
803 { 2087, "IBM775" },
│ │ │ +
804 { 2087, "cp775" },
│ │ │ +
805 { 2087, "csPC775Baltic" },
│ │ │ +
806 { 2088, "KOI8-U" },
│ │ │ +
807 { 2088, "csKOI8U" },
│ │ │ +
808 { 2089, "IBM00858" },
│ │ │ +
809 { 2089, "CCSID00858" },
│ │ │ +
810 { 2089, "CP00858" },
│ │ │ +
811 { 2089, "PC-Multilingual-850+euro" },
│ │ │ +
812 { 2089, "csIBM00858" },
│ │ │ +
813 { 2090, "IBM00924" },
│ │ │ +
814 { 2090, "CCSID00924" },
│ │ │ +
815 { 2090, "CP00924" },
│ │ │ +
816 { 2090, "ebcdic-Latin9--euro" },
│ │ │ +
817 { 2090, "csIBM00924" },
│ │ │ +
818 { 2091, "IBM01140" },
│ │ │ +
819 { 2091, "CCSID01140" },
│ │ │ +
820 { 2091, "CP01140" },
│ │ │ +
821 { 2091, "ebcdic-us-37+euro" },
│ │ │ +
822 { 2091, "csIBM01140" },
│ │ │ +
823 { 2092, "IBM01141" },
│ │ │ +
824 { 2092, "CCSID01141" },
│ │ │ +
825 { 2092, "CP01141" },
│ │ │ +
826 { 2092, "ebcdic-de-273+euro" },
│ │ │ +
827 { 2092, "csIBM01141" },
│ │ │ +
828 { 2093, "IBM01142" },
│ │ │ +
829 { 2093, "CCSID01142" },
│ │ │ +
830 { 2093, "CP01142" },
│ │ │ +
831 { 2093, "ebcdic-dk-277+euro" },
│ │ │ +
832 { 2093, "ebcdic-no-277+euro" },
│ │ │ +
833 { 2093, "csIBM01142" },
│ │ │ +
834 { 2094, "IBM01143" },
│ │ │ +
835 { 2094, "CCSID01143" },
│ │ │ +
836 { 2094, "CP01143" },
│ │ │ +
837 { 2094, "ebcdic-fi-278+euro" },
│ │ │ +
838 { 2094, "ebcdic-se-278+euro" },
│ │ │ +
839 { 2094, "csIBM01143" },
│ │ │ +
840 { 2095, "IBM01144" },
│ │ │ +
841 { 2095, "CCSID01144" },
│ │ │ +
842 { 2095, "CP01144" },
│ │ │ +
843 { 2095, "ebcdic-it-280+euro" },
│ │ │ +
844 { 2095, "csIBM01144" },
│ │ │ +
845 { 2096, "IBM01145" },
│ │ │ +
846 { 2096, "CCSID01145" },
│ │ │ +
847 { 2096, "CP01145" },
│ │ │ +
848 { 2096, "ebcdic-es-284+euro" },
│ │ │ +
849 { 2096, "csIBM01145" },
│ │ │ +
850 { 2097, "IBM01146" },
│ │ │ +
851 { 2097, "CCSID01146" },
│ │ │ +
852 { 2097, "CP01146" },
│ │ │ +
853 { 2097, "ebcdic-gb-285+euro" },
│ │ │ +
854 { 2097, "csIBM01146" },
│ │ │ +
855 { 2098, "IBM01147" },
│ │ │ +
856 { 2098, "CCSID01147" },
│ │ │ +
857 { 2098, "CP01147" },
│ │ │ +
858 { 2098, "ebcdic-fr-297+euro" },
│ │ │ +
859 { 2098, "csIBM01147" },
│ │ │ +
860 { 2099, "IBM01148" },
│ │ │ +
861 { 2099, "CCSID01148" },
│ │ │ +
862 { 2099, "CP01148" },
│ │ │ +
863 { 2099, "ebcdic-international-500+euro" },
│ │ │ +
864 { 2099, "csIBM01148" },
│ │ │ +
865 { 2100, "IBM01149" },
│ │ │ +
866 { 2100, "CCSID01149" },
│ │ │ +
867 { 2100, "CP01149" },
│ │ │ +
868 { 2100, "ebcdic-is-871+euro" },
│ │ │ +
869 { 2100, "csIBM01149" },
│ │ │ +
870 { 2101, "Big5-HKSCS" },
│ │ │ +
871 { 2101, "csBig5HKSCS" },
│ │ │ +
872 { 2102, "IBM1047" },
│ │ │ +
873 { 2102, "IBM-1047" },
│ │ │ +
874 { 2102, "csIBM1047" },
│ │ │ +
875 { 2103, "PTCP154" },
│ │ │ +
876 { 2103, "csPTCP154" },
│ │ │ +
877 { 2103, "PT154" },
│ │ │ +
878 { 2103, "CP154" },
│ │ │ +
879 { 2103, "Cyrillic-Asian" },
│ │ │ +
880 { 2104, "Amiga-1251" },
│ │ │ +
881 { 2104, "Ami1251" },
│ │ │ +
882 { 2104, "Amiga1251" },
│ │ │ +
883 { 2104, "Ami-1251" },
│ │ │ +
884 { 2104, "csAmiga1251" },
│ │ │ +
885 { 2104, "(Aliases" },
│ │ │ +
886 { 2104, "are" },
│ │ │ +
887 { 2104, "provided" },
│ │ │ +
888 { 2104, "for" },
│ │ │ +
889 { 2104, "historical" },
│ │ │ +
890 { 2104, "reasons" },
│ │ │ +
891 { 2104, "and" },
│ │ │ +
892 { 2104, "should" },
│ │ │ +
893 { 2104, "not" },
│ │ │ +
894 { 2104, "be" },
│ │ │ +
895 { 2104, "used)" },
│ │ │ +
896 { 2104, "[Malyshev]" },
│ │ │ +
897 { 2105, "KOI7-switched" },
│ │ │ +
898 { 2105, "csKOI7switched" },
│ │ │ +
899 { 2106, "BRF" },
│ │ │ +
900 { 2106, "csBRF" },
│ │ │ +
901 { 2107, "TSCII" },
│ │ │ +
902 { 2107, "csTSCII" },
│ │ │ +
903 { 2108, "CP51932" },
│ │ │ +
904 { 2108, "csCP51932" },
│ │ │ +
905 { 2109, "windows-874" },
│ │ │ +
906 { 2109, "cswindows874" },
│ │ │ +
907 { 2250, "windows-1250" },
│ │ │ +
908 { 2250, "cswindows1250" },
│ │ │ +
909 { 2251, "windows-1251" },
│ │ │ +
910 { 2251, "cswindows1251" },
│ │ │ +
911 { 2252, "windows-1252" },
│ │ │ +
912 { 2252, "cswindows1252" },
│ │ │ +
913 { 2253, "windows-1253" },
│ │ │ +
914 { 2253, "cswindows1253" },
│ │ │ +
915 { 2254, "windows-1254" },
│ │ │ +
916 { 2254, "cswindows1254" },
│ │ │ +
917 { 2255, "windows-1255" },
│ │ │ +
918 { 2255, "cswindows1255" },
│ │ │ +
919 { 2256, "windows-1256" },
│ │ │ +
920 { 2256, "cswindows1256" },
│ │ │ +
921 { 2257, "windows-1257" },
│ │ │ +
922 { 2257, "cswindows1257" },
│ │ │ +
923 { 2258, "windows-1258" },
│ │ │ +
924 { 2258, "cswindows1258" },
│ │ │ +
925 { 2259, "TIS-620" },
│ │ │ +
926 { 2259, "csTIS620" },
│ │ │ +
927 { 2259, "ISO-8859-11" },
│ │ │ +
928 { 2260, "CP50220" },
│ │ │ +
929 { 2260, "csCP50220" },
│ │ │ +
930
│ │ │ +
931#undef _GLIBCXX_GET_ENCODING_DATA
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,652 +1,937 @@ │ │ │ │ libstdc++ │ │ │ │ -streambuf_iterator.h │ │ │ │ +text_encoding-data.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// Generated by scripts/gen_text_encoding_data.py, do not edit. │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 1997-2025 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/streambuf_iterator.h │ │ │ │ -26 * This is an internal header file, included by other library headers. │ │ │ │ -27 * Do not attempt to use it directly. @headername{iterator} │ │ │ │ -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 │ │ │ │ -67 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -68 // 3188. istreambuf_iterator::pointer should not be unspecified │ │ │ │ -_6_9 using _p_o_i_n_t_e_r = _v_o_i_d; │ │ │ │ -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 ___C_h_a_r_T_2*>::__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_>, ___C_h_a_r_T_2*); │ │ │ │ -90 │ │ │ │ -91 template │ │ │ │ -92 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, │ │ │ │ -93 ___C_h_a_r_T_2*>::__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, ___C_h_a_r_T_2*, 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 ___C_h_a_r_T_2&); │ │ │ │ -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_>&, ___D_i_s_t_a_n_c_e); │ │ │ │ -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 ___G_L_I_B_C_X_X___C_O_N_S_T_E_X_P_R _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r() ___G_L_I_B_C_X_X___U_S_E___N_O_E_X_C_E_P_T │ │ │ │ -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; │ │ │ │ -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) ___G_L_I_B_C_X_X___U_S_E___N_O_E_X_C_E_P_T │ │ │ │ -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) ___G_L_I_B_C_X_X___U_S_E___N_O_E_X_C_E_P_T │ │ │ │ -140 : _M_sbuf(_____s), _M_c(traits_type::eof()) { } │ │ │ │ -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 _c_h_a_r___t_y_p_e │ │ │ │ -_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) │ │ │ │ -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 _____o_l_d = *this; │ │ │ │ -190 _____o_l_d._M_c = _M_sbuf->sbumpc(); │ │ │ │ -191 _M_c = traits_type::eof(); │ │ │ │ -192 return _____o_l_d; │ │ │ │ -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 _____r_e_t = _M_c; │ │ │ │ -209 if (_M_sbuf && _S_is_eof(_____r_e_t) && _S_is_eof(_____r_e_t = _M_sbuf->sgetc())) │ │ │ │ -210 _M_sbuf = 0; │ │ │ │ -211 return _____r_e_t; │ │ │ │ -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 istreambuf_iterator<_CharT, _Traits>& __a, │ │ │ │ -237 const istreambuf_iterator<_CharT, _Traits>& __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 istreambuf_iterator<_CharT, _Traits>& __a, │ │ │ │ -245 const istreambuf_iterator<_CharT, _Traits>& __b) │ │ │ │ -246 { return !__a.equal(__b); } │ │ │ │ -247#endif │ │ │ │ -248 │ │ │ │ -249 /// Provides output iterator semantics for streambufs. │ │ │ │ -250 template │ │ │ │ -_2_5_1 class _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r │ │ │ │ -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 = _p_t_r_d_i_f_f___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 _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 │ │ │ │ -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 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_2_>); │ │ │ │ -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 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r() noexcept │ │ │ │ -282 : _M_sbuf(nullptr), _M_failed(_t_r_u_e) { } │ │ │ │ -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) ___G_L_I_B_C_X_X___U_S_E___N_O_E_X_C_E_P_T │ │ │ │ -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) ___G_L_I_B_C_X_X___U_S_E___N_O_E_X_C_E_P_T │ │ │ │ -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() _c_o_n_s_t ___G_L_I_B_C_X_X___U_S_E___N_O_E_X_C_E_P_T │ │ │ │ -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* _____w_s, _s_t_r_e_a_m_s_i_z_e _____l_e_n) │ │ │ │ -327 { │ │ │ │ -328 if (_____b_u_i_l_t_i_n___e_x_p_e_c_t(!_M_failed, true) │ │ │ │ -329 && _____b_u_i_l_t_i_n___e_x_p_e_c_t(this->_M_sbuf->sputn(_____w_s, _____l_e_n) != _____l_e_n, │ │ │ │ -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 ostreambuf_iterator<_CharT> >::__type │ │ │ │ -341 copy(istreambuf_iterator<_CharT> __first, │ │ │ │ -342 istreambuf_iterator<_CharT> __last, │ │ │ │ -343 ostreambuf_iterator<_CharT> __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 ostreambuf_iterator<_CharT> >::__type │ │ │ │ -358 __copy_move_a2(_CharT* __first, _CharT* __last, │ │ │ │ -359 ostreambuf_iterator<_CharT> __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 ostreambuf_iterator<_CharT> >::__type │ │ │ │ -370 __copy_move_a2(const _CharT* __first, const _CharT* __last, │ │ │ │ -371 ostreambuf_iterator<_CharT> __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(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 _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(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 │ │ │ │ -435 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, │ │ │ │ -436 istreambuf_iterator<_CharT> >::__type │ │ │ │ -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 _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(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 _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 │ │ │ │ -_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_2_2 │ │ │ │ -_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_:_:_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_:_:_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_:_:_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_3 │ │ │ │ -_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 │ │ │ │ -This type represents a reference-to-value_type. │ │ │ │ -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_:_:_a_u_t_o___p_t_r___r_e_f │ │ │ │ -DDeeffiinniittiioonn _a_u_t_o___p_t_r_._h_:_4_9 │ │ │ │ +3 │ │ │ │ +4// Copyright The GNU Toolchain Authors. │ │ │ │ +5// │ │ │ │ +6// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ +7// software; you can redistribute it and/or modify it under the │ │ │ │ +8// terms of the GNU General Public License as published by the │ │ │ │ +9// Free Software Foundation; either version 3, or (at your option) │ │ │ │ +10// any later version. │ │ │ │ +11 │ │ │ │ +12// This library 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/text_encoding-data.h │ │ │ │ +27 * This is an internal header file, included by other library headers. │ │ │ │ +28 * Do not attempt to use it directly. @headername{text_encoding} │ │ │ │ +29 */ │ │ │ │ +30 │ │ │ │ +31#ifndef _GLIBCXX_GET_ENCODING_DATA │ │ │ │ +32# error "This is not a public header, do not include it directly" │ │ │ │ +33#endif │ │ │ │ +34 │ │ │ │ +35 { 3, "US-ASCII" }, │ │ │ │ +36 { 3, "iso-ir-6" }, │ │ │ │ +37 { 3, "ANSI_X3.4-1968" }, │ │ │ │ +38 { 3, "ANSI_X3.4-1986" }, │ │ │ │ +39 { 3, "ISO_646.irv:1991" }, │ │ │ │ +40 { 3, "ISO646-US" }, │ │ │ │ +41 { 3, "us" }, │ │ │ │ +42 { 3, "IBM367" }, │ │ │ │ +43 { 3, "cp367" }, │ │ │ │ +44 { 3, "csASCII" }, │ │ │ │ +45 { 3, "ASCII" }, // libstdc++ extension │ │ │ │ +46 { 4, "ISO_8859-1:1987" }, │ │ │ │ +47 { 4, "iso-ir-100" }, │ │ │ │ +48 { 4, "ISO_8859-1" }, │ │ │ │ +49 { 4, "ISO-8859-1" }, │ │ │ │ +50 { 4, "latin1" }, │ │ │ │ +51 { 4, "l1" }, │ │ │ │ +52 { 4, "IBM819" }, │ │ │ │ +53 { 4, "CP819" }, │ │ │ │ +54 { 4, "csISOLatin1" }, │ │ │ │ +55 { 5, "ISO_8859-2:1987" }, │ │ │ │ +56 { 5, "iso-ir-101" }, │ │ │ │ +57 { 5, "ISO_8859-2" }, │ │ │ │ +58 { 5, "ISO-8859-2" }, │ │ │ │ +59 { 5, "latin2" }, │ │ │ │ +60 { 5, "l2" }, │ │ │ │ +61 { 5, "csISOLatin2" }, │ │ │ │ +62 { 6, "ISO_8859-3:1988" }, │ │ │ │ +63 { 6, "iso-ir-109" }, │ │ │ │ +64 { 6, "ISO_8859-3" }, │ │ │ │ +65 { 6, "ISO-8859-3" }, │ │ │ │ +66 { 6, "latin3" }, │ │ │ │ +67 { 6, "l3" }, │ │ │ │ +68 { 6, "csISOLatin3" }, │ │ │ │ +69 { 7, "ISO_8859-4:1988" }, │ │ │ │ +70 { 7, "iso-ir-110" }, │ │ │ │ +71 { 7, "ISO_8859-4" }, │ │ │ │ +72 { 7, "ISO-8859-4" }, │ │ │ │ +73 { 7, "latin4" }, │ │ │ │ +74 { 7, "l4" }, │ │ │ │ +75 { 7, "csISOLatin4" }, │ │ │ │ +76 { 8, "ISO_8859-5:1988" }, │ │ │ │ +77 { 8, "iso-ir-144" }, │ │ │ │ +78 { 8, "ISO_8859-5" }, │ │ │ │ +79 { 8, "ISO-8859-5" }, │ │ │ │ +80 { 8, "cyrillic" }, │ │ │ │ +81 { 8, "csISOLatinCyrillic" }, │ │ │ │ +82 { 9, "ISO_8859-6:1987" }, │ │ │ │ +83 { 9, "iso-ir-127" }, │ │ │ │ +84 { 9, "ISO_8859-6" }, │ │ │ │ +85 { 9, "ISO-8859-6" }, │ │ │ │ +86 { 9, "ECMA-114" }, │ │ │ │ +87 { 9, "ASMO-708" }, │ │ │ │ +88 { 9, "arabic" }, │ │ │ │ +89 { 9, "csISOLatinArabic" }, │ │ │ │ +90 { 10, "ISO_8859-7:1987" }, │ │ │ │ +91 { 10, "iso-ir-126" }, │ │ │ │ +92 { 10, "ISO_8859-7" }, │ │ │ │ +93 { 10, "ISO-8859-7" }, │ │ │ │ +94 { 10, "ELOT_928" }, │ │ │ │ +95 { 10, "ECMA-118" }, │ │ │ │ +96 { 10, "greek" }, │ │ │ │ +97 { 10, "greek8" }, │ │ │ │ +98 { 10, "csISOLatinGreek" }, │ │ │ │ +99 { 11, "ISO_8859-8:1988" }, │ │ │ │ +100 { 11, "iso-ir-138" }, │ │ │ │ +101 { 11, "ISO_8859-8" }, │ │ │ │ +102 { 11, "ISO-8859-8" }, │ │ │ │ +103 { 11, "hebrew" }, │ │ │ │ +104 { 11, "csISOLatinHebrew" }, │ │ │ │ +105 { 12, "ISO_8859-9:1989" }, │ │ │ │ +106 { 12, "iso-ir-148" }, │ │ │ │ +107 { 12, "ISO_8859-9" }, │ │ │ │ +108 { 12, "ISO-8859-9" }, │ │ │ │ +109 { 12, "latin5" }, │ │ │ │ +110 { 12, "l5" }, │ │ │ │ +111 { 12, "csISOLatin5" }, │ │ │ │ +112 { 13, "ISO-8859-10" }, │ │ │ │ +113 { 13, "iso-ir-157" }, │ │ │ │ +114 { 13, "l6" }, │ │ │ │ +115 { 13, "ISO_8859-10:1992" }, │ │ │ │ +116 { 13, "csISOLatin6" }, │ │ │ │ +117 { 13, "latin6" }, │ │ │ │ +118 { 14, "ISO_6937-2-add" }, │ │ │ │ +119 { 14, "iso-ir-142" }, │ │ │ │ +120 { 14, "csISOTextComm" }, │ │ │ │ +121 { 15, "JIS_X0201" }, │ │ │ │ +122 { 15, "X0201" }, │ │ │ │ +123 { 15, "csHalfWidthKatakana" }, │ │ │ │ +124 { 16, "JIS_Encoding" }, │ │ │ │ +125 { 16, "csJISEncoding" }, │ │ │ │ +126 { 17, "Shift_JIS" }, │ │ │ │ +127 { 17, "MS_Kanji" }, │ │ │ │ +128 { 17, "csShiftJIS" }, │ │ │ │ +129 { 18, "Extended_UNIX_Code_Packed_Format_for_Japanese" }, │ │ │ │ +130 { 18, "csEUCPkdFmtJapanese" }, │ │ │ │ +131 { 18, "EUC-JP" }, │ │ │ │ +132 { 19, "Extended_UNIX_Code_Fixed_Width_for_Japanese" }, │ │ │ │ +133 { 19, "csEUCFixWidJapanese" }, │ │ │ │ +134 { 20, "BS_4730" }, │ │ │ │ +135 { 20, "iso-ir-4" }, │ │ │ │ +136 { 20, "ISO646-GB" }, │ │ │ │ +137 { 20, "gb" }, │ │ │ │ +138 { 20, "uk" }, │ │ │ │ +139 { 20, "csISO4UnitedKingdom" }, │ │ │ │ +140 { 21, "SEN_850200_C" }, │ │ │ │ +141 { 21, "iso-ir-11" }, │ │ │ │ +142 { 21, "ISO646-SE2" }, │ │ │ │ +143 { 21, "se2" }, │ │ │ │ +144 { 21, "csISO11SwedishForNames" }, │ │ │ │ +145 { 22, "IT" }, │ │ │ │ +146 { 22, "iso-ir-15" }, │ │ │ │ +147 { 22, "ISO646-IT" }, │ │ │ │ +148 { 22, "csISO15Italian" }, │ │ │ │ +149 { 23, "ES" }, │ │ │ │ +150 { 23, "iso-ir-17" }, │ │ │ │ +151 { 23, "ISO646-ES" }, │ │ │ │ +152 { 23, "csISO17Spanish" }, │ │ │ │ +153 { 24, "DIN_66003" }, │ │ │ │ +154 { 24, "iso-ir-21" }, │ │ │ │ +155 { 24, "de" }, │ │ │ │ +156 { 24, "ISO646-DE" }, │ │ │ │ +157 { 24, "csISO21German" }, │ │ │ │ +158 { 25, "NS_4551-1" }, │ │ │ │ +159 { 25, "iso-ir-60" }, │ │ │ │ +160 { 25, "ISO646-NO" }, │ │ │ │ +161 { 25, "no" }, │ │ │ │ +162 { 25, "csISO60DanishNorwegian" }, │ │ │ │ +163 { 25, "csISO60Norwegian1" }, │ │ │ │ +164 { 26, "NF_Z_62-010" }, │ │ │ │ +165 { 26, "iso-ir-69" }, │ │ │ │ +166 { 26, "ISO646-FR" }, │ │ │ │ +167 { 26, "fr" }, │ │ │ │ +168 { 26, "csISO69French" }, │ │ │ │ +169 { 27, "ISO-10646-UTF-1" }, │ │ │ │ +170 { 27, "csISO10646UTF1" }, │ │ │ │ +171 { 28, "ISO_646.basic:1983" }, │ │ │ │ +172 { 28, "ref" }, │ │ │ │ +173 { 28, "csISO646basic1983" }, │ │ │ │ +174 { 29, "INVARIANT" }, │ │ │ │ +175 { 29, "csINVARIANT" }, │ │ │ │ +176 { 30, "ISO_646.irv:1983" }, │ │ │ │ +177 { 30, "iso-ir-2" }, │ │ │ │ +178 { 30, "irv" }, │ │ │ │ +179 { 30, "csISO2IntlRefVersion" }, │ │ │ │ +180 { 31, "NATS-SEFI" }, │ │ │ │ +181 { 31, "iso-ir-8-1" }, │ │ │ │ +182 { 31, "csNATSSEFI" }, │ │ │ │ +183 { 32, "NATS-SEFI-ADD" }, │ │ │ │ +184 { 32, "iso-ir-8-2" }, │ │ │ │ +185 { 32, "csNATSSEFIADD" }, │ │ │ │ +186 { 35, "SEN_850200_B" }, │ │ │ │ +187 { 35, "iso-ir-10" }, │ │ │ │ +188 { 35, "FI" }, │ │ │ │ +189 { 35, "ISO646-FI" }, │ │ │ │ +190 { 35, "ISO646-SE" }, │ │ │ │ +191 { 35, "se" }, │ │ │ │ +192 { 35, "csISO10Swedish" }, │ │ │ │ +193 { 36, "KS_C_5601-1987" }, │ │ │ │ +194 { 36, "iso-ir-149" }, │ │ │ │ +195 { 36, "KS_C_5601-1989" }, │ │ │ │ +196 { 36, "KSC_5601" }, │ │ │ │ +197 { 36, "korean" }, │ │ │ │ +198 { 36, "csKSC56011987" }, │ │ │ │ +199 { 37, "ISO-2022-KR" }, │ │ │ │ +200 { 37, "csISO2022KR" }, │ │ │ │ +201 { 38, "EUC-KR" }, │ │ │ │ +202 { 38, "csEUCKR" }, │ │ │ │ +203 { 39, "ISO-2022-JP" }, │ │ │ │ +204 { 39, "csISO2022JP" }, │ │ │ │ +205 { 40, "ISO-2022-JP-2" }, │ │ │ │ +206 { 40, "csISO2022JP2" }, │ │ │ │ +207 { 41, "JIS_C6220-1969-jp" }, │ │ │ │ +208 { 41, "JIS_C6220-1969" }, │ │ │ │ +209 { 41, "iso-ir-13" }, │ │ │ │ +210 { 41, "katakana" }, │ │ │ │ +211 { 41, "x0201-7" }, │ │ │ │ +212 { 41, "csISO13JISC6220jp" }, │ │ │ │ +213 { 42, "JIS_C6220-1969-ro" }, │ │ │ │ +214 { 42, "iso-ir-14" }, │ │ │ │ +215 { 42, "jp" }, │ │ │ │ +216 { 42, "ISO646-JP" }, │ │ │ │ +217 { 42, "csISO14JISC6220ro" }, │ │ │ │ +218 { 43, "PT" }, │ │ │ │ +219 { 43, "iso-ir-16" }, │ │ │ │ +220 { 43, "ISO646-PT" }, │ │ │ │ +221 { 43, "csISO16Portuguese" }, │ │ │ │ +222 { 44, "greek7-old" }, │ │ │ │ +223 { 44, "iso-ir-18" }, │ │ │ │ +224 { 44, "csISO18Greek7Old" }, │ │ │ │ +225 { 45, "latin-greek" }, │ │ │ │ +226 { 45, "iso-ir-19" }, │ │ │ │ +227 { 45, "csISO19LatinGreek" }, │ │ │ │ +228 { 46, "NF_Z_62-010_(1973)" }, │ │ │ │ +229 { 46, "iso-ir-25" }, │ │ │ │ +230 { 46, "ISO646-FR1" }, │ │ │ │ +231 { 46, "csISO25French" }, │ │ │ │ +232 { 47, "Latin-greek-1" }, │ │ │ │ +233 { 47, "iso-ir-27" }, │ │ │ │ +234 { 47, "csISO27LatinGreek1" }, │ │ │ │ +235 { 48, "ISO_5427" }, │ │ │ │ +236 { 48, "iso-ir-37" }, │ │ │ │ +237 { 48, "csISO5427Cyrillic" }, │ │ │ │ +238 { 49, "JIS_C6226-1978" }, │ │ │ │ +239 { 49, "iso-ir-42" }, │ │ │ │ +240 { 49, "csISO42JISC62261978" }, │ │ │ │ +241 { 50, "BS_viewdata" }, │ │ │ │ +242 { 50, "iso-ir-47" }, │ │ │ │ +243 { 50, "csISO47BSViewdata" }, │ │ │ │ +244 { 51, "INIS" }, │ │ │ │ +245 { 51, "iso-ir-49" }, │ │ │ │ +246 { 51, "csISO49INIS" }, │ │ │ │ +247 { 52, "INIS-8" }, │ │ │ │ +248 { 52, "iso-ir-50" }, │ │ │ │ +249 { 52, "csISO50INIS8" }, │ │ │ │ +250 { 53, "INIS-cyrillic" }, │ │ │ │ +251 { 53, "iso-ir-51" }, │ │ │ │ +252 { 53, "csISO51INISCyrillic" }, │ │ │ │ +253 { 54, "ISO_5427:1981" }, │ │ │ │ +254 { 54, "iso-ir-54" }, │ │ │ │ +255 { 54, "ISO5427Cyrillic1981" }, │ │ │ │ +256 { 54, "csISO54271981" }, │ │ │ │ +257 { 55, "ISO_5428:1980" }, │ │ │ │ +258 { 55, "iso-ir-55" }, │ │ │ │ +259 { 55, "csISO5428Greek" }, │ │ │ │ +260 { 56, "GB_1988-80" }, │ │ │ │ +261 { 56, "iso-ir-57" }, │ │ │ │ +262 { 56, "cn" }, │ │ │ │ +263 { 56, "ISO646-CN" }, │ │ │ │ +264 { 56, "csISO57GB1988" }, │ │ │ │ +265 { 57, "GB_2312-80" }, │ │ │ │ +266 { 57, "iso-ir-58" }, │ │ │ │ +267 { 57, "chinese" }, │ │ │ │ +268 { 57, "csISO58GB231280" }, │ │ │ │ +269 { 58, "NS_4551-2" }, │ │ │ │ +270 { 58, "ISO646-NO2" }, │ │ │ │ +271 { 58, "iso-ir-61" }, │ │ │ │ +272 { 58, "no2" }, │ │ │ │ +273 { 58, "csISO61Norwegian2" }, │ │ │ │ +274 { 59, "videotex-suppl" }, │ │ │ │ +275 { 59, "iso-ir-70" }, │ │ │ │ +276 { 59, "csISO70VideotexSupp1" }, │ │ │ │ +277 { 60, "PT2" }, │ │ │ │ +278 { 60, "iso-ir-84" }, │ │ │ │ +279 { 60, "ISO646-PT2" }, │ │ │ │ +280 { 60, "csISO84Portuguese2" }, │ │ │ │ +281 { 61, "ES2" }, │ │ │ │ +282 { 61, "iso-ir-85" }, │ │ │ │ +283 { 61, "ISO646-ES2" }, │ │ │ │ +284 { 61, "csISO85Spanish2" }, │ │ │ │ +285 { 62, "MSZ_7795.3" }, │ │ │ │ +286 { 62, "iso-ir-86" }, │ │ │ │ +287 { 62, "ISO646-HU" }, │ │ │ │ +288 { 62, "hu" }, │ │ │ │ +289 { 62, "csISO86Hungarian" }, │ │ │ │ +290 { 63, "JIS_C6226-1983" }, │ │ │ │ +291 { 63, "iso-ir-87" }, │ │ │ │ +292 { 63, "x0208" }, │ │ │ │ +293 { 63, "JIS_X0208-1983" }, │ │ │ │ +294 { 63, "csISO87JISX0208" }, │ │ │ │ +295 { 64, "greek7" }, │ │ │ │ +296 { 64, "iso-ir-88" }, │ │ │ │ +297 { 64, "csISO88Greek7" }, │ │ │ │ +298 { 65, "ASMO_449" }, │ │ │ │ +299 { 65, "ISO_9036" }, │ │ │ │ +300 { 65, "arabic7" }, │ │ │ │ +301 { 65, "iso-ir-89" }, │ │ │ │ +302 { 65, "csISO89ASMO449" }, │ │ │ │ +303 { 66, "iso-ir-90" }, │ │ │ │ +304 { 66, "csISO90" }, │ │ │ │ +305 { 67, "JIS_C6229-1984-a" }, │ │ │ │ +306 { 67, "iso-ir-91" }, │ │ │ │ +307 { 67, "jp-ocr-a" }, │ │ │ │ +308 { 67, "csISO91JISC62291984a" }, │ │ │ │ +309 { 68, "JIS_C6229-1984-b" }, │ │ │ │ +310 { 68, "iso-ir-92" }, │ │ │ │ +311 { 68, "ISO646-JP-OCR-B" }, │ │ │ │ +312 { 68, "jp-ocr-b" }, │ │ │ │ +313 { 68, "csISO92JISC62991984b" }, │ │ │ │ +314 { 69, "JIS_C6229-1984-b-add" }, │ │ │ │ +315 { 69, "iso-ir-93" }, │ │ │ │ +316 { 69, "jp-ocr-b-add" }, │ │ │ │ +317 { 69, "csISO93JIS62291984badd" }, │ │ │ │ +318 { 70, "JIS_C6229-1984-hand" }, │ │ │ │ +319 { 70, "iso-ir-94" }, │ │ │ │ +320 { 70, "jp-ocr-hand" }, │ │ │ │ +321 { 70, "csISO94JIS62291984hand" }, │ │ │ │ +322 { 71, "JIS_C6229-1984-hand-add" }, │ │ │ │ +323 { 71, "iso-ir-95" }, │ │ │ │ +324 { 71, "jp-ocr-hand-add" }, │ │ │ │ +325 { 71, "csISO95JIS62291984handadd" }, │ │ │ │ +326 { 72, "JIS_C6229-1984-kana" }, │ │ │ │ +327 { 72, "iso-ir-96" }, │ │ │ │ +328 { 72, "csISO96JISC62291984kana" }, │ │ │ │ +329 { 73, "ISO_2033-1983" }, │ │ │ │ +330 { 73, "iso-ir-98" }, │ │ │ │ +331 { 73, "e13b" }, │ │ │ │ +332 { 73, "csISO2033" }, │ │ │ │ +333 { 74, "ANSI_X3.110-1983" }, │ │ │ │ +334 { 74, "iso-ir-99" }, │ │ │ │ +335 { 74, "CSA_T500-1983" }, │ │ │ │ +336 { 74, "NAPLPS" }, │ │ │ │ +337 { 74, "csISO99NAPLPS" }, │ │ │ │ +338 { 75, "T.61-7bit" }, │ │ │ │ +339 { 75, "iso-ir-102" }, │ │ │ │ +340 { 75, "csISO102T617bit" }, │ │ │ │ +341 { 76, "T.61-8bit" }, │ │ │ │ +342 { 76, "T.61" }, │ │ │ │ +343 { 76, "iso-ir-103" }, │ │ │ │ +344 { 76, "csISO103T618bit" }, │ │ │ │ +345 { 77, "ECMA-cyrillic" }, │ │ │ │ +346 { 77, "iso-ir-111" }, │ │ │ │ +347 { 77, "KOI8-E" }, │ │ │ │ +348 { 77, "csISO111ECMACyrillic" }, │ │ │ │ +349 { 78, "CSA_Z243.4-1985-1" }, │ │ │ │ +350 { 78, "iso-ir-121" }, │ │ │ │ +351 { 78, "ISO646-CA" }, │ │ │ │ +352 { 78, "csa7-1" }, │ │ │ │ +353 { 78, "csa71" }, │ │ │ │ +354 { 78, "ca" }, │ │ │ │ +355 { 78, "csISO121Canadian1" }, │ │ │ │ +356 { 79, "CSA_Z243.4-1985-2" }, │ │ │ │ +357 { 79, "iso-ir-122" }, │ │ │ │ +358 { 79, "ISO646-CA2" }, │ │ │ │ +359 { 79, "csa7-2" }, │ │ │ │ +360 { 79, "csa72" }, │ │ │ │ +361 { 79, "csISO122Canadian2" }, │ │ │ │ +362 { 80, "CSA_Z243.4-1985-gr" }, │ │ │ │ +363 { 80, "iso-ir-123" }, │ │ │ │ +364 { 80, "csISO123CSAZ24341985gr" }, │ │ │ │ +365 { 81, "ISO_8859-6-E" }, │ │ │ │ +366 { 81, "csISO88596E" }, │ │ │ │ +367 { 81, "ISO-8859-6-E" }, │ │ │ │ +368 { 82, "ISO_8859-6-I" }, │ │ │ │ +369 { 82, "csISO88596I" }, │ │ │ │ +370 { 82, "ISO-8859-6-I" }, │ │ │ │ +371 { 83, "T.101-G2" }, │ │ │ │ +372 { 83, "iso-ir-128" }, │ │ │ │ +373 { 83, "csISO128T101G2" }, │ │ │ │ +374 { 84, "ISO_8859-8-E" }, │ │ │ │ +375 { 84, "csISO88598E" }, │ │ │ │ +376 { 84, "ISO-8859-8-E" }, │ │ │ │ +377 { 85, "ISO_8859-8-I" }, │ │ │ │ +378 { 85, "csISO88598I" }, │ │ │ │ +379 { 85, "ISO-8859-8-I" }, │ │ │ │ +380 { 86, "CSN_369103" }, │ │ │ │ +381 { 86, "iso-ir-139" }, │ │ │ │ +382 { 86, "csISO139CSN369103" }, │ │ │ │ +383 { 87, "JUS_I.B1.002" }, │ │ │ │ +384 { 87, "iso-ir-141" }, │ │ │ │ +385 { 87, "ISO646-YU" }, │ │ │ │ +386 { 87, "js" }, │ │ │ │ +387 { 87, "yu" }, │ │ │ │ +388 { 87, "csISO141JUSIB1002" }, │ │ │ │ +389 { 88, "IEC_P27-1" }, │ │ │ │ +390 { 88, "iso-ir-143" }, │ │ │ │ +391 { 88, "csISO143IECP271" }, │ │ │ │ +392 { 89, "JUS_I.B1.003-serb" }, │ │ │ │ +393 { 89, "iso-ir-146" }, │ │ │ │ +394 { 89, "serbian" }, │ │ │ │ +395 { 89, "csISO146Serbian" }, │ │ │ │ +396 { 90, "JUS_I.B1.003-mac" }, │ │ │ │ +397 { 90, "macedonian" }, │ │ │ │ +398 { 90, "iso-ir-147" }, │ │ │ │ +399 { 90, "csISO147Macedonian" }, │ │ │ │ +400 { 91, "greek-ccitt" }, │ │ │ │ +401 { 91, "iso-ir-150" }, │ │ │ │ +402 { 91, "csISO150" }, │ │ │ │ +403 { 91, "csISO150GreekCCITT" }, │ │ │ │ +404 { 92, "NC_NC00-10:81" }, │ │ │ │ +405 { 92, "cuba" }, │ │ │ │ +406 { 92, "iso-ir-151" }, │ │ │ │ +407 { 92, "ISO646-CU" }, │ │ │ │ +408 { 92, "csISO151Cuba" }, │ │ │ │ +409 { 93, "ISO_6937-2-25" }, │ │ │ │ +410 { 93, "iso-ir-152" }, │ │ │ │ +411 { 93, "csISO6937Add" }, │ │ │ │ +412 { 94, "GOST_19768-74" }, │ │ │ │ +413 { 94, "ST_SEV_358-88" }, │ │ │ │ +414 { 94, "iso-ir-153" }, │ │ │ │ +415 { 94, "csISO153GOST1976874" }, │ │ │ │ +416 { 95, "ISO_8859-supp" }, │ │ │ │ +417 { 95, "iso-ir-154" }, │ │ │ │ +418 { 95, "latin1-2-5" }, │ │ │ │ +419 { 95, "csISO8859Supp" }, │ │ │ │ +420 { 96, "ISO_10367-box" }, │ │ │ │ +421 { 96, "iso-ir-155" }, │ │ │ │ +422 { 96, "csISO10367Box" }, │ │ │ │ +423 { 97, "latin-lap" }, │ │ │ │ +424 { 97, "lap" }, │ │ │ │ +425 { 97, "iso-ir-158" }, │ │ │ │ +426 { 97, "csISO158Lap" }, │ │ │ │ +427 { 98, "JIS_X0212-1990" }, │ │ │ │ +428 { 98, "x0212" }, │ │ │ │ +429 { 98, "iso-ir-159" }, │ │ │ │ +430 { 98, "csISO159JISX02121990" }, │ │ │ │ +431 { 99, "DS_2089" }, │ │ │ │ +432 { 99, "DS2089" }, │ │ │ │ +433 { 99, "ISO646-DK" }, │ │ │ │ +434 { 99, "dk" }, │ │ │ │ +435 { 99, "csISO646Danish" }, │ │ │ │ +436 { 100, "us-dk" }, │ │ │ │ +437 { 100, "csUSDK" }, │ │ │ │ +438 { 101, "dk-us" }, │ │ │ │ +439 { 101, "csDKUS" }, │ │ │ │ +440 { 102, "KSC5636" }, │ │ │ │ +441 { 102, "ISO646-KR" }, │ │ │ │ +442 { 102, "csKSC5636" }, │ │ │ │ +443 { 103, "UNICODE-1-1-UTF-7" }, │ │ │ │ +444 { 103, "csUnicode11UTF7" }, │ │ │ │ +445 { 104, "ISO-2022-CN" }, │ │ │ │ +446 { 104, "csISO2022CN" }, │ │ │ │ +447 { 105, "ISO-2022-CN-EXT" }, │ │ │ │ +448 { 105, "csISO2022CNEXT" }, │ │ │ │ +449#define _GLIBCXX_TEXT_ENCODING_UTF8_OFFSET 414 │ │ │ │ +450 { 106, "UTF-8" }, │ │ │ │ +451 { 106, "csUTF8" }, │ │ │ │ +452 { 109, "ISO-8859-13" }, │ │ │ │ +453 { 109, "csISO885913" }, │ │ │ │ +454 { 110, "ISO-8859-14" }, │ │ │ │ +455 { 110, "iso-ir-199" }, │ │ │ │ +456 { 110, "ISO_8859-14:1998" }, │ │ │ │ +457 { 110, "ISO_8859-14" }, │ │ │ │ +458 { 110, "latin8" }, │ │ │ │ +459 { 110, "iso-celtic" }, │ │ │ │ +460 { 110, "l8" }, │ │ │ │ +461 { 110, "csISO885914" }, │ │ │ │ +462 { 111, "ISO-8859-15" }, │ │ │ │ +463 { 111, "ISO_8859-15" }, │ │ │ │ +464 { 111, "Latin-9" }, │ │ │ │ +465 { 111, "csISO885915" }, │ │ │ │ +466 { 112, "ISO-8859-16" }, │ │ │ │ +467 { 112, "iso-ir-226" }, │ │ │ │ +468 { 112, "ISO_8859-16:2001" }, │ │ │ │ +469 { 112, "ISO_8859-16" }, │ │ │ │ +470 { 112, "latin10" }, │ │ │ │ +471 { 112, "l10" }, │ │ │ │ +472 { 112, "csISO885916" }, │ │ │ │ +473 { 113, "GBK" }, │ │ │ │ +474 { 113, "CP936" }, │ │ │ │ +475 { 113, "MS936" }, │ │ │ │ +476 { 113, "windows-936" }, │ │ │ │ +477 { 113, "csGBK" }, │ │ │ │ +478 { 114, "GB18030" }, │ │ │ │ +479 { 114, "csGB18030" }, │ │ │ │ +480 { 115, "OSD_EBCDIC_DF04_15" }, │ │ │ │ +481 { 115, "csOSDEBCDICDF0415" }, │ │ │ │ +482 { 116, "OSD_EBCDIC_DF03_IRV" }, │ │ │ │ +483 { 116, "csOSDEBCDICDF03IRV" }, │ │ │ │ +484 { 117, "OSD_EBCDIC_DF04_1" }, │ │ │ │ +485 { 117, "csOSDEBCDICDF041" }, │ │ │ │ +486 { 118, "ISO-11548-1" }, │ │ │ │ +487 { 118, "ISO_11548-1" }, │ │ │ │ +488 { 118, "ISO_TR_11548-1" }, │ │ │ │ +489 { 118, "csISO115481" }, │ │ │ │ +490 { 119, "KZ-1048" }, │ │ │ │ +491 { 119, "STRK1048-2002" }, │ │ │ │ +492 { 119, "RK1048" }, │ │ │ │ +493 { 119, "csKZ1048" }, │ │ │ │ +494 { 1000, "ISO-10646-UCS-2" }, │ │ │ │ +495 { 1000, "csUnicode" }, │ │ │ │ +496 { 1001, "ISO-10646-UCS-4" }, │ │ │ │ +497 { 1001, "csUCS4" }, │ │ │ │ +498 { 1002, "ISO-10646-UCS-Basic" }, │ │ │ │ +499 { 1002, "csUnicodeASCII" }, │ │ │ │ +500 { 1003, "ISO-10646-Unicode-Latin1" }, │ │ │ │ +501 { 1003, "csUnicodeLatin1" }, │ │ │ │ +502 { 1003, "ISO-10646" }, │ │ │ │ +503 { 1004, "ISO-10646-J-1" }, │ │ │ │ +504 { 1004, "csUnicodeJapanese" }, │ │ │ │ +505 { 1005, "ISO-Unicode-IBM-1261" }, │ │ │ │ +506 { 1005, "csUnicodeIBM1261" }, │ │ │ │ +507 { 1006, "ISO-Unicode-IBM-1268" }, │ │ │ │ +508 { 1006, "csUnicodeIBM1268" }, │ │ │ │ +509 { 1007, "ISO-Unicode-IBM-1276" }, │ │ │ │ +510 { 1007, "csUnicodeIBM1276" }, │ │ │ │ +511 { 1008, "ISO-Unicode-IBM-1264" }, │ │ │ │ +512 { 1008, "csUnicodeIBM1264" }, │ │ │ │ +513 { 1009, "ISO-Unicode-IBM-1265" }, │ │ │ │ +514 { 1009, "csUnicodeIBM1265" }, │ │ │ │ +515 { 1010, "UNICODE-1-1" }, │ │ │ │ +516 { 1010, "csUnicode11" }, │ │ │ │ +517 { 1011, "SCSU" }, │ │ │ │ +518 { 1011, "csSCSU" }, │ │ │ │ +519 { 1012, "UTF-7" }, │ │ │ │ +520 { 1012, "csUTF7" }, │ │ │ │ +521 { 1013, "UTF-16BE" }, │ │ │ │ +522 { 1013, "csUTF16BE" }, │ │ │ │ +523 { 1014, "UTF-16LE" }, │ │ │ │ +524 { 1014, "csUTF16LE" }, │ │ │ │ +525 { 1015, "UTF-16" }, │ │ │ │ +526 { 1015, "csUTF16" }, │ │ │ │ +527 { 1016, "CESU-8" }, │ │ │ │ +528 { 1016, "csCESU8" }, │ │ │ │ +529 { 1016, "csCESU-8" }, │ │ │ │ +530 { 1017, "UTF-32" }, │ │ │ │ +531 { 1017, "csUTF32" }, │ │ │ │ +532 { 1018, "UTF-32BE" }, │ │ │ │ +533 { 1018, "csUTF32BE" }, │ │ │ │ +534 { 1019, "UTF-32LE" }, │ │ │ │ +535 { 1019, "csUTF32LE" }, │ │ │ │ +536 { 1020, "BOCU-1" }, │ │ │ │ +537 { 1020, "csBOCU1" }, │ │ │ │ +538 { 1020, "csBOCU-1" }, │ │ │ │ +539 { 1021, "UTF-7-IMAP" }, │ │ │ │ +540 { 1021, "csUTF7IMAP" }, │ │ │ │ +541 { 2000, "ISO-8859-1-Windows-3.0-Latin-1" }, │ │ │ │ +542 { 2000, "csWindows30Latin1" }, │ │ │ │ +543 { 2001, "ISO-8859-1-Windows-3.1-Latin-1" }, │ │ │ │ +544 { 2001, "csWindows31Latin1" }, │ │ │ │ +545 { 2002, "ISO-8859-2-Windows-Latin-2" }, │ │ │ │ +546 { 2002, "csWindows31Latin2" }, │ │ │ │ +547 { 2003, "ISO-8859-9-Windows-Latin-5" }, │ │ │ │ +548 { 2003, "csWindows31Latin5" }, │ │ │ │ +549 { 2004, "hp-roman8" }, │ │ │ │ +550 { 2004, "roman8" }, │ │ │ │ +551 { 2004, "r8" }, │ │ │ │ +552 { 2004, "csHPRoman8" }, │ │ │ │ +553 { 2005, "Adobe-Standard-Encoding" }, │ │ │ │ +554 { 2005, "csAdobeStandardEncoding" }, │ │ │ │ +555 { 2006, "Ventura-US" }, │ │ │ │ +556 { 2006, "csVenturaUS" }, │ │ │ │ +557 { 2007, "Ventura-International" }, │ │ │ │ +558 { 2007, "csVenturaInternational" }, │ │ │ │ +559 { 2008, "DEC-MCS" }, │ │ │ │ +560 { 2008, "dec" }, │ │ │ │ +561 { 2008, "csDECMCS" }, │ │ │ │ +562 { 2009, "IBM850" }, │ │ │ │ +563 { 2009, "cp850" }, │ │ │ │ +564 { 2009, "850" }, │ │ │ │ +565 { 2009, "csPC850Multilingual" }, │ │ │ │ +566 { 2010, "IBM852" }, │ │ │ │ +567 { 2010, "cp852" }, │ │ │ │ +568 { 2010, "852" }, │ │ │ │ +569 { 2010, "csPCp852" }, │ │ │ │ +570 { 2011, "IBM437" }, │ │ │ │ +571 { 2011, "cp437" }, │ │ │ │ +572 { 2011, "437" }, │ │ │ │ +573 { 2011, "csPC8CodePage437" }, │ │ │ │ +574 { 2012, "PC8-Danish-Norwegian" }, │ │ │ │ +575 { 2012, "csPC8DanishNorwegian" }, │ │ │ │ +576 { 2013, "IBM862" }, │ │ │ │ +577 { 2013, "cp862" }, │ │ │ │ +578 { 2013, "862" }, │ │ │ │ +579 { 2013, "csPC862LatinHebrew" }, │ │ │ │ +580 { 2014, "PC8-Turkish" }, │ │ │ │ +581 { 2014, "csPC8Turkish" }, │ │ │ │ +582 { 2015, "IBM-Symbols" }, │ │ │ │ +583 { 2015, "csIBMSymbols" }, │ │ │ │ +584 { 2016, "IBM-Thai" }, │ │ │ │ +585 { 2016, "csIBMThai" }, │ │ │ │ +586 { 2017, "HP-Legal" }, │ │ │ │ +587 { 2017, "csHPLegal" }, │ │ │ │ +588 { 2018, "HP-Pi-font" }, │ │ │ │ +589 { 2018, "csHPPiFont" }, │ │ │ │ +590 { 2019, "HP-Math8" }, │ │ │ │ +591 { 2019, "csHPMath8" }, │ │ │ │ +592 { 2020, "Adobe-Symbol-Encoding" }, │ │ │ │ +593 { 2020, "csHPPSMath" }, │ │ │ │ +594 { 2021, "HP-DeskTop" }, │ │ │ │ +595 { 2021, "csHPDesktop" }, │ │ │ │ +596 { 2022, "Ventura-Math" }, │ │ │ │ +597 { 2022, "csVenturaMath" }, │ │ │ │ +598 { 2023, "Microsoft-Publishing" }, │ │ │ │ +599 { 2023, "csMicrosoftPublishing" }, │ │ │ │ +600 { 2024, "Windows-31J" }, │ │ │ │ +601 { 2024, "csWindows31J" }, │ │ │ │ +602 { 2025, "GB2312" }, │ │ │ │ +603 { 2025, "csGB2312" }, │ │ │ │ +604 { 2026, "Big5" }, │ │ │ │ +605 { 2026, "csBig5" }, │ │ │ │ +606 { 2027, "macintosh" }, │ │ │ │ +607 { 2027, "mac" }, │ │ │ │ +608 { 2027, "csMacintosh" }, │ │ │ │ +609 { 2028, "IBM037" }, │ │ │ │ +610 { 2028, "cp037" }, │ │ │ │ +611 { 2028, "ebcdic-cp-us" }, │ │ │ │ +612 { 2028, "ebcdic-cp-ca" }, │ │ │ │ +613 { 2028, "ebcdic-cp-wt" }, │ │ │ │ +614 { 2028, "ebcdic-cp-nl" }, │ │ │ │ +615 { 2028, "csIBM037" }, │ │ │ │ +616 { 2029, "IBM038" }, │ │ │ │ +617 { 2029, "EBCDIC-INT" }, │ │ │ │ +618 { 2029, "cp038" }, │ │ │ │ +619 { 2029, "csIBM038" }, │ │ │ │ +620 { 2030, "IBM273" }, │ │ │ │ +621 { 2030, "CP273" }, │ │ │ │ +622 { 2030, "csIBM273" }, │ │ │ │ +623 { 2031, "IBM274" }, │ │ │ │ +624 { 2031, "EBCDIC-BE" }, │ │ │ │ +625 { 2031, "CP274" }, │ │ │ │ +626 { 2031, "csIBM274" }, │ │ │ │ +627 { 2032, "IBM275" }, │ │ │ │ +628 { 2032, "EBCDIC-BR" }, │ │ │ │ +629 { 2032, "cp275" }, │ │ │ │ +630 { 2032, "csIBM275" }, │ │ │ │ +631 { 2033, "IBM277" }, │ │ │ │ +632 { 2033, "EBCDIC-CP-DK" }, │ │ │ │ +633 { 2033, "EBCDIC-CP-NO" }, │ │ │ │ +634 { 2033, "csIBM277" }, │ │ │ │ +635 { 2034, "IBM278" }, │ │ │ │ +636 { 2034, "CP278" }, │ │ │ │ +637 { 2034, "ebcdic-cp-fi" }, │ │ │ │ +638 { 2034, "ebcdic-cp-se" }, │ │ │ │ +639 { 2034, "csIBM278" }, │ │ │ │ +640 { 2035, "IBM280" }, │ │ │ │ +641 { 2035, "CP280" }, │ │ │ │ +642 { 2035, "ebcdic-cp-it" }, │ │ │ │ +643 { 2035, "csIBM280" }, │ │ │ │ +644 { 2036, "IBM281" }, │ │ │ │ +645 { 2036, "EBCDIC-JP-E" }, │ │ │ │ +646 { 2036, "cp281" }, │ │ │ │ +647 { 2036, "csIBM281" }, │ │ │ │ +648 { 2037, "IBM284" }, │ │ │ │ +649 { 2037, "CP284" }, │ │ │ │ +650 { 2037, "ebcdic-cp-es" }, │ │ │ │ +651 { 2037, "csIBM284" }, │ │ │ │ +652 { 2038, "IBM285" }, │ │ │ │ +653 { 2038, "CP285" }, │ │ │ │ +654 { 2038, "ebcdic-cp-gb" }, │ │ │ │ +655 { 2038, "csIBM285" }, │ │ │ │ +656 { 2039, "IBM290" }, │ │ │ │ +657 { 2039, "cp290" }, │ │ │ │ +658 { 2039, "EBCDIC-JP-kana" }, │ │ │ │ +659 { 2039, "csIBM290" }, │ │ │ │ +660 { 2040, "IBM297" }, │ │ │ │ +661 { 2040, "cp297" }, │ │ │ │ +662 { 2040, "ebcdic-cp-fr" }, │ │ │ │ +663 { 2040, "csIBM297" }, │ │ │ │ +664 { 2041, "IBM420" }, │ │ │ │ +665 { 2041, "cp420" }, │ │ │ │ +666 { 2041, "ebcdic-cp-ar1" }, │ │ │ │ +667 { 2041, "csIBM420" }, │ │ │ │ +668 { 2042, "IBM423" }, │ │ │ │ +669 { 2042, "cp423" }, │ │ │ │ +670 { 2042, "ebcdic-cp-gr" }, │ │ │ │ +671 { 2042, "csIBM423" }, │ │ │ │ +672 { 2043, "IBM424" }, │ │ │ │ +673 { 2043, "cp424" }, │ │ │ │ +674 { 2043, "ebcdic-cp-he" }, │ │ │ │ +675 { 2043, "csIBM424" }, │ │ │ │ +676 { 2044, "IBM500" }, │ │ │ │ +677 { 2044, "CP500" }, │ │ │ │ +678 { 2044, "ebcdic-cp-be" }, │ │ │ │ +679 { 2044, "ebcdic-cp-ch" }, │ │ │ │ +680 { 2044, "csIBM500" }, │ │ │ │ +681 { 2045, "IBM851" }, │ │ │ │ +682 { 2045, "cp851" }, │ │ │ │ +683 { 2045, "851" }, │ │ │ │ +684 { 2045, "csIBM851" }, │ │ │ │ +685 { 2046, "IBM855" }, │ │ │ │ +686 { 2046, "cp855" }, │ │ │ │ +687 { 2046, "855" }, │ │ │ │ +688 { 2046, "csIBM855" }, │ │ │ │ +689 { 2047, "IBM857" }, │ │ │ │ +690 { 2047, "cp857" }, │ │ │ │ +691 { 2047, "857" }, │ │ │ │ +692 { 2047, "csIBM857" }, │ │ │ │ +693 { 2048, "IBM860" }, │ │ │ │ +694 { 2048, "cp860" }, │ │ │ │ +695 { 2048, "860" }, │ │ │ │ +696 { 2048, "csIBM860" }, │ │ │ │ +697 { 2049, "IBM861" }, │ │ │ │ +698 { 2049, "cp861" }, │ │ │ │ +699 { 2049, "861" }, │ │ │ │ +700 { 2049, "cp-is" }, │ │ │ │ +701 { 2049, "csIBM861" }, │ │ │ │ +702 { 2050, "IBM863" }, │ │ │ │ +703 { 2050, "cp863" }, │ │ │ │ +704 { 2050, "863" }, │ │ │ │ +705 { 2050, "csIBM863" }, │ │ │ │ +706 { 2051, "IBM864" }, │ │ │ │ +707 { 2051, "cp864" }, │ │ │ │ +708 { 2051, "csIBM864" }, │ │ │ │ +709 { 2052, "IBM865" }, │ │ │ │ +710 { 2052, "cp865" }, │ │ │ │ +711 { 2052, "865" }, │ │ │ │ +712 { 2052, "csIBM865" }, │ │ │ │ +713 { 2053, "IBM868" }, │ │ │ │ +714 { 2053, "CP868" }, │ │ │ │ +715 { 2053, "cp-ar" }, │ │ │ │ +716 { 2053, "csIBM868" }, │ │ │ │ +717 { 2054, "IBM869" }, │ │ │ │ +718 { 2054, "cp869" }, │ │ │ │ +719 { 2054, "869" }, │ │ │ │ +720 { 2054, "cp-gr" }, │ │ │ │ +721 { 2054, "csIBM869" }, │ │ │ │ +722 { 2055, "IBM870" }, │ │ │ │ +723 { 2055, "CP870" }, │ │ │ │ +724 { 2055, "ebcdic-cp-roece" }, │ │ │ │ +725 { 2055, "ebcdic-cp-yu" }, │ │ │ │ +726 { 2055, "csIBM870" }, │ │ │ │ +727 { 2056, "IBM871" }, │ │ │ │ +728 { 2056, "CP871" }, │ │ │ │ +729 { 2056, "ebcdic-cp-is" }, │ │ │ │ +730 { 2056, "csIBM871" }, │ │ │ │ +731 { 2057, "IBM880" }, │ │ │ │ +732 { 2057, "cp880" }, │ │ │ │ +733 { 2057, "EBCDIC-Cyrillic" }, │ │ │ │ +734 { 2057, "csIBM880" }, │ │ │ │ +735 { 2058, "IBM891" }, │ │ │ │ +736 { 2058, "cp891" }, │ │ │ │ +737 { 2058, "csIBM891" }, │ │ │ │ +738 { 2059, "IBM903" }, │ │ │ │ +739 { 2059, "cp903" }, │ │ │ │ +740 { 2059, "csIBM903" }, │ │ │ │ +741 { 2060, "IBM904" }, │ │ │ │ +742 { 2060, "cp904" }, │ │ │ │ +743 { 2060, "904" }, │ │ │ │ +744 { 2060, "csIBBM904" }, │ │ │ │ +745 { 2061, "IBM905" }, │ │ │ │ +746 { 2061, "CP905" }, │ │ │ │ +747 { 2061, "ebcdic-cp-tr" }, │ │ │ │ +748 { 2061, "csIBM905" }, │ │ │ │ +749 { 2062, "IBM918" }, │ │ │ │ +750 { 2062, "CP918" }, │ │ │ │ +751 { 2062, "ebcdic-cp-ar2" }, │ │ │ │ +752 { 2062, "csIBM918" }, │ │ │ │ +753 { 2063, "IBM1026" }, │ │ │ │ +754 { 2063, "CP1026" }, │ │ │ │ +755 { 2063, "csIBM1026" }, │ │ │ │ +756 { 2064, "EBCDIC-AT-DE" }, │ │ │ │ +757 { 2064, "csIBMEBCDICATDE" }, │ │ │ │ +758 { 2065, "EBCDIC-AT-DE-A" }, │ │ │ │ +759 { 2065, "csEBCDICATDEA" }, │ │ │ │ +760 { 2066, "EBCDIC-CA-FR" }, │ │ │ │ +761 { 2066, "csEBCDICCAFR" }, │ │ │ │ +762 { 2067, "EBCDIC-DK-NO" }, │ │ │ │ +763 { 2067, "csEBCDICDKNO" }, │ │ │ │ +764 { 2068, "EBCDIC-DK-NO-A" }, │ │ │ │ +765 { 2068, "csEBCDICDKNOA" }, │ │ │ │ +766 { 2069, "EBCDIC-FI-SE" }, │ │ │ │ +767 { 2069, "csEBCDICFISE" }, │ │ │ │ +768 { 2070, "EBCDIC-FI-SE-A" }, │ │ │ │ +769 { 2070, "csEBCDICFISEA" }, │ │ │ │ +770 { 2071, "EBCDIC-FR" }, │ │ │ │ +771 { 2071, "csEBCDICFR" }, │ │ │ │ +772 { 2072, "EBCDIC-IT" }, │ │ │ │ +773 { 2072, "csEBCDICIT" }, │ │ │ │ +774 { 2073, "EBCDIC-PT" }, │ │ │ │ +775 { 2073, "csEBCDICPT" }, │ │ │ │ +776 { 2074, "EBCDIC-ES" }, │ │ │ │ +777 { 2074, "csEBCDICES" }, │ │ │ │ +778 { 2075, "EBCDIC-ES-A" }, │ │ │ │ +779 { 2075, "csEBCDICESA" }, │ │ │ │ +780 { 2076, "EBCDIC-ES-S" }, │ │ │ │ +781 { 2076, "csEBCDICESS" }, │ │ │ │ +782 { 2077, "EBCDIC-UK" }, │ │ │ │ +783 { 2077, "csEBCDICUK" }, │ │ │ │ +784 { 2078, "EBCDIC-US" }, │ │ │ │ +785 { 2078, "csEBCDICUS" }, │ │ │ │ +786 { 2079, "UNKNOWN-8BIT" }, │ │ │ │ +787 { 2079, "csUnknown8BiT" }, │ │ │ │ +788 { 2080, "MNEMONIC" }, │ │ │ │ +789 { 2080, "csMnemonic" }, │ │ │ │ +790 { 2081, "MNEM" }, │ │ │ │ +791 { 2081, "csMnem" }, │ │ │ │ +792 { 2082, "VISCII" }, │ │ │ │ +793 { 2082, "csVISCII" }, │ │ │ │ +794 { 2083, "VIQR" }, │ │ │ │ +795 { 2083, "csVIQR" }, │ │ │ │ +796 { 2084, "KOI8-R" }, │ │ │ │ +797 { 2084, "csKOI8R" }, │ │ │ │ +798 { 2085, "HZ-GB-2312" }, │ │ │ │ +799 { 2086, "IBM866" }, │ │ │ │ +800 { 2086, "cp866" }, │ │ │ │ +801 { 2086, "866" }, │ │ │ │ +802 { 2086, "csIBM866" }, │ │ │ │ +803 { 2087, "IBM775" }, │ │ │ │ +804 { 2087, "cp775" }, │ │ │ │ +805 { 2087, "csPC775Baltic" }, │ │ │ │ +806 { 2088, "KOI8-U" }, │ │ │ │ +807 { 2088, "csKOI8U" }, │ │ │ │ +808 { 2089, "IBM00858" }, │ │ │ │ +809 { 2089, "CCSID00858" }, │ │ │ │ +810 { 2089, "CP00858" }, │ │ │ │ +811 { 2089, "PC-Multilingual-850+euro" }, │ │ │ │ +812 { 2089, "csIBM00858" }, │ │ │ │ +813 { 2090, "IBM00924" }, │ │ │ │ +814 { 2090, "CCSID00924" }, │ │ │ │ +815 { 2090, "CP00924" }, │ │ │ │ +816 { 2090, "ebcdic-Latin9--euro" }, │ │ │ │ +817 { 2090, "csIBM00924" }, │ │ │ │ +818 { 2091, "IBM01140" }, │ │ │ │ +819 { 2091, "CCSID01140" }, │ │ │ │ +820 { 2091, "CP01140" }, │ │ │ │ +821 { 2091, "ebcdic-us-37+euro" }, │ │ │ │ +822 { 2091, "csIBM01140" }, │ │ │ │ +823 { 2092, "IBM01141" }, │ │ │ │ +824 { 2092, "CCSID01141" }, │ │ │ │ +825 { 2092, "CP01141" }, │ │ │ │ +826 { 2092, "ebcdic-de-273+euro" }, │ │ │ │ +827 { 2092, "csIBM01141" }, │ │ │ │ +828 { 2093, "IBM01142" }, │ │ │ │ +829 { 2093, "CCSID01142" }, │ │ │ │ +830 { 2093, "CP01142" }, │ │ │ │ +831 { 2093, "ebcdic-dk-277+euro" }, │ │ │ │ +832 { 2093, "ebcdic-no-277+euro" }, │ │ │ │ +833 { 2093, "csIBM01142" }, │ │ │ │ +834 { 2094, "IBM01143" }, │ │ │ │ +835 { 2094, "CCSID01143" }, │ │ │ │ +836 { 2094, "CP01143" }, │ │ │ │ +837 { 2094, "ebcdic-fi-278+euro" }, │ │ │ │ +838 { 2094, "ebcdic-se-278+euro" }, │ │ │ │ +839 { 2094, "csIBM01143" }, │ │ │ │ +840 { 2095, "IBM01144" }, │ │ │ │ +841 { 2095, "CCSID01144" }, │ │ │ │ +842 { 2095, "CP01144" }, │ │ │ │ +843 { 2095, "ebcdic-it-280+euro" }, │ │ │ │ +844 { 2095, "csIBM01144" }, │ │ │ │ +845 { 2096, "IBM01145" }, │ │ │ │ +846 { 2096, "CCSID01145" }, │ │ │ │ +847 { 2096, "CP01145" }, │ │ │ │ +848 { 2096, "ebcdic-es-284+euro" }, │ │ │ │ +849 { 2096, "csIBM01145" }, │ │ │ │ +850 { 2097, "IBM01146" }, │ │ │ │ +851 { 2097, "CCSID01146" }, │ │ │ │ +852 { 2097, "CP01146" }, │ │ │ │ +853 { 2097, "ebcdic-gb-285+euro" }, │ │ │ │ +854 { 2097, "csIBM01146" }, │ │ │ │ +855 { 2098, "IBM01147" }, │ │ │ │ +856 { 2098, "CCSID01147" }, │ │ │ │ +857 { 2098, "CP01147" }, │ │ │ │ +858 { 2098, "ebcdic-fr-297+euro" }, │ │ │ │ +859 { 2098, "csIBM01147" }, │ │ │ │ +860 { 2099, "IBM01148" }, │ │ │ │ +861 { 2099, "CCSID01148" }, │ │ │ │ +862 { 2099, "CP01148" }, │ │ │ │ +863 { 2099, "ebcdic-international-500+euro" }, │ │ │ │ +864 { 2099, "csIBM01148" }, │ │ │ │ +865 { 2100, "IBM01149" }, │ │ │ │ +866 { 2100, "CCSID01149" }, │ │ │ │ +867 { 2100, "CP01149" }, │ │ │ │ +868 { 2100, "ebcdic-is-871+euro" }, │ │ │ │ +869 { 2100, "csIBM01149" }, │ │ │ │ +870 { 2101, "Big5-HKSCS" }, │ │ │ │ +871 { 2101, "csBig5HKSCS" }, │ │ │ │ +872 { 2102, "IBM1047" }, │ │ │ │ +873 { 2102, "IBM-1047" }, │ │ │ │ +874 { 2102, "csIBM1047" }, │ │ │ │ +875 { 2103, "PTCP154" }, │ │ │ │ +876 { 2103, "csPTCP154" }, │ │ │ │ +877 { 2103, "PT154" }, │ │ │ │ +878 { 2103, "CP154" }, │ │ │ │ +879 { 2103, "Cyrillic-Asian" }, │ │ │ │ +880 { 2104, "Amiga-1251" }, │ │ │ │ +881 { 2104, "Ami1251" }, │ │ │ │ +882 { 2104, "Amiga1251" }, │ │ │ │ +883 { 2104, "Ami-1251" }, │ │ │ │ +884 { 2104, "csAmiga1251" }, │ │ │ │ +885 { 2104, "(Aliases" }, │ │ │ │ +886 { 2104, "are" }, │ │ │ │ +887 { 2104, "provided" }, │ │ │ │ +888 { 2104, "for" }, │ │ │ │ +889 { 2104, "historical" }, │ │ │ │ +890 { 2104, "reasons" }, │ │ │ │ +891 { 2104, "and" }, │ │ │ │ +892 { 2104, "should" }, │ │ │ │ +893 { 2104, "not" }, │ │ │ │ +894 { 2104, "be" }, │ │ │ │ +895 { 2104, "used)" }, │ │ │ │ +896 { 2104, "[Malyshev]" }, │ │ │ │ +897 { 2105, "KOI7-switched" }, │ │ │ │ +898 { 2105, "csKOI7switched" }, │ │ │ │ +899 { 2106, "BRF" }, │ │ │ │ +900 { 2106, "csBRF" }, │ │ │ │ +901 { 2107, "TSCII" }, │ │ │ │ +902 { 2107, "csTSCII" }, │ │ │ │ +903 { 2108, "CP51932" }, │ │ │ │ +904 { 2108, "csCP51932" }, │ │ │ │ +905 { 2109, "windows-874" }, │ │ │ │ +906 { 2109, "cswindows874" }, │ │ │ │ +907 { 2250, "windows-1250" }, │ │ │ │ +908 { 2250, "cswindows1250" }, │ │ │ │ +909 { 2251, "windows-1251" }, │ │ │ │ +910 { 2251, "cswindows1251" }, │ │ │ │ +911 { 2252, "windows-1252" }, │ │ │ │ +912 { 2252, "cswindows1252" }, │ │ │ │ +913 { 2253, "windows-1253" }, │ │ │ │ +914 { 2253, "cswindows1253" }, │ │ │ │ +915 { 2254, "windows-1254" }, │ │ │ │ +916 { 2254, "cswindows1254" }, │ │ │ │ +917 { 2255, "windows-1255" }, │ │ │ │ +918 { 2255, "cswindows1255" }, │ │ │ │ +919 { 2256, "windows-1256" }, │ │ │ │ +920 { 2256, "cswindows1256" }, │ │ │ │ +921 { 2257, "windows-1257" }, │ │ │ │ +922 { 2257, "cswindows1257" }, │ │ │ │ +923 { 2258, "windows-1258" }, │ │ │ │ +924 { 2258, "cswindows1258" }, │ │ │ │ +925 { 2259, "TIS-620" }, │ │ │ │ +926 { 2259, "csTIS620" }, │ │ │ │ +927 { 2259, "ISO-8859-11" }, │ │ │ │ +928 { 2260, "CP50220" }, │ │ │ │ +929 { 2260, "csCP50220" }, │ │ │ │ +930 │ │ │ │ +931#undef _GLIBCXX_GET_ENCODING_DATA │ │ │ │ * _b_i_t_s │ │ │ │ - * _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h │ │ │ │ + * _t_e_x_t___e_n_c_o_d_i_n_g_-_d_a_t_a_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00407.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stream_iterator.h File Reference │ │ │ +libstdc++: atomic_lockfree_defines.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -46,42 +46,52 @@ │ │ │ /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ │ │ │ $(document).ready(function(){initNavTree('a00407.html',''); initResizable(); }); │ │ │ /* @license-end */ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -Classes | │ │ │ -Namespaces
│ │ │ -
stream_iterator.h File Reference
│ │ │ +Macros
│ │ │ +
atomic_lockfree_defines.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ -Classes

class  std::istream_iterator< _Tp, _CharT, _Traits, _Dist >
 
class  std::ostream_iterator< _Tp, _CharT, _Traits >
 
│ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ -Namespaces

namespace  std
 

│ │ │ +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
 
│ │ │

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 <atomic>.

│ │ │ │ │ │ -

Definition in file stream_iterator.h.

│ │ │ +

Definition in file atomic_lockfree_defines.h.

│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,19 +1,32 @@ │ │ │ │ libstdc++ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ -stream_iterator.h File Reference │ │ │ │ +_M_a_c_r_o_s │ │ │ │ +atomic_lockfree_defines.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___i_t_e_r_a_t_o_r_<_ ___T_p_,_ ___C_h_a_r_T_,_ ___T_r_a_i_t_s_,_ ___D_i_s_t_ _> │ │ │ │ +MMaaccrrooss │ │ │ │ +#define  _A_T_O_M_I_C___B_O_O_L___L_O_C_K___F_R_E_E │ │ │ │   │ │ │ │ -class   _s_t_d_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r_<_ ___T_p_,_ ___C_h_a_r_T_,_ ___T_r_a_i_t_s_ _> │ │ │ │ +#define  _A_T_O_M_I_C___C_H_A_R_1_6___T___L_O_C_K___F_R_E_E │ │ │ │   │ │ │ │ -NNaammeessppaacceess │ │ │ │ -namespace   _s_t_d │ │ │ │ +#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 │ │ │ │   │ │ │ │ ********** 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___i_t_e_r_a_t_o_r_._h. │ │ │ │ +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. │ │ │ │ * _b_i_t_s │ │ │ │ - * _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h │ │ │ │ + * _a_t_o_m_i_c___l_o_c_k_f_r_e_e___d_e_f_i_n_e_s_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00407_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stream_iterator.h Source File │ │ │ +libstdc++: atomic_lockfree_defines.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,20 +45,20 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
stream_iterator.h
│ │ │ +
atomic_lockfree_defines.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// Stream iterators
│ │ │ +Go to the documentation of this file.
1// -*- C++ -*- header.
│ │ │
2
│ │ │ -
3// Copyright (C) 2001-2025 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2008-2025 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
│ │ │ @@ -72,310 +72,62 @@ │ │ │
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/stream_iterator.h
│ │ │ +
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{iterator}
│ │ │ +
27 * Do not attempt to use it directly. @headername{atomic}
│ │ │
28 */
│ │ │
29
│ │ │ -
30#ifndef _STREAM_ITERATOR_H
│ │ │ -
31#define _STREAM_ITERATOR_H 1
│ │ │ +
30#ifndef _GLIBCXX_ATOMIC_LOCK_FREE_H
│ │ │ +
31#define _GLIBCXX_ATOMIC_LOCK_FREE_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>
│ │ │ -
41
│ │ │ -
42namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
43{
│ │ │ -
44_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
45
│ │ │ -
46 /**
│ │ │ -
47 * @addtogroup iterators
│ │ │ -
48 * @{
│ │ │ -
49 */
│ │ │ -
50
│ │ │ -
51// Ignore warnings about std::iterator.
│ │ │ -
52#pragma GCC diagnostic push
│ │ │ -
53#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
│ │ │ -
54
│ │ │ -
55 /// Provides input iterator semantics for streams.
│ │ │ -
56 template<typename _Tp, typename _CharT = char,
│ │ │ -
57 typename _Traits = char_traits<_CharT>, typename _Dist = ptrdiff_t>
│ │ │ -
│ │ │ - │ │ │ -
59 : public iterator<input_iterator_tag, _Tp, _Dist, const _Tp*, const _Tp&>
│ │ │ -
60 {
│ │ │ -
61 public:
│ │ │ -
62 typedef _CharT char_type;
│ │ │ -
63 typedef _Traits traits_type;
│ │ │ - │ │ │ -
65
│ │ │ -
66 private:
│ │ │ -
67 istream_type* _M_stream;
│ │ │ -
68 _Tp _M_value;
│ │ │ -
69 // This bool becomes false at end-of-stream. It should be sufficient to
│ │ │ -
70 // check _M_stream != nullptr instead, but historically we did not set
│ │ │ -
71 // _M_stream to null when reaching the end, so we need to keep this flag.
│ │ │ -
72 bool _M_ok;
│ │ │ -
73
│ │ │ -
74 public:
│ │ │ -
75 /// Construct end of input stream iterator.
│ │ │ -
│ │ │ - │ │ │ - │ │ │ -
78 : _M_stream(0), _M_value(), _M_ok(false) {}
│ │ │ -
│ │ │ -
79
│ │ │ -
80 /// Construct start of input stream iterator.
│ │ │ -
│ │ │ - │ │ │ -
82 : _M_stream(std::__addressof(__s)), _M_ok(true)
│ │ │ -
83 { _M_read(); }
│ │ │ -
│ │ │ -
84
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
88 : _M_stream(__obj._M_stream), _M_value(__obj._M_value),
│ │ │ -
89 _M_ok(__obj._M_ok)
│ │ │ -
90 { }
│ │ │ -
91
│ │ │ -
92#if __cplusplus > 201703L && __cpp_lib_concepts
│ │ │ -
93 constexpr
│ │ │ -
94 istream_iterator(default_sentinel_t)
│ │ │ -
95 noexcept(is_nothrow_default_constructible_v<_Tp>)
│ │ │ -
96 : istream_iterator() { }
│ │ │ -
97#endif
│ │ │ -
98
│ │ │ -
99#if __cplusplus >= 201103L
│ │ │ -
100 istream_iterator& operator=(const istream_iterator&) = default;
│ │ │ -
101 ~istream_iterator() = default;
│ │ │ -
102#endif
│ │ │ -
103
│ │ │ -
104 _GLIBCXX_NODISCARD
│ │ │ -
105 const _Tp&
│ │ │ -
106 operator*() const _GLIBCXX_NOEXCEPT
│ │ │ -
107 {
│ │ │ -
108 __glibcxx_requires_cond(_M_ok,
│ │ │ -
109 _M_message(__gnu_debug::__msg_deref_istream)
│ │ │ -
110 ._M_iterator(*this));
│ │ │ -
111 return _M_value;
│ │ │ -
112 }
│ │ │ -
113
│ │ │ -
114 _GLIBCXX_NODISCARD
│ │ │ -
115 const _Tp*
│ │ │ -
116 operator->() const _GLIBCXX_NOEXCEPT
│ │ │ -
117 { return std::__addressof((operator*())); }
│ │ │ -
118
│ │ │ - │ │ │ -
120 operator++()
│ │ │ -
121 {
│ │ │ -
122 __glibcxx_requires_cond(_M_ok,
│ │ │ -
123 _M_message(__gnu_debug::__msg_inc_istream)
│ │ │ -
124 ._M_iterator(*this));
│ │ │ -
125 _M_read();
│ │ │ -
126 return *this;
│ │ │ -
127 }
│ │ │ -
128
│ │ │ - │ │ │ -
130 operator++(int)
│ │ │ -
131 {
│ │ │ -
132 __glibcxx_requires_cond(_M_ok,
│ │ │ -
133 _M_message(__gnu_debug::__msg_inc_istream)
│ │ │ -
134 ._M_iterator(*this));
│ │ │ -
135 istream_iterator __tmp = *this;
│ │ │ -
136 _M_read();
│ │ │ -
137 return __tmp;
│ │ │ -
138 }
│ │ │ -
139
│ │ │ -
140 private:
│ │ │ -
141 bool
│ │ │ -
142 _M_equal(const istream_iterator& __x) const _GLIBCXX_NOEXCEPT
│ │ │ -
143 {
│ │ │ -
144 // Ideally this would just return _M_stream == __x._M_stream,
│ │ │ -
145 // but code compiled with old versions never sets _M_stream to null.
│ │ │ -
146 return (_M_ok == __x._M_ok) && (!_M_ok || _M_stream == __x._M_stream);
│ │ │ -
147 }
│ │ │ -
148
│ │ │ -
149 void
│ │ │ -
150 _M_read()
│ │ │ -
151 {
│ │ │ -
152 if (_M_stream && !(*_M_stream >> _M_value))
│ │ │ -
153 {
│ │ │ -
154 _M_stream = 0;
│ │ │ -
155 _M_ok = false;
│ │ │ -
156 }
│ │ │ -
157 }
│ │ │ -
158
│ │ │ -
159 /// Return true if the iterators refer to the same stream,
│ │ │ -
160 /// or are both at end-of-stream.
│ │ │ -
161 _GLIBCXX_NODISCARD
│ │ │ -
162 friend bool
│ │ │ -
│ │ │ - │ │ │ - │ │ │ -
165 { return __x._M_equal(__y); }
│ │ │ -
│ │ │ -
166
│ │ │ -
167#if __cpp_impl_three_way_comparison < 201907L
│ │ │ -
168 /// Return true if the iterators refer to different streams,
│ │ │ -
169 /// or if one is at end-of-stream and the other is not.
│ │ │ -
170 _GLIBCXX_NODISCARD
│ │ │ -
171 friend bool
│ │ │ -
172 operator!=(const istream_iterator& __x, const istream_iterator& __y)
│ │ │ - │ │ │ -
174 { return !__x._M_equal(__y); }
│ │ │ -
175#endif
│ │ │ -
176
│ │ │ -
177#if __cplusplus > 201703L && __cpp_lib_concepts
│ │ │ -
178 [[nodiscard]]
│ │ │ -
179 friend bool
│ │ │ -
180 operator==(const istream_iterator& __i, default_sentinel_t) noexcept
│ │ │ -
181 { return !__i._M_stream; }
│ │ │ -
182#endif
│ │ │ -
183 };
│ │ │ -
│ │ │ -
184
│ │ │ -
185 /**
│ │ │ -
186 * @brief Provides output iterator semantics for streams.
│ │ │ -
187 *
│ │ │ -
188 * This class provides an iterator to write to an ostream. The type Tp is
│ │ │ -
189 * the only type written by this iterator and there must be an
│ │ │ -
190 * operator<<(Tp) defined.
│ │ │ -
191 *
│ │ │ -
192 * @tparam _Tp The type to write to the ostream.
│ │ │ -
193 * @tparam _CharT The ostream char_type.
│ │ │ -
194 * @tparam _Traits The ostream char_traits.
│ │ │ -
195 */
│ │ │ -
196 template<typename _Tp, typename _CharT = char,
│ │ │ -
197 typename _Traits = char_traits<_CharT> >
│ │ │ -
│ │ │ - │ │ │ -
199 : public iterator<output_iterator_tag, void, void, void, void>
│ │ │ -
200 {
│ │ │ -
201 public:
│ │ │ -
202 ///@{
│ │ │ -
203 /// Public typedef
│ │ │ -
204#if __cplusplus > 201703L
│ │ │ - │ │ │ -
206#endif
│ │ │ -
207 typedef _CharT char_type;
│ │ │ -
208 typedef _Traits traits_type;
│ │ │ - │ │ │ -
210 ///@}
│ │ │ -
211
│ │ │ -
212 private:
│ │ │ -
213 ostream_type* _M_stream;
│ │ │ -
214 const _CharT* _M_string;
│ │ │ -
215
│ │ │ -
216 public:
│ │ │ -
217 /// Construct from an ostream.
│ │ │ -
│ │ │ - │ │ │ -
219 : _M_stream(std::__addressof(__s)), _M_string(0) {}
│ │ │ -
│ │ │ -
220
│ │ │ -
221 /**
│ │ │ -
222 * Construct from an ostream.
│ │ │ -
223 *
│ │ │ -
224 * The delimiter string @a c is written to the stream after every Tp
│ │ │ -
225 * written to the stream. The delimiter is not copied, and thus must
│ │ │ -
226 * not be destroyed while this iterator is in use.
│ │ │ -
227 *
│ │ │ -
228 * @param __s Underlying ostream to write to.
│ │ │ -
229 * @param __c CharT delimiter string to insert.
│ │ │ -
230 */
│ │ │ -
│ │ │ - │ │ │ -
232 : _M_stream(std::__addressof(__s)), _M_string(__c) { }
│ │ │ -
│ │ │ -
233
│ │ │ -
234 /// Copy constructor.
│ │ │ -
│ │ │ - │ │ │ -
236 : _M_stream(__obj._M_stream), _M_string(__obj._M_string) { }
│ │ │ -
│ │ │ -
237
│ │ │ -
238#if __cplusplus >= 201103L
│ │ │ -
239 ostream_iterator& operator=(const ostream_iterator&) = default;
│ │ │ -
240#endif
│ │ │ -
241
│ │ │ -
242 /// Writes @a value to underlying ostream using operator<<. If
│ │ │ -
243 /// constructed with delimiter string, writes delimiter to ostream.
│ │ │ - │ │ │ -
│ │ │ -
245 operator=(const _Tp& __value)
│ │ │ -
246 {
│ │ │ -
247 __glibcxx_requires_cond(_M_stream != 0,
│ │ │ -
248 _M_message(__gnu_debug::__msg_output_ostream)
│ │ │ -
249 ._M_iterator(*this));
│ │ │ -
250 *_M_stream << __value;
│ │ │ -
251 if (_M_string)
│ │ │ -
252 *_M_stream << _M_string;
│ │ │ -
253 return *this;
│ │ │ -
254 }
│ │ │ -
│ │ │ -
255
│ │ │ -
256 _GLIBCXX_NODISCARD
│ │ │ - │ │ │ -
258 operator*() _GLIBCXX_NOEXCEPT
│ │ │ -
259 { return *this; }
│ │ │ -
260
│ │ │ -
261 ostream_iterator&
│ │ │ -
262 operator++() _GLIBCXX_NOEXCEPT
│ │ │ -
263 { return *this; }
│ │ │ -
264
│ │ │ - │ │ │ -
266 operator++(int) _GLIBCXX_NOEXCEPT
│ │ │ -
267 { return *this; }
│ │ │ -
268 };
│ │ │ -
│ │ │ -
269#pragma GCC diagnostic pop
│ │ │ -
270
│ │ │ -
271 /// @} group iterators
│ │ │ -
272
│ │ │ -
273_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
274} // namespace
│ │ │ -
275
│ │ │ -
276#endif
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:52
│ │ │ -
ISO C++ entities toplevel namespace is std.
│ │ │ -
is_nothrow_default_constructible
Definition type_traits:1245
│ │ │ -
is_nothrow_copy_constructible
Definition type_traits:1254
│ │ │ -
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.
│ │ │ -
ostream_iterator(ostream_type &__s, const _CharT *__c) noexcept
│ │ │ -
_Traits traits_type
Public typedef.
│ │ │ -
ostream_iterator & operator=(const _Tp &__value)
Writes value to underlying ostream using operator<<. If constructed with delimiter string,...
│ │ │ -
basic_ostream< _CharT, _Traits > ostream_type
Public typedef.
│ │ │ -
ostream_iterator(const ostream_iterator &__obj) noexcept
Copy constructor.
│ │ │ - │ │ │ +
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
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -stream_iterator.h │ │ │ │ +atomic_lockfree_defines.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 iterators │ │ │ │ +1// -*- C++ -*- header. │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2001-2025 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2008-2025 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,331 +21,54 @@ │ │ │ │ 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/stream_iterator.h │ │ │ │ +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{iterator} │ │ │ │ +27 * Do not attempt to use it directly. @headername{atomic} │ │ │ │ 28 */ │ │ │ │ 29 │ │ │ │ -30#ifndef _STREAM_ITERATOR_H │ │ │ │ -31#define _STREAM_ITERATOR_H 1 │ │ │ │ +30#ifndef _GLIBCXX_ATOMIC_LOCK_FREE_H │ │ │ │ +31#define _GLIBCXX_ATOMIC_LOCK_FREE_H 1 │ │ │ │ 32 │ │ │ │ 33#ifdef _GLIBCXX_SYSHDR │ │ │ │ 34#pragma GCC system_header │ │ │ │ 35#endif │ │ │ │ 36 │ │ │ │ -37#include <_i_o_s_f_w_d> │ │ │ │ -38#include <_b_i_t_s_/_m_o_v_e_._h> │ │ │ │ -39#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> │ │ │ │ -40#include <_d_e_b_u_g_/_d_e_b_u_g_._h> │ │ │ │ +37/** │ │ │ │ +38 * @addtogroup atomics │ │ │ │ +39 * @{ │ │ │ │ +40 */ │ │ │ │ 41 │ │ │ │ -42namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -43{ │ │ │ │ -44_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -45 │ │ │ │ -46 /** │ │ │ │ -47 * @addtogroup iterators │ │ │ │ -48 * @{ │ │ │ │ -49 */ │ │ │ │ -50 │ │ │ │ -51// Ignore warnings about std::iterator. │ │ │ │ -52#pragma GCC diagnostic push │ │ │ │ -53#pragma GCC diagnostic ignored "-Wdeprecated-declarations" │ │ │ │ -54 │ │ │ │ -55 /// Provides input iterator semantics for streams. │ │ │ │ -56 template, typename _Dist = ptrdiff_t> │ │ │ │ -_5_8 class _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ -59 : public _i_t_e_r_a_t_o_r │ │ │ │ -60 { │ │ │ │ -61 public: │ │ │ │ -62 typedef _CharT char_type; │ │ │ │ -63 typedef _Traits traits_type; │ │ │ │ -64 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; │ │ │ │ +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 private: │ │ │ │ -67 _i_s_t_r_e_a_m___t_y_p_e* _M_stream; │ │ │ │ -68 _Tp _M_value; │ │ │ │ -69 // This bool becomes false at end-of-stream. It should be sufficient to │ │ │ │ -70 // check _M_stream != nullptr instead, but historically we did not set │ │ │ │ -71 // _M_stream to null when reaching the end, so we need to keep this flag. │ │ │ │ -72 bool _M_ok; │ │ │ │ -73 │ │ │ │ -74 public: │ │ │ │ -75 /// Construct end of input stream iterator. │ │ │ │ -_7_6 ___G_L_I_B_C_X_X___C_O_N_S_T_E_X_P_R _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r() │ │ │ │ -77 ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T___I_F(_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<_Tp>::value) │ │ │ │ -78 : _M_stream(0), _M_value(), _M_ok(_f_a_l_s_e) {} │ │ │ │ -79 │ │ │ │ -80 /// Construct start of input stream iterator. │ │ │ │ -_8_1 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r(_i_s_t_r_e_a_m___t_y_p_e& _____s) │ │ │ │ -82 : _M_stream(_s_t_d::_____a_d_d_r_e_s_s_o_f(_____s)), _M_ok(_t_r_u_e) │ │ │ │ -83 { _M_read(); } │ │ │ │ -84 │ │ │ │ -85 ___G_L_I_B_C_X_X___C_O_N_S_T_E_X_P_R │ │ │ │ -86 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r(const _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& _____o_b_j) │ │ │ │ -87 ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T___I_F(_i_s___n_o_t_h_r_o_w___c_o_p_y___c_o_n_s_t_r_u_c_t_i_b_l_e_<___T_p_>_:_:_v_a_l_u_e) │ │ │ │ -88 : _M_stream(_____o_b_j._M_stream), _M_value(_____o_b_j._M_value), │ │ │ │ -89 _M_ok(_____o_b_j._M_ok) │ │ │ │ -90 { } │ │ │ │ -91 │ │ │ │ -92#if __cplusplus > 201703L && __cpp_lib_concepts │ │ │ │ -93 constexpr │ │ │ │ -94 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r(default_sentinel_t) │ │ │ │ -95 noexcept(is_nothrow_default_constructible_v<_Tp>) │ │ │ │ -96 : _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r() { } │ │ │ │ -97#endif │ │ │ │ -98 │ │ │ │ -99#if __cplusplus >= 201103L │ │ │ │ -100 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& operator=(const _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r&) = default; │ │ │ │ -101 ~istream_iterator() = default; │ │ │ │ -102#endif │ │ │ │ -103 │ │ │ │ -104 _GLIBCXX_NODISCARD │ │ │ │ -105 const _Tp& │ │ │ │ -106 operator*() const _GLIBCXX_NOEXCEPT │ │ │ │ -107 { │ │ │ │ -108 __glibcxx_requires_cond(_M_ok, │ │ │ │ -109 _M_message(__gnu_debug::__msg_deref_istream) │ │ │ │ -110 ._M_iterator(*this)); │ │ │ │ -111 return _M_value; │ │ │ │ -112 } │ │ │ │ -113 │ │ │ │ -114 _GLIBCXX_NODISCARD │ │ │ │ -115 const _Tp* │ │ │ │ -116 operator->() const _GLIBCXX_NOEXCEPT │ │ │ │ -117 { return _s_t_d_:_:_____a_d_d_r_e_s_s_o_f((operator*())); } │ │ │ │ -118 │ │ │ │ -119 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& │ │ │ │ -120 operator++() │ │ │ │ -121 { │ │ │ │ -122 __glibcxx_requires_cond(_M_ok, │ │ │ │ -123 _M_message(__gnu_debug::__msg_inc_istream) │ │ │ │ -124 ._M_iterator(*this)); │ │ │ │ -125 _M_read(); │ │ │ │ -126 return *this; │ │ │ │ -127 } │ │ │ │ -128 │ │ │ │ -129 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ -130 operator++(int) │ │ │ │ -131 { │ │ │ │ -132 __glibcxx_requires_cond(_M_ok, │ │ │ │ -133 _M_message(__gnu_debug::__msg_inc_istream) │ │ │ │ -134 ._M_iterator(*this)); │ │ │ │ -135 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r __tmp = *this; │ │ │ │ -136 _M_read(); │ │ │ │ -137 return __tmp; │ │ │ │ -138 } │ │ │ │ -139 │ │ │ │ -140 private: │ │ │ │ -141 bool │ │ │ │ -142 _M_equal(const _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& __x) const _GLIBCXX_NOEXCEPT │ │ │ │ -143 { │ │ │ │ -144 // Ideally this would just return _M_stream == __x._M_stream, │ │ │ │ -145 // but code compiled with old versions never sets _M_stream to null. │ │ │ │ -146 return (_M_ok == __x._M_ok) && (!_M_ok || _M_stream == __x._M_stream); │ │ │ │ -147 } │ │ │ │ -148 │ │ │ │ -149 void │ │ │ │ -150 _M_read() │ │ │ │ -151 { │ │ │ │ -152 if (_M_stream && !(*_M_stream >> _M_value)) │ │ │ │ -153 { │ │ │ │ -154 _M_stream = 0; │ │ │ │ -155 _M_ok = false; │ │ │ │ -156 } │ │ │ │ -157 } │ │ │ │ -158 │ │ │ │ -159 /// Return true if the iterators refer to the same stream, │ │ │ │ -160 /// or are both at end-of-stream. │ │ │ │ -161 _GLIBCXX_NODISCARD │ │ │ │ -162 friend bool │ │ │ │ -_1_6_3 _o_p_e_r_a_t_o_r_=_=(const _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& __x, const _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& __y) │ │ │ │ -164 ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -165 { return __x._M_equal(__y); } │ │ │ │ -166 │ │ │ │ -167#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ -168 /// Return true if the iterators refer to different streams, │ │ │ │ -169 /// or if one is at end-of-stream and the other is not. │ │ │ │ -170 _GLIBCXX_NODISCARD │ │ │ │ -171 friend bool │ │ │ │ -172 operator!=(const _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& __x, const _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& __y) │ │ │ │ -173 ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -174 { return !__x._M_equal(__y); } │ │ │ │ -175#endif │ │ │ │ -176 │ │ │ │ -177#if __cplusplus > 201703L && __cpp_lib_concepts │ │ │ │ -178 [[nodiscard]] │ │ │ │ -179 friend bool │ │ │ │ -180 _o_p_e_r_a_t_o_r_=_=(const _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& __i, default_sentinel_t) noexcept │ │ │ │ -181 { return !__i._M_stream; } │ │ │ │ -182#endif │ │ │ │ -183 }; │ │ │ │ -184 │ │ │ │ -185 /** │ │ │ │ -186 * @brief Provides output iterator semantics for streams. │ │ │ │ -187 * │ │ │ │ -188 * This class provides an iterator to write to an ostream. The type Tp is │ │ │ │ -189 * the only type written by this iterator and there must be an │ │ │ │ -190 * operator<<(Tp) defined. │ │ │ │ -191 * │ │ │ │ -192 * @tparam _Tp The type to write to the ostream. │ │ │ │ -193 * @tparam _CharT The ostream char_type. │ │ │ │ -194 * @tparam _Traits The ostream char_traits. │ │ │ │ -195 */ │ │ │ │ -196 template > │ │ │ │ -_1_9_8 class _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ -199 : public _i_t_e_r_a_t_o_r │ │ │ │ -200 { │ │ │ │ -201 public: │ │ │ │ -202 ///@{ │ │ │ │ -203 /// Public typedef │ │ │ │ -204#if __cplusplus > 201703L │ │ │ │ -_2_0_5 using _d_i_f_f_e_r_e_n_c_e___t_y_p_e = _p_t_r_d_i_f_f___t; │ │ │ │ -206#endif │ │ │ │ -_2_0_7 typedef _CharT _c_h_a_r___t_y_p_e; │ │ │ │ -_2_0_8 typedef _Traits _t_r_a_i_t_s___t_y_p_e; │ │ │ │ -_2_0_9 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; │ │ │ │ -210 ///@} │ │ │ │ -211 │ │ │ │ -212 private: │ │ │ │ -213 _o_s_t_r_e_a_m___t_y_p_e* _M_stream; │ │ │ │ -214 const _CharT* _M_string; │ │ │ │ -215 │ │ │ │ -216 public: │ │ │ │ -217 /// Construct from an ostream. │ │ │ │ -_2_1_8 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r(_o_s_t_r_e_a_m___t_y_p_e& _____s) ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -219 : _M_stream(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____s)), _M_string(0) {} │ │ │ │ -220 │ │ │ │ -221 /** │ │ │ │ -222 * Construct from an ostream. │ │ │ │ -223 * │ │ │ │ -224 * The delimiter string @a c is written to the stream after every Tp │ │ │ │ -225 * written to the stream. The delimiter is not copied, and thus must │ │ │ │ -226 * not be destroyed while this iterator is in use. │ │ │ │ -227 * │ │ │ │ -228 * @param __s Underlying ostream to write to. │ │ │ │ -229 * @param __c CharT delimiter string to insert. │ │ │ │ -230 */ │ │ │ │ -_2_3_1 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r(_o_s_t_r_e_a_m___t_y_p_e& _____s, const _CharT* __c) ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -232 : _M_stream(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____s)), _M_string(__c) { } │ │ │ │ -233 │ │ │ │ -234 /// Copy constructor. │ │ │ │ -_2_3_5 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r(const _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r& _____o_b_j) ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -236 : _M_stream(_____o_b_j._M_stream), _M_string(_____o_b_j._M_string) { } │ │ │ │ -237 │ │ │ │ -238#if __cplusplus >= 201103L │ │ │ │ -239 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r& operator=(const _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r&) = default; │ │ │ │ -240#endif │ │ │ │ -241 │ │ │ │ -242 /// Writes @a value to underlying ostream using operator<<. If │ │ │ │ -243 /// constructed with delimiter string, writes delimiter to ostream. │ │ │ │ -244 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r& │ │ │ │ -_2_4_5 _o_p_e_r_a_t_o_r_=(const _Tp& __value) │ │ │ │ -246 { │ │ │ │ -247 __glibcxx_requires_cond(_M_stream != 0, │ │ │ │ -248 _M_message(__gnu_debug::__msg_output_ostream) │ │ │ │ -249 ._M_iterator(*this)); │ │ │ │ -250 *_M_stream << __value; │ │ │ │ -251 if (_M_string) │ │ │ │ -252 *_M_stream << _M_string; │ │ │ │ -253 return *this; │ │ │ │ -254 } │ │ │ │ -255 │ │ │ │ -256 _GLIBCXX_NODISCARD │ │ │ │ -257 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r& │ │ │ │ -258 operator*() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -259 { return *this; } │ │ │ │ -260 │ │ │ │ -261 ostream_iterator& │ │ │ │ -262 operator++() _GLIBCXX_NOEXCEPT │ │ │ │ -263 { return *this; } │ │ │ │ -264 │ │ │ │ -265 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r& │ │ │ │ -266 operator++(int) _GLIBCXX_NOEXCEPT │ │ │ │ -267 { return *this; } │ │ │ │ -268 }; │ │ │ │ -269#pragma GCC diagnostic pop │ │ │ │ -270 │ │ │ │ -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 │ │ │ │ -_d_e_b_u_g_._h │ │ │ │ -_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_:_:_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_2_4_5 │ │ │ │ -_s_t_d_:_:_i_s___n_o_t_h_r_o_w___c_o_p_y___c_o_n_s_t_r_u_c_t_i_b_l_e │ │ │ │ -is_nothrow_copy_constructible │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_2_5_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_:_:_i_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ -Provides input iterator semantics for streams. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_6_0 │ │ │ │ -_s_t_d_:_:_i_s_t_r_e_a_m___i_t_e_r_a_t_o_r_:_:_i_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ -istream_iterator(istream_type &__s) │ │ │ │ -Construct start of input stream iterator. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_8_1 │ │ │ │ -_s_t_d_:_:_i_s_t_r_e_a_m___i_t_e_r_a_t_o_r_:_:_i_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ -constexpr istream_iterator() noexcept(/*conditional */) │ │ │ │ -Construct end of input stream iterator. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_7_6 │ │ │ │ -_s_t_d_:_:_i_s_t_r_e_a_m___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_=_= │ │ │ │ -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. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_1_6_3 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ -Provides output iterator semantics for streams. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_2_0_0 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r_:_:_c_h_a_r___t_y_p_e │ │ │ │ -_CharT char_type │ │ │ │ -Public typedef. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_2_0_7 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ -ostream_iterator(ostream_type &__s) noexcept │ │ │ │ -Construct from an ostream. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_2_1_8 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ -ostream_iterator(ostream_type &__s, const _CharT *__c) noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_2_3_1 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r_:_:_t_r_a_i_t_s___t_y_p_e │ │ │ │ -_Traits traits_type │ │ │ │ -Public typedef. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_2_0_8 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ -ostream_iterator & operator=(const _Tp &__value) │ │ │ │ -Writes value to underlying ostream using operator<<. If constructed with │ │ │ │ -delimiter string,... │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_2_4_5 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m___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 typedef. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_2_0_9 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r_:_:_o_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ -ostream_iterator(const ostream_iterator &__obj) noexcept │ │ │ │ -Copy constructor. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_2_3_5 │ │ │ │ -_s_t_d_:_:_a_u_t_o___p_t_r___r_e_f │ │ │ │ -DDeeffiinniittiioonn _a_u_t_o___p_t_r_._h_:_4_9 │ │ │ │ +66/// @} group atomics │ │ │ │ +67 │ │ │ │ +68#endif │ │ │ │ * _b_i_t_s │ │ │ │ - * _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h │ │ │ │ + * _a_t_o_m_i_c___l_o_c_k_f_r_e_e___d_e_f_i_n_e_s_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00410.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stl_vector.h File Reference │ │ │ +libstdc++: shared_ptr_atomic.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -46,168 +46,289 @@ │ │ │ /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ │ │ │ $(document).ready(function(){initNavTree('a00410.html',''); initResizable(); }); │ │ │ /* @license-end */ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -Classes | │ │ │ Namespaces | │ │ │ -Macros | │ │ │ -Functions
│ │ │ -
stl_vector.h File Reference
│ │ │ +Macros
│ │ │ +
shared_ptr_atomic.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ -Classes

struct  std::_Vector_base< _Tp, _Alloc >
 
class  std::vector< _Tp, _Alloc >
 
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │

│ │ │ 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)
 
#define _GLIBCXX_TSAN_MUTEX_DESTROY(X)
 
#define _GLIBCXX_TSAN_MUTEX_LOCKED(X)
 
#define _GLIBCXX_TSAN_MUTEX_POST_SIGNAL(X)
 
#define _GLIBCXX_TSAN_MUTEX_POST_UNLOCK(X)
 
#define _GLIBCXX_TSAN_MUTEX_PRE_SIGNAL(X)
 
#define _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK(X)
 
#define _GLIBCXX_TSAN_MUTEX_TRY_LOCK(X)
 
#define _GLIBCXX_TSAN_MUTEX_TRY_LOCK_FAILED(X)
 
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ 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 >
 
template<typename _Tp , _Lock_policy _Lp>
bool std::atomic_is_lock_free (const __shared_ptr< _Tp, _Lp > *)
 
template<typename _Tp >
bool std::atomic_is_lock_free (const shared_ptr< _Tp > *__p)
 
template<typename _Tp , _Lock_policy _Lp>
__shared_ptr< _Tp, _Lpstd::atomic_load (const __shared_ptr< _Tp, _Lp > *__p)
 
template<typename _Tp >
shared_ptr< _Tp > std::atomic_load (const shared_ptr< _Tp > *__p)
 
template<typename _Tp , _Lock_policy _Lp>
__shared_ptr< _Tp, _Lpstd::atomic_load_explicit (const __shared_ptr< _Tp, _Lp > *__p, memory_order)
 
template<typename _Tp >
shared_ptr< _Tp > std::atomic_load_explicit (const shared_ptr< _Tp > *__p, memory_order)
 
template<typename _Tp , _Lock_policy _Lp>
void std::atomic_store (__shared_ptr< _Tp, _Lp > *__p, __shared_ptr< _Tp, _Lp > __r)
 
template<typename _Tp >
void std::atomic_store (shared_ptr< _Tp > *__p, shared_ptr< _Tp > __r)
 
template<typename _Tp , _Lock_policy _Lp>
void std::atomic_store_explicit (__shared_ptr< _Tp, _Lp > *__p, __shared_ptr< _Tp, _Lp > __r, memory_order)
 
template<typename _Tp >
void std::atomic_store_explicit (shared_ptr< _Tp > *__p, shared_ptr< _Tp > __r, memory_order)
 
template<typename _Tp , _Lock_policy _Lp>
__shared_ptr< _Tp, _Lpstd::atomic_exchange (__shared_ptr< _Tp, _Lp > *__p, __shared_ptr< _Tp, _Lp > __r)
 
template<typename _Tp >
shared_ptr< _Tp > std::atomic_exchange (shared_ptr< _Tp > *__p, shared_ptr< _Tp > __r)
 
template<typename _Tp , _Lock_policy _Lp>
__shared_ptr< _Tp, _Lpstd::atomic_exchange_explicit (__shared_ptr< _Tp, _Lp > *__p, __shared_ptr< _Tp, _Lp > __r, memory_order)
 
template<typename _Tp >
shared_ptr< _Tp > std::atomic_exchange_explicit (shared_ptr< _Tp > *__p, shared_ptr< _Tp > __r, memory_order)
 
template<typename _Tp , _Lock_policy _Lp>
bool std::atomic_compare_exchange_strong (__shared_ptr< _Tp, _Lp > *__p, __shared_ptr< _Tp, _Lp > *__v, __shared_ptr< _Tp, _Lp > __w)
 
template<typename _Tp >
bool std::atomic_compare_exchange_strong (shared_ptr< _Tp > *__p, shared_ptr< _Tp > *__v, shared_ptr< _Tp > __w)
 
template<typename _Tp , _Lock_policy _Lp>
bool std::atomic_compare_exchange_strong_explicit (__shared_ptr< _Tp, _Lp > *__p, __shared_ptr< _Tp, _Lp > *__v, __shared_ptr< _Tp, _Lp > __w, memory_order, memory_order)
 
template<typename _Tp >
bool std::atomic_compare_exchange_strong_explicit (shared_ptr< _Tp > *__p, shared_ptr< _Tp > *__v, shared_ptr< _Tp > __w, memory_order, memory_order)
 
template<typename _Tp , _Lock_policy _Lp>
bool std::atomic_compare_exchange_weak (__shared_ptr< _Tp, _Lp > *__p, __shared_ptr< _Tp, _Lp > *__v, __shared_ptr< _Tp, _Lp > __w)
 
template<typename _Tp >
bool std::atomic_compare_exchange_weak (shared_ptr< _Tp > *__p, shared_ptr< _Tp > *__v, shared_ptr< _Tp > __w)
 
template<typename _Tp , _Lock_policy _Lp>
bool std::atomic_compare_exchange_weak_explicit (__shared_ptr< _Tp, _Lp > *__p, __shared_ptr< _Tp, _Lp > *__v, __shared_ptr< _Tp, _Lp > __w, memory_order __success, memory_order __failure)
 
template<typename _Tp >
bool std::atomic_compare_exchange_weak_explicit (shared_ptr< _Tp > *__p, shared_ptr< _Tp > *__v, shared_ptr< _Tp > __w, memory_order __success, memory_order __failure)
 
│ │ │

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 <memory>.

│ │ │ │ │ │ -

Definition in file stl_vector.h.

│ │ │ +

Definition in file shared_ptr_atomic.h.

│ │ │

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC

│ │ │ + │ │ │ +

◆ _GLIBCXX_TSAN_MUTEX_DESTROY

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define _GLIBCXX_TSAN_MUTEX_DESTROY( X)
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 52 of file shared_ptr_atomic.h.

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

◆ _GLIBCXX_TSAN_MUTEX_LOCKED

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ │ │ │
#define _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC#define _GLIBCXX_TSAN_MUTEX_LOCKED( X)
│ │ │
│ │ │ │ │ │ -

Definition at line 298 of file stl_vector.h.

│ │ │ +

Definition at line 55 of file shared_ptr_atomic.h.

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

◆ _GLIBCXX_ASAN_ANNOTATE_GREW

│ │ │ + │ │ │ +

◆ _GLIBCXX_TSAN_MUTEX_POST_SIGNAL

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ - │ │ │ + │ │ │ │ │ │ │ │ │ - │ │ │ + │ │ │ │ │ │ │ │ │
#define _GLIBCXX_ASAN_ANNOTATE_GREW#define _GLIBCXX_TSAN_MUTEX_POST_SIGNAL( n)X)
│ │ │
│ │ │ │ │ │ -

Definition at line 296 of file stl_vector.h.

│ │ │ +

Definition at line 59 of file shared_ptr_atomic.h.

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

◆ _GLIBCXX_ASAN_ANNOTATE_GROW

│ │ │ + │ │ │ +

◆ _GLIBCXX_TSAN_MUTEX_POST_UNLOCK

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

Definition at line 295 of file stl_vector.h.

│ │ │ +

Definition at line 57 of file shared_ptr_atomic.h.

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

◆ _GLIBCXX_ASAN_ANNOTATE_REINIT

│ │ │ + │ │ │ +

◆ _GLIBCXX_TSAN_MUTEX_PRE_SIGNAL

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define _GLIBCXX_ASAN_ANNOTATE_REINIT#define _GLIBCXX_TSAN_MUTEX_PRE_SIGNAL( X)
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 58 of file shared_ptr_atomic.h.

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

◆ _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK( X)
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 56 of file shared_ptr_atomic.h.

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

◆ _GLIBCXX_TSAN_MUTEX_TRY_LOCK

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ │ │ │
#define _GLIBCXX_TSAN_MUTEX_TRY_LOCK( X)
│ │ │
│ │ │ │ │ │ -

Definition at line 294 of file stl_vector.h.

│ │ │ +

Definition at line 53 of file shared_ptr_atomic.h.

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

◆ _GLIBCXX_ASAN_ANNOTATE_SHRINK

│ │ │ + │ │ │ +

◆ _GLIBCXX_TSAN_MUTEX_TRY_LOCK_FAILED

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ - │ │ │ + │ │ │ │ │ │ │ │ │ - │ │ │ + │ │ │ │ │ │ │ │ │
#define _GLIBCXX_ASAN_ANNOTATE_SHRINK#define _GLIBCXX_TSAN_MUTEX_TRY_LOCK_FAILED( n)X)
│ │ │
│ │ │ │ │ │ -

Definition at line 297 of file stl_vector.h.

│ │ │ +

Definition at line 54 of file shared_ptr_atomic.h.

│ │ │ │ │ │
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,72 +1,154 @@ │ │ │ │ libstdc++ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _M_a_c_r_o_s | _F_u_n_c_t_i_o_n_s │ │ │ │ -stl_vector.h File Reference │ │ │ │ +_N_a_m_e_s_p_a_c_e_s | _M_a_c_r_o_s │ │ │ │ +shared_ptr_atomic.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_ _> │ │ │ │ -  │ │ │ │ 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___T_S_A_N___M_U_T_E_X___D_E_S_T_R_O_Y(X) │ │ │ │ +  │ │ │ │ +#define  ___G_L_I_B_C_X_X___T_S_A_N___M_U_T_E_X___L_O_C_K_E_D(X) │ │ │ │ +  │ │ │ │ +#define  ___G_L_I_B_C_X_X___T_S_A_N___M_U_T_E_X___P_O_S_T___S_I_G_N_A_L(X) │ │ │ │ +  │ │ │ │ +#define  ___G_L_I_B_C_X_X___T_S_A_N___M_U_T_E_X___P_O_S_T___U_N_L_O_C_K(X) │ │ │ │   │ │ │ │ -#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___T_S_A_N___M_U_T_E_X___P_R_E___S_I_G_N_A_L(X) │ │ │ │   │ │ │ │ -#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___T_S_A_N___M_U_T_E_X___P_R_E___U_N_L_O_C_K(X) │ │ │ │   │ │ │ │ -#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___T_S_A_N___M_U_T_E_X___T_R_Y___L_O_C_K(X) │ │ │ │   │ │ │ │ -#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) │ │ │ │ +#define  ___G_L_I_B_C_X_X___T_S_A_N___M_U_T_E_X___T_R_Y___L_O_C_K___F_A_I_L_E_D(X) │ │ │ │   │ │ │ │ FFuunnccttiioonnss │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e _Alloc > │ │ │ │ -_c_o_n_s_t_e_x_p_r __detail::__synth3way_t< _Tp _s_t_d_:_:_o_p_e_r_a_t_o_r_<_=_> (_c_o_n_s_t _v_e_c_t_o_r< _Tp, │ │ │ │ - >  _Alloc > &__x, _c_o_n_s_t _v_e_c_t_o_r< _Tp, _Alloc │ │ │ │ - > &__y) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e _Alloc > │ │ │ │ - _c_o_n_s_t_e_x_p_r bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (_c_o_n_s_t _v_e_c_t_o_r< _Tp, │ │ │ │ - _Alloc > &__x, _c_o_n_s_t _v_e_c_t_o_r< _Tp, _Alloc │ │ │ │ - > &__y) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e _Alloc > │ │ │ │ - _c_o_n_s_t_e_x_p_r _v_o_i_d  _s_t_d_:_:_s_w_a_p (_v_e_c_t_o_r< _Tp, _Alloc > &__x, │ │ │ │ - _v_e_c_t_o_r< _Tp, _Alloc > &__y) noexcept(/ │ │ │ │ - *_c_o_n_d_i_t_i_o_n_a_l */) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e ___I_n_p_u_t_I_t_e_r_a_t_o_r , _t_y_p_e_n_a_m_e ___V_a_l_T = typename │ │ │ │ -iterator_traits<_InputIterator>::value_type, _t_y_p_e_n_a_m_e ___A_l_l_o_c_a_t_o_r = │ │ │ │ -allocator<_ValT>, _t_y_p_e_n_a_m_e = _RequireInputIter<_InputIterator>, _t_y_p_e_n_a_m_e = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::vveeccttoorr (___I_n_p_u_t_I_t_e_r_a_t_o_r, │ │ │ │ - ___I_n_p_u_t_I_t_e_r_a_t_o_r, ___A_l_l_o_c_a_t_o_r=___A_l_l_o_c_a_t_o_r()) │ │ │ │ - -> _v_e_c_t_o_r< ___V_a_l_T, ___A_l_l_o_c_a_t_o_r > │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _Lock_policy _Lp> │ │ │ │ + bool  _s_t_d_:_:_a_t_o_m_i_c___i_s___l_o_c_k___f_r_e_e (_c_o_n_s_t __shared_ptr< _Tp, │ │ │ │ + ___L_p > *) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ + bool  _s_t_d_:_:_a_t_o_m_i_c___i_s___l_o_c_k___f_r_e_e (_c_o_n_s_t _s_h_a_r_e_d___p_t_r< _Tp > │ │ │ │ + *__p) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _Lock_policy _Lp> │ │ │ │ +__shared_ptr< _Tp, ___L_p >  _s_t_d_:_:_a_t_o_m_i_c___l_o_a_d (_c_o_n_s_t __shared_ptr< _Tp, ___L_p > │ │ │ │ + *__p) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ + _s_h_a_r_e_d___p_t_r< _Tp >  _s_t_d_:_:_a_t_o_m_i_c___l_o_a_d (_c_o_n_s_t _s_h_a_r_e_d___p_t_r< _Tp > *__p) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _Lock_policy _Lp> │ │ │ │ +__shared_ptr< _Tp, ___L_p >  _s_t_d_:_:_a_t_o_m_i_c___l_o_a_d___e_x_p_l_i_c_i_t (_c_o_n_s_t __shared_ptr< _Tp, │ │ │ │ + ___L_p > *__p, _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ + _s_h_a_r_e_d___p_t_r< _Tp >  _s_t_d_:_:_a_t_o_m_i_c___l_o_a_d___e_x_p_l_i_c_i_t (_c_o_n_s_t _s_h_a_r_e_d___p_t_r< _Tp > │ │ │ │ + *__p, _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _Lock_policy _Lp> │ │ │ │ + _v_o_i_d  _s_t_d_:_:_a_t_o_m_i_c___s_t_o_r_e (__shared_ptr< _Tp, ___L_p > *__p, │ │ │ │ + __shared_ptr< _Tp, ___L_p > __r) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ + _v_o_i_d  _s_t_d_:_:_a_t_o_m_i_c___s_t_o_r_e (_s_h_a_r_e_d___p_t_r< _Tp > *__p, │ │ │ │ + _s_h_a_r_e_d___p_t_r< _Tp > __r) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _Lock_policy _Lp> │ │ │ │ + _v_o_i_d  _s_t_d_:_:_a_t_o_m_i_c___s_t_o_r_e___e_x_p_l_i_c_i_t (__shared_ptr< _Tp, ___L_p > │ │ │ │ + *__p, __shared_ptr< _Tp, ___L_p > __r, _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ + _v_o_i_d  _s_t_d_:_:_a_t_o_m_i_c___s_t_o_r_e___e_x_p_l_i_c_i_t (_s_h_a_r_e_d___p_t_r< _Tp > *__p, │ │ │ │ + _s_h_a_r_e_d___p_t_r< _Tp > __r, _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _Lock_policy _Lp> │ │ │ │ +__shared_ptr< _Tp, ___L_p >  _s_t_d_:_:_a_t_o_m_i_c___e_x_c_h_a_n_g_e (__shared_ptr< _Tp, ___L_p > *__p, │ │ │ │ + __shared_ptr< _Tp, ___L_p > __r) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ + _s_h_a_r_e_d___p_t_r< _Tp >  _s_t_d_:_:_a_t_o_m_i_c___e_x_c_h_a_n_g_e (_s_h_a_r_e_d___p_t_r< _Tp > *__p, │ │ │ │ + _s_h_a_r_e_d___p_t_r< _Tp > __r) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _Lock_policy _Lp> │ │ │ │ +__shared_ptr< _Tp, ___L_p >  _s_t_d_:_:_a_t_o_m_i_c___e_x_c_h_a_n_g_e___e_x_p_l_i_c_i_t (__shared_ptr< _Tp, ___L_p │ │ │ │ + > *__p, __shared_ptr< _Tp, ___L_p > __r, _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ + _s_h_a_r_e_d___p_t_r< _Tp >  _s_t_d_:_:_a_t_o_m_i_c___e_x_c_h_a_n_g_e___e_x_p_l_i_c_i_t (_s_h_a_r_e_d___p_t_r< _Tp > │ │ │ │ + *__p, _s_h_a_r_e_d___p_t_r< _Tp > __r, _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _Lock_policy _Lp> │ │ │ │ + bool  _s_t_d_:_:_a_t_o_m_i_c___c_o_m_p_a_r_e___e_x_c_h_a_n_g_e___s_t_r_o_n_g (__shared_ptr< │ │ │ │ + _Tp, ___L_p > *__p, __shared_ptr< _Tp, ___L_p > *_____v, │ │ │ │ + __shared_ptr< _Tp, ___L_p > _____w) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ + bool  _s_t_d_:_:_a_t_o_m_i_c___c_o_m_p_a_r_e___e_x_c_h_a_n_g_e___s_t_r_o_n_g (_s_h_a_r_e_d___p_t_r< _Tp │ │ │ │ + > *__p, _s_h_a_r_e_d___p_t_r< _Tp > *_____v, _s_h_a_r_e_d___p_t_r< _Tp > │ │ │ │ + _____w) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _Lock_policy _Lp> │ │ │ │ + bool  _s_t_d_:_:_a_t_o_m_i_c___c_o_m_p_a_r_e___e_x_c_h_a_n_g_e___s_t_r_o_n_g___e_x_p_l_i_c_i_t │ │ │ │ + (__shared_ptr< _Tp, ___L_p > *__p, __shared_ptr< _Tp, │ │ │ │ + ___L_p > *_____v, __shared_ptr< _Tp, ___L_p > _____w, │ │ │ │ + _m_e_m_o_r_y___o_r_d_e_r, _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ + bool  _s_t_d_:_:_a_t_o_m_i_c___c_o_m_p_a_r_e___e_x_c_h_a_n_g_e___s_t_r_o_n_g___e_x_p_l_i_c_i_t │ │ │ │ + (_s_h_a_r_e_d___p_t_r< _Tp > *__p, _s_h_a_r_e_d___p_t_r< _Tp > *_____v, │ │ │ │ + _s_h_a_r_e_d___p_t_r< _Tp > _____w, _m_e_m_o_r_y___o_r_d_e_r, _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _Lock_policy _Lp> │ │ │ │ + bool  _s_t_d_:_:_a_t_o_m_i_c___c_o_m_p_a_r_e___e_x_c_h_a_n_g_e___w_e_a_k (__shared_ptr< _Tp, │ │ │ │ + ___L_p > *__p, __shared_ptr< _Tp, ___L_p > *_____v, │ │ │ │ + __shared_ptr< _Tp, ___L_p > _____w) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ + bool  _s_t_d_:_:_a_t_o_m_i_c___c_o_m_p_a_r_e___e_x_c_h_a_n_g_e___w_e_a_k (_s_h_a_r_e_d___p_t_r< _Tp > │ │ │ │ + *__p, _s_h_a_r_e_d___p_t_r< _Tp > *_____v, _s_h_a_r_e_d___p_t_r< _Tp > _____w) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _Lock_policy _Lp> │ │ │ │ + bool  _s_t_d_:_:_a_t_o_m_i_c___c_o_m_p_a_r_e___e_x_c_h_a_n_g_e___w_e_a_k___e_x_p_l_i_c_i_t │ │ │ │ + (__shared_ptr< _Tp, ___L_p > *__p, __shared_ptr< _Tp, │ │ │ │ + ___L_p > *_____v, __shared_ptr< _Tp, ___L_p > _____w, │ │ │ │ + _m_e_m_o_r_y___o_r_d_e_r _____s_u_c_c_e_s_s, _m_e_m_o_r_y___o_r_d_e_r _____f_a_i_l_u_r_e) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ + bool  _s_t_d_:_:_a_t_o_m_i_c___c_o_m_p_a_r_e___e_x_c_h_a_n_g_e___w_e_a_k___e_x_p_l_i_c_i_t │ │ │ │ + (_s_h_a_r_e_d___p_t_r< _Tp > *__p, _s_h_a_r_e_d___p_t_r< _Tp > *_____v, │ │ │ │ + _s_h_a_r_e_d___p_t_r< _Tp > _____w, _m_e_m_o_r_y___o_r_d_e_r _____s_u_c_c_e_s_s, │ │ │ │ + _m_e_m_o_r_y___o_r_d_e_r _____f_a_i_l_u_r_e) │ │ │ │   │ │ │ │ ********** 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. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _s_h_a_r_e_d___p_t_r___a_t_o_m_i_c_._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 (   n ) │ │ │ │ -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 (   n ) │ │ │ │ -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 (   n ) │ │ │ │ -Definition at line _2_9_7 of file _s_t_l___v_e_c_t_o_r_._h. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__TTSSAANN__MMUUTTEEXX__DDEESSTTRROOYY ********** │ │ │ │ +#define _GLIBCXX_TSAN_MUTEX_DESTROY (   X ) │ │ │ │ +Definition at line _5_2 of file _s_h_a_r_e_d___p_t_r___a_t_o_m_i_c_._h. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__TTSSAANN__MMUUTTEEXX__LLOOCCKKEEDD ********** │ │ │ │ +#define _GLIBCXX_TSAN_MUTEX_LOCKED (   X ) │ │ │ │ +Definition at line _5_5 of file _s_h_a_r_e_d___p_t_r___a_t_o_m_i_c_._h. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__TTSSAANN__MMUUTTEEXX__PPOOSSTT__SSIIGGNNAALL ********** │ │ │ │ +#define _GLIBCXX_TSAN_MUTEX_POST_SIGNAL (   X ) │ │ │ │ +Definition at line _5_9 of file _s_h_a_r_e_d___p_t_r___a_t_o_m_i_c_._h. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__TTSSAANN__MMUUTTEEXX__PPOOSSTT__UUNNLLOOCCKK ********** │ │ │ │ +#define _GLIBCXX_TSAN_MUTEX_POST_UNLOCK (   X ) │ │ │ │ +Definition at line _5_7 of file _s_h_a_r_e_d___p_t_r___a_t_o_m_i_c_._h. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__TTSSAANN__MMUUTTEEXX__PPRREE__SSIIGGNNAALL ********** │ │ │ │ +#define _GLIBCXX_TSAN_MUTEX_PRE_SIGNAL (   X ) │ │ │ │ +Definition at line _5_8 of file _s_h_a_r_e_d___p_t_r___a_t_o_m_i_c_._h. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__TTSSAANN__MMUUTTEEXX__PPRREE__UUNNLLOOCCKK ********** │ │ │ │ +#define _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK (   X ) │ │ │ │ +Definition at line _5_6 of file _s_h_a_r_e_d___p_t_r___a_t_o_m_i_c_._h. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__TTSSAANN__MMUUTTEEXX__TTRRYY__LLOOCCKK ********** │ │ │ │ +#define _GLIBCXX_TSAN_MUTEX_TRY_LOCK (   X ) │ │ │ │ +Definition at line _5_3 of file _s_h_a_r_e_d___p_t_r___a_t_o_m_i_c_._h. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__TTSSAANN__MMUUTTEEXX__TTRRYY__LLOOCCKK__FFAAIILLEEDD ********** │ │ │ │ +#define _GLIBCXX_TSAN_MUTEX_TRY_LOCK_FAILED (   X ) │ │ │ │ +Definition at line _5_4 of file _s_h_a_r_e_d___p_t_r___a_t_o_m_i_c_._h. │ │ │ │ * _b_i_t_s │ │ │ │ - * _s_t_l___v_e_c_t_o_r_._h │ │ │ │ + * _s_h_a_r_e_d___p_t_r___a_t_o_m_i_c_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00410.js │ │ │ ├── js-beautify {} │ │ │ │ @@ -1,6 +1,24 @@ │ │ │ │ var a00410 = [ │ │ │ │ - ["std::_Vector_base< _Tp, _Alloc >", "a07442.html", null], │ │ │ │ - ["operator<=>", "a00410.html#a50f293a0e40b9059a7e4379b63a10737", null], │ │ │ │ - ["operator==", "a00410.html#a00026fa9234350d37423e7f059da985f", null], │ │ │ │ - ["swap", "a00410.html#ad420ada7eccdee66b60c11f6c84fce2f", null] │ │ │ │ + ["atomic_compare_exchange_strong", "a00410.html#ga7f9e658275d4a2cdbf1b6a00d02adcc7", null], │ │ │ │ + ["atomic_compare_exchange_strong", "a00410.html#ga8b4c27092fe0543d16aa24679ab64f35", null], │ │ │ │ + ["atomic_compare_exchange_strong_explicit", "a00410.html#ga8ac0b3f7aae34919ebc25fc54ff6b9c8", null], │ │ │ │ + ["atomic_compare_exchange_strong_explicit", "a00410.html#ga7b812df2cdd0c01f09d65168d22418c9", null], │ │ │ │ + ["atomic_compare_exchange_weak", "a00410.html#ga6860aafd01c4daf71cca0efe5193437f", null], │ │ │ │ + ["atomic_compare_exchange_weak", "a00410.html#ga6aa9828191cf7749c72581e719dde0b0", null], │ │ │ │ + ["atomic_compare_exchange_weak_explicit", "a00410.html#ga31df9efdf79235d0f8e112d245deb431", null], │ │ │ │ + ["atomic_compare_exchange_weak_explicit", "a00410.html#ga8ddc9b0002afbe0001718de9c8ca931e", null], │ │ │ │ + ["atomic_exchange", "a00410.html#ga781c3166a763da6704a757e45235d36f", null], │ │ │ │ + ["atomic_exchange", "a00410.html#ga2030e82e43a4017cbaa802974790bb25", null], │ │ │ │ + ["atomic_exchange_explicit", "a00410.html#ga94196a5199df82a0b4a6add046eb8579", null], │ │ │ │ + ["atomic_exchange_explicit", "a00410.html#ga0e5af6dda768cd829095adcd266e1f68", null], │ │ │ │ + ["atomic_is_lock_free", "a00410.html#ga005c6e4068fe3f26d09f5e24eaa87e92", null], │ │ │ │ + ["atomic_is_lock_free", "a00410.html#ga5fe925503fa03a8132ab6ac8c3d05017", null], │ │ │ │ + ["atomic_load", "a00410.html#gaa0e8444bce044d4c703faa284d5be31b", null], │ │ │ │ + ["atomic_load", "a00410.html#ga862acb9abfac21160395d3892d0fcda4", null], │ │ │ │ + ["atomic_load_explicit", "a00410.html#ga63bd95c47d868e1749c1934fe0f16283", null], │ │ │ │ + ["atomic_load_explicit", "a00410.html#ga15d2346b1ab42f5bd88978eb4f2eb5d5", null], │ │ │ │ + ["atomic_store", "a00410.html#gaf607a58027ea400e7688daa2832c67ef", null], │ │ │ │ + ["atomic_store", "a00410.html#gaad7c9077082544dc2454ef66eb252cad", null], │ │ │ │ + ["atomic_store_explicit", "a00410.html#ga4fb42f2c743388ba4dcf24abf0cc2701", null], │ │ │ │ + ["atomic_store_explicit", "a00410.html#gac459811f24dfa61ca04dff98c59b0433", null] │ │ │ │ ]; │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00410_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stl_vector.h Source File │ │ │ +libstdc++: shared_ptr_atomic.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,20 +45,20 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
stl_vector.h
│ │ │ +
shared_ptr_atomic.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// Vector implementation -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// shared_ptr atomic access -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2001-2025 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2014-2025 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
│ │ │ @@ -71,2650 +71,917 @@ │ │ │
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
│ │ │ - │ │ │ -
60#include <bits/functexcept.h>
│ │ │ -
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>
│ │ │ -
│ │ │ - │ │ │ -
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;
│ │ │ -
103
│ │ │ - │ │ │ -
105 _Vector_impl_data() _GLIBCXX_NOEXCEPT
│ │ │ -
106 : _M_start(), _M_finish(), _M_end_of_storage()
│ │ │ -
107 { }
│ │ │ -
108
│ │ │ -
109#if __cplusplus >= 201103L
│ │ │ - │ │ │ -
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
│ │ │ - │ │ │ -
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
│ │ │ - │ │ │ -
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 };
│ │ │ +
24
│ │ │ +
25/** @file bits/shared_ptr_atomic.h
│ │ │ +
26 * This is an internal header file, included by other library headers.
│ │ │ +
27 * Do not attempt to use it directly. @headername{memory}
│ │ │ +
28 */
│ │ │ +
29
│ │ │ +
30#ifndef _SHARED_PTR_ATOMIC_H
│ │ │ +
31#define _SHARED_PTR_ATOMIC_H 1
│ │ │ +
32
│ │ │ +
33#include <bits/atomic_base.h>
│ │ │ +
34#include <bits/shared_ptr.h>
│ │ │ +
35
│ │ │ +
36// Annotations for the custom locking in atomic<shared_ptr<T>>.
│ │ │ +
37#if defined _GLIBCXX_TSAN && __has_include(<sanitizer/tsan_interface.h>)
│ │ │ +
38#include <sanitizer/tsan_interface.h>
│ │ │ +
39#define _GLIBCXX_TSAN_MUTEX_DESTROY(X) \
│ │ │ +
40 __tsan_mutex_destroy(X, __tsan_mutex_not_static)
│ │ │ +
41#define _GLIBCXX_TSAN_MUTEX_TRY_LOCK(X) \
│ │ │ +
42 __tsan_mutex_pre_lock(X, __tsan_mutex_not_static|__tsan_mutex_try_lock)
│ │ │ +
43#define _GLIBCXX_TSAN_MUTEX_TRY_LOCK_FAILED(X) __tsan_mutex_post_lock(X, \
│ │ │ +
44 __tsan_mutex_not_static|__tsan_mutex_try_lock_failed, 0)
│ │ │ +
45#define _GLIBCXX_TSAN_MUTEX_LOCKED(X) \
│ │ │ +
46 __tsan_mutex_post_lock(X, __tsan_mutex_not_static, 0)
│ │ │ +
47#define _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK(X) __tsan_mutex_pre_unlock(X, 0)
│ │ │ +
48#define _GLIBCXX_TSAN_MUTEX_POST_UNLOCK(X) __tsan_mutex_post_unlock(X, 0)
│ │ │ +
49#define _GLIBCXX_TSAN_MUTEX_PRE_SIGNAL(X) __tsan_mutex_pre_signal(X, 0)
│ │ │ +
50#define _GLIBCXX_TSAN_MUTEX_POST_SIGNAL(X) __tsan_mutex_post_signal(X, 0)
│ │ │ +
51#else
│ │ │ +
52#define _GLIBCXX_TSAN_MUTEX_DESTROY(X)
│ │ │ +
53#define _GLIBCXX_TSAN_MUTEX_TRY_LOCK(X)
│ │ │ +
54#define _GLIBCXX_TSAN_MUTEX_TRY_LOCK_FAILED(X)
│ │ │ +
55#define _GLIBCXX_TSAN_MUTEX_LOCKED(X)
│ │ │ +
56#define _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK(X)
│ │ │ +
57#define _GLIBCXX_TSAN_MUTEX_POST_UNLOCK(X)
│ │ │ +
58#define _GLIBCXX_TSAN_MUTEX_PRE_SIGNAL(X)
│ │ │ +
59#define _GLIBCXX_TSAN_MUTEX_POST_SIGNAL(X)
│ │ │ +
60#endif
│ │ │ +
61
│ │ │ +
62namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
63{
│ │ │ +
64_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
65
│ │ │ +
66 /**
│ │ │ +
67 * @addtogroup pointer_abstractions
│ │ │ +
68 * @relates shared_ptr
│ │ │ +
69 * @{
│ │ │ +
70 */
│ │ │ +
71
│ │ │ +
72 /// @cond undocumented
│ │ │ +
73
│ │ │ +
74 struct _Sp_locker
│ │ │ +
75 {
│ │ │ +
76 _Sp_locker(const _Sp_locker&) = delete;
│ │ │ +
77 _Sp_locker& operator=(const _Sp_locker&) = delete;
│ │ │ +
78
│ │ │ +
79#ifdef __GTHREADS
│ │ │ +
80 explicit
│ │ │ +
81 _Sp_locker(const void*) noexcept;
│ │ │ +
82 _Sp_locker(const void*, const void*) noexcept;
│ │ │ +
83 ~_Sp_locker();
│ │ │ +
84
│ │ │ +
85 private:
│ │ │ +
86 unsigned char _M_key1;
│ │ │ +
87 unsigned char _M_key2;
│ │ │ +
88#else
│ │ │ +
89 explicit _Sp_locker(const void*, const void* = nullptr) { }
│ │ │ +
90#endif
│ │ │ +
91 };
│ │ │ +
92
│ │ │ +
93 /// @endcond
│ │ │ +
94
│ │ │ +
95 /**
│ │ │ +
96 * @brief Report whether shared_ptr atomic operations are lock-free.
│ │ │ +
97 * @param __p A non-null pointer to a shared_ptr object.
│ │ │ +
98 * @return True if atomic access to @c *__p is lock-free, false otherwise.
│ │ │ +
99 * @{
│ │ │ +
100 */
│ │ │ +
101 template<typename _Tp, _Lock_policy _Lp>
│ │ │ +
102 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
103 inline bool
│ │ │ +
│ │ │ +
104 atomic_is_lock_free(const __shared_ptr<_Tp, _Lp>*)
│ │ │ +
105 {
│ │ │ +
106#ifdef __GTHREADS
│ │ │ +
107 return __gthread_active_p() == 0;
│ │ │ +
108#else
│ │ │ +
109 return true;
│ │ │ +
110#endif
│ │ │ +
111 }
│ │ │ +
│ │ │ +
112
│ │ │ +
113 template<typename _Tp>
│ │ │ +
114 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
115 inline bool
│ │ │ +
│ │ │ +
116 atomic_is_lock_free(const shared_ptr<_Tp>* __p)
│ │ │ + │ │ │ +
│ │ │ +
118
│ │ │ +
119 /// @}
│ │ │ +
120
│ │ │ +
121 /**
│ │ │ +
122 * @brief Atomic load for shared_ptr objects.
│ │ │ +
123 * @param __p A non-null pointer to a shared_ptr object.
│ │ │ +
124 * @return @c *__p
│ │ │ +
125 *
│ │ │ +
126 * The memory order shall not be `memory_order_release` or
│ │ │ +
127 * `memory_order_acq_rel`.
│ │ │ +
128 * @{
│ │ │ +
129 */
│ │ │ +
130 template<typename _Tp>
│ │ │ +
131 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
132 inline shared_ptr<_Tp>
│ │ │ +
│ │ │ +
133 atomic_load_explicit(const shared_ptr<_Tp>* __p, memory_order)
│ │ │ +
134 {
│ │ │ +
135 _Sp_locker __lock{__p};
│ │ │ +
136 return *__p;
│ │ │ +
137 }
│ │ │ +
│ │ │
138
│ │ │ -
139 struct _Vector_impl
│ │ │ -
140 : public _Tp_alloc_type, public _Vector_impl_data
│ │ │ -
141 {
│ │ │ - │ │ │ -
143 _Vector_impl() _GLIBCXX_NOEXCEPT_IF(
│ │ │ - │ │ │ -
145#if __cpp_lib_concepts
│ │ │ - │ │ │ -
147#endif
│ │ │ -
148 : _Tp_alloc_type()
│ │ │ -
149 { }
│ │ │ -
150
│ │ │ - │ │ │ -
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>.
│ │ │ - │ │ │ -
160 _Vector_impl(_Vector_impl&& __x) noexcept
│ │ │ -
161 : _Tp_alloc_type(std::move(__x)), _Vector_impl_data(std::move(__x))
│ │ │ -
162 { }
│ │ │ -
163
│ │ │ - │ │ │ -
165 _Vector_impl(_Tp_alloc_type&& __a) noexcept
│ │ │ -
166 : _Tp_alloc_type(std::move(__a))
│ │ │ -
167 { }
│ │ │ -
168
│ │ │ - │ │ │ -
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 {
│ │ │ - │ │ │ -
180 ::size_type size_type;
│ │ │ -
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 {
│ │ │ - │ │ │ -
201 ::size_type size_type;
│ │ │ -
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
│ │ │ - │ │ │ -
210 return;
│ │ │ -
211#endif
│ │ │ - │ │ │ -
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 }
│ │ │ +
139 template<typename _Tp>
│ │ │ +
140 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
141 inline shared_ptr<_Tp>
│ │ │ +
│ │ │ +
142 atomic_load(const shared_ptr<_Tp>* __p)
│ │ │ +
143 { return std::atomic_load_explicit(__p, memory_order_seq_cst); }
│ │ │ +
│ │ │ +
144
│ │ │ +
145 template<typename _Tp, _Lock_policy _Lp>
│ │ │ +
146 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
147 inline __shared_ptr<_Tp, _Lp>
│ │ │ +
│ │ │ +
148 atomic_load_explicit(const __shared_ptr<_Tp, _Lp>* __p, memory_order)
│ │ │ +
149 {
│ │ │ +
150 _Sp_locker __lock{__p};
│ │ │ +
151 return *__p;
│ │ │ +
152 }
│ │ │ +
│ │ │ +
153
│ │ │ +
154 template<typename _Tp, _Lock_policy _Lp>
│ │ │ +
155 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
156 inline __shared_ptr<_Tp, _Lp>
│ │ │ +
│ │ │ +
157 atomic_load(const __shared_ptr<_Tp, _Lp>* __p)
│ │ │ +
158 { return std::atomic_load_explicit(__p, memory_order_seq_cst); }
│ │ │ +
│ │ │ +
159 /// @}
│ │ │ +
160
│ │ │ +
161 /**
│ │ │ +
162 * @brief Atomic store for shared_ptr objects.
│ │ │ +
163 * @param __p A non-null pointer to a shared_ptr object.
│ │ │ +
164 * @param __r The value to store.
│ │ │ +
165 *
│ │ │ +
166 * The memory order shall not be `memory_order_acquire` or
│ │ │ +
167 * `memory_order_acq_rel`.
│ │ │ +
168 * @{
│ │ │ +
169 */
│ │ │ +
170 template<typename _Tp>
│ │ │ +
171 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
172 inline void
│ │ │ +
│ │ │ +
173 atomic_store_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r,
│ │ │ + │ │ │ +
175 {
│ │ │ +
176 _Sp_locker __lock{__p};
│ │ │ +
177 __p->swap(__r); // use swap so that **__p not destroyed while lock held
│ │ │ +
178 }
│ │ │ +
│ │ │ +
179
│ │ │ +
180 template<typename _Tp>
│ │ │ +
181 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
182 inline void
│ │ │ +
│ │ │ +
183 atomic_store(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r)
│ │ │ +
184 { std::atomic_store_explicit(__p, std::move(__r), memory_order_seq_cst); }
│ │ │ +
│ │ │ +
185
│ │ │ +
186 template<typename _Tp, _Lock_policy _Lp>
│ │ │ +
187 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
188 inline void
│ │ │ +
│ │ │ +
189 atomic_store_explicit(__shared_ptr<_Tp, _Lp>* __p,
│ │ │ +
190 __shared_ptr<_Tp, _Lp> __r,
│ │ │ + │ │ │ +
192 {
│ │ │ +
193 _Sp_locker __lock{__p};
│ │ │ +
194 __p->swap(__r); // use swap so that **__p not destroyed while lock held
│ │ │ +
195 }
│ │ │ +
│ │ │ +
196
│ │ │ +
197 template<typename _Tp, _Lock_policy _Lp>
│ │ │ +
198 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
199 inline void
│ │ │ +
│ │ │ +
200 atomic_store(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r)
│ │ │ +
201 { std::atomic_store_explicit(__p, std::move(__r), memory_order_seq_cst); }
│ │ │ +
│ │ │ +
202 /// @}
│ │ │ +
203
│ │ │ +
204 /**
│ │ │ +
205 * @brief Atomic exchange for shared_ptr objects.
│ │ │ +
206 * @param __p A non-null pointer to a shared_ptr object.
│ │ │ +
207 * @param __r New value to store in `*__p`.
│ │ │ +
208 * @return The original value of `*__p`
│ │ │ +
209 * @{
│ │ │ +
210 */
│ │ │ +
211 template<typename _Tp>
│ │ │ +
212 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
213 inline shared_ptr<_Tp>
│ │ │ +
│ │ │ +
214 atomic_exchange_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r,
│ │ │ + │ │ │ +
216 {
│ │ │ +
217 _Sp_locker __lock{__p};
│ │ │ +
218 __p->swap(__r);
│ │ │ +
219 return __r;
│ │ │ +
220 }
│ │ │ +
│ │ │ +
221
│ │ │ +
222 template<typename _Tp>
│ │ │ +
223 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
224 inline shared_ptr<_Tp>
│ │ │ +
│ │ │ +
225 atomic_exchange(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r)
│ │ │ +
226 {
│ │ │ +
227 return std::atomic_exchange_explicit(__p, std::move(__r),
│ │ │ +
228 memory_order_seq_cst);
│ │ │ +
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
│ │ │ - │ │ │ -
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 {
│ │ │ - │ │ │ -
262 _Grow(_Vector_impl& __impl, size_type __n)
│ │ │ -
263 : _M_impl(__impl), _M_n(__n)
│ │ │ -
264 { _S_grow(_M_impl, __n); }
│ │ │ -
265
│ │ │ - │ │ │ -
267 ~_Grow() { if (_M_n) _S_shrink(_M_impl, _M_n); }
│ │ │ -
268
│ │ │ - │ │ │ -
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 };
│ │ │ -
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
│ │ │ - │ │ │ -
306 _Tp_alloc_type&
│ │ │ -
307 _M_get_Tp_allocator() _GLIBCXX_NOEXCEPT
│ │ │ -
308 { return this->_M_impl; }
│ │ │ +
231 template<typename _Tp, _Lock_policy _Lp>
│ │ │ +
232 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
233 inline __shared_ptr<_Tp, _Lp>
│ │ │ +
│ │ │ +
234 atomic_exchange_explicit(__shared_ptr<_Tp, _Lp>* __p,
│ │ │ +
235 __shared_ptr<_Tp, _Lp> __r,
│ │ │ + │ │ │ +
237 {
│ │ │ +
238 _Sp_locker __lock{__p};
│ │ │ +
239 __p->swap(__r);
│ │ │ +
240 return __r;
│ │ │ +
241 }
│ │ │ +
│ │ │ +
242
│ │ │ +
243 template<typename _Tp, _Lock_policy _Lp>
│ │ │ +
244 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
245 inline __shared_ptr<_Tp, _Lp>
│ │ │ +
│ │ │ +
246 atomic_exchange(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r)
│ │ │ +
247 {
│ │ │ +
248 return std::atomic_exchange_explicit(__p, std::move(__r),
│ │ │ +
249 memory_order_seq_cst);
│ │ │ +
250 }
│ │ │ +
│ │ │ +
251 /// @}
│ │ │ +
252
│ │ │ +
253 /**
│ │ │ +
254 * @brief Atomic compare-and-swap for shared_ptr objects.
│ │ │ +
255 * @param __p A non-null pointer to a shared_ptr object.
│ │ │ +
256 * @param __v A non-null pointer to a shared_ptr object.
│ │ │ +
257 * @param __w A non-null pointer to a shared_ptr object.
│ │ │ +
258 * @return True if `*__p` was equivalent to `*__v`, false otherwise.
│ │ │ +
259 *
│ │ │ +
260 * The memory order for failure shall not be `memory_order_release` or
│ │ │ +
261 * `memory_order_acq_rel`.
│ │ │ +
262 * @{
│ │ │ +
263 */
│ │ │ +
264 template<typename _Tp>
│ │ │ +
265 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
266 bool
│ │ │ +
│ │ │ +
267 atomic_compare_exchange_strong_explicit(shared_ptr<_Tp>* __p,
│ │ │ +
268 shared_ptr<_Tp>* __v,
│ │ │ +
269 shared_ptr<_Tp> __w,
│ │ │ + │ │ │ + │ │ │ +
272 {
│ │ │ +
273 shared_ptr<_Tp> __x; // goes out of scope after __lock
│ │ │ +
274 _Sp_locker __lock{__p, __v};
│ │ │ + │ │ │ +
276 if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p))
│ │ │ +
277 {
│ │ │ +
278 __x = std::move(*__p);
│ │ │ +
279 *__p = std::move(__w);
│ │ │ +
280 return true;
│ │ │ +
281 }
│ │ │ +
282 __x = std::move(*__v);
│ │ │ +
283 *__v = *__p;
│ │ │ +
284 return false;
│ │ │ +
285 }
│ │ │ +
│ │ │ +
286
│ │ │ +
287 template<typename _Tp>
│ │ │ +
288 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
289 inline bool
│ │ │ +
│ │ │ +
290 atomic_compare_exchange_strong(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v,
│ │ │ +
291 shared_ptr<_Tp> __w)
│ │ │ +
292 {
│ │ │ +
293 return std::atomic_compare_exchange_strong_explicit(__p, __v,
│ │ │ +
294 std::move(__w), memory_order_seq_cst, memory_order_seq_cst);
│ │ │ +
295 }
│ │ │ +
│ │ │ +
296
│ │ │ +
297 template<typename _Tp>
│ │ │ +
298 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
299 inline bool
│ │ │ +
│ │ │ +
300 atomic_compare_exchange_weak_explicit(shared_ptr<_Tp>* __p,
│ │ │ +
301 shared_ptr<_Tp>* __v,
│ │ │ +
302 shared_ptr<_Tp> __w,
│ │ │ + │ │ │ + │ │ │ +
305 {
│ │ │ +
306 return std::atomic_compare_exchange_strong_explicit(__p, __v,
│ │ │ + │ │ │ +
308 }
│ │ │ +
│ │ │
309
│ │ │ - │ │ │ -
311 const _Tp_alloc_type&
│ │ │ -
312 _M_get_Tp_allocator() const _GLIBCXX_NOEXCEPT
│ │ │ -
313 { return this->_M_impl; }
│ │ │ -
314
│ │ │ - │ │ │ -
316 allocator_type
│ │ │ -
│ │ │ -
317 get_allocator() const _GLIBCXX_NOEXCEPT
│ │ │ -
318 { return allocator_type(_M_get_Tp_allocator()); }
│ │ │ +
310 template<typename _Tp>
│ │ │ +
311 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
312 inline bool
│ │ │ +
│ │ │ +
313 atomic_compare_exchange_weak(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v,
│ │ │ +
314 shared_ptr<_Tp> __w)
│ │ │ +
315 {
│ │ │ +
316 return std::atomic_compare_exchange_weak_explicit(__p, __v,
│ │ │ +
317 std::move(__w), memory_order_seq_cst, memory_order_seq_cst);
│ │ │ +
318 }
│ │ │
│ │ │
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); }
│ │ │ +
320 template<typename _Tp, _Lock_policy _Lp>
│ │ │ +
321 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
322 bool
│ │ │ +
│ │ │ +
323 atomic_compare_exchange_strong_explicit(__shared_ptr<_Tp, _Lp>* __p,
│ │ │ +
324 __shared_ptr<_Tp, _Lp>* __v,
│ │ │ +
325 __shared_ptr<_Tp, _Lp> __w,
│ │ │ + │ │ │ + │ │ │ +
328 {
│ │ │ +
329 __shared_ptr<_Tp, _Lp> __x; // goes out of scope after __lock
│ │ │ +
330 _Sp_locker __lock{__p, __v};
│ │ │ + │ │ │ +
332 if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p))
│ │ │ +
333 {
│ │ │ +
334 __x = std::move(*__p);
│ │ │ +
335 *__p = std::move(__w);
│ │ │ +
336 return true;
│ │ │ +
337 }
│ │ │ +
338 __x = std::move(*__v);
│ │ │ +
339 *__v = *__p;
│ │ │ +
340 return false;
│ │ │ +
341 }
│ │ │ +
│ │ │
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 _M_deallocate(_M_impl._M_start,
│ │ │ -
376 _M_impl._M_end_of_storage - _M_impl._M_start);
│ │ │ -
377 }
│ │ │ -
378
│ │ │ -
379 public:
│ │ │ -
380 _Vector_impl _M_impl;
│ │ │ -
381
│ │ │ -
382 _GLIBCXX20_CONSTEXPR
│ │ │ -
383 pointer
│ │ │ -
384 _M_allocate(size_t __n)
│ │ │ -
385 {
│ │ │ - │ │ │ -
387 return __n != 0 ? _Tr::allocate(_M_impl, __n) : pointer();
│ │ │ -
388 }
│ │ │ -
389
│ │ │ -
390 _GLIBCXX20_CONSTEXPR
│ │ │ -
391 void
│ │ │ -
392 _M_deallocate(pointer __p, size_t __n)
│ │ │ -
393 {
│ │ │ - │ │ │ -
395 if (__p)
│ │ │ -
396 _Tr::deallocate(_M_impl, __p, __n);
│ │ │ -
397 }
│ │ │ -
398
│ │ │ -
399 protected:
│ │ │ -
400
│ │ │ -
401 _GLIBCXX20_CONSTEXPR
│ │ │ -
402 void
│ │ │ -
403 _M_create_storage(size_t __n)
│ │ │ -
404 {
│ │ │ -
405 this->_M_impl._M_start = this->_M_allocate(__n);
│ │ │ -
406 this->_M_impl._M_finish = this->_M_impl._M_start;
│ │ │ -
407 this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
│ │ │ -
408 }
│ │ │ -
409
│ │ │ -
410#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
411 // Called by insert_range, and indirectly by assign_range, append_range.
│ │ │ -
412 // Initializes new elements in storage at __ptr and updates __ptr to
│ │ │ -
413 // point after the last new element.
│ │ │ -
414 // Provides strong exception safety guarantee.
│ │ │ -
415 // Requires [ptr, ptr+distance(rg)) is a valid range.
│ │ │ -
416 template<ranges::input_range _Rg>
│ │ │ -
417 constexpr void
│ │ │ -
418 _M_append_range_to(_Rg&& __rg, pointer& __ptr)
│ │ │ -
419 {
│ │ │ -
420 __ptr = std::__uninitialized_copy_a(ranges::begin(__rg),
│ │ │ -
421 ranges::end(__rg),
│ │ │ -
422 __ptr, _M_get_Tp_allocator());
│ │ │ -
423 }
│ │ │ -
424
│ │ │ -
425 // Called by assign_range, append_range, insert_range.
│ │ │ -
426 // Requires capacity() >= size()+distance(rg).
│ │ │ -
427 template<ranges::input_range _Rg>
│ │ │ -
428 constexpr void
│ │ │ -
429 _M_append_range(_Rg&& __rg)
│ │ │ -
430 { _M_append_range_to(std::forward<_Rg>(__rg), _M_impl._M_finish); }
│ │ │ -
431#endif
│ │ │ -
432 };
│ │ │ -
│ │ │ -
433
│ │ │ -
434 /**
│ │ │ -
435 * @brief A standard container which offers fixed time access to
│ │ │ -
436 * individual elements in any order.
│ │ │ -
437 *
│ │ │ -
438 * @ingroup sequences
│ │ │ -
439 * @headerfile vector
│ │ │ -
440 * @since C++98
│ │ │ -
441 *
│ │ │ -
442 * @tparam _Tp Type of element.
│ │ │ -
443 * @tparam _Alloc Allocator type, defaults to allocator<_Tp>.
│ │ │ -
444 *
│ │ │ -
445 * Meets the requirements of a <a href="tables.html#65">container</a>, a
│ │ │ -
446 * <a href="tables.html#66">reversible container</a>, and a
│ │ │ -
447 * <a href="tables.html#67">sequence</a>, including the
│ │ │ -
448 * <a href="tables.html#68">optional sequence requirements</a> with the
│ │ │ -
449 * %exception of @c push_front and @c pop_front.
│ │ │ -
450 *
│ │ │ -
451 * In some terminology a %vector can be described as a dynamic
│ │ │ -
452 * C-style array, it offers fast and efficient access to individual
│ │ │ -
453 * elements in any order and saves the user from worrying about
│ │ │ -
454 * memory and size allocation. Subscripting ( @c [] ) access is
│ │ │ -
455 * also provided as with C-style arrays.
│ │ │ -
456 */
│ │ │ -
457 template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
│ │ │ -
│ │ │ -
458 class vector : protected _Vector_base<_Tp, _Alloc>
│ │ │ -
459 {
│ │ │ -
460#ifdef _GLIBCXX_CONCEPT_CHECKS
│ │ │ -
461 // Concept requirements.
│ │ │ -
462 typedef typename _Alloc::value_type _Alloc_value_type;
│ │ │ -
463# if __cplusplus < 201103L
│ │ │ -
464 __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
│ │ │ -
465# endif
│ │ │ -
466 __glibcxx_class_requires2(_Tp, _Alloc_value_type, _SameTypeConcept)
│ │ │ -
467#endif
│ │ │ -
468
│ │ │ -
469#if __cplusplus >= 201103L
│ │ │ -
470 static_assert(is_same<typename remove_cv<_Tp>::type, _Tp>::value,
│ │ │ -
471 "std::vector must have a non-const, non-volatile value_type");
│ │ │ -
472# if __cplusplus > 201703L || defined __STRICT_ANSI__
│ │ │ - │ │ │ -
474 "std::vector must have the same value_type as its allocator");
│ │ │ -
475# endif
│ │ │ -
476#endif
│ │ │ -
477
│ │ │ - │ │ │ -
479 typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
│ │ │ - │ │ │ -
481
│ │ │ -
482 public:
│ │ │ -
483 typedef _Tp value_type;
│ │ │ -
484 typedef typename _Base::pointer pointer;
│ │ │ -
485 typedef typename _Alloc_traits::const_pointer const_pointer;
│ │ │ -
486 typedef typename _Alloc_traits::reference reference;
│ │ │ -
487 typedef typename _Alloc_traits::const_reference const_reference;
│ │ │ -
488 typedef __gnu_cxx::__normal_iterator<pointer, vector> iterator;
│ │ │ -
489 typedef __gnu_cxx::__normal_iterator<const_pointer, vector>
│ │ │ -
490 const_iterator;
│ │ │ - │ │ │ - │ │ │ -
493 typedef size_t size_type;
│ │ │ - │ │ │ -
495 typedef _Alloc allocator_type;
│ │ │ -
496
│ │ │ -
497 private:
│ │ │ -
498#if __cplusplus >= 201103L
│ │ │ -
499 static constexpr bool
│ │ │ -
500 _S_nothrow_relocate(true_type)
│ │ │ -
501 {
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
506 }
│ │ │ -
507
│ │ │ -
508 static constexpr bool
│ │ │ -
509 _S_nothrow_relocate(false_type)
│ │ │ -
510 { return false; }
│ │ │ -
511
│ │ │ -
512 static constexpr bool
│ │ │ -
513 _S_use_relocate()
│ │ │ -
514 {
│ │ │ -
515 // Instantiating std::__relocate_a might cause an error outside the
│ │ │ -
516 // immediate context (in __relocate_object_a's noexcept-specifier),
│ │ │ -
517 // so only do it if we know the type can be move-inserted into *this.
│ │ │ -
518 return _S_nothrow_relocate(__is_move_insertable<_Tp_alloc_type>{});
│ │ │ -
519 }
│ │ │ -
520
│ │ │ -
521 static pointer
│ │ │ -
522 _S_do_relocate(pointer __first, pointer __last, pointer __result,
│ │ │ -
523 _Tp_alloc_type& __alloc, true_type) noexcept
│ │ │ -
524 {
│ │ │ -
525 return std::__relocate_a(__first, __last, __result, __alloc);
│ │ │ -
526 }
│ │ │ +
343 template<typename _Tp, _Lock_policy _Lp>
│ │ │ +
344 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
345 inline bool
│ │ │ +
│ │ │ +
346 atomic_compare_exchange_strong(__shared_ptr<_Tp, _Lp>* __p,
│ │ │ +
347 __shared_ptr<_Tp, _Lp>* __v,
│ │ │ +
348 __shared_ptr<_Tp, _Lp> __w)
│ │ │ +
349 {
│ │ │ +
350 return std::atomic_compare_exchange_strong_explicit(__p, __v,
│ │ │ +
351 std::move(__w), memory_order_seq_cst, memory_order_seq_cst);
│ │ │ +
352 }
│ │ │ +
│ │ │ +
353
│ │ │ +
354 template<typename _Tp, _Lock_policy _Lp>
│ │ │ +
355 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
356 inline bool
│ │ │ +
│ │ │ +
357 atomic_compare_exchange_weak_explicit(__shared_ptr<_Tp, _Lp>* __p,
│ │ │ +
358 __shared_ptr<_Tp, _Lp>* __v,
│ │ │ +
359 __shared_ptr<_Tp, _Lp> __w,
│ │ │ + │ │ │ + │ │ │ +
362 {
│ │ │ +
363 return std::atomic_compare_exchange_strong_explicit(__p, __v,
│ │ │ + │ │ │ +
365 }
│ │ │ +
│ │ │ +
366
│ │ │ +
367 template<typename _Tp, _Lock_policy _Lp>
│ │ │ +
368 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
369 inline bool
│ │ │ +
│ │ │ +
370 atomic_compare_exchange_weak(__shared_ptr<_Tp, _Lp>* __p,
│ │ │ +
371 __shared_ptr<_Tp, _Lp>* __v,
│ │ │ +
372 __shared_ptr<_Tp, _Lp> __w)
│ │ │ +
373 {
│ │ │ +
374 return std::atomic_compare_exchange_weak_explicit(__p, __v,
│ │ │ +
375 std::move(__w), memory_order_seq_cst, memory_order_seq_cst);
│ │ │ +
376 }
│ │ │ +
│ │ │ +
377 /// @}
│ │ │ +
378
│ │ │ +
379 /// @} group pointer_abstractions
│ │ │ +
380
│ │ │ +
381#ifdef __glibcxx_atomic_shared_ptr // C++ >= 20 && HOSTED
│ │ │ +
382 template<typename _Tp>
│ │ │ +
383 struct atomic;
│ │ │ +
384
│ │ │ +
385 /**
│ │ │ +
386 * @addtogroup pointer_abstractions
│ │ │ +
387 * @relates shared_ptr
│ │ │ +
388 * @{
│ │ │ +
389 */
│ │ │ +
390
│ │ │ +
391 template<typename _Tp>
│ │ │ +
392 class _Sp_atomic
│ │ │ +
393 {
│ │ │ +
394 using value_type = _Tp;
│ │ │ +
395
│ │ │ +
396 friend struct atomic<_Tp>;
│ │ │ +
397
│ │ │ +
398 // An atomic version of __shared_count<> and __weak_count<>.
│ │ │ +
399 // Stores a _Sp_counted_base<>* but uses the LSB as a lock.
│ │ │ +
400 struct _Atomic_count
│ │ │ +
401 {
│ │ │ +
402 // Either __shared_count<> or __weak_count<>
│ │ │ +
403 using __count_type = decltype(_Tp::_M_refcount);
│ │ │ +
404 using uintptr_t = __UINTPTR_TYPE__;
│ │ │ +
405
│ │ │ +
406 // _Sp_counted_base<>*
│ │ │ +
407 using pointer = decltype(__count_type::_M_pi);
│ │ │ +
408
│ │ │ +
409 // Ensure we can use the LSB as the lock bit.
│ │ │ +
410 static_assert(alignof(remove_pointer_t<pointer>) > 1);
│ │ │ +
411
│ │ │ +
412 constexpr _Atomic_count() noexcept = default;
│ │ │ +
413
│ │ │ +
414 explicit
│ │ │ +
415 _Atomic_count(__count_type&& __c) noexcept
│ │ │ +
416 : _M_val(reinterpret_cast<uintptr_t>(__c._M_pi))
│ │ │ +
417 {
│ │ │ +
418 __c._M_pi = nullptr;
│ │ │ +
419 }
│ │ │ +
420
│ │ │ +
421 ~_Atomic_count()
│ │ │ +
422 {
│ │ │ +
423 auto __val = _M_val.load(memory_order_relaxed);
│ │ │ +
424 _GLIBCXX_TSAN_MUTEX_DESTROY(&_M_val);
│ │ │ +
425 __glibcxx_assert(!(__val & _S_lock_bit));
│ │ │ +
426 if (auto __pi = reinterpret_cast<pointer>(__val))
│ │ │ +
427 {
│ │ │ +
428 if constexpr (__is_shared_ptr<_Tp>)
│ │ │ +
429 __pi->_M_release();
│ │ │ +
430 else
│ │ │ +
431 __pi->_M_weak_release();
│ │ │ +
432 }
│ │ │ +
433 }
│ │ │ +
434
│ │ │ +
435 _Atomic_count(const _Atomic_count&) = delete;
│ │ │ +
436 _Atomic_count& operator=(const _Atomic_count&) = delete;
│ │ │ +
437
│ │ │ +
438 // Precondition: Caller does not hold lock!
│ │ │ +
439 // Returns the raw pointer value without the lock bit set.
│ │ │ +
440 pointer
│ │ │ +
441 lock(memory_order __o) const noexcept
│ │ │ +
442 {
│ │ │ +
443 // To acquire the lock we flip the LSB from 0 to 1.
│ │ │ +
444
│ │ │ +
445 auto __current = _M_val.load(memory_order_relaxed);
│ │ │ +
446 while (__current & _S_lock_bit)
│ │ │ +
447 {
│ │ │ +
448#if __glibcxx_atomic_wait
│ │ │ +
449 __detail::__thread_relax();
│ │ │ +
450#endif
│ │ │ +
451 __current = _M_val.load(memory_order_relaxed);
│ │ │ +
452 }
│ │ │ +
453
│ │ │ +
454 _GLIBCXX_TSAN_MUTEX_TRY_LOCK(&_M_val);
│ │ │ +
455
│ │ │ +
456 while (!_M_val.compare_exchange_strong(__current,
│ │ │ +
457 __current | _S_lock_bit,
│ │ │ +
458 __o,
│ │ │ +
459 memory_order_relaxed))
│ │ │ +
460 {
│ │ │ +
461 _GLIBCXX_TSAN_MUTEX_TRY_LOCK_FAILED(&_M_val);
│ │ │ +
462#if __glibcxx_atomic_wait
│ │ │ +
463 __detail::__thread_relax();
│ │ │ +
464#endif
│ │ │ +
465 __current = __current & ~_S_lock_bit;
│ │ │ +
466 _GLIBCXX_TSAN_MUTEX_TRY_LOCK(&_M_val);
│ │ │ +
467 }
│ │ │ +
468 _GLIBCXX_TSAN_MUTEX_LOCKED(&_M_val);
│ │ │ +
469 return reinterpret_cast<pointer>(__current);
│ │ │ +
470 }
│ │ │ +
471
│ │ │ +
472 // Precondition: caller holds lock!
│ │ │ +
473 void
│ │ │ +
474 unlock(memory_order __o) const noexcept
│ │ │ +
475 {
│ │ │ +
476 _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK(&_M_val);
│ │ │ +
477 _M_val.fetch_sub(1, __o);
│ │ │ +
478 _GLIBCXX_TSAN_MUTEX_POST_UNLOCK(&_M_val);
│ │ │ +
479 }
│ │ │ +
480
│ │ │ +
481 // Swaps the values of *this and __c, and unlocks *this.
│ │ │ +
482 // Precondition: caller holds lock!
│ │ │ +
483 void
│ │ │ +
484 _M_swap_unlock(__count_type& __c, memory_order __o) noexcept
│ │ │ +
485 {
│ │ │ +
486 if (__o != memory_order_seq_cst)
│ │ │ +
487 __o = memory_order_release;
│ │ │ +
488 auto __x = reinterpret_cast<uintptr_t>(__c._M_pi);
│ │ │ +
489 _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK(&_M_val);
│ │ │ +
490 __x = _M_val.exchange(__x, __o);
│ │ │ +
491 _GLIBCXX_TSAN_MUTEX_POST_UNLOCK(&_M_val);
│ │ │ +
492 __c._M_pi = reinterpret_cast<pointer>(__x & ~_S_lock_bit);
│ │ │ +
493 }
│ │ │ +
494
│ │ │ +
495#if __glibcxx_atomic_wait
│ │ │ +
496 // Precondition: caller holds lock!
│ │ │ +
497 void
│ │ │ +
498 _M_wait_unlock(memory_order __o) const noexcept
│ │ │ +
499 {
│ │ │ +
500 _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK(&_M_val);
│ │ │ +
501 auto __v = _M_val.fetch_sub(1, memory_order_relaxed);
│ │ │ +
502 _GLIBCXX_TSAN_MUTEX_POST_UNLOCK(&_M_val);
│ │ │ +
503 _M_val.wait(__v & ~_S_lock_bit, __o);
│ │ │ +
504 }
│ │ │ +
505
│ │ │ +
506 void
│ │ │ +
507 notify_one() noexcept
│ │ │ +
508 {
│ │ │ +
509 _GLIBCXX_TSAN_MUTEX_PRE_SIGNAL(&_M_val);
│ │ │ +
510 _M_val.notify_one();
│ │ │ +
511 _GLIBCXX_TSAN_MUTEX_POST_SIGNAL(&_M_val);
│ │ │ +
512 }
│ │ │ +
513
│ │ │ +
514 void
│ │ │ +
515 notify_all() noexcept
│ │ │ +
516 {
│ │ │ +
517 _GLIBCXX_TSAN_MUTEX_PRE_SIGNAL(&_M_val);
│ │ │ +
518 _M_val.notify_all();
│ │ │ +
519 _GLIBCXX_TSAN_MUTEX_POST_SIGNAL(&_M_val);
│ │ │ +
520 }
│ │ │ +
521#endif
│ │ │ +
522
│ │ │ +
523 private:
│ │ │ +
524 mutable __atomic_base<uintptr_t> _M_val{0};
│ │ │ +
525 static constexpr uintptr_t _S_lock_bit{1};
│ │ │ +
526 };
│ │ │
527
│ │ │ -
528 static pointer
│ │ │ -
529 _S_do_relocate(pointer, pointer, pointer __result,
│ │ │ -
530 _Tp_alloc_type&, false_type) noexcept
│ │ │ -
531 { return __result; }
│ │ │ -
532
│ │ │ -
533 static _GLIBCXX20_CONSTEXPR pointer
│ │ │ -
534 _S_relocate(pointer __first, pointer __last, pointer __result,
│ │ │ -
535 _Tp_alloc_type& __alloc) noexcept
│ │ │ -
536 {
│ │ │ -
537#if __cpp_if_constexpr
│ │ │ -
538 // All callers have already checked _S_use_relocate() so just do it.
│ │ │ -
539 return std::__relocate_a(__first, __last, __result, __alloc);
│ │ │ -
540#else
│ │ │ -
541 using __do_it = __bool_constant<_S_use_relocate()>;
│ │ │ -
542 return _S_do_relocate(__first, __last, __result, __alloc, __do_it{});
│ │ │ -
543#endif
│ │ │ -
544 }
│ │ │ -
545#endif // C++11
│ │ │ -
546
│ │ │ -
547 protected:
│ │ │ -
548 using _Base::_M_allocate;
│ │ │ -
549 using _Base::_M_deallocate;
│ │ │ -
550 using _Base::_M_impl;
│ │ │ -
551 using _Base::_M_get_Tp_allocator;
│ │ │ +
528 typename _Tp::element_type* _M_ptr = nullptr;
│ │ │ +
529 _Atomic_count _M_refcount;
│ │ │ +
530
│ │ │ +
531 static typename _Atomic_count::pointer
│ │ │ +
532 _S_add_ref(typename _Atomic_count::pointer __p)
│ │ │ +
533 {
│ │ │ +
534 if (__p)
│ │ │ +
535 {
│ │ │ +
536 if constexpr (__is_shared_ptr<_Tp>)
│ │ │ +
537 __p->_M_add_ref_copy();
│ │ │ +
538 else
│ │ │ +
539 __p->_M_weak_add_ref();
│ │ │ +
540 }
│ │ │ +
541 return __p;
│ │ │ +
542 }
│ │ │ +
543
│ │ │ +
544 constexpr _Sp_atomic() noexcept = default;
│ │ │ +
545
│ │ │ +
546 explicit
│ │ │ +
547 _Sp_atomic(value_type __r) noexcept
│ │ │ +
548 : _M_ptr(__r._M_ptr), _M_refcount(std::move(__r._M_refcount))
│ │ │ +
549 { }
│ │ │ +
550
│ │ │ +
551 ~_Sp_atomic() = default;
│ │ │
552
│ │ │ -
553 public:
│ │ │ -
554 // [23.2.4.1] construct/copy/destroy
│ │ │ -
555 // (assign() and get_allocator() are also listed in this section)
│ │ │ -
556
│ │ │ -
557 /**
│ │ │ -
558 * @brief Creates a %vector with no elements.
│ │ │ -
559 */
│ │ │ -
560#if __cplusplus >= 201103L
│ │ │ -
561 vector() = default;
│ │ │ -
562#else
│ │ │ -
563 vector() { }
│ │ │ -
564#endif
│ │ │ -
565
│ │ │ -
566 /**
│ │ │ -
567 * @brief Creates a %vector with no elements.
│ │ │ -
568 * @param __a An allocator object.
│ │ │ -
569 */
│ │ │ -
570 explicit
│ │ │ - │ │ │ -
│ │ │ -
572 vector(const allocator_type& __a) _GLIBCXX_NOEXCEPT
│ │ │ -
573 : _Base(__a) { }
│ │ │ -
│ │ │ -
574
│ │ │ -
575#if __cplusplus >= 201103L
│ │ │ -
576 /**
│ │ │ -
577 * @brief Creates a %vector with default constructed elements.
│ │ │ -
578 * @param __n The number of elements to initially create.
│ │ │ -
579 * @param __a An allocator.
│ │ │ -
580 *
│ │ │ -
581 * This constructor fills the %vector with @a __n default
│ │ │ -
582 * constructed elements.
│ │ │ -
583 */
│ │ │ -
584 explicit
│ │ │ - │ │ │ -
│ │ │ -
586 vector(size_type __n, const allocator_type& __a = allocator_type())
│ │ │ -
587 : _Base(_S_check_init_len(__n, __a), __a)
│ │ │ -
588 { _M_default_initialize(__n); }
│ │ │ -
│ │ │ -
589
│ │ │ -
590 /**
│ │ │ -
591 * @brief Creates a %vector with copies of an exemplar element.
│ │ │ -
592 * @param __n The number of elements to initially create.
│ │ │ -
593 * @param __value An element to copy.
│ │ │ -
594 * @param __a An allocator.
│ │ │ -
595 *
│ │ │ -
596 * This constructor fills the %vector with @a __n copies of @a __value.
│ │ │ -
597 */
│ │ │ - │ │ │ -
│ │ │ -
599 vector(size_type __n, const value_type& __value,
│ │ │ -
600 const allocator_type& __a = allocator_type())
│ │ │ -
601 : _Base(_S_check_init_len(__n, __a), __a)
│ │ │ -
602 { _M_fill_initialize(__n, __value); }
│ │ │ -
│ │ │ -
603#else
│ │ │ -
604 /**
│ │ │ -
605 * @brief Creates a %vector with copies of an exemplar element.
│ │ │ -
606 * @param __n The number of elements to initially create.
│ │ │ -
607 * @param __value An element to copy.
│ │ │ -
608 * @param __a An allocator.
│ │ │ -
609 *
│ │ │ -
610 * This constructor fills the %vector with @a __n copies of @a __value.
│ │ │ -
611 */
│ │ │ -
612 explicit
│ │ │ -
613 vector(size_type __n, const value_type& __value = value_type(),
│ │ │ -
614 const allocator_type& __a = allocator_type())
│ │ │ -
615 : _Base(_S_check_init_len(__n, __a), __a)
│ │ │ -
616 { _M_fill_initialize(__n, __value); }
│ │ │ -
617#endif
│ │ │ -
618
│ │ │ -
619 /**
│ │ │ -
620 * @brief %Vector copy constructor.
│ │ │ -
621 * @param __x A %vector of identical element and allocator types.
│ │ │ -
622 *
│ │ │ -
623 * All the elements of @a __x are copied, but any unused capacity in
│ │ │ -
624 * @a __x will not be copied
│ │ │ -
625 * (i.e. capacity() == size() in the new %vector).
│ │ │ -
626 *
│ │ │ -
627 * The newly-created %vector uses a copy of the allocator object used
│ │ │ -
628 * by @a __x (unless the allocator traits dictate a different object).
│ │ │ -
629 */
│ │ │ -
630 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ -
631 vector(const vector& __x)
│ │ │ -
632 : _Base(__x.size(),
│ │ │ -
633 _Alloc_traits::_S_select_on_copy(__x._M_get_Tp_allocator()))
│ │ │ -
634 {
│ │ │ -
635 this->_M_impl._M_finish =
│ │ │ - │ │ │ -
637 this->_M_impl._M_start,
│ │ │ -
638 _M_get_Tp_allocator());
│ │ │ -
639 }
│ │ │ -
│ │ │ -
640
│ │ │ -
641#if __cplusplus >= 201103L
│ │ │ -
642 /**
│ │ │ -
643 * @brief %Vector move constructor.
│ │ │ -
644 *
│ │ │ -
645 * The newly-created %vector contains the exact contents of the
│ │ │ -
646 * moved instance.
│ │ │ -
647 * The contents of the moved instance are a valid, but unspecified
│ │ │ -
648 * %vector.
│ │ │ -
649 */
│ │ │ -
650 vector(vector&&) noexcept = default;
│ │ │ -
651
│ │ │ -
652 /// Copy constructor with alternative allocator
│ │ │ - │ │ │ -
│ │ │ -
654 vector(const vector& __x, const __type_identity_t<allocator_type>& __a)
│ │ │ -
655 : _Base(__x.size(), __a)
│ │ │ -
656 {
│ │ │ -
657 this->_M_impl._M_finish =
│ │ │ -
658 std::__uninitialized_copy_a(__x.begin(), __x.end(),
│ │ │ -
659 this->_M_impl._M_start,
│ │ │ -
660 _M_get_Tp_allocator());
│ │ │ -
661 }
│ │ │ -
│ │ │ -
662
│ │ │ -
663 private:
│ │ │ - │ │ │ -
665 vector(vector&& __rv, const allocator_type& __m, true_type) noexcept
│ │ │ -
666 : _Base(__m, std::move(__rv))
│ │ │ -
667 { }
│ │ │ -
668
│ │ │ -
669 _GLIBCXX20_CONSTEXPR
│ │ │ -
670 vector(vector&& __rv, const allocator_type& __m, false_type)
│ │ │ -
671 : _Base(__m)
│ │ │ -
672 {
│ │ │ -
673 if (__rv.get_allocator() == __m)
│ │ │ -
674 this->_M_impl._M_swap_data(__rv._M_impl);
│ │ │ -
675 else if (!__rv.empty())
│ │ │ -
676 {
│ │ │ -
677 this->_M_create_storage(__rv.size());
│ │ │ -
678 this->_M_impl._M_finish =
│ │ │ -
679 std::__uninitialized_move_a(__rv.begin(), __rv.end(),
│ │ │ -
680 this->_M_impl._M_start,
│ │ │ -
681 _M_get_Tp_allocator());
│ │ │ -
682 __rv.clear();
│ │ │ -
683 }
│ │ │ -
684 }
│ │ │ -
685
│ │ │ -
686 public:
│ │ │ -
687 /// Move constructor with alternative allocator
│ │ │ -
688 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ - │ │ │ -
690 noexcept( noexcept(
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
694 { }
│ │ │ -
│ │ │ -
695
│ │ │ -
696 /**
│ │ │ -
697 * @brief Builds a %vector from an initializer list.
│ │ │ -
698 * @param __l An initializer_list.
│ │ │ -
699 * @param __a An allocator.
│ │ │ -
700 *
│ │ │ -
701 * Create a %vector consisting of copies of the elements in the
│ │ │ -
702 * initializer_list @a __l.
│ │ │ -
703 *
│ │ │ -
704 * This will call the element type's copy constructor N times
│ │ │ -
705 * (where N is @a __l.size()) and do no memory reallocation.
│ │ │ -
706 */
│ │ │ -
707 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ - │ │ │ -
709 const allocator_type& __a = allocator_type())
│ │ │ -
710 : _Base(__a)
│ │ │ -
711 {
│ │ │ -
712 _M_range_initialize_n(__l.begin(), __l.end(), __l.size());
│ │ │ -
713 }
│ │ │ -
│ │ │ -
714#endif
│ │ │ -
715
│ │ │ -
716 /**
│ │ │ -
717 * @brief Builds a %vector from a range.
│ │ │ -
718 * @param __first An input iterator.
│ │ │ -
719 * @param __last An input iterator.
│ │ │ -
720 * @param __a An allocator.
│ │ │ -
721 *
│ │ │ -
722 * Create a %vector consisting of copies of the elements from
│ │ │ -
723 * [first,last).
│ │ │ -
724 *
│ │ │ -
725 * If the iterators are forward, bidirectional, or
│ │ │ -
726 * random-access, then this will call the elements' copy
│ │ │ -
727 * constructor N times (where N is distance(first,last)) and do
│ │ │ -
728 * no memory reallocation. But if only input iterators are
│ │ │ -
729 * used, then this will do at most 2N calls to the copy
│ │ │ -
730 * constructor, and logN memory reallocations.
│ │ │ -
731 */
│ │ │ -
732#if __cplusplus >= 201103L
│ │ │ -
733 template<typename _InputIterator,
│ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ -
737 const allocator_type& __a = allocator_type())
│ │ │ -
738 : _Base(__a)
│ │ │ -
739 {
│ │ │ -
740#if __glibcxx_concepts // C++ >= C++20
│ │ │ - │ │ │ - │ │ │ -
743 {
│ │ │ -
744 const auto __n
│ │ │ -
745 = static_cast<size_type>(ranges::distance(__first, __last));
│ │ │ -
746 _M_range_initialize_n(__first, __last, __n);
│ │ │ -
747 return;
│ │ │ -
748 }
│ │ │ -
749 else
│ │ │ -
750#endif
│ │ │ -
751 _M_range_initialize(__first, __last,
│ │ │ -
752 std::__iterator_category(__first));
│ │ │ -
753 }
│ │ │ -
│ │ │ -
754#else
│ │ │ -
755 template<typename _InputIterator>
│ │ │ -
756 vector(_InputIterator __first, _InputIterator __last,
│ │ │ -
757 const allocator_type& __a = allocator_type())
│ │ │ -
758 : _Base(__a)
│ │ │ -
759 {
│ │ │ -
760 // Check whether it's an integral type. If so, it's not an iterator.
│ │ │ -
761 typedef typename std::__is_integer<_InputIterator>::__type _Integral;
│ │ │ -
762 _M_initialize_dispatch(__first, __last, _Integral());
│ │ │ -
763 }
│ │ │ -
764#endif
│ │ │ -
765
│ │ │ -
766#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
767 /**
│ │ │ -
768 * @brief Construct a vector from a range.
│ │ │ -
769 * @param __rg A range of values that are convertible to `bool`.
│ │ │ -
770 * @since C++23
│ │ │ -
771 */
│ │ │ -
772 template<__detail::__container_compatible_range<_Tp> _Rg>
│ │ │ -
773 constexpr
│ │ │ -
774 vector(from_range_t, _Rg&& __rg, const _Alloc& __a = _Alloc())
│ │ │ -
775 : vector(__a)
│ │ │ -
776 {
│ │ │ -
777 if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>)
│ │ │ -
778 {
│ │ │ -
779 const auto __n = static_cast<size_type>(ranges::distance(__rg));
│ │ │ -
780 _M_range_initialize_n(ranges::begin(__rg), ranges::end(__rg),
│ │ │ -
781 __n);
│ │ │ -
782 }
│ │ │ -
783 else
│ │ │ -
784 {
│ │ │ -
785 auto __first = ranges::begin(__rg);
│ │ │ -
786 const auto __last = ranges::end(__rg);
│ │ │ -
787 for (; __first != __last; ++__first)
│ │ │ -
788 emplace_back(*__first);
│ │ │ -
789 }
│ │ │ -
790 }
│ │ │ -
791#endif
│ │ │ -
792
│ │ │ -
793 /**
│ │ │ -
794 * The dtor only erases the elements, and note that if the
│ │ │ -
795 * elements themselves are pointers, the pointed-to memory is
│ │ │ -
796 * not touched in any way. Managing the pointer is the user's
│ │ │ -
797 * responsibility.
│ │ │ -
798 */
│ │ │ -
799 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ - │ │ │ -
801 {
│ │ │ -
802 std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
│ │ │ -
803 _M_get_Tp_allocator());
│ │ │ -
804 _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC;
│ │ │ -
805 }
│ │ │ -
│ │ │ -
806
│ │ │ -
807 /**
│ │ │ -
808 * @brief %Vector assignment operator.
│ │ │ -
809 * @param __x A %vector of identical element and allocator types.
│ │ │ -
810 *
│ │ │ -
811 * All the elements of @a __x are copied, but any unused capacity in
│ │ │ -
812 * @a __x will not be copied.
│ │ │ -
813 *
│ │ │ -
814 * Whether the allocator is copied depends on the allocator traits.
│ │ │ -
815 */
│ │ │ - │ │ │ -
817 vector&
│ │ │ -
818 operator=(const vector& __x);
│ │ │ -
819
│ │ │ -
820#if __cplusplus >= 201103L
│ │ │ -
821 /**
│ │ │ -
822 * @brief %Vector move assignment operator.
│ │ │ -
823 * @param __x A %vector of identical element and allocator types.
│ │ │ -
824 *
│ │ │ -
825 * The contents of @a __x are moved into this %vector (without copying,
│ │ │ -
826 * if the allocators permit it).
│ │ │ -
827 * Afterwards @a __x is a valid, but unspecified %vector.
│ │ │ -
828 *
│ │ │ -
829 * Whether the allocator is moved depends on the allocator traits.
│ │ │ -
830 */
│ │ │ - │ │ │ -
832 vector&
│ │ │ -
│ │ │ -
833 operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move())
│ │ │ -
834 {
│ │ │ -
835 constexpr bool __move_storage =
│ │ │ -
836 _Alloc_traits::_S_propagate_on_move_assign()
│ │ │ -
837 || _Alloc_traits::_S_always_equal();
│ │ │ -
838 _M_move_assign(std::move(__x), __bool_constant<__move_storage>());
│ │ │ -
839 return *this;
│ │ │ -
840 }
│ │ │ -
│ │ │ -
841
│ │ │ -
842 /**
│ │ │ -
843 * @brief %Vector list assignment operator.
│ │ │ -
844 * @param __l An initializer_list.
│ │ │ -
845 *
│ │ │ -
846 * This function fills a %vector with copies of the elements in the
│ │ │ -
847 * initializer list @a __l.
│ │ │ -
848 *
│ │ │ -
849 * Note that the assignment completely changes the %vector and
│ │ │ -
850 * that the resulting %vector's size is the same as the number
│ │ │ -
851 * of elements assigned.
│ │ │ -
852 */
│ │ │ - │ │ │ -
854 vector&
│ │ │ -
│ │ │ - │ │ │ -
856 {
│ │ │ -
857 this->_M_assign_aux(__l.begin(), __l.end(),
│ │ │ - │ │ │ -
859 return *this;
│ │ │ -
860 }
│ │ │ -
│ │ │ -
861#endif
│ │ │ -
862
│ │ │ -
863 /**
│ │ │ -
864 * @brief Assigns a given value to a %vector.
│ │ │ -
865 * @param __n Number of elements to be assigned.
│ │ │ -
866 * @param __val Value to be assigned.
│ │ │ -
867 *
│ │ │ -
868 * This function fills a %vector with @a __n copies of the given
│ │ │ -
869 * value. Note that the assignment completely changes the
│ │ │ -
870 * %vector and that the resulting %vector's size is the same as
│ │ │ -
871 * the number of elements assigned.
│ │ │ -
872 */
│ │ │ - │ │ │ -
874 void
│ │ │ -
│ │ │ -
875 assign(size_type __n, const value_type& __val)
│ │ │ -
876 { _M_fill_assign(__n, __val); }
│ │ │ -
│ │ │ -
877
│ │ │ -
878 /**
│ │ │ -
879 * @brief Assigns a range to a %vector.
│ │ │ -
880 * @param __first An input iterator.
│ │ │ -
881 * @param __last An input iterator.
│ │ │ -
882 *
│ │ │ -
883 * This function fills a %vector with copies of the elements in the
│ │ │ -
884 * range [__first,__last).
│ │ │ -
885 *
│ │ │ -
886 * Note that the assignment completely changes the %vector and
│ │ │ -
887 * that the resulting %vector's size is the same as the number
│ │ │ -
888 * of elements assigned.
│ │ │ -
889 */
│ │ │ -
890#if __cplusplus >= 201103L
│ │ │ -
891 template<typename _InputIterator,
│ │ │ - │ │ │ - │ │ │ -
894 void
│ │ │ -
│ │ │ - │ │ │ -
896 { _M_assign_aux(__first, __last, std::__iterator_category(__first)); }
│ │ │ -
│ │ │ -
897#else
│ │ │ -
898 template<typename _InputIterator>
│ │ │ -
899 void
│ │ │ -
900 assign(_InputIterator __first, _InputIterator __last)
│ │ │ -
901 {
│ │ │ -
902 // Check whether it's an integral type. If so, it's not an iterator.
│ │ │ -
903 typedef typename std::__is_integer<_InputIterator>::__type _Integral;
│ │ │ -
904 _M_assign_dispatch(__first, __last, _Integral());
│ │ │ -
905 }
│ │ │ -
906#endif
│ │ │ -
907
│ │ │ -
908#if __cplusplus >= 201103L
│ │ │ -
909 /**
│ │ │ -
910 * @brief Assigns an initializer list to a %vector.
│ │ │ -
911 * @param __l An initializer_list.
│ │ │ -
912 *
│ │ │ -
913 * This function fills a %vector with copies of the elements in the
│ │ │ -
914 * initializer list @a __l.
│ │ │ -
915 *
│ │ │ -
916 * Note that the assignment completely changes the %vector and
│ │ │ -
917 * that the resulting %vector's size is the same as the number
│ │ │ -
918 * of elements assigned.
│ │ │ -
919 */
│ │ │ -
920 _GLIBCXX20_CONSTEXPR
│ │ │ -
921 void
│ │ │ -
│ │ │ - │ │ │ -
923 {
│ │ │ -
924 this->_M_assign_aux(__l.begin(), __l.end(),
│ │ │ - │ │ │ -
926 }
│ │ │ -
│ │ │ -
927#endif
│ │ │ -
928
│ │ │ -
929#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
930 /**
│ │ │ -
931 * @brief Assign a range to the vector.
│ │ │ -
932 * @param __rg A range of values that are convertible to `value_type`.
│ │ │ -
933 * @pre `__rg` and `*this` do not overlap.
│ │ │ -
934 * @since C++23
│ │ │ -
935 */
│ │ │ -
936 template<__detail::__container_compatible_range<_Tp> _Rg>
│ │ │ -
937 constexpr void
│ │ │ - │ │ │ -
939 {
│ │ │ - │ │ │ -
941
│ │ │ -
942 if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>)
│ │ │ -
943 {
│ │ │ -
944 const auto __n = size_type(ranges::distance(__rg));
│ │ │ -
945 if (__n <= size())
│ │ │ -
946 {
│ │ │ -
947 auto __res = ranges::copy(__rg, this->_M_impl._M_start);
│ │ │ -
948 _M_erase_at_end(__res.out);
│ │ │ -
949 return;
│ │ │ -
950 }
│ │ │ -
951
│ │ │ -
952 reserve(__n);
│ │ │ -
953 auto __first = ranges::copy_n(ranges::begin(__rg), size(),
│ │ │ -
954 this->_M_impl._M_start).in;
│ │ │ -
955 [[maybe_unused]] const auto __diff = __n - size();
│ │ │ -
956 _GLIBCXX_ASAN_ANNOTATE_GROW(__diff);
│ │ │ -
957 _Base::_M_append_range(ranges::subrange(std::move(__first),
│ │ │ -
958 ranges::end(__rg)));
│ │ │ -
959 _GLIBCXX_ASAN_ANNOTATE_GREW(__diff);
│ │ │ -
960 }
│ │ │ -
961 else // input_range<_Rg> && !sized_range<_Rg>
│ │ │ -
962 {
│ │ │ -
963 auto __first = ranges::begin(__rg);
│ │ │ -
964 const auto __last = ranges::end(__rg);
│ │ │ -
965 pointer __ptr = this->_M_impl._M_start;
│ │ │ -
966 pointer const __end = this->_M_impl._M_finish;
│ │ │ -
967
│ │ │ -
968 while (__ptr < __end && __first != __last)
│ │ │ -
969 {
│ │ │ -
970 *__ptr = *__first;
│ │ │ -
971 ++__ptr;
│ │ │ -
972 ++__first;
│ │ │ -
973 }
│ │ │ -
974
│ │ │ -
975 if (__first == __last)
│ │ │ -
976 _M_erase_at_end(__ptr);
│ │ │ -
977 else
│ │ │ -
978 {
│ │ │ -
979 do
│ │ │ -
980 emplace_back(*__first);
│ │ │ -
981 while (++__first != __last);
│ │ │ -
982 }
│ │ │ -
983 }
│ │ │ -
984 }
│ │ │ -
985#endif // containers_ranges
│ │ │ -
986
│ │ │ -
987 /// Get a copy of the memory allocation object.
│ │ │ -
│ │ │ -
988 using _Base::get_allocator;
│ │ │ -
989
│ │ │ -
990 // iterators
│ │ │ -
991 /**
│ │ │ -
992 * Returns a read/write iterator that points to the first
│ │ │ -
993 * element in the %vector. Iteration is done in ordinary
│ │ │ -
994 * element order.
│ │ │ -
995 */
│ │ │ -
996 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
997 iterator
│ │ │ -
│ │ │ - │ │ │ -
999 { return iterator(this->_M_impl._M_start); }
│ │ │ -
│ │ │ -
1000
│ │ │ -
1001 /**
│ │ │ -
1002 * Returns a read-only (constant) iterator that points to the
│ │ │ -
1003 * first element in the %vector. Iteration is done in ordinary
│ │ │ -
1004 * element order.
│ │ │ -
1005 */
│ │ │ -
1006 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1007 const_iterator
│ │ │ -
│ │ │ - │ │ │ -
1009 { return const_iterator(this->_M_impl._M_start); }
│ │ │ -
│ │ │ -
1010
│ │ │ -
1011 /**
│ │ │ -
1012 * Returns a read/write iterator that points one past the last
│ │ │ -
1013 * element in the %vector. Iteration is done in ordinary
│ │ │ -
1014 * element order.
│ │ │ -
1015 */
│ │ │ -
1016 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1017 iterator
│ │ │ -
│ │ │ - │ │ │ -
1019 { return iterator(this->_M_impl._M_finish); }
│ │ │ -
│ │ │ -
1020
│ │ │ -
1021 /**
│ │ │ -
1022 * Returns a read-only (constant) iterator that points one past
│ │ │ -
1023 * the last element in the %vector. Iteration is done in
│ │ │ -
1024 * ordinary element order.
│ │ │ -
1025 */
│ │ │ -
1026 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1027 const_iterator
│ │ │ -
│ │ │ - │ │ │ -
1029 { return const_iterator(this->_M_impl._M_finish); }
│ │ │ -
│ │ │ -
1030
│ │ │ -
1031 /**
│ │ │ -
1032 * Returns a read/write reverse iterator that points to the
│ │ │ -
1033 * last element in the %vector. Iteration is done in reverse
│ │ │ -
1034 * element order.
│ │ │ -
1035 */
│ │ │ -
1036 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1039 { return reverse_iterator(end()); }
│ │ │ -
│ │ │ -
1040
│ │ │ -
1041 /**
│ │ │ -
1042 * Returns a read-only (constant) reverse iterator that points
│ │ │ -
1043 * to the last element in the %vector. Iteration is done in
│ │ │ -
1044 * reverse element order.
│ │ │ -
1045 */
│ │ │ -
1046 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1047 const_reverse_iterator
│ │ │ -
│ │ │ - │ │ │ -
1049 { return const_reverse_iterator(end()); }
│ │ │ -
│ │ │ -
1050
│ │ │ -
1051 /**
│ │ │ -
1052 * Returns a read/write reverse iterator that points to one
│ │ │ -
1053 * before the first element in the %vector. Iteration is done
│ │ │ -
1054 * in reverse element order.
│ │ │ -
1055 */
│ │ │ -
1056 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1059 { return reverse_iterator(begin()); }
│ │ │ -
│ │ │ -
1060
│ │ │ -
1061 /**
│ │ │ -
1062 * Returns a read-only (constant) reverse iterator that points
│ │ │ -
1063 * to one before the first element in the %vector. Iteration
│ │ │ -
1064 * is done in reverse element order.
│ │ │ -
1065 */
│ │ │ -
1066 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1067 const_reverse_iterator
│ │ │ -
│ │ │ - │ │ │ -
1069 { return const_reverse_iterator(begin()); }
│ │ │ -
│ │ │ -
1070
│ │ │ -
1071#if __cplusplus >= 201103L
│ │ │ -
1072 /**
│ │ │ -
1073 * Returns a read-only (constant) iterator that points to the
│ │ │ -
1074 * first element in the %vector. Iteration is done in ordinary
│ │ │ -
1075 * element order.
│ │ │ -
1076 */
│ │ │ - │ │ │ -
1078 const_iterator
│ │ │ -
│ │ │ -
1079 cbegin() const noexcept
│ │ │ -
1080 { return const_iterator(this->_M_impl._M_start); }
│ │ │ -
│ │ │ -
1081
│ │ │ -
1082 /**
│ │ │ -
1083 * Returns a read-only (constant) iterator that points one past
│ │ │ -
1084 * the last element in the %vector. Iteration is done in
│ │ │ -
1085 * ordinary element order.
│ │ │ -
1086 */
│ │ │ - │ │ │ -
1088 const_iterator
│ │ │ -
│ │ │ -
1089 cend() const noexcept
│ │ │ -
1090 { return const_iterator(this->_M_impl._M_finish); }
│ │ │ -
│ │ │ -
1091
│ │ │ -
1092 /**
│ │ │ -
1093 * Returns a read-only (constant) reverse iterator that points
│ │ │ -
1094 * to the last element in the %vector. Iteration is done in
│ │ │ -
1095 * reverse element order.
│ │ │ -
1096 */
│ │ │ - │ │ │ -
1098 const_reverse_iterator
│ │ │ -
│ │ │ -
1099 crbegin() const noexcept
│ │ │ -
1100 { return const_reverse_iterator(end()); }
│ │ │ -
│ │ │ -
1101
│ │ │ -
1102 /**
│ │ │ -
1103 * Returns a read-only (constant) reverse iterator that points
│ │ │ -
1104 * to one before the first element in the %vector. Iteration
│ │ │ -
1105 * is done in reverse element order.
│ │ │ -
1106 */
│ │ │ - │ │ │ -
1108 const_reverse_iterator
│ │ │ -
│ │ │ -
1109 crend() const noexcept
│ │ │ -
1110 { return const_reverse_iterator(begin()); }
│ │ │ -
│ │ │ -
1111#endif
│ │ │ -
1112
│ │ │ -
1113 // [23.2.4.2] capacity
│ │ │ -
1114 /** Returns the number of elements in the %vector. */
│ │ │ -
1115 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1116 size_type
│ │ │ -
│ │ │ - │ │ │ -
1118 {
│ │ │ -
1119 ptrdiff_t __dif = this->_M_impl._M_finish - this->_M_impl._M_start;
│ │ │ -
1120 if (__dif < 0)
│ │ │ - │ │ │ -
1122 return size_type(__dif);
│ │ │ -
1123 }
│ │ │ -
│ │ │ -
1124
│ │ │ -
1125 /** Returns the size() of the largest possible %vector. */
│ │ │ -
1126 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1127 size_type
│ │ │ -
│ │ │ - │ │ │ -
1129 { return _S_max_size(_M_get_Tp_allocator()); }
│ │ │ -
│ │ │ -
1130
│ │ │ -
1131#if __cplusplus >= 201103L
│ │ │ -
1132 /**
│ │ │ -
1133 * @brief Resizes the %vector to the specified number of elements.
│ │ │ -
1134 * @param __new_size Number of elements the %vector should contain.
│ │ │ -
1135 *
│ │ │ -
1136 * This function will %resize the %vector to the specified
│ │ │ -
1137 * number of elements. If the number is smaller than the
│ │ │ -
1138 * %vector's current size the %vector is truncated, otherwise
│ │ │ -
1139 * default constructed elements are appended.
│ │ │ -
1140 */
│ │ │ - │ │ │ -
1142 void
│ │ │ -
│ │ │ - │ │ │ -
1144 {
│ │ │ -
1145 if (__new_size > size())
│ │ │ -
1146 _M_default_append(__new_size - size());
│ │ │ -
1147 else if (__new_size < size())
│ │ │ -
1148 _M_erase_at_end(this->_M_impl._M_start + __new_size);
│ │ │ -
1149 }
│ │ │ -
│ │ │ -
1150
│ │ │ -
1151 /**
│ │ │ -
1152 * @brief Resizes the %vector to the specified number of elements.
│ │ │ -
1153 * @param __new_size Number of elements the %vector should contain.
│ │ │ -
1154 * @param __x Data with which new elements should be populated.
│ │ │ -
1155 *
│ │ │ -
1156 * This function will %resize the %vector to the specified
│ │ │ -
1157 * number of elements. If the number is smaller than the
│ │ │ -
1158 * %vector's current size the %vector is truncated, otherwise
│ │ │ -
1159 * the %vector is extended and new elements are populated with
│ │ │ -
1160 * given data.
│ │ │ -
1161 */
│ │ │ - │ │ │ -
1163 void
│ │ │ -
│ │ │ -
1164 resize(size_type __new_size, const value_type& __x)
│ │ │ -
1165 {
│ │ │ -
1166 if (__new_size > size())
│ │ │ -
1167 _M_fill_insert(end(), __new_size - size(), __x);
│ │ │ -
1168 else if (__new_size < size())
│ │ │ -
1169 _M_erase_at_end(this->_M_impl._M_start + __new_size);
│ │ │ -
1170 }
│ │ │ -
│ │ │ -
1171#else
│ │ │ -
1172 /**
│ │ │ -
1173 * @brief Resizes the %vector to the specified number of elements.
│ │ │ -
1174 * @param __new_size Number of elements the %vector should contain.
│ │ │ -
1175 * @param __x Data with which new elements should be populated.
│ │ │ -
1176 *
│ │ │ -
1177 * This function will %resize the %vector to the specified
│ │ │ -
1178 * number of elements. If the number is smaller than the
│ │ │ -
1179 * %vector's current size the %vector is truncated, otherwise
│ │ │ -
1180 * the %vector is extended and new elements are populated with
│ │ │ -
1181 * given data.
│ │ │ -
1182 */
│ │ │ - │ │ │ -
1184 void
│ │ │ -
1185 resize(size_type __new_size, value_type __x = value_type())
│ │ │ -
1186 {
│ │ │ -
1187 if (__new_size > size())
│ │ │ -
1188 _M_fill_insert(end(), __new_size - size(), __x);
│ │ │ -
1189 else if (__new_size < size())
│ │ │ -
1190 _M_erase_at_end(this->_M_impl._M_start + __new_size);
│ │ │ -
1191 }
│ │ │ -
1192#endif
│ │ │ -
1193
│ │ │ -
1194#if __cplusplus >= 201103L
│ │ │ -
1195 /** A non-binding request to reduce capacity() to size(). */
│ │ │ -
1196 _GLIBCXX20_CONSTEXPR
│ │ │ -
1197 void
│ │ │ -
│ │ │ - │ │ │ -
1199 { _M_shrink_to_fit(); }
│ │ │ -
│ │ │ -
1200#endif
│ │ │ -
1201
│ │ │ -
1202 /**
│ │ │ -
1203 * Returns the total number of elements that the %vector can
│ │ │ -
1204 * hold before needing to allocate more memory.
│ │ │ -
1205 */
│ │ │ -
1206 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1207 size_type
│ │ │ -
│ │ │ - │ │ │ -
1209 {
│ │ │ -
1210 ptrdiff_t __dif = this->_M_impl._M_end_of_storage
│ │ │ -
1211 - this->_M_impl._M_start;
│ │ │ -
1212 if (__dif < 0)
│ │ │ - │ │ │ -
1214 return size_type(__dif);
│ │ │ -
1215 }
│ │ │ -
│ │ │ -
1216
│ │ │ -
1217 /**
│ │ │ -
1218 * Returns true if the %vector is empty. (Thus begin() would
│ │ │ -
1219 * equal end().)
│ │ │ -
1220 */
│ │ │ -
1221 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1222 bool
│ │ │ -
│ │ │ - │ │ │ -
1224 { return begin() == end(); }
│ │ │ -
│ │ │ -
1225
│ │ │ -
1226 /**
│ │ │ -
1227 * @brief Attempt to preallocate enough memory for specified number of
│ │ │ -
1228 * elements.
│ │ │ -
1229 * @param __n Number of elements required.
│ │ │ -
1230 * @throw std::length_error If @a n exceeds @c max_size().
│ │ │ -
1231 *
│ │ │ -
1232 * This function attempts to reserve enough memory for the
│ │ │ -
1233 * %vector to hold the specified number of elements. If the
│ │ │ -
1234 * number requested is more than max_size(), length_error is
│ │ │ -
1235 * thrown.
│ │ │ -
1236 *
│ │ │ -
1237 * The advantage of this function is that if optimal code is a
│ │ │ -
1238 * necessity and the user can determine the number of elements
│ │ │ -
1239 * that will be required, the user can reserve the memory in
│ │ │ -
1240 * %advance, and thus prevent a possible reallocation of memory
│ │ │ -
1241 * and copying of %vector data.
│ │ │ -
1242 */
│ │ │ - │ │ │ -
1244 void
│ │ │ -
1245 reserve(size_type __n);
│ │ │ -
1246
│ │ │ -
1247 // element access
│ │ │ -
1248 /**
│ │ │ -
1249 * @brief Subscript access to the data contained in the %vector.
│ │ │ -
1250 * @param __n The index of the element for which data should be
│ │ │ -
1251 * accessed.
│ │ │ -
1252 * @return Read/write reference to data.
│ │ │ -
1253 *
│ │ │ -
1254 * This operator allows for easy, array-style, data access.
│ │ │ -
1255 * Note that data access with this operator is unchecked and
│ │ │ -
1256 * out_of_range lookups are not defined. (For checked lookups
│ │ │ -
1257 * see at().)
│ │ │ -
1258 */
│ │ │ -
1259 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1260 reference
│ │ │ -
│ │ │ - │ │ │ -
1262 {
│ │ │ -
1263 __glibcxx_requires_subscript(__n);
│ │ │ -
1264 return *(this->_M_impl._M_start + __n);
│ │ │ -
1265 }
│ │ │ -
│ │ │ -
1266
│ │ │ -
1267 /**
│ │ │ -
1268 * @brief Subscript access to the data contained in the %vector.
│ │ │ -
1269 * @param __n The index of the element for which data should be
│ │ │ -
1270 * accessed.
│ │ │ -
1271 * @return Read-only (constant) reference to data.
│ │ │ -
1272 *
│ │ │ -
1273 * This operator allows for easy, array-style, data access.
│ │ │ -
1274 * Note that data access with this operator is unchecked and
│ │ │ -
1275 * out_of_range lookups are not defined. (For checked lookups
│ │ │ -
1276 * see at().)
│ │ │ -
1277 */
│ │ │ -
1278 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1279 const_reference
│ │ │ -
│ │ │ -
1280 operator[](size_type __n) const _GLIBCXX_NOEXCEPT
│ │ │ -
1281 {
│ │ │ -
1282 __glibcxx_requires_subscript(__n);
│ │ │ -
1283 return *(this->_M_impl._M_start + __n);
│ │ │ -
1284 }
│ │ │ -
│ │ │ -
1285
│ │ │ -
1286 protected:
│ │ │ -
1287 /// Safety check used only from at().
│ │ │ - │ │ │ -
1289 void
│ │ │ -
│ │ │ -
1290 _M_range_check(size_type __n) const
│ │ │ -
1291 {
│ │ │ -
1292 if (__n >= this->size())
│ │ │ -
1293 __throw_out_of_range_fmt(__N("vector::_M_range_check: __n "
│ │ │ -
1294 "(which is %zu) >= this->size() "
│ │ │ -
1295 "(which is %zu)"),
│ │ │ -
1296 __n, this->size());
│ │ │ -
1297 }
│ │ │ -
│ │ │ -
1298
│ │ │ -
1299 public:
│ │ │ -
1300 /**
│ │ │ -
1301 * @brief Provides access to the data contained in the %vector.
│ │ │ -
1302 * @param __n The index of the element for which data should be
│ │ │ -
1303 * accessed.
│ │ │ -
1304 * @return Read/write reference to data.
│ │ │ -
1305 * @throw std::out_of_range If @a __n is an invalid index.
│ │ │ -
1306 *
│ │ │ -
1307 * This function provides for safer data access. The parameter
│ │ │ -
1308 * is first checked that it is in the range of the vector. The
│ │ │ -
1309 * function throws out_of_range if the check fails.
│ │ │ -
1310 */
│ │ │ -
1311 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1312 reference
│ │ │ -
│ │ │ -
1313 at(size_type __n)
│ │ │ -
1314 {
│ │ │ -
1315 _M_range_check(__n);
│ │ │ -
1316 return (*this)[__n];
│ │ │ -
1317 }
│ │ │ -
│ │ │ -
1318
│ │ │ -
1319 /**
│ │ │ -
1320 * @brief Provides access to the data contained in the %vector.
│ │ │ -
1321 * @param __n The index of the element for which data should be
│ │ │ -
1322 * accessed.
│ │ │ -
1323 * @return Read-only (constant) reference to data.
│ │ │ -
1324 * @throw std::out_of_range If @a __n is an invalid index.
│ │ │ -
1325 *
│ │ │ -
1326 * This function provides for safer data access. The parameter
│ │ │ -
1327 * is first checked that it is in the range of the vector. The
│ │ │ -
1328 * function throws out_of_range if the check fails.
│ │ │ -
1329 */
│ │ │ -
1330 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1331 const_reference
│ │ │ -
│ │ │ -
1332 at(size_type __n) const
│ │ │ -
1333 {
│ │ │ -
1334 _M_range_check(__n);
│ │ │ -
1335 return (*this)[__n];
│ │ │ -
1336 }
│ │ │ -
│ │ │ -
1337
│ │ │ -
1338 /**
│ │ │ -
1339 * Returns a read/write reference to the data at the first
│ │ │ -
1340 * element of the %vector.
│ │ │ -
1341 */
│ │ │ -
1342 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1343 reference
│ │ │ -
│ │ │ - │ │ │ -
1345 {
│ │ │ -
1346 __glibcxx_requires_nonempty();
│ │ │ -
1347 return *begin();
│ │ │ -
1348 }
│ │ │ -
│ │ │ -
1349
│ │ │ -
1350 /**
│ │ │ -
1351 * Returns a read-only (constant) reference to the data at the first
│ │ │ -
1352 * element of the %vector.
│ │ │ -
1353 */
│ │ │ -
1354 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1355 const_reference
│ │ │ -
│ │ │ - │ │ │ -
1357 {
│ │ │ -
1358 __glibcxx_requires_nonempty();
│ │ │ -
1359 return *begin();
│ │ │ -
1360 }
│ │ │ -
│ │ │ -
1361
│ │ │ -
1362 /**
│ │ │ -
1363 * Returns a read/write reference to the data at the last
│ │ │ -
1364 * element of the %vector.
│ │ │ -
1365 */
│ │ │ -
1366 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1367 reference
│ │ │ -
│ │ │ - │ │ │ -
1369 {
│ │ │ -
1370 __glibcxx_requires_nonempty();
│ │ │ -
1371 return *(end() - 1);
│ │ │ -
1372 }
│ │ │ -
│ │ │ -
1373
│ │ │ -
1374 /**
│ │ │ -
1375 * Returns a read-only (constant) reference to the data at the
│ │ │ -
1376 * last element of the %vector.
│ │ │ -
1377 */
│ │ │ -
1378 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1379 const_reference
│ │ │ -
│ │ │ - │ │ │ -
1381 {
│ │ │ -
1382 __glibcxx_requires_nonempty();
│ │ │ -
1383 return *(end() - 1);
│ │ │ -
1384 }
│ │ │ -
│ │ │ -
1385
│ │ │ -
1386 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1387 // DR 464. Suggestion for new member functions in standard containers.
│ │ │ -
1388 // data access
│ │ │ -
1389 /**
│ │ │ -
1390 * Returns a pointer such that [data(), data() + size()) is a valid
│ │ │ -
1391 * range. For a non-empty %vector, data() == &front().
│ │ │ -
1392 */
│ │ │ -
1393 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1394 _Tp*
│ │ │ -
│ │ │ - │ │ │ -
1396 { return _M_data_ptr(this->_M_impl._M_start); }
│ │ │ -
│ │ │ -
1397
│ │ │ -
1398 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1399 const _Tp*
│ │ │ - │ │ │ -
1401 { return _M_data_ptr(this->_M_impl._M_start); }
│ │ │ -
1402
│ │ │ -
1403 // [23.2.4.3] modifiers
│ │ │ -
1404 /**
│ │ │ -
1405 * @brief Add data to the end of the %vector.
│ │ │ -
1406 * @param __x Data to be added.
│ │ │ -
1407 *
│ │ │ -
1408 * This is a typical stack operation. The function creates an
│ │ │ -
1409 * element at the end of the %vector and assigns the given data
│ │ │ -
1410 * to it. Due to the nature of a %vector this operation can be
│ │ │ -
1411 * done in constant time if the %vector has preallocated space
│ │ │ -
1412 * available.
│ │ │ -
1413 */
│ │ │ -
1414 _GLIBCXX20_CONSTEXPR
│ │ │ -
1415 void
│ │ │ -
│ │ │ -
1416 push_back(const value_type& __x)
│ │ │ -
1417 {
│ │ │ -
1418 if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
│ │ │ -
1419 {
│ │ │ -
1420 _GLIBCXX_ASAN_ANNOTATE_GROW(1);
│ │ │ -
1421 _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
│ │ │ -
1422 __x);
│ │ │ -
1423 ++this->_M_impl._M_finish;
│ │ │ -
1424 _GLIBCXX_ASAN_ANNOTATE_GREW(1);
│ │ │ -
1425 }
│ │ │ -
1426 else
│ │ │ -
1427 _M_realloc_append(__x);
│ │ │ -
1428 }
│ │ │ -
│ │ │ -
1429
│ │ │ -
1430#if __cplusplus >= 201103L
│ │ │ - │ │ │ -
1432 void
│ │ │ -
1433 push_back(value_type&& __x)
│ │ │ -
1434 { emplace_back(std::move(__x)); }
│ │ │ -
1435
│ │ │ -
1436 template<typename... _Args>
│ │ │ -
1437#if __cplusplus > 201402L
│ │ │ -
1438 _GLIBCXX20_CONSTEXPR
│ │ │ -
1439 reference
│ │ │ -
1440#else
│ │ │ -
1441 void
│ │ │ -
1442#endif
│ │ │ -
1443 emplace_back(_Args&&... __args);
│ │ │ -
1444#endif
│ │ │ -
1445
│ │ │ -
1446 /**
│ │ │ -
1447 * @brief Removes last element.
│ │ │ -
1448 *
│ │ │ -
1449 * This is a typical stack operation. It shrinks the %vector by one.
│ │ │ -
1450 *
│ │ │ -
1451 * Note that no data is returned, and if the last element's
│ │ │ -
1452 * data is needed, it should be retrieved before pop_back() is
│ │ │ -
1453 * called.
│ │ │ -
1454 */
│ │ │ -
1455 _GLIBCXX20_CONSTEXPR
│ │ │ -
1456 void
│ │ │ -
│ │ │ - │ │ │ -
1458 {
│ │ │ -
1459 __glibcxx_requires_nonempty();
│ │ │ -
1460 --this->_M_impl._M_finish;
│ │ │ -
1461 _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish);
│ │ │ -
1462 _GLIBCXX_ASAN_ANNOTATE_SHRINK(1);
│ │ │ -
1463 }
│ │ │ -
│ │ │ -
1464
│ │ │ -
1465#if __cplusplus >= 201103L
│ │ │ -
1466 /**
│ │ │ -
1467 * @brief Inserts an object in %vector before specified iterator.
│ │ │ -
1468 * @param __position A const_iterator into the %vector.
│ │ │ -
1469 * @param __args Arguments.
│ │ │ -
1470 * @return An iterator that points to the inserted data.
│ │ │ -
1471 *
│ │ │ -
1472 * This function will insert an object of type T constructed
│ │ │ -
1473 * with T(std::forward<Args>(args)...) before the specified location.
│ │ │ -
1474 * Note that this kind of operation could be expensive for a %vector
│ │ │ -
1475 * and if it is frequently used the user should consider using
│ │ │ -
1476 * std::list.
│ │ │ -
1477 */
│ │ │ -
1478 template<typename... _Args>
│ │ │ - │ │ │ -
1480 iterator
│ │ │ -
│ │ │ -
1481 emplace(const_iterator __position, _Args&&... __args)
│ │ │ -
1482 { return _M_emplace_aux(__position, std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
1483
│ │ │ -
1484 /**
│ │ │ -
1485 * @brief Inserts given value into %vector before specified iterator.
│ │ │ -
1486 * @param __position A const_iterator into the %vector.
│ │ │ -
1487 * @param __x Data to be inserted.
│ │ │ -
1488 * @return An iterator that points to the inserted data.
│ │ │ -
1489 *
│ │ │ -
1490 * This function will insert a copy of the given value before
│ │ │ -
1491 * the specified location. Note that this kind of operation
│ │ │ -
1492 * could be expensive for a %vector and if it is frequently
│ │ │ -
1493 * used the user should consider using std::list.
│ │ │ -
1494 */
│ │ │ - │ │ │ -
1496 iterator
│ │ │ -
1497 insert(const_iterator __position, const value_type& __x);
│ │ │ -
1498#else
│ │ │ -
1499 /**
│ │ │ -
1500 * @brief Inserts given value into %vector before specified iterator.
│ │ │ -
1501 * @param __position An iterator into the %vector.
│ │ │ -
1502 * @param __x Data to be inserted.
│ │ │ -
1503 * @return An iterator that points to the inserted data.
│ │ │ -
1504 *
│ │ │ -
1505 * This function will insert a copy of the given value before
│ │ │ -
1506 * the specified location. Note that this kind of operation
│ │ │ -
1507 * could be expensive for a %vector and if it is frequently
│ │ │ -
1508 * used the user should consider using std::list.
│ │ │ -
1509 */
│ │ │ -
1510 iterator
│ │ │ -
1511 insert(iterator __position, const value_type& __x);
│ │ │ -
1512#endif
│ │ │ -
1513
│ │ │ -
1514#if __cplusplus >= 201103L
│ │ │ -
1515 /**
│ │ │ -
1516 * @brief Inserts given rvalue into %vector before specified iterator.
│ │ │ -
1517 * @param __position A const_iterator into the %vector.
│ │ │ -
1518 * @param __x Data to be inserted.
│ │ │ -
1519 * @return An iterator that points to the inserted data.
│ │ │ -
1520 *
│ │ │ -
1521 * This function will insert a copy of the given rvalue before
│ │ │ -
1522 * the specified location. Note that this kind of operation
│ │ │ -
1523 * could be expensive for a %vector and if it is frequently
│ │ │ -
1524 * used the user should consider using std::list.
│ │ │ -
1525 */
│ │ │ - │ │ │ -
1527 iterator
│ │ │ -
│ │ │ -
1528 insert(const_iterator __position, value_type&& __x)
│ │ │ -
1529 { return _M_insert_rval(__position, std::move(__x)); }
│ │ │ -
│ │ │ -
1530
│ │ │ -
1531 /**
│ │ │ -
1532 * @brief Inserts an initializer_list into the %vector.
│ │ │ -
1533 * @param __position An iterator into the %vector.
│ │ │ -
1534 * @param __l An initializer_list.
│ │ │ -
1535 *
│ │ │ -
1536 * This function will insert copies of the data in the
│ │ │ -
1537 * initializer_list @a l into the %vector before the location
│ │ │ -
1538 * specified by @a position.
│ │ │ -
1539 *
│ │ │ -
1540 * Note that this kind of operation could be expensive for a
│ │ │ -
1541 * %vector and if it is frequently used the user should
│ │ │ -
1542 * consider using std::list.
│ │ │ -
1543 */
│ │ │ - │ │ │ -
1545 iterator
│ │ │ -
│ │ │ - │ │ │ -
1547 {
│ │ │ -
1548 auto __offset = __position - cbegin();
│ │ │ -
1549 _M_range_insert(begin() + __offset, __l.begin(), __l.end(),
│ │ │ - │ │ │ -
1551 return begin() + __offset;
│ │ │ -
1552 }
│ │ │ -
│ │ │ -
1553#endif
│ │ │ -
1554
│ │ │ -
1555#if __cplusplus >= 201103L
│ │ │ -
1556 /**
│ │ │ -
1557 * @brief Inserts a number of copies of given data into the %vector.
│ │ │ -
1558 * @param __position A const_iterator into the %vector.
│ │ │ -
1559 * @param __n Number of elements to be inserted.
│ │ │ -
1560 * @param __x Data to be inserted.
│ │ │ -
1561 * @return An iterator that points to the inserted data.
│ │ │ -
1562 *
│ │ │ -
1563 * This function will insert a specified number of copies of
│ │ │ -
1564 * the given data before the location specified by @a position.
│ │ │ -
1565 *
│ │ │ -
1566 * Note that this kind of operation could be expensive for a
│ │ │ -
1567 * %vector and if it is frequently used the user should
│ │ │ -
1568 * consider using std::list.
│ │ │ -
1569 */
│ │ │ - │ │ │ -
1571 iterator
│ │ │ -
│ │ │ -
1572 insert(const_iterator __position, size_type __n, const value_type& __x)
│ │ │ -
1573 {
│ │ │ -
1574 difference_type __offset = __position - cbegin();
│ │ │ -
1575 _M_fill_insert(begin() + __offset, __n, __x);
│ │ │ -
1576 return begin() + __offset;
│ │ │ -
1577 }
│ │ │ -
│ │ │ -
1578#else
│ │ │ -
1579 /**
│ │ │ -
1580 * @brief Inserts a number of copies of given data into the %vector.
│ │ │ -
1581 * @param __position An iterator into the %vector.
│ │ │ -
1582 * @param __n Number of elements to be inserted.
│ │ │ -
1583 * @param __x Data to be inserted.
│ │ │ -
1584 *
│ │ │ -
1585 * This function will insert a specified number of copies of
│ │ │ -
1586 * the given data before the location specified by @a position.
│ │ │ -
1587 *
│ │ │ -
1588 * Note that this kind of operation could be expensive for a
│ │ │ -
1589 * %vector and if it is frequently used the user should
│ │ │ -
1590 * consider using std::list.
│ │ │ -
1591 */
│ │ │ -
1592 void
│ │ │ -
1593 insert(iterator __position, size_type __n, const value_type& __x)
│ │ │ -
1594 { _M_fill_insert(__position, __n, __x); }
│ │ │ -
1595#endif
│ │ │ -
1596
│ │ │ -
1597#if __cplusplus >= 201103L
│ │ │ -
1598 /**
│ │ │ -
1599 * @brief Inserts a range into the %vector.
│ │ │ -
1600 * @param __position A const_iterator into the %vector.
│ │ │ -
1601 * @param __first An input iterator.
│ │ │ -
1602 * @param __last An input iterator.
│ │ │ -
1603 * @return An iterator that points to the inserted data.
│ │ │ -
1604 *
│ │ │ -
1605 * This function will insert copies of the data in the range
│ │ │ -
1606 * [__first,__last) into the %vector before the location specified
│ │ │ -
1607 * by @a pos.
│ │ │ -
1608 *
│ │ │ -
1609 * Note that this kind of operation could be expensive for a
│ │ │ -
1610 * %vector and if it is frequently used the user should
│ │ │ -
1611 * consider using std::list.
│ │ │ -
1612 */
│ │ │ -
1613 template<typename _InputIterator,
│ │ │ - │ │ │ -
1615 _GLIBCXX20_CONSTEXPR
│ │ │ -
1616 iterator
│ │ │ -
│ │ │ -
1617 insert(const_iterator __position, _InputIterator __first,
│ │ │ -
1618 _InputIterator __last)
│ │ │ -
1619 {
│ │ │ -
1620 difference_type __offset = __position - cbegin();
│ │ │ -
1621 _M_range_insert(begin() + __offset, __first, __last,
│ │ │ -
1622 std::__iterator_category(__first));
│ │ │ -
1623 return begin() + __offset;
│ │ │ -
1624 }
│ │ │ -
│ │ │ -
1625#else
│ │ │ -
1626 /**
│ │ │ -
1627 * @brief Inserts a range into the %vector.
│ │ │ -
1628 * @param __position An iterator into the %vector.
│ │ │ -
1629 * @param __first An input iterator.
│ │ │ -
1630 * @param __last An input iterator.
│ │ │ -
1631 *
│ │ │ -
1632 * This function will insert copies of the data in the range
│ │ │ -
1633 * [__first,__last) into the %vector before the location specified
│ │ │ -
1634 * by @a pos.
│ │ │ -
1635 *
│ │ │ -
1636 * Note that this kind of operation could be expensive for a
│ │ │ -
1637 * %vector and if it is frequently used the user should
│ │ │ -
1638 * consider using std::list.
│ │ │ -
1639 */
│ │ │ -
1640 template<typename _InputIterator>
│ │ │ -
1641 void
│ │ │ - │ │ │ -
1643 _InputIterator __last)
│ │ │ -
1644 {
│ │ │ -
1645 // Check whether it's an integral type. If so, it's not an iterator.
│ │ │ -
1646 typedef typename std::__is_integer<_InputIterator>::__type _Integral;
│ │ │ -
1647 _M_insert_dispatch(__position, __first, __last, _Integral());
│ │ │ -
1648 }
│ │ │ -
1649#endif
│ │ │ -
1650
│ │ │ -
1651#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
1652 /**
│ │ │ -
1653 * @brief Insert a range into the vector.
│ │ │ -
1654 * @param __rg A range of values that are convertible to `value_type`.
│ │ │ -
1655 * @return An iterator that points to the first new element inserted,
│ │ │ -
1656 * or to `__pos` if `__rg` is an empty range.
│ │ │ -
1657 * @pre `__rg` and `*this` do not overlap.
│ │ │ -
1658 * @since C++23
│ │ │ -
1659 */
│ │ │ -
1660 template<__detail::__container_compatible_range<_Tp> _Rg>
│ │ │ -
1661 constexpr iterator
│ │ │ -
1662 insert_range(const_iterator __pos, _Rg&& __rg);
│ │ │ -
1663
│ │ │ -
1664 /**
│ │ │ -
1665 * @brief Append a range at the end of the vector.
│ │ │ -
1666 * @param __rg A range of values that are convertible to `value_type`.
│ │ │ -
1667 * @since C++23
│ │ │ -
1668 */
│ │ │ -
1669 template<__detail::__container_compatible_range<_Tp> _Rg>
│ │ │ -
1670 constexpr void
│ │ │ -
1671 append_range(_Rg&& __rg)
│ │ │ -
1672 {
│ │ │ -
1673 // N.B. __rg may overlap with *this, so we must copy from __rg before
│ │ │ -
1674 // existing elements or iterators referring to *this are invalidated.
│ │ │ -
1675 // e.g. in v.append_range(views::concat(v, foo)) rg overlaps v.
│ │ │ -
1676 if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>)
│ │ │ -
1677 {
│ │ │ -
1678 const auto __n = size_type(ranges::distance(__rg));
│ │ │ -
1679
│ │ │ -
1680 // If there is no existing storage, there are no iterators that
│ │ │ -
1681 // can be referring to our storage, so it's safe to allocate now.
│ │ │ -
1682 if (capacity() == 0)
│ │ │ -
1683 reserve(__n);
│ │ │ -
1684
│ │ │ -
1685 const auto __sz = size();
│ │ │ -
1686 const auto __capacity = capacity();
│ │ │ -
1687 if ((__capacity - __sz) >= __n)
│ │ │ -
1688 {
│ │ │ -
1689 _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
│ │ │ -
1690 _Base::_M_append_range(__rg);
│ │ │ -
1691 _GLIBCXX_ASAN_ANNOTATE_GREW(__n);
│ │ │ -
1692 return;
│ │ │ -
1693 }
│ │ │ -
1694
│ │ │ -
1695 const size_type __len = _M_check_len(__n, "vector::append_range");
│ │ │ -
1696
│ │ │ -
1697 pointer __old_start = this->_M_impl._M_start;
│ │ │ -
1698 pointer __old_finish = this->_M_impl._M_finish;
│ │ │ -
1699
│ │ │ -
1700 allocator_type& __a = _M_get_Tp_allocator();
│ │ │ -
1701 const pointer __start = this->_M_allocate(__len);
│ │ │ -
1702 const pointer __mid = __start + __sz;
│ │ │ -
1703 const pointer __back = __mid + __n;
│ │ │ -
1704 _Guard_alloc __guard(__start, __len, *this);
│ │ │ -
1705 std::__uninitialized_copy_a(ranges::begin(__rg),
│ │ │ -
1706 ranges::end(__rg),
│ │ │ -
1707 __mid, __a);
│ │ │ -
1708
│ │ │ -
1709 if constexpr (_S_use_relocate())
│ │ │ -
1710 _S_relocate(__old_start, __old_finish, __start, __a);
│ │ │ -
1711 else
│ │ │ -
1712 {
│ │ │ -
1713 // RAII type to destroy initialized elements.
│ │ │ -
1714 struct _Guard_elts
│ │ │ -
1715 {
│ │ │ -
1716 pointer _M_first, _M_last; // Elements to destroy
│ │ │ -
1717 _Tp_alloc_type& _M_alloc;
│ │ │ -
1718
│ │ │ -
1719 constexpr
│ │ │ -
1720 _Guard_elts(pointer __f, pointer __l, _Tp_alloc_type& __a)
│ │ │ -
1721 : _M_first(__f), _M_last(__l), _M_alloc(__a)
│ │ │ -
1722 { }
│ │ │ -
1723
│ │ │ -
1724 constexpr
│ │ │ -
1725 ~_Guard_elts()
│ │ │ -
1726 { std::_Destroy(_M_first, _M_last, _M_alloc); }
│ │ │ -
1727
│ │ │ -
1728 _Guard_elts(_Guard_elts&&) = delete;
│ │ │ -
1729 };
│ │ │ -
1730 _Guard_elts __guard_elts{__mid, __back, __a};
│ │ │ -
1731
│ │ │ -
1732 std::__uninitialized_move_a(__old_start, __old_finish,
│ │ │ -
1733 __start, __a);
│ │ │ -
1734
│ │ │ -
1735 // Let old elements get destroyed by __guard_elts:
│ │ │ -
1736 __guard_elts._M_first = __old_start;
│ │ │ -
1737 __guard_elts._M_last = __old_finish;
│ │ │ -
1738 }
│ │ │ -
1739
│ │ │ -
1740 // Now give ownership of old storage to __guard:
│ │ │ -
1741 __guard._M_storage = __old_start;
│ │ │ -
1742 __guard._M_len = __capacity;
│ │ │ -
1743 // Finally, take ownership of new storage:
│ │ │ -
1744 this->_M_impl._M_start = __start;
│ │ │ -
1745 this->_M_impl._M_finish = __back;
│ │ │ -
1746 this->_M_impl._M_end_of_storage = __start + __len;
│ │ │ -
1747 }
│ │ │ -
1748 else
│ │ │ -
1749 {
│ │ │ -
1750 auto __first = ranges::begin(__rg);
│ │ │ -
1751 const auto __last = ranges::end(__rg);
│ │ │ -
1752
│ │ │ -
1753 // Fill up to the end of current capacity.
│ │ │ -
1754 for (auto __free = capacity() - size();
│ │ │ -
1755 __first != __last && __free > 0;
│ │ │ -
1756 ++__first, (void) --__free)
│ │ │ -
1757 emplace_back(*__first);
│ │ │ -
1758
│ │ │ -
1759 if (__first == __last)
│ │ │ -
1760 return;
│ │ │ -
1761
│ │ │ -
1762 // Copy the rest of the range to a new vector.
│ │ │ -
1763 vector __tmp(_M_get_Tp_allocator());
│ │ │ -
1764 for (; __first != __last; ++__first)
│ │ │ -
1765 __tmp.emplace_back(*__first);
│ │ │ -
1766 reserve(_M_check_len(__tmp.size(), "vector::append_range"));
│ │ │ -
1767 ranges::subrange __r(std::make_move_iterator(__tmp.begin()),
│ │ │ -
1768 std::make_move_iterator(__tmp.end()));
│ │ │ -
1769 append_range(__r); // This will take the fast path above.
│ │ │ -
1770 }
│ │ │ -
1771 }
│ │ │ -
1772#endif // containers_ranges
│ │ │ -
1773
│ │ │ -
1774 /**
│ │ │ -
1775 * @brief Remove element at given position.
│ │ │ -
1776 * @param __position Iterator pointing to element to be erased.
│ │ │ -
1777 * @return An iterator pointing to the next element (or end()).
│ │ │ -
1778 *
│ │ │ -
1779 * This function will erase the element at the given position and thus
│ │ │ -
1780 * shorten the %vector by one.
│ │ │ -
1781 *
│ │ │ -
1782 * Note This operation could be expensive and if it is
│ │ │ -
1783 * frequently used the user should consider using std::list.
│ │ │ -
1784 * The user is also cautioned that this function only erases
│ │ │ -
1785 * the element, and that if the element is itself a pointer,
│ │ │ -
1786 * the pointed-to memory is not touched in any way. Managing
│ │ │ -
1787 * the pointer is the user's responsibility.
│ │ │ -
1788 */
│ │ │ -
1789 _GLIBCXX20_CONSTEXPR
│ │ │ -
1790 iterator
│ │ │ -
1791#if __cplusplus >= 201103L
│ │ │ -
│ │ │ -
1792 erase(const_iterator __position)
│ │ │ -
1793 { return _M_erase(begin() + (__position - cbegin())); }
│ │ │ -
│ │ │ -
1794#else
│ │ │ - │ │ │ -
1796 { return _M_erase(__position); }
│ │ │ -
1797#endif
│ │ │ -
1798
│ │ │ -
1799 /**
│ │ │ -
1800 * @brief Remove a range of elements.
│ │ │ -
1801 * @param __first Iterator pointing to the first element to be erased.
│ │ │ -
1802 * @param __last Iterator pointing to one past the last element to be
│ │ │ -
1803 * erased.
│ │ │ -
1804 * @return An iterator pointing to the element pointed to by @a __last
│ │ │ -
1805 * prior to erasing (or end()).
│ │ │ -
1806 *
│ │ │ -
1807 * This function will erase the elements in the range
│ │ │ -
1808 * [__first,__last) and shorten the %vector accordingly.
│ │ │ -
1809 *
│ │ │ -
1810 * Note This operation could be expensive and if it is
│ │ │ -
1811 * frequently used the user should consider using std::list.
│ │ │ -
1812 * The user is also cautioned that this function only erases
│ │ │ -
1813 * the elements, and that if the elements themselves are
│ │ │ -
1814 * pointers, the pointed-to memory is not touched in any way.
│ │ │ -
1815 * Managing the pointer is the user's responsibility.
│ │ │ -
1816 */
│ │ │ -
1817 _GLIBCXX20_CONSTEXPR
│ │ │ -
1818 iterator
│ │ │ -
1819#if __cplusplus >= 201103L
│ │ │ -
│ │ │ -
1820 erase(const_iterator __first, const_iterator __last)
│ │ │ -
1821 {
│ │ │ -
1822 const auto __beg = begin();
│ │ │ -
1823 const auto __cbeg = cbegin();
│ │ │ -
1824 return _M_erase(__beg + (__first - __cbeg), __beg + (__last - __cbeg));
│ │ │ -
1825 }
│ │ │ -
│ │ │ -
1826#else
│ │ │ -
1827 erase(iterator __first, iterator __last)
│ │ │ -
1828 { return _M_erase(__first, __last); }
│ │ │ -
1829#endif
│ │ │ -
1830
│ │ │ -
1831 /**
│ │ │ -
1832 * @brief Swaps data with another %vector.
│ │ │ -
1833 * @param __x A %vector of the same element and allocator types.
│ │ │ -
1834 *
│ │ │ -
1835 * This exchanges the elements between two vectors in constant time.
│ │ │ -
1836 * (Three pointers, so it should be quite fast.)
│ │ │ -
1837 * Note that the global std::swap() function is specialized such that
│ │ │ -
1838 * std::swap(v1,v2) will feed to this function.
│ │ │ -
1839 *
│ │ │ -
1840 * Whether the allocators are swapped depends on the allocator traits.
│ │ │ -
1841 */
│ │ │ -
1842 _GLIBCXX20_CONSTEXPR
│ │ │ -
1843 void
│ │ │ -
│ │ │ - │ │ │ -
1845 {
│ │ │ -
1846#if __cplusplus >= 201103L
│ │ │ -
1847 __glibcxx_assert(_Alloc_traits::propagate_on_container_swap::value
│ │ │ -
1848 || _M_get_Tp_allocator() == __x._M_get_Tp_allocator());
│ │ │ -
1849#endif
│ │ │ -
1850 this->_M_impl._M_swap_data(__x._M_impl);
│ │ │ -
1851 _Alloc_traits::_S_on_swap(_M_get_Tp_allocator(),
│ │ │ -
1852 __x._M_get_Tp_allocator());
│ │ │ -
1853 }
│ │ │ -
│ │ │ -
1854
│ │ │ -
1855 /**
│ │ │ -
1856 * Erases all the elements. Note that this function only erases the
│ │ │ -
1857 * elements, and that if the elements themselves are pointers, the
│ │ │ -
1858 * pointed-to memory is not touched in any way. Managing the pointer is
│ │ │ -
1859 * the user's responsibility.
│ │ │ -
1860 */
│ │ │ - │ │ │ -
1862 void
│ │ │ -
│ │ │ - │ │ │ -
1864 { _M_erase_at_end(this->_M_impl._M_start); }
│ │ │ -
│ │ │ -
1865
│ │ │ -
1866 private:
│ │ │ -
1867 // RAII guard for allocated storage.
│ │ │ -
1868 struct _Guard_alloc
│ │ │ -
1869 {
│ │ │ -
1870 pointer _M_storage; // Storage to deallocate
│ │ │ -
1871 size_type _M_len;
│ │ │ -
1872 _Base& _M_vect;
│ │ │ -
1873
│ │ │ - │ │ │ -
1875 _Guard_alloc(pointer __s, size_type __l, _Base& __vect)
│ │ │ -
1876 : _M_storage(__s), _M_len(__l), _M_vect(__vect)
│ │ │ -
1877 { }
│ │ │ -
1878
│ │ │ -
1879 _GLIBCXX20_CONSTEXPR
│ │ │ -
1880 ~_Guard_alloc()
│ │ │ -
1881 {
│ │ │ -
1882 if (_M_storage)
│ │ │ -
1883 _M_vect._M_deallocate(_M_storage, _M_len);
│ │ │ -
1884 }
│ │ │ -
1885
│ │ │ -
1886 _GLIBCXX20_CONSTEXPR
│ │ │ -
1887 pointer
│ │ │ -
1888 _M_release()
│ │ │ -
1889 {
│ │ │ -
1890 pointer __res = _M_storage;
│ │ │ -
1891 _M_storage = pointer();
│ │ │ -
1892 return __res;
│ │ │ -
1893 }
│ │ │ -
1894
│ │ │ -
1895 private:
│ │ │ -
1896 _Guard_alloc(const _Guard_alloc&);
│ │ │ -
1897 };
│ │ │ -
1898
│ │ │ -
1899 protected:
│ │ │ -
1900 /**
│ │ │ -
1901 * Memory expansion handler. Uses the member allocation function to
│ │ │ -
1902 * obtain @a n bytes of memory, and then copies [first,last) into it.
│ │ │ -
1903 */
│ │ │ -
1904 template<typename _ForwardIterator>
│ │ │ -
1905 _GLIBCXX20_CONSTEXPR
│ │ │ -
1906 pointer
│ │ │ -
│ │ │ - │ │ │ -
1908 _ForwardIterator __first, _ForwardIterator __last)
│ │ │ -
1909 {
│ │ │ -
1910 _Guard_alloc __guard(this->_M_allocate(__n), __n, *this);
│ │ │ - │ │ │ -
1912 (__first, __last, __guard._M_storage, _M_get_Tp_allocator());
│ │ │ -
1913 return __guard._M_release();
│ │ │ -
1914 }
│ │ │ -
│ │ │ -
1915
│ │ │ -
1916
│ │ │ -
1917 // Internal constructor functions follow.
│ │ │ -
1918
│ │ │ -
1919 // Called by the range constructor to implement [23.1.1]/9
│ │ │ -
1920
│ │ │ -
1921#if __cplusplus < 201103L
│ │ │ -
1922 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1923 // 438. Ambiguity in the "do the right thing" clause
│ │ │ -
1924 template<typename _Integer>
│ │ │ -
1925 void
│ │ │ -
1926 _M_initialize_dispatch(_Integer __int_n, _Integer __value, __true_type)
│ │ │ -
1927 {
│ │ │ -
1928 const size_type __n = static_cast<size_type>(__int_n);
│ │ │ -
1929 pointer __start =
│ │ │ -
1930 _M_allocate(_S_check_init_len(__n, _M_get_Tp_allocator()));
│ │ │ -
1931 this->_M_impl._M_start = __start;
│ │ │ -
1932 this->_M_impl._M_end_of_storage = __start + __n;
│ │ │ -
1933 _M_fill_initialize(__n, __value);
│ │ │ -
1934 }
│ │ │ -
1935
│ │ │ -
1936 // Called by the range constructor to implement [23.1.1]/9
│ │ │ -
1937 template<typename _InputIterator>
│ │ │ -
1938 void
│ │ │ -
1939 _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
│ │ │ -
1940 __false_type)
│ │ │ -
1941 {
│ │ │ -
1942 _M_range_initialize(__first, __last,
│ │ │ -
1943 std::__iterator_category(__first));
│ │ │ -
1944 }
│ │ │ -
1945#endif
│ │ │ -
1946
│ │ │ -
1947 // Called by the second initialize_dispatch above
│ │ │ -
1948 template<typename _InputIterator>
│ │ │ -
1949 _GLIBCXX20_CONSTEXPR
│ │ │ -
1950 void
│ │ │ -
1951 _M_range_initialize(_InputIterator __first, _InputIterator __last,
│ │ │ - │ │ │ -
1953 {
│ │ │ -
1954 __try {
│ │ │ -
1955 for (; __first != __last; ++__first)
│ │ │ -
1956#if __cplusplus >= 201103L
│ │ │ -
1957 emplace_back(*__first);
│ │ │ -
1958#else
│ │ │ -
1959 push_back(*__first);
│ │ │ -
1960#endif
│ │ │ -
1961 } __catch(...) {
│ │ │ -
1962 clear();
│ │ │ -
1963 __throw_exception_again;
│ │ │ -
1964 }
│ │ │ -
1965 }
│ │ │ -
1966
│ │ │ -
1967 // Called by the second initialize_dispatch above
│ │ │ -
1968 template<typename _ForwardIterator>
│ │ │ -
1969 _GLIBCXX20_CONSTEXPR
│ │ │ -
1970 void
│ │ │ -
1971 _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last,
│ │ │ - │ │ │ -
1973 {
│ │ │ -
1974 _M_range_initialize_n(__first, __last,
│ │ │ -
1975 std::distance(__first, __last));
│ │ │ -
1976 }
│ │ │ -
1977
│ │ │ -
1978 template<typename _Iterator, typename _Sentinel>
│ │ │ -
1979 _GLIBCXX20_CONSTEXPR
│ │ │ -
1980 void
│ │ │ -
1981 _M_range_initialize_n(_Iterator __first, _Sentinel __last,
│ │ │ -
1982 size_type __n)
│ │ │ -
1983 {
│ │ │ -
1984 pointer __start =
│ │ │ -
1985 this->_M_allocate(_S_check_init_len(__n, _M_get_Tp_allocator()));
│ │ │ -
1986 this->_M_impl._M_start = this->_M_impl._M_finish = __start;
│ │ │ -
1987 this->_M_impl._M_end_of_storage = __start + __n;
│ │ │ -
1988 this->_M_impl._M_finish
│ │ │ -
1989 = std::__uninitialized_copy_a(_GLIBCXX_MOVE(__first), __last,
│ │ │ -
1990 __start, _M_get_Tp_allocator());
│ │ │ -
1991 }
│ │ │ -
1992
│ │ │ -
1993 // Called by the first initialize_dispatch above and by the
│ │ │ -
1994 // vector(n,value,a) constructor.
│ │ │ -
1995 _GLIBCXX20_CONSTEXPR
│ │ │ -
1996 void
│ │ │ -
1997 _M_fill_initialize(size_type __n, const value_type& __value)
│ │ │ -
1998 {
│ │ │ -
1999 this->_M_impl._M_finish =
│ │ │ -
2000 std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, __value,
│ │ │ -
2001 _M_get_Tp_allocator());
│ │ │ -
2002 }
│ │ │ -
2003
│ │ │ -
2004#if __cplusplus >= 201103L
│ │ │ -
2005 // Called by the vector(n) constructor.
│ │ │ -
2006 _GLIBCXX20_CONSTEXPR
│ │ │ -
2007 void
│ │ │ -
2008 _M_default_initialize(size_type __n)
│ │ │ -
2009 {
│ │ │ -
2010 this->_M_impl._M_finish =
│ │ │ -
2011 std::__uninitialized_default_n_a(this->_M_impl._M_start, __n,
│ │ │ -
2012 _M_get_Tp_allocator());
│ │ │ -
2013 }
│ │ │ -
2014#endif
│ │ │ -
2015
│ │ │ -
2016 // Internal assign functions follow. The *_aux functions do the actual
│ │ │ -
2017 // assignment work for the range versions.
│ │ │ -
2018
│ │ │ -
2019 // Called by the range assign to implement [23.1.1]/9
│ │ │ -
2020
│ │ │ -
2021 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
2022 // 438. Ambiguity in the "do the right thing" clause
│ │ │ -
2023 template<typename _Integer>
│ │ │ -
2024 _GLIBCXX20_CONSTEXPR
│ │ │ -
2025 void
│ │ │ -
2026 _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
│ │ │ -
2027 { _M_fill_assign(__n, __val); }
│ │ │ -
2028
│ │ │ -
2029 // Called by the range assign to implement [23.1.1]/9
│ │ │ -
2030 template<typename _InputIterator>
│ │ │ -
2031 _GLIBCXX20_CONSTEXPR
│ │ │ -
2032 void
│ │ │ -
2033 _M_assign_dispatch(_InputIterator __first, _InputIterator __last,
│ │ │ -
2034 __false_type)
│ │ │ -
2035 { _M_assign_aux(__first, __last, std::__iterator_category(__first)); }
│ │ │ -
2036
│ │ │ -
2037 // Called by the second assign_dispatch above
│ │ │ -
2038 template<typename _InputIterator>
│ │ │ -
2039 _GLIBCXX20_CONSTEXPR
│ │ │ -
2040 void
│ │ │ -
2041 _M_assign_aux(_InputIterator __first, _InputIterator __last,
│ │ │ - │ │ │ -
2043
│ │ │ -
2044 // Called by the second assign_dispatch above
│ │ │ -
2045 template<typename _ForwardIterator>
│ │ │ -
2046 _GLIBCXX20_CONSTEXPR
│ │ │ -
2047 void
│ │ │ -
2048 _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
│ │ │ - │ │ │ -
2050
│ │ │ -
2051 // Called by assign(n,t), and the range assign when it turns out
│ │ │ -
2052 // to be the same thing.
│ │ │ -
2053 _GLIBCXX20_CONSTEXPR
│ │ │ -
2054 void
│ │ │ -
2055 _M_fill_assign(size_type __n, const value_type& __val);
│ │ │ -
2056
│ │ │ -
2057 // Internal insert functions follow.
│ │ │ -
2058
│ │ │ -
2059 // Called by the range insert to implement [23.1.1]/9
│ │ │ -
2060
│ │ │ -
2061 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
2062 // 438. Ambiguity in the "do the right thing" clause
│ │ │ -
2063 template<typename _Integer>
│ │ │ -
2064 _GLIBCXX20_CONSTEXPR
│ │ │ -
2065 void
│ │ │ -
2066 _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __val,
│ │ │ -
2067 __true_type)
│ │ │ -
2068 { _M_fill_insert(__pos, __n, __val); }
│ │ │ -
2069
│ │ │ -
2070 // Called by the range insert to implement [23.1.1]/9
│ │ │ -
2071 template<typename _InputIterator>
│ │ │ -
2072 _GLIBCXX20_CONSTEXPR
│ │ │ -
2073 void
│ │ │ -
2074 _M_insert_dispatch(iterator __pos, _InputIterator __first,
│ │ │ -
2075 _InputIterator __last, __false_type)
│ │ │ -
2076 {
│ │ │ -
2077 _M_range_insert(__pos, __first, __last,
│ │ │ -
2078 std::__iterator_category(__first));
│ │ │ -
2079 }
│ │ │ -
2080
│ │ │ -
2081 // Called by the second insert_dispatch above
│ │ │ -
2082 template<typename _InputIterator>
│ │ │ -
2083 _GLIBCXX20_CONSTEXPR
│ │ │ -
2084 void
│ │ │ -
2085 _M_range_insert(iterator __pos, _InputIterator __first,
│ │ │ -
2086 _InputIterator __last, std::input_iterator_tag);
│ │ │ -
2087
│ │ │ -
2088 // Called by the second insert_dispatch above
│ │ │ -
2089 template<typename _ForwardIterator>
│ │ │ -
2090 _GLIBCXX20_CONSTEXPR
│ │ │ -
2091 void
│ │ │ -
2092 _M_range_insert(iterator __pos, _ForwardIterator __first,
│ │ │ -
2093 _ForwardIterator __last, std::forward_iterator_tag);
│ │ │ -
2094
│ │ │ -
2095 // Called by insert(p,n,x), and the range insert when it turns out to be
│ │ │ -
2096 // the same thing.
│ │ │ -
2097 _GLIBCXX20_CONSTEXPR
│ │ │ -
2098 void
│ │ │ -
2099 _M_fill_insert(iterator __pos, size_type __n, const value_type& __x);
│ │ │ -
2100
│ │ │ -
2101#if __cplusplus >= 201103L
│ │ │ -
2102 // Called by resize(n).
│ │ │ -
2103 _GLIBCXX20_CONSTEXPR
│ │ │ -
2104 void
│ │ │ -
2105 _M_default_append(size_type __n);
│ │ │ -
2106
│ │ │ -
2107 _GLIBCXX20_CONSTEXPR
│ │ │ -
2108 bool
│ │ │ -
2109 _M_shrink_to_fit();
│ │ │ -
2110#endif
│ │ │ -
2111
│ │ │ -
2112#if __cplusplus < 201103L
│ │ │ -
2113 // Called by insert(p,x)
│ │ │ -
2114 void
│ │ │ -
2115 _M_insert_aux(iterator __position, const value_type& __x);
│ │ │ -
2116
│ │ │ -
2117 void
│ │ │ -
2118 _M_realloc_insert(iterator __position, const value_type& __x);
│ │ │ -
2119
│ │ │ -
2120 void
│ │ │ -
2121 _M_realloc_append(const value_type& __x);
│ │ │ -
2122#else
│ │ │ -
2123 // A value_type object constructed with _Alloc_traits::construct()
│ │ │ -
2124 // and destroyed with _Alloc_traits::destroy().
│ │ │ -
2125 struct _Temporary_value
│ │ │ -
2126 {
│ │ │ -
2127 template<typename... _Args>
│ │ │ -
2128 _GLIBCXX20_CONSTEXPR explicit
│ │ │ -
2129 _Temporary_value(vector* __vec, _Args&&... __args) : _M_this(__vec)
│ │ │ -
2130 {
│ │ │ -
2131 _Alloc_traits::construct(_M_this->_M_impl, _M_ptr(),
│ │ │ -
2132 std::forward<_Args>(__args)...);
│ │ │ -
2133 }
│ │ │ -
2134
│ │ │ -
2135 _GLIBCXX20_CONSTEXPR
│ │ │ -
2136 ~_Temporary_value()
│ │ │ -
2137 { _Alloc_traits::destroy(_M_this->_M_impl, _M_ptr()); }
│ │ │ -
2138
│ │ │ -
2139 _GLIBCXX20_CONSTEXPR value_type&
│ │ │ -
2140 _M_val() noexcept { return _M_storage._M_val; }
│ │ │ -
2141
│ │ │ -
2142 private:
│ │ │ -
2143 _GLIBCXX20_CONSTEXPR _Tp*
│ │ │ -
2144 _M_ptr() noexcept { return std::__addressof(_M_storage._M_val); }
│ │ │ -
2145
│ │ │ -
2146 union _Storage
│ │ │ -
2147 {
│ │ │ -
2148 constexpr _Storage() : _M_byte() { }
│ │ │ -
2149 _GLIBCXX20_CONSTEXPR ~_Storage() { }
│ │ │ -
2150 _Storage& operator=(const _Storage&) = delete;
│ │ │ -
2151 unsigned char _M_byte;
│ │ │ -
2152 _Tp _M_val;
│ │ │ -
2153 };
│ │ │ -
2154
│ │ │ -
2155 vector* _M_this;
│ │ │ -
2156 _Storage _M_storage;
│ │ │ -
2157 };
│ │ │ -
2158
│ │ │ -
2159 // Called by insert(p,x) and other functions when insertion needs to
│ │ │ -
2160 // reallocate or move existing elements. _Arg is either _Tp& or _Tp.
│ │ │ -
2161 template<typename _Arg>
│ │ │ -
2162 _GLIBCXX20_CONSTEXPR
│ │ │ -
2163 void
│ │ │ -
2164 _M_insert_aux(iterator __position, _Arg&& __arg);
│ │ │ -
2165
│ │ │ -
2166 template<typename... _Args>
│ │ │ -
2167 _GLIBCXX20_CONSTEXPR
│ │ │ -
2168 void
│ │ │ -
2169 _M_realloc_insert(iterator __position, _Args&&... __args);
│ │ │ -
2170
│ │ │ -
2171 template<typename... _Args>
│ │ │ -
2172 _GLIBCXX20_CONSTEXPR
│ │ │ -
2173 void
│ │ │ -
2174 _M_realloc_append(_Args&&... __args);
│ │ │ -
2175
│ │ │ -
2176 // Either move-construct at the end, or forward to _M_insert_aux.
│ │ │ -
2177 _GLIBCXX20_CONSTEXPR
│ │ │ -
2178 iterator
│ │ │ -
2179 _M_insert_rval(const_iterator __position, value_type&& __v);
│ │ │ -
2180
│ │ │ -
2181 // Try to emplace at the end, otherwise forward to _M_insert_aux.
│ │ │ -
2182 template<typename... _Args>
│ │ │ -
2183 _GLIBCXX20_CONSTEXPR
│ │ │ -
2184 iterator
│ │ │ -
2185 _M_emplace_aux(const_iterator __position, _Args&&... __args);
│ │ │ -
2186
│ │ │ -
2187 // Emplacing an rvalue of the correct type can use _M_insert_rval.
│ │ │ -
2188 _GLIBCXX20_CONSTEXPR
│ │ │ -
2189 iterator
│ │ │ -
2190 _M_emplace_aux(const_iterator __position, value_type&& __v)
│ │ │ -
2191 { return _M_insert_rval(__position, std::move(__v)); }
│ │ │ -
2192#endif
│ │ │ -
2193
│ │ │ -
2194 // Called by _M_fill_insert, _M_insert_aux etc.
│ │ │ -
2195 _GLIBCXX20_CONSTEXPR
│ │ │ -
2196 size_type
│ │ │ -
2197 _M_check_len(size_type __n, const char* __s) const
│ │ │ -
2198 {
│ │ │ -
2199 if (max_size() - size() < __n)
│ │ │ -
2200 __throw_length_error(__N(__s));
│ │ │ -
2201
│ │ │ -
2202 const size_type __len = size() + (std::max)(size(), __n);
│ │ │ -
2203 return (__len < size() || __len > max_size()) ? max_size() : __len;
│ │ │ -
2204 }
│ │ │ -
2205
│ │ │ -
2206 // Called by constructors to check initial size.
│ │ │ -
2207 static _GLIBCXX20_CONSTEXPR size_type
│ │ │ -
2208 _S_check_init_len(size_type __n, const allocator_type& __a)
│ │ │ -
2209 {
│ │ │ -
2210 if (__n > _S_max_size(_Tp_alloc_type(__a)))
│ │ │ -
2211 __throw_length_error(
│ │ │ -
2212 __N("cannot create std::vector larger than max_size()"));
│ │ │ -
2213 return __n;
│ │ │ -
2214 }
│ │ │ -
2215
│ │ │ -
2216 static _GLIBCXX20_CONSTEXPR size_type
│ │ │ -
2217 _S_max_size(const _Tp_alloc_type& __a) _GLIBCXX_NOEXCEPT
│ │ │ -
2218 {
│ │ │ -
2219 // std::distance(begin(), end()) cannot be greater than PTRDIFF_MAX,
│ │ │ -
2220 // and realistically we can't store more than PTRDIFF_MAX/sizeof(T)
│ │ │ -
2221 // (even if std::allocator_traits::max_size says we can).
│ │ │ -
2222 const size_t __diffmax
│ │ │ -
2223 = __gnu_cxx::__numeric_traits<ptrdiff_t>::__max / sizeof(_Tp);
│ │ │ -
2224 const size_t __allocmax = _Alloc_traits::max_size(__a);
│ │ │ -
2225 return (std::min)(__diffmax, __allocmax);
│ │ │ -
2226 }
│ │ │ -
2227
│ │ │ -
2228 // Internal erase functions follow.
│ │ │ -
2229
│ │ │ -
2230 // Called by erase(q1,q2), clear(), resize(), _M_fill_assign,
│ │ │ -
2231 // _M_assign_aux.
│ │ │ -
2232 _GLIBCXX20_CONSTEXPR
│ │ │ -
2233 void
│ │ │ -
2234 _M_erase_at_end(pointer __pos) _GLIBCXX_NOEXCEPT
│ │ │ -
2235 {
│ │ │ -
2236 if (size_type __n = this->_M_impl._M_finish - __pos)
│ │ │ -
2237 {
│ │ │ -
2238 std::_Destroy(__pos, this->_M_impl._M_finish,
│ │ │ -
2239 _M_get_Tp_allocator());
│ │ │ -
2240 this->_M_impl._M_finish = __pos;
│ │ │ -
2241 _GLIBCXX_ASAN_ANNOTATE_SHRINK(__n);
│ │ │ -
2242 }
│ │ │ -
2243 }
│ │ │ -
2244
│ │ │ -
2245 _GLIBCXX20_CONSTEXPR
│ │ │ -
2246 iterator
│ │ │ -
2247 _M_erase(iterator __position);
│ │ │ -
2248
│ │ │ -
2249 _GLIBCXX20_CONSTEXPR
│ │ │ -
2250 iterator
│ │ │ -
2251 _M_erase(iterator __first, iterator __last);
│ │ │ -
2252
│ │ │ -
2253#if __cplusplus >= 201103L
│ │ │ -
2254 private:
│ │ │ -
2255 // Constant-time move assignment when source object's memory can be
│ │ │ -
2256 // moved, either because the source's allocator will move too
│ │ │ -
2257 // or because the allocators are equal.
│ │ │ -
2258 _GLIBCXX20_CONSTEXPR
│ │ │ -
2259 void
│ │ │ -
2260 _M_move_assign(vector&& __x, true_type) noexcept
│ │ │ -
2261 {
│ │ │ -
2262 vector __tmp(get_allocator());
│ │ │ -
2263 this->_M_impl._M_swap_data(__x._M_impl);
│ │ │ -
2264 __tmp._M_impl._M_swap_data(__x._M_impl);
│ │ │ -
2265 std::__alloc_on_move(_M_get_Tp_allocator(), __x._M_get_Tp_allocator());
│ │ │ -
2266 }
│ │ │ -
2267
│ │ │ -
2268 // Do move assignment when it might not be possible to move source
│ │ │ -
2269 // object's memory, resulting in a linear-time operation.
│ │ │ -
2270 _GLIBCXX20_CONSTEXPR
│ │ │ -
2271 void
│ │ │ -
2272 _M_move_assign(vector&& __x, false_type)
│ │ │ -
2273 {
│ │ │ -
2274 if (__x._M_get_Tp_allocator() == this->_M_get_Tp_allocator())
│ │ │ -
2275 _M_move_assign(std::move(__x), true_type());
│ │ │ -
2276 else
│ │ │ -
2277 {
│ │ │ -
2278 // The rvalue's allocator cannot be moved and is not equal,
│ │ │ -
2279 // so we need to individually move each element.
│ │ │ -
2280 this->_M_assign_aux(std::make_move_iterator(__x.begin()),
│ │ │ -
2281 std::make_move_iterator(__x.end()),
│ │ │ - │ │ │ -
2283 __x.clear();
│ │ │ -
2284 }
│ │ │ -
2285 }
│ │ │ -
2286#endif
│ │ │ -
2287
│ │ │ -
2288 template<typename _Up>
│ │ │ -
2289 _GLIBCXX20_CONSTEXPR
│ │ │ -
2290 _Up*
│ │ │ -
2291 _M_data_ptr(_Up* __ptr) const _GLIBCXX_NOEXCEPT
│ │ │ -
2292 { return __ptr; }
│ │ │ -
2293
│ │ │ -
2294#if __cplusplus >= 201103L
│ │ │ -
2295 template<typename _Ptr>
│ │ │ -
2296 _GLIBCXX20_CONSTEXPR
│ │ │ - │ │ │ -
2298 _M_data_ptr(_Ptr __ptr) const
│ │ │ -
2299 { return empty() ? nullptr : std::__to_address(__ptr); }
│ │ │ -
2300#else
│ │ │ -
2301 template<typename _Ptr>
│ │ │ -
2302 value_type*
│ │ │ -
2303 _M_data_ptr(_Ptr __ptr) const
│ │ │ -
2304 { return empty() ? (value_type*)0 : __ptr.operator->(); }
│ │ │ -
2305#endif
│ │ │ -
2306 };
│ │ │ -
2307
│ │ │ -
2308#if __cpp_deduction_guides >= 201606
│ │ │ -
2309 template<typename _InputIterator, typename _ValT
│ │ │ -
2310 = typename iterator_traits<_InputIterator>::value_type,
│ │ │ -
2311 typename _Allocator = allocator<_ValT>,
│ │ │ -
2312 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
2313 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2314 vector(_InputIterator, _InputIterator, _Allocator = _Allocator())
│ │ │ -
2315 -> vector<_ValT, _Allocator>;
│ │ │ -
2316
│ │ │ -
2317#if __glibcxx_containers_ranges // C++ >= 23
│ │ │ -
2318 template<ranges::input_range _Rg,
│ │ │ -
2319 typename _Alloc = allocator<ranges::range_value_t<_Rg>>>
│ │ │ -
2320 vector(from_range_t, _Rg&&, _Alloc = _Alloc())
│ │ │ -
2321 -> vector<ranges::range_value_t<_Rg>, _Alloc>;
│ │ │ -
2322#endif
│ │ │ -
2323#endif
│ │ │ -
2324
│ │ │ -
2325 /**
│ │ │ -
2326 * @brief Vector equality comparison.
│ │ │ -
2327 * @param __x A %vector.
│ │ │ -
2328 * @param __y A %vector of the same type as @a __x.
│ │ │ -
2329 * @return True iff the size and elements of the vectors are equal.
│ │ │ -
2330 *
│ │ │ -
2331 * This is an equivalence relation. It is linear in the size of the
│ │ │ -
2332 * vectors. Vectors are considered equivalent if their sizes are equal,
│ │ │ -
2333 * and if corresponding elements compare equal.
│ │ │ -
2334 */
│ │ │ -
2335 template<typename _Tp, typename _Alloc>
│ │ │ -
2336 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
2337 inline bool
│ │ │ -
│ │ │ -
2338 operator==(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
│ │ │ -
2339 { return (__x.size() == __y.size()
│ │ │ -
2340 && std::equal(__x.begin(), __x.end(), __y.begin())); }
│ │ │ -
│ │ │ -
2341
│ │ │ -
2342#if __cpp_lib_three_way_comparison // >= C++20
│ │ │ -
2343 /**
│ │ │ -
2344 * @brief Vector ordering relation.
│ │ │ -
2345 * @param __x A `vector`.
│ │ │ -
2346 * @param __y A `vector` of the same type as `__x`.
│ │ │ -
2347 * @return A value indicating whether `__x` is less than, equal to,
│ │ │ -
2348 * greater than, or incomparable with `__y`.
│ │ │ -
2349 *
│ │ │ -
2350 * See `std::lexicographical_compare_three_way()` for how the determination
│ │ │ -
2351 * is made. This operator is used to synthesize relational operators like
│ │ │ -
2352 * `<` and `>=` etc.
│ │ │ -
2353 */
│ │ │ -
2354 template<typename _Tp, typename _Alloc>
│ │ │ -
2355 [[nodiscard]]
│ │ │ -
│ │ │ -
2356 constexpr __detail::__synth3way_t<_Tp>
│ │ │ -
2357 operator<=>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
│ │ │ -
2358 {
│ │ │ -
2359 return std::lexicographical_compare_three_way(__x.begin(), __x.end(),
│ │ │ -
2360 __y.begin(), __y.end(),
│ │ │ -
2361 __detail::__synth3way);
│ │ │ -
2362 }
│ │ │ -
│ │ │ -
2363#else
│ │ │ -
2364 /**
│ │ │ -
2365 * @brief Vector ordering relation.
│ │ │ -
2366 * @param __x A %vector.
│ │ │ -
2367 * @param __y A %vector of the same type as @a __x.
│ │ │ -
2368 * @return True iff @a __x is lexicographically less than @a __y.
│ │ │ -
2369 *
│ │ │ -
2370 * This is a total ordering relation. It is linear in the size of the
│ │ │ -
2371 * vectors. The elements must be comparable with @c <.
│ │ │ -
2372 *
│ │ │ -
2373 * See std::lexicographical_compare() for how the determination is made.
│ │ │ -
2374 */
│ │ │ -
2375 template<typename _Tp, typename _Alloc>
│ │ │ -
2376 _GLIBCXX_NODISCARD inline bool
│ │ │ -
2377 operator<(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
│ │ │ -
2378 { return std::lexicographical_compare(__x.begin(), __x.end(),
│ │ │ -
2379 __y.begin(), __y.end()); }
│ │ │ -
2380
│ │ │ -
2381 /// Based on operator==
│ │ │ -
2382 template<typename _Tp, typename _Alloc>
│ │ │ -
2383 _GLIBCXX_NODISCARD inline bool
│ │ │ -
2384 operator!=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
│ │ │ -
2385 { return !(__x == __y); }
│ │ │ -
2386
│ │ │ -
2387 /// Based on operator<
│ │ │ -
2388 template<typename _Tp, typename _Alloc>
│ │ │ -
2389 _GLIBCXX_NODISCARD inline bool
│ │ │ -
2390 operator>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
│ │ │ -
2391 { return __y < __x; }
│ │ │ -
2392
│ │ │ -
2393 /// Based on operator<
│ │ │ -
2394 template<typename _Tp, typename _Alloc>
│ │ │ -
2395 _GLIBCXX_NODISCARD inline bool
│ │ │ -
2396 operator<=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
│ │ │ -
2397 { return !(__y < __x); }
│ │ │ -
2398
│ │ │ -
2399 /// Based on operator<
│ │ │ -
2400 template<typename _Tp, typename _Alloc>
│ │ │ -
2401 _GLIBCXX_NODISCARD inline bool
│ │ │ -
2402 operator>=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
│ │ │ -
2403 { return !(__x < __y); }
│ │ │ -
2404#endif // three-way comparison
│ │ │ -
2405
│ │ │ -
2406 /// See std::vector::swap().
│ │ │ -
2407 template<typename _Tp, typename _Alloc>
│ │ │ -
2408 _GLIBCXX20_CONSTEXPR
│ │ │ -
2409 inline void
│ │ │ -
│ │ │ - │ │ │ -
2411 _GLIBCXX_NOEXCEPT_IF(noexcept(__x.swap(__y)))
│ │ │ -
2412 { __x.swap(__y); }
│ │ │ -
│ │ │ -
2413
│ │ │ -
2414_GLIBCXX_END_NAMESPACE_CONTAINER
│ │ │ -
2415
│ │ │ -
2416#if __cplusplus >= 201703L
│ │ │ -
2417 namespace __detail::__variant
│ │ │ -
2418 {
│ │ │ -
2419 template<typename> struct _Never_valueless_alt; // see <variant>
│ │ │ -
2420
│ │ │ -
2421 // Provide the strong exception-safety guarantee when emplacing a
│ │ │ -
2422 // vector into a variant, but only if move assignment cannot throw.
│ │ │ -
2423 template<typename _Tp, typename _Alloc>
│ │ │ -
2424 struct _Never_valueless_alt<_GLIBCXX_STD_C::vector<_Tp, _Alloc>>
│ │ │ -
2425 : std::is_nothrow_move_assignable<_GLIBCXX_STD_C::vector<_Tp, _Alloc>>
│ │ │ -
2426 { };
│ │ │ -
2427 } // namespace __detail::__variant
│ │ │ -
2428#endif // C++17
│ │ │ -
2429
│ │ │ -
2430_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
2431} // namespace std
│ │ │ -
2432
│ │ │ -
2433#endif /* _STL_VECTOR_H */
│ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
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:866
│ │ │ -
__bool_constant< true > true_type
The type used as a compile-time boolean with true value.
Definition type_traits:116
│ │ │ -
__bool_constant< false > false_type
The type used as a compile-time boolean with false value.
Definition type_traits:119
│ │ │ -
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 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 & max(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 iterator_traits< _Iter >::iterator_category __iterator_category(const _Iter &)
│ │ │ +
553 _Sp_atomic(const _Sp_atomic&) = delete;
│ │ │ +
554 void operator=(const _Sp_atomic&) = delete;
│ │ │ +
555
│ │ │ +
556 value_type
│ │ │ +
557 load(memory_order __o) const noexcept
│ │ │ +
558 {
│ │ │ +
559 __glibcxx_assert(__o != memory_order_release
│ │ │ +
560 && __o != memory_order_acq_rel);
│ │ │ +
561 // Ensure that the correct value of _M_ptr is visible after locking,
│ │ │ +
562 // by upgrading relaxed or consume to acquire.
│ │ │ +
563 if (__o != memory_order_seq_cst)
│ │ │ +
564 __o = memory_order_acquire;
│ │ │ +
565
│ │ │ +
566 value_type __ret;
│ │ │ +
567 auto __pi = _M_refcount.lock(__o);
│ │ │ +
568 __ret._M_ptr = _M_ptr;
│ │ │ +
569 __ret._M_refcount._M_pi = _S_add_ref(__pi);
│ │ │ +
570 _M_refcount.unlock(memory_order_relaxed);
│ │ │ +
571 return __ret;
│ │ │ +
572 }
│ │ │ +
573
│ │ │ +
574 void
│ │ │ +
575 swap(value_type& __r, memory_order __o) noexcept
│ │ │ +
576 {
│ │ │ +
577 _M_refcount.lock(memory_order_acquire);
│ │ │ +
578 std::swap(_M_ptr, __r._M_ptr);
│ │ │ +
579 _M_refcount._M_swap_unlock(__r._M_refcount, __o);
│ │ │ +
580 }
│ │ │ +
581
│ │ │ +
582 bool
│ │ │ +
583 compare_exchange_strong(value_type& __expected, value_type __desired,
│ │ │ +
584 memory_order __o, memory_order __o2) noexcept
│ │ │ +
585 {
│ │ │ +
586 bool __result = true;
│ │ │ +
587 auto __pi = _M_refcount.lock(memory_order_acquire);
│ │ │ +
588 if (_M_ptr == __expected._M_ptr
│ │ │ +
589 && __pi == __expected._M_refcount._M_pi)
│ │ │ +
590 {
│ │ │ +
591 _M_ptr = __desired._M_ptr;
│ │ │ +
592 _M_refcount._M_swap_unlock(__desired._M_refcount, __o);
│ │ │ +
593 }
│ │ │ +
594 else
│ │ │ +
595 {
│ │ │ +
596 _Tp __sink = std::move(__expected);
│ │ │ +
597 __expected._M_ptr = _M_ptr;
│ │ │ +
598 __expected._M_refcount._M_pi = _S_add_ref(__pi);
│ │ │ +
599 _M_refcount.unlock(__o2);
│ │ │ +
600 __result = false;
│ │ │ +
601 }
│ │ │ +
602 return __result;
│ │ │ +
603 }
│ │ │ +
604
│ │ │ +
605#if __glibcxx_atomic_wait
│ │ │ +
606 void
│ │ │ +
607 wait(value_type __old, memory_order __o) const noexcept
│ │ │ +
608 {
│ │ │ +
609 auto __pi = _M_refcount.lock(memory_order_acquire);
│ │ │ +
610 if (_M_ptr == __old._M_ptr && __pi == __old._M_refcount._M_pi)
│ │ │ +
611 _M_refcount._M_wait_unlock(__o);
│ │ │ +
612 else
│ │ │ +
613 _M_refcount.unlock(memory_order_relaxed);
│ │ │ +
614 }
│ │ │ +
615
│ │ │ +
616 void
│ │ │ +
617 notify_one() noexcept
│ │ │ +
618 {
│ │ │ +
619 _M_refcount.notify_one();
│ │ │ +
620 }
│ │ │ +
621
│ │ │ +
622 void
│ │ │ +
623 notify_all() noexcept
│ │ │ +
624 {
│ │ │ +
625 _M_refcount.notify_all();
│ │ │ +
626 }
│ │ │ +
627#endif
│ │ │ +
628 };
│ │ │ +
629
│ │ │ +
630 template<typename _Tp>
│ │ │ +
631 struct atomic<shared_ptr<_Tp>>
│ │ │ +
632 {
│ │ │ +
633 public:
│ │ │ +
634 using value_type = shared_ptr<_Tp>;
│ │ │ +
635
│ │ │ +
636 static constexpr bool is_always_lock_free = false;
│ │ │ +
637
│ │ │ +
638 bool
│ │ │ +
639 is_lock_free() const noexcept
│ │ │ +
640 { return false; }
│ │ │ +
641
│ │ │ +
642 constexpr atomic() noexcept = default;
│ │ │ +
643
│ │ │ +
644 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
645 // 3661. constinit atomic<shared_ptr<T>> a(nullptr); should work
│ │ │ +
646 constexpr atomic(nullptr_t) noexcept : atomic() { }
│ │ │ +
647
│ │ │ +
648 atomic(shared_ptr<_Tp> __r) noexcept
│ │ │ +
649 : _M_impl(std::move(__r))
│ │ │ +
650 { }
│ │ │ +
651
│ │ │ +
652 atomic(const atomic&) = delete;
│ │ │ +
653 void operator=(const atomic&) = delete;
│ │ │ +
654
│ │ │ +
655 shared_ptr<_Tp>
│ │ │ +
656 load(memory_order __o = memory_order_seq_cst) const noexcept
│ │ │ +
657 { return _M_impl.load(__o); }
│ │ │ +
658
│ │ │ +
659 operator shared_ptr<_Tp>() const noexcept
│ │ │ +
660 { return _M_impl.load(memory_order_seq_cst); }
│ │ │ +
661
│ │ │ +
662 void
│ │ │ +
663 store(shared_ptr<_Tp> __desired,
│ │ │ +
664 memory_order __o = memory_order_seq_cst) noexcept
│ │ │ +
665 { _M_impl.swap(__desired, __o); }
│ │ │ +
666
│ │ │ +
667 void
│ │ │ +
668 operator=(shared_ptr<_Tp> __desired) noexcept
│ │ │ +
669 { _M_impl.swap(__desired, memory_order_seq_cst); }
│ │ │ +
670
│ │ │ +
671 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
672 // 3893. LWG 3661 broke atomic<shared_ptr<T>> a; a = nullptr;
│ │ │ +
673 void
│ │ │ +
674 operator=(nullptr_t) noexcept
│ │ │ +
675 { store(nullptr); }
│ │ │ +
676
│ │ │ +
677 shared_ptr<_Tp>
│ │ │ +
678 exchange(shared_ptr<_Tp> __desired,
│ │ │ +
679 memory_order __o = memory_order_seq_cst) noexcept
│ │ │ +
680 {
│ │ │ +
681 _M_impl.swap(__desired, __o);
│ │ │ +
682 return __desired;
│ │ │ +
683 }
│ │ │ +
684
│ │ │ +
685 bool
│ │ │ +
686 compare_exchange_strong(shared_ptr<_Tp>& __expected,
│ │ │ +
687 shared_ptr<_Tp> __desired,
│ │ │ +
688 memory_order __o, memory_order __o2) noexcept
│ │ │ +
689 {
│ │ │ +
690 return _M_impl.compare_exchange_strong(__expected, __desired, __o, __o2);
│ │ │ +
691 }
│ │ │ +
692
│ │ │ +
693 bool
│ │ │ +
694 compare_exchange_strong(value_type& __expected, value_type __desired,
│ │ │ +
695 memory_order __o = memory_order_seq_cst) noexcept
│ │ │ +
696 {
│ │ │ +
697 memory_order __o2;
│ │ │ +
698 switch (__o)
│ │ │ +
699 {
│ │ │ +
700 case memory_order_acq_rel:
│ │ │ +
701 __o2 = memory_order_acquire;
│ │ │ +
702 break;
│ │ │ +
703 case memory_order_release:
│ │ │ +
704 __o2 = memory_order_relaxed;
│ │ │ +
705 break;
│ │ │ +
706 default:
│ │ │ +
707 __o2 = __o;
│ │ │ +
708 }
│ │ │ +
709 return compare_exchange_strong(__expected, std::move(__desired),
│ │ │ +
710 __o, __o2);
│ │ │ +
711 }
│ │ │ +
712
│ │ │ +
713 bool
│ │ │ +
714 compare_exchange_weak(value_type& __expected, value_type __desired,
│ │ │ +
715 memory_order __o, memory_order __o2) noexcept
│ │ │ +
716 {
│ │ │ +
717 return compare_exchange_strong(__expected, std::move(__desired),
│ │ │ +
718 __o, __o2);
│ │ │ +
719 }
│ │ │ +
720
│ │ │ +
721 bool
│ │ │ +
722 compare_exchange_weak(value_type& __expected, value_type __desired,
│ │ │ +
723 memory_order __o = memory_order_seq_cst) noexcept
│ │ │ +
724 {
│ │ │ +
725 return compare_exchange_strong(__expected, std::move(__desired), __o);
│ │ │ +
726 }
│ │ │ +
727
│ │ │ +
728#if __glibcxx_atomic_wait
│ │ │ +
729 void
│ │ │ +
730 wait(value_type __old,
│ │ │ +
731 memory_order __o = memory_order_seq_cst) const noexcept
│ │ │ +
732 {
│ │ │ +
733 _M_impl.wait(std::move(__old), __o);
│ │ │ +
734 }
│ │ │ +
735
│ │ │ +
736 void
│ │ │ +
737 notify_one() noexcept
│ │ │ +
738 {
│ │ │ +
739 _M_impl.notify_one();
│ │ │ +
740 }
│ │ │ +
741
│ │ │ +
742 void
│ │ │ +
743 notify_all() noexcept
│ │ │ +
744 {
│ │ │ +
745 _M_impl.notify_all();
│ │ │ +
746 }
│ │ │ +
747#endif
│ │ │ +
748
│ │ │ +
749 private:
│ │ │ +
750 _Sp_atomic<shared_ptr<_Tp>> _M_impl;
│ │ │ +
751 };
│ │ │ +
752
│ │ │ +
753 template<typename _Tp>
│ │ │ +
754 struct atomic<weak_ptr<_Tp>>
│ │ │ +
755 {
│ │ │ +
756 public:
│ │ │ +
757 using value_type = weak_ptr<_Tp>;
│ │ │ +
758
│ │ │ +
759 static constexpr bool is_always_lock_free = false;
│ │ │ +
760
│ │ │ +
761 bool
│ │ │ +
762 is_lock_free() const noexcept
│ │ │ +
763 { return false; }
│ │ │ +
764
│ │ │ +
765 constexpr atomic() noexcept = default;
│ │ │ +
766
│ │ │ +
767 atomic(weak_ptr<_Tp> __r) noexcept
│ │ │ +
768 : _M_impl(move(__r))
│ │ │ +
769 { }
│ │ │ +
770
│ │ │ +
771 atomic(const atomic&) = delete;
│ │ │ +
772 void operator=(const atomic&) = delete;
│ │ │ +
773
│ │ │ +
774 weak_ptr<_Tp>
│ │ │ +
775 load(memory_order __o = memory_order_seq_cst) const noexcept
│ │ │ +
776 { return _M_impl.load(__o); }
│ │ │ +
777
│ │ │ +
778 operator weak_ptr<_Tp>() const noexcept
│ │ │ +
779 { return _M_impl.load(memory_order_seq_cst); }
│ │ │ +
780
│ │ │ +
781 void
│ │ │ +
782 store(weak_ptr<_Tp> __desired,
│ │ │ +
783 memory_order __o = memory_order_seq_cst) noexcept
│ │ │ +
784 { _M_impl.swap(__desired, __o); }
│ │ │ +
785
│ │ │ +
786 void
│ │ │ +
787 operator=(weak_ptr<_Tp> __desired) noexcept
│ │ │ +
788 { _M_impl.swap(__desired, memory_order_seq_cst); }
│ │ │ +
789
│ │ │ +
790 weak_ptr<_Tp>
│ │ │ +
791 exchange(weak_ptr<_Tp> __desired,
│ │ │ +
792 memory_order __o = memory_order_seq_cst) noexcept
│ │ │ +
793 {
│ │ │ +
794 _M_impl.swap(__desired, __o);
│ │ │ +
795 return __desired;
│ │ │ +
796 }
│ │ │ +
797
│ │ │ +
798 bool
│ │ │ +
799 compare_exchange_strong(weak_ptr<_Tp>& __expected,
│ │ │ +
800 weak_ptr<_Tp> __desired,
│ │ │ +
801 memory_order __o, memory_order __o2) noexcept
│ │ │ +
802 {
│ │ │ +
803 return _M_impl.compare_exchange_strong(__expected, __desired, __o, __o2);
│ │ │ +
804 }
│ │ │ +
805
│ │ │ +
806 bool
│ │ │ +
807 compare_exchange_strong(value_type& __expected, value_type __desired,
│ │ │ +
808 memory_order __o = memory_order_seq_cst) noexcept
│ │ │ +
809 {
│ │ │ +
810 memory_order __o2;
│ │ │ +
811 switch (__o)
│ │ │ +
812 {
│ │ │ +
813 case memory_order_acq_rel:
│ │ │ +
814 __o2 = memory_order_acquire;
│ │ │ +
815 break;
│ │ │ +
816 case memory_order_release:
│ │ │ +
817 __o2 = memory_order_relaxed;
│ │ │ +
818 break;
│ │ │ +
819 default:
│ │ │ +
820 __o2 = __o;
│ │ │ +
821 }
│ │ │ +
822 return compare_exchange_strong(__expected, std::move(__desired),
│ │ │ +
823 __o, __o2);
│ │ │ +
824 }
│ │ │ +
825
│ │ │ +
826 bool
│ │ │ +
827 compare_exchange_weak(value_type& __expected, value_type __desired,
│ │ │ +
828 memory_order __o, memory_order __o2) noexcept
│ │ │ +
829 {
│ │ │ +
830 return compare_exchange_strong(__expected, std::move(__desired),
│ │ │ +
831 __o, __o2);
│ │ │ +
832 }
│ │ │ +
833
│ │ │ +
834 bool
│ │ │ +
835 compare_exchange_weak(value_type& __expected, value_type __desired,
│ │ │ +
836 memory_order __o = memory_order_seq_cst) noexcept
│ │ │ +
837 {
│ │ │ +
838 return compare_exchange_strong(__expected, std::move(__desired), __o);
│ │ │ +
839 }
│ │ │ +
840
│ │ │ +
841#if __glibcxx_atomic_wait
│ │ │ +
842 void
│ │ │ +
843 wait(value_type __old,
│ │ │ +
844 memory_order __o = memory_order_seq_cst) const noexcept
│ │ │ +
845 {
│ │ │ +
846 _M_impl.wait(std::move(__old), __o);
│ │ │ +
847 }
│ │ │ +
848
│ │ │ +
849 void
│ │ │ +
850 notify_one() noexcept
│ │ │ +
851 {
│ │ │ +
852 _M_impl.notify_one();
│ │ │ +
853 }
│ │ │ +
854
│ │ │ +
855 void
│ │ │ +
856 notify_all() noexcept
│ │ │ +
857 {
│ │ │ +
858 _M_impl.notify_all();
│ │ │ +
859 }
│ │ │ +
860#endif
│ │ │ +
861
│ │ │ +
862 private:
│ │ │ +
863 _Sp_atomic<weak_ptr<_Tp>> _M_impl;
│ │ │ +
864 };
│ │ │ +
865 /// @} group pointer_abstractions
│ │ │ +
866#endif // C++20
│ │ │ +
867
│ │ │ +
868_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
869} // namespace
│ │ │ +
870
│ │ │ +
871#endif // _SHARED_PTR_ATOMIC_H
│ │ │ + │ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:138
│ │ │ +
memory_order
Enumeration for memory_order.
Definition atomic_base.h:66
│ │ │ +
void lock(_L1 &__l1, _L2 &__l2, _L3 &... __l3)
Generic lock.
Definition mutex:700
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
constexpr iterator_traits< _InputIterator >::difference_type distance(_InputIterator __first, _InputIterator __last)
A generalization of pointer arithmetic.
│ │ │ -
constexpr void _Destroy(_ForwardIterator __first, _ForwardIterator __last)
│ │ │ - │ │ │ -
is_nothrow_default_constructible
Definition type_traits:1245
│ │ │ -
is_nothrow_move_assignable
Definition type_traits:1331
│ │ │ -
typename __detected_or_t< is_empty< _Alloc >, __equal, _Alloc >::type is_always_equal
Whether all instances of the allocator type compare equal.
│ │ │ -
The standard allocator, as per C++03 [20.4.1].
Definition allocator.h:134
│ │ │ - │ │ │ -
Marking input iterators.
│ │ │ -
Forward iterators support a superset of input iterator operations.
│ │ │ -
Random-access iterators support a superset of bidirectional iterator operations.
│ │ │ -
Common iterator class.
│ │ │ -
See bits/stl_deque.h's _Deque_base for an explanation.
Definition stl_vector.h:92
│ │ │ -
A standard container which offers fixed time access to individual elements in any order.
Definition stl_vector.h:459
│ │ │ -
constexpr iterator insert(const_iterator __position, const value_type &__x)
Inserts given value into vector before specified iterator.
Definition vector.tcc:135
│ │ │ -
constexpr void push_back(const value_type &__x)
Add data to the end of the vector.
│ │ │ -
constexpr void resize(size_type __new_size, const value_type &__x)
Resizes the vector to the specified number of elements.
│ │ │ -
constexpr vector & operator=(initializer_list< value_type > __l)
Vector list assignment operator.
Definition stl_vector.h:855
│ │ │ -
constexpr reverse_iterator rbegin() noexcept
│ │ │ -
constexpr iterator end() noexcept
│ │ │ -
constexpr vector(const vector &__x)
Vector copy constructor.
Definition stl_vector.h:631
│ │ │ -
vector()=default
Creates a vector with no elements.
│ │ │ -
constexpr iterator emplace(const_iterator __position, _Args &&... __args)
Inserts an object in vector before specified iterator.
│ │ │ -
constexpr iterator insert(const_iterator __position, value_type &&__x)
Inserts given rvalue into vector before specified iterator.
│ │ │ -
constexpr const_reverse_iterator rend() const noexcept
│ │ │ -
constexpr iterator begin() noexcept
Definition stl_vector.h:998
│ │ │ -
constexpr size_type capacity() const noexcept
│ │ │ -
constexpr iterator insert(const_iterator __position, initializer_list< value_type > __l)
Inserts an initializer_list into the vector.
│ │ │ -
constexpr ~vector() noexcept
Definition stl_vector.h:800
│ │ │ -
constexpr const_iterator begin() const noexcept
│ │ │ -
constexpr void assign(_InputIterator __first, _InputIterator __last)
Assigns a range to a vector.
Definition stl_vector.h:895
│ │ │ -
constexpr void assign(size_type __n, const value_type &__val)
Assigns a given value to a vector.
Definition stl_vector.h:875
│ │ │ -
constexpr iterator erase(const_iterator __first, const_iterator __last)
Remove a range of elements.
│ │ │ -
constexpr void swap(vector &__x) noexcept
Swaps data with another vector.
│ │ │ -
constexpr vector(vector &&__rv, const __type_identity_t< allocator_type > &__m) noexcept(noexcept(vector(std::declval< vector && >(), std::declval< const allocator_type & >(), std::declval< typename _Alloc_traits::is_always_equal >())))
Move constructor with alternative allocator.
Definition stl_vector.h:689
│ │ │ -
constexpr _Tp * data() noexcept
│ │ │ -
constexpr vector(size_type __n, const allocator_type &__a=allocator_type())
Creates a vector with default constructed elements.
Definition stl_vector.h:586
│ │ │ -
constexpr const_reference front() const noexcept
│ │ │ -
constexpr vector & operator=(const vector &__x)
Vector assignment operator.
│ │ │ -
constexpr void pop_back() noexcept
Removes last element.
│ │ │ -
constexpr vector & operator=(vector &&__x) noexcept(_Alloc_traits::_S_nothrow_move())
Vector move assignment operator.
Definition stl_vector.h:833
│ │ │ -
constexpr const_reference back() const noexcept
│ │ │ -
constexpr void reserve(size_type __n)
Attempt to preallocate enough memory for specified number of elements.
Definition vector.tcc:68
│ │ │ -
constexpr reference at(size_type __n)
Provides access to the data contained in the vector.
│ │ │ -
constexpr void resize(size_type __new_size)
Resizes the vector to the specified number of elements.
│ │ │ -
constexpr void _M_range_check(size_type __n) const
Safety check used only from at().
│ │ │ -
constexpr reference front() noexcept
│ │ │ -
constexpr iterator insert(const_iterator __position, size_type __n, const value_type &__x)
Inserts a number of copies of given data into the vector.
│ │ │ -
constexpr const_reference operator[](size_type __n) const noexcept
Subscript access to the data contained in the vector.
│ │ │ -
constexpr vector(const allocator_type &__a) noexcept
Creates a vector with no elements.
Definition stl_vector.h:572
│ │ │ -
constexpr iterator erase(const_iterator __position)
Remove element at given position.
│ │ │ -
constexpr pointer _M_allocate_and_copy(size_type __n, _ForwardIterator __first, _ForwardIterator __last)
│ │ │ -
constexpr bool empty() const noexcept
│ │ │ -
constexpr reverse_iterator rend() noexcept
│ │ │ -
constexpr const_reverse_iterator rbegin() const noexcept
│ │ │ -
constexpr const_reverse_iterator crbegin() const noexcept
│ │ │ -
constexpr const_reference at(size_type __n) const
Provides access to the data contained in the vector.
│ │ │ -
constexpr const_iterator cbegin() const noexcept
│ │ │ -
constexpr vector(_InputIterator __first, _InputIterator __last, const allocator_type &__a=allocator_type())
Builds a vector from a range.
Definition stl_vector.h:736
│ │ │ -
constexpr vector(initializer_list< value_type > __l, const allocator_type &__a=allocator_type())
Builds a vector from an initializer list.
Definition stl_vector.h:708
│ │ │ -
constexpr const_iterator end() const noexcept
│ │ │ -
vector(vector &&) noexcept=default
Vector move constructor.
│ │ │ -
constexpr iterator insert(const_iterator __position, _InputIterator __first, _InputIterator __last)
Inserts a range into the vector.
│ │ │ -
constexpr void clear() noexcept
│ │ │ -
constexpr void assign(initializer_list< value_type > __l)
Assigns an initializer list to a vector.
Definition stl_vector.h:922
│ │ │ -
constexpr allocator_type get_allocator() const noexcept
Get a copy of the memory allocation object.
Definition stl_vector.h:317
│ │ │ -
constexpr size_type size() const noexcept
│ │ │ -
constexpr vector(size_type __n, const value_type &__value, const allocator_type &__a=allocator_type())
Creates a vector with copies of an exemplar element.
Definition stl_vector.h:599
│ │ │ -
constexpr reference back() noexcept
│ │ │ -
constexpr const_reverse_iterator crend() const noexcept
│ │ │ -
constexpr const_iterator cend() const noexcept
│ │ │ -
constexpr reference operator[](size_type __n) noexcept
Subscript access to the data contained in the vector.
│ │ │ -
constexpr void shrink_to_fit()
│ │ │ -
constexpr size_type max_size() const noexcept
│ │ │ - │ │ │ -
Uniform interface to C++98 and C++11 allocators.
│ │ │ -
static constexpr size_type max_size(const _Tp_alloc_type &__a) noexcept
The maximum supported allocation size.
│ │ │ +
A smart pointer with reference-counted copy semantics.
│ │ │ + │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -stl_vector.h │ │ │ │ +shared_ptr_atomic.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 -*- C++ -*- │ │ │ │ +1// shared_ptr atomic access -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2001-2025 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2014-2025 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,2756 +21,877 @@ │ │ │ │ 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/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 │ │ │ │ -59#include <_b_i_t_s_/_s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___f_u_n_c_s_._h> │ │ │ │ -60#include <_b_i_t_s_/_f_u_n_c_t_e_x_c_e_p_t_._h> │ │ │ │ -61#include <_b_i_t_s_/_c_o_n_c_e_p_t___c_h_e_c_k_._h> │ │ │ │ -62#if __cplusplus >= 201103L │ │ │ │ -63#include <_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t> │ │ │ │ -64#endif │ │ │ │ -65#if __cplusplus >= 202002L │ │ │ │ -66# include <_c_o_m_p_a_r_e> │ │ │ │ -67#endif │ │ │ │ -68#if __glibcxx_concepts // C++ >= C++20 │ │ │ │ -69# include <_b_i_t_s_/_r_a_n_g_e_s___b_a_s_e_._h> // ranges::distance │ │ │ │ -70#endif │ │ │ │ -71#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -72# include <_b_i_t_s_/_r_a_n_g_e_s___a_l_g_o_b_a_s_e_._h> // ranges::copy │ │ │ │ -73# include <_b_i_t_s_/_r_a_n_g_e_s___u_t_i_l_._h> // ranges::subrange │ │ │ │ -74#endif │ │ │ │ -75 │ │ │ │ -76#include <_d_e_b_u_g_/_a_s_s_e_r_t_i_o_n_s_._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 _s_t_d _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 │ │ │ │ -_9_1 struct ___V_e_c_t_o_r___b_a_s_e │ │ │ │ -92 { │ │ │ │ -93 typedef typename _____g_n_u___c_x_x_:_:_____a_l_l_o_c___t_r_a_i_t_s_<___A_l_l_o_c_>_:_:_t_e_m_p_l_a_t_e │ │ │ │ -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; │ │ │ │ -103 │ │ │ │ -104 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -105 _Vector_impl_data() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -106 : _M_start(), _M_finish(), _M_end_of_storage() │ │ │ │ -107 { } │ │ │ │ -108 │ │ │ │ -109#if __cplusplus >= 201103L │ │ │ │ -110 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -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 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -118 void │ │ │ │ -119 _M_copy_data(_Vector_impl_data const& __x) ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -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 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -127 void │ │ │ │ -128 _M_swap_data(_Vector_impl_data& __x) ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -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 _____t_m_p; │ │ │ │ -133 _____t_m_p._M_copy_data(*this); │ │ │ │ -134 _M_copy_data(__x); │ │ │ │ -135 __x._M_copy_data(_____t_m_p); │ │ │ │ -136 } │ │ │ │ -137 }; │ │ │ │ +25/** @file bits/shared_ptr_atomic.h │ │ │ │ +26 * This is an internal header file, included by other library headers. │ │ │ │ +27 * Do not attempt to use it directly. @headername{memory} │ │ │ │ +28 */ │ │ │ │ +29 │ │ │ │ +30#ifndef _SHARED_PTR_ATOMIC_H │ │ │ │ +31#define _SHARED_PTR_ATOMIC_H 1 │ │ │ │ +32 │ │ │ │ +33#include <_b_i_t_s_/_a_t_o_m_i_c___b_a_s_e_._h> │ │ │ │ +34#include │ │ │ │ +35 │ │ │ │ +36// Annotations for the custom locking in atomic>. │ │ │ │ +37#if defined _GLIBCXX_TSAN && __has_include() │ │ │ │ +38#include │ │ │ │ +39#define _GLIBCXX_TSAN_MUTEX_DESTROY(X) \ │ │ │ │ +40 __tsan_mutex_destroy(X, __tsan_mutex_not_static) │ │ │ │ +41#define _GLIBCXX_TSAN_MUTEX_TRY_LOCK(X) \ │ │ │ │ +42 __tsan_mutex_pre_lock(X, __tsan_mutex_not_static|__tsan_mutex_try_lock) │ │ │ │ +43#define _GLIBCXX_TSAN_MUTEX_TRY_LOCK_FAILED(X) __tsan_mutex_post_lock(X, \ │ │ │ │ +44 __tsan_mutex_not_static|__tsan_mutex_try_lock_failed, 0) │ │ │ │ +45#define _GLIBCXX_TSAN_MUTEX_LOCKED(X) \ │ │ │ │ +46 __tsan_mutex_post_lock(X, __tsan_mutex_not_static, 0) │ │ │ │ +47#define _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK(X) __tsan_mutex_pre_unlock(X, 0) │ │ │ │ +48#define _GLIBCXX_TSAN_MUTEX_POST_UNLOCK(X) __tsan_mutex_post_unlock(X, 0) │ │ │ │ +49#define _GLIBCXX_TSAN_MUTEX_PRE_SIGNAL(X) __tsan_mutex_pre_signal(X, 0) │ │ │ │ +50#define _GLIBCXX_TSAN_MUTEX_POST_SIGNAL(X) __tsan_mutex_post_signal(X, 0) │ │ │ │ +51#else │ │ │ │ +52#define _GLIBCXX_TSAN_MUTEX_DESTROY(X) │ │ │ │ +53#define _GLIBCXX_TSAN_MUTEX_TRY_LOCK(X) │ │ │ │ +54#define _GLIBCXX_TSAN_MUTEX_TRY_LOCK_FAILED(X) │ │ │ │ +55#define _GLIBCXX_TSAN_MUTEX_LOCKED(X) │ │ │ │ +56#define _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK(X) │ │ │ │ +57#define _GLIBCXX_TSAN_MUTEX_POST_UNLOCK(X) │ │ │ │ +58#define _GLIBCXX_TSAN_MUTEX_PRE_SIGNAL(X) │ │ │ │ +59#define _GLIBCXX_TSAN_MUTEX_POST_SIGNAL(X) │ │ │ │ +60#endif │ │ │ │ +61 │ │ │ │ +62namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +63{ │ │ │ │ +64_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +65 │ │ │ │ +66 /** │ │ │ │ +67 * @addtogroup pointer_abstractions │ │ │ │ +68 * @relates shared_ptr │ │ │ │ +69 * @{ │ │ │ │ +70 */ │ │ │ │ +71 │ │ │ │ +72 /// @cond undocumented │ │ │ │ +73 │ │ │ │ +74 struct _Sp_locker │ │ │ │ +75 { │ │ │ │ +76 _Sp_locker(const _Sp_locker&) = delete; │ │ │ │ +77 _Sp_locker& operator=(const _Sp_locker&) = delete; │ │ │ │ +78 │ │ │ │ +79#ifdef __GTHREADS │ │ │ │ +80 explicit │ │ │ │ +81 _Sp_locker(const void*) noexcept; │ │ │ │ +82 _Sp_locker(const void*, const void*) noexcept; │ │ │ │ +83 ~_Sp_locker(); │ │ │ │ +84 │ │ │ │ +85 private: │ │ │ │ +86 unsigned char _M_key1; │ │ │ │ +87 unsigned char _M_key2; │ │ │ │ +88#else │ │ │ │ +89 explicit _Sp_locker(const void*, const void* = nullptr) { } │ │ │ │ +90#endif │ │ │ │ +91 }; │ │ │ │ +92 │ │ │ │ +93 /// @endcond │ │ │ │ +94 │ │ │ │ +95 /** │ │ │ │ +96 * @brief Report whether shared_ptr atomic operations are lock-free. │ │ │ │ +97 * @param __p A non-null pointer to a shared_ptr object. │ │ │ │ +98 * @return True if atomic access to @c *__p is lock-free, false otherwise. │ │ │ │ +99 * @{ │ │ │ │ +100 */ │ │ │ │ +101 template │ │ │ │ +102 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +103 inline bool │ │ │ │ +_1_0_4 atomic_is_lock_free(_c_o_n_s_t __shared_ptr<_Tp, ___L_p>*) │ │ │ │ +105 { │ │ │ │ +106#ifdef __GTHREADS │ │ │ │ +107 return __gthread_active_p() == 0; │ │ │ │ +108#else │ │ │ │ +109 return true; │ │ │ │ +110#endif │ │ │ │ +111 } │ │ │ │ +112 │ │ │ │ +113 template │ │ │ │ +114 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +115 inline bool │ │ │ │ +_1_1_6 atomic_is_lock_free(_c_o_n_s_t _s_h_a_r_e_d___p_t_r<_Tp>* __p) │ │ │ │ +117 { return _s_t_d_:_:_a_t_o_m_i_c___i_s___l_o_c_k___f_r_e_e_<___T_p_,_ _____d_e_f_a_u_l_t___l_o_c_k___p_o_l_i_c_y_>(__p); } │ │ │ │ +118 │ │ │ │ +119 /// @} │ │ │ │ +120 │ │ │ │ +121 /** │ │ │ │ +122 * @brief Atomic load for shared_ptr objects. │ │ │ │ +123 * @param __p A non-null pointer to a shared_ptr object. │ │ │ │ +124 * @return @c *__p │ │ │ │ +125 * │ │ │ │ +126 * The memory order shall not be `memory_order_release` or │ │ │ │ +127 * `memory_order_acq_rel`. │ │ │ │ +128 * @{ │ │ │ │ +129 */ │ │ │ │ +130 template │ │ │ │ +131 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +132 inline shared_ptr<_Tp> │ │ │ │ +_1_3_3 atomic_load_explicit(_c_o_n_s_t _s_h_a_r_e_d___p_t_r<_Tp>* __p, _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +134 { │ │ │ │ +135 ___S_p___l_o_c_k_e_r _____l_o_c_k{__p}; │ │ │ │ +136 return *__p; │ │ │ │ +137 } │ │ │ │ 138 │ │ │ │ -139 struct _Vector_impl │ │ │ │ -140 : public _Tp_alloc_type, public _Vector_impl_data │ │ │ │ -141 { │ │ │ │ -142 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -143 _Vector_impl() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T___I_F( │ │ │ │ -144 _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_<___T_p___a_l_l_o_c___t_y_p_e_>_:_:_v_a_l_u_e) │ │ │ │ -145#if __cpp_lib_concepts │ │ │ │ -146 requires _i_s___d_e_f_a_u_l_t___c_o_n_s_t_r_u_c_t_i_b_l_e___v_<___T_p___a_l_l_o_c___t_y_p_e_> │ │ │ │ -147#endif │ │ │ │ -148 : _Tp_alloc_type() │ │ │ │ -149 { } │ │ │ │ -150 │ │ │ │ -151 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -152 _Vector_impl(_Tp_alloc_type const& __a) ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -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 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -160 _Vector_impl(_Vector_impl&& __x) noexcept │ │ │ │ -161 : _Tp_alloc_type(_s_t_d_:_:_m_o_v_e(__x)), _Vector_impl_data(_s_t_d_:_:_m_o_v_e(__x)) │ │ │ │ -162 { } │ │ │ │ -163 │ │ │ │ -164 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -165 _Vector_impl(_Tp_alloc_type&& __a) noexcept │ │ │ │ -166 : _Tp_alloc_type(_s_t_d_:_:_m_o_v_e(__a)) │ │ │ │ -167 { } │ │ │ │ -168 │ │ │ │ -169 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -170 _Vector_impl(_Tp_alloc_type&& __a, _Vector_impl&& _____r_v) noexcept │ │ │ │ -171 : _Tp_alloc_type(_s_t_d_:_:_m_o_v_e(__a)), _Vector_impl_data(_s_t_d_:_:_m_o_v_e(_____r_v)) │ │ │ │ -172 { } │ │ │ │ -173#endif │ │ │ │ -174 │ │ │ │ -175#if _GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR │ │ │ │ -176 template │ │ │ │ -177 struct ___A_s_a_n │ │ │ │ -178 { │ │ │ │ -179 typedef typename _____g_n_u___c_x_x_:_:_____a_l_l_o_c___t_r_a_i_t_s_<___T_p___a_l_l_o_c___t_y_p_e_> │ │ │ │ -180 ::size_type size_type; │ │ │ │ -181 │ │ │ │ -182 static ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R void │ │ │ │ -183 ___S___s_h_r_i_n_k(_Vector_impl&, size_type) { } │ │ │ │ -184 static ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R void │ │ │ │ -185 ___S___o_n___d_e_a_l_l_o_c(_Vector_impl&) { } │ │ │ │ -186 │ │ │ │ -187 typedef _Vector_impl& ___R_e_i_n_i_t; │ │ │ │ -188 │ │ │ │ -189 struct ___G_r_o_w │ │ │ │ -190 { │ │ │ │ -191 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R ___G_r_o_w(_Vector_impl&, size_type) { } │ │ │ │ -192 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R void ___M___g_r_e_w(size_type) { } │ │ │ │ -193 }; │ │ │ │ -194 }; │ │ │ │ -195 │ │ │ │ -196 // Enable ASan annotations for memory obtained from std::allocator. │ │ │ │ -197 template │ │ │ │ -198 struct ___A_s_a_n<_a_l_l_o_c_a_t_o_r<_Up> > │ │ │ │ -199 { │ │ │ │ -200 typedef typename _____g_n_u___c_x_x_:_:_____a_l_l_o_c___t_r_a_i_t_s_<___T_p___a_l_l_o_c___t_y_p_e_> │ │ │ │ -201 ::size_type size_type; │ │ │ │ -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 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R void │ │ │ │ -206 ___S___a_d_j_u_s_t(_Vector_impl& _____i_m_p_l, pointer _____p_r_e_v, pointer _____c_u_r_r) │ │ │ │ -207 { │ │ │ │ -208#if __cpp_lib_is_constant_evaluated │ │ │ │ -209 if (_s_t_d_:_:_i_s___c_o_n_s_t_a_n_t___e_v_a_l_u_a_t_e_d()) │ │ │ │ -210 return; │ │ │ │ -211#endif │ │ │ │ -212 _____s_a_n_i_t_i_z_e_r___a_n_n_o_t_a_t_e___c_o_n_t_i_g_u_o_u_s___c_o_n_t_a_i_n_e_r(_____i_m_p_l._M_start, │ │ │ │ -213 _____i_m_p_l._M_end_of_storage, _____p_r_e_v, _____c_u_r_r); │ │ │ │ -214 } │ │ │ │ -215 │ │ │ │ -216 static ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R void │ │ │ │ -217 ___S___g_r_o_w(_Vector_impl& _____i_m_p_l, size_type __n) │ │ │ │ -218 { ___S___a_d_j_u_s_t(_____i_m_p_l, _____i_m_p_l._M_finish, _____i_m_p_l._M_finish + __n); } │ │ │ │ -219 │ │ │ │ -220 static ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R void │ │ │ │ -221 ___S___s_h_r_i_n_k(_Vector_impl& _____i_m_p_l, size_type __n) │ │ │ │ -222 { ___S___a_d_j_u_s_t(_____i_m_p_l, _____i_m_p_l._M_finish + __n, _____i_m_p_l._M_finish); } │ │ │ │ -223 │ │ │ │ -224 static ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R void │ │ │ │ -225 ___S___o_n___d_e_a_l_l_o_c(_Vector_impl& _____i_m_p_l) │ │ │ │ +139 template │ │ │ │ +140 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +141 inline shared_ptr<_Tp> │ │ │ │ +_1_4_2 atomic_load(_c_o_n_s_t _s_h_a_r_e_d___p_t_r<_Tp>* __p) │ │ │ │ +143 { return std::atomic_load_explicit(__p, memory_order_seq_cst); } │ │ │ │ +144 │ │ │ │ +145 template │ │ │ │ +146 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +147 inline __shared_ptr<_Tp, _Lp> │ │ │ │ +_1_4_8 atomic_load_explicit(_c_o_n_s_t __shared_ptr<_Tp, ___L_p>* __p, _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +149 { │ │ │ │ +150 ___S_p___l_o_c_k_e_r _____l_o_c_k{__p}; │ │ │ │ +151 return *__p; │ │ │ │ +152 } │ │ │ │ +153 │ │ │ │ +154 template │ │ │ │ +155 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +156 inline __shared_ptr<_Tp, _Lp> │ │ │ │ +_1_5_7 atomic_load(_c_o_n_s_t __shared_ptr<_Tp, ___L_p>* __p) │ │ │ │ +158 { return std::atomic_load_explicit(__p, memory_order_seq_cst); } │ │ │ │ +159 /// @} │ │ │ │ +160 │ │ │ │ +161 /** │ │ │ │ +162 * @brief Atomic store for shared_ptr objects. │ │ │ │ +163 * @param __p A non-null pointer to a shared_ptr object. │ │ │ │ +164 * @param __r The value to store. │ │ │ │ +165 * │ │ │ │ +166 * The memory order shall not be `memory_order_acquire` or │ │ │ │ +167 * `memory_order_acq_rel`. │ │ │ │ +168 * @{ │ │ │ │ +169 */ │ │ │ │ +170 template │ │ │ │ +171 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +172 inline void │ │ │ │ +_1_7_3 atomic_store_explicit(_s_h_a_r_e_d___p_t_r<_Tp>* __p, _s_h_a_r_e_d___p_t_r<_Tp> __r, │ │ │ │ +174 _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +175 { │ │ │ │ +176 ___S_p___l_o_c_k_e_r _____l_o_c_k{__p}; │ │ │ │ +177 __p->swap(__r); // use swap so that **__p not destroyed while lock held │ │ │ │ +178 } │ │ │ │ +179 │ │ │ │ +180 template │ │ │ │ +181 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +182 inline void │ │ │ │ +_1_8_3 atomic_store(_s_h_a_r_e_d___p_t_r<_Tp>* __p, _s_h_a_r_e_d___p_t_r<_Tp> __r) │ │ │ │ +184 { std::atomic_store_explicit(__p, _s_t_d_:_:_m_o_v_e(__r), memory_order_seq_cst); } │ │ │ │ +185 │ │ │ │ +186 template │ │ │ │ +187 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +188 inline void │ │ │ │ +_1_8_9 atomic_store_explicit(__shared_ptr<_Tp, ___L_p>* __p, │ │ │ │ +190 __shared_ptr<_Tp, ___L_p> __r, │ │ │ │ +191 _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +192 { │ │ │ │ +193 ___S_p___l_o_c_k_e_r _____l_o_c_k{__p}; │ │ │ │ +194 __p->swap(__r); // use swap so that **__p not destroyed while lock held │ │ │ │ +195 } │ │ │ │ +196 │ │ │ │ +197 template │ │ │ │ +198 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +199 inline void │ │ │ │ +_2_0_0 atomic_store(__shared_ptr<_Tp, ___L_p>* __p, __shared_ptr<_Tp, ___L_p> __r) │ │ │ │ +201 { std::atomic_store_explicit(__p, _s_t_d_:_:_m_o_v_e(__r), memory_order_seq_cst); } │ │ │ │ +202 /// @} │ │ │ │ +203 │ │ │ │ +204 /** │ │ │ │ +205 * @brief Atomic exchange for shared_ptr objects. │ │ │ │ +206 * @param __p A non-null pointer to a shared_ptr object. │ │ │ │ +207 * @param __r New value to store in `*__p`. │ │ │ │ +208 * @return The original value of `*__p` │ │ │ │ +209 * @{ │ │ │ │ +210 */ │ │ │ │ +211 template │ │ │ │ +212 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +213 inline shared_ptr<_Tp> │ │ │ │ +_2_1_4 atomic_exchange_explicit(_s_h_a_r_e_d___p_t_r<_Tp>* __p, _s_h_a_r_e_d___p_t_r<_Tp> __r, │ │ │ │ +215 _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +216 { │ │ │ │ +217 ___S_p___l_o_c_k_e_r _____l_o_c_k{__p}; │ │ │ │ +218 __p->swap(__r); │ │ │ │ +219 return __r; │ │ │ │ +220 } │ │ │ │ +221 │ │ │ │ +222 template │ │ │ │ +223 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +224 inline shared_ptr<_Tp> │ │ │ │ +_2_2_5 atomic_exchange(_s_h_a_r_e_d___p_t_r<_Tp>* __p, _s_h_a_r_e_d___p_t_r<_Tp> __r) │ │ │ │ 226 { │ │ │ │ -227 if (_____i_m_p_l._M_start) │ │ │ │ -228 ___S___a_d_j_u_s_t(_____i_m_p_l, _____i_m_p_l._M_finish, _____i_m_p_l._M_end_of_storage); │ │ │ │ +227 return std::atomic_exchange_explicit(__p, _s_t_d_:_:_m_o_v_e(__r), │ │ │ │ +228 memory_order_seq_cst); │ │ │ │ 229 } │ │ │ │ 230 │ │ │ │ -231 // Used on reallocation to tell ASan unused capacity is invalid. │ │ │ │ -232 struct ___R_e_i_n_i_t │ │ │ │ -233 { │ │ │ │ -234 explicit ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -235 ___R_e_i_n_i_t(_Vector_impl& _____i_m_p_l) : _M_impl(_____i_m_p_l) │ │ │ │ -236 { │ │ │ │ -237 // Mark unused capacity as valid again before deallocating it. │ │ │ │ -238 ___S___o_n___d_e_a_l_l_o_c(_M_impl); │ │ │ │ -239 } │ │ │ │ -240 │ │ │ │ -241 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -242 _~___R_e_i_n_i_t() │ │ │ │ -243 { │ │ │ │ -244 // Mark unused capacity as invalid after reallocation. │ │ │ │ -245 if (_M_impl._M_start) │ │ │ │ -246 ___S___a_d_j_u_s_t(_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 ___R_e_i_n_i_t(const ___R_e_i_n_i_t&) = delete; │ │ │ │ -254 ___R_e_i_n_i_t& operator=(const ___R_e_i_n_i_t&) = delete; │ │ │ │ -255#endif │ │ │ │ -256 }; │ │ │ │ -257 │ │ │ │ -258 // Tell ASan when unused capacity is initialized to be valid. │ │ │ │ -259 struct ___G_r_o_w │ │ │ │ -260 { │ │ │ │ -261 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -262 ___G_r_o_w(_Vector_impl& _____i_m_p_l, size_type __n) │ │ │ │ -263 : _M_impl(_____i_m_p_l), _M_n(__n) │ │ │ │ -264 { ___S___g_r_o_w(_M_impl, __n); } │ │ │ │ -265 │ │ │ │ -266 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -267 _~___G_r_o_w() { if (_M_n) ___S___s_h_r_i_n_k(_M_impl, _M_n); } │ │ │ │ -268 │ │ │ │ -269 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -270 void ___M___g_r_e_w(size_type __n) { _M_n -= __n; } │ │ │ │ -271 │ │ │ │ -272#if __cplusplus >= 201103L │ │ │ │ -273 ___G_r_o_w(const ___G_r_o_w&) = delete; │ │ │ │ -274 ___G_r_o_w& operator=(const ___G_r_o_w&) = delete; │ │ │ │ -275#endif │ │ │ │ -276 private: │ │ │ │ -277 _Vector_impl& _M_impl; │ │ │ │ -278 size_type _M_n; │ │ │ │ -279 }; │ │ │ │ -280 }; │ │ │ │ -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 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -306 _Tp_alloc_type& │ │ │ │ -307 _M_get_Tp_allocator() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -308 { return this->_M_impl; } │ │ │ │ +231 template │ │ │ │ +232 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +233 inline __shared_ptr<_Tp, _Lp> │ │ │ │ +_2_3_4 atomic_exchange_explicit(__shared_ptr<_Tp, ___L_p>* __p, │ │ │ │ +235 __shared_ptr<_Tp, ___L_p> __r, │ │ │ │ +236 _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +237 { │ │ │ │ +238 ___S_p___l_o_c_k_e_r _____l_o_c_k{__p}; │ │ │ │ +239 __p->swap(__r); │ │ │ │ +240 return __r; │ │ │ │ +241 } │ │ │ │ +242 │ │ │ │ +243 template │ │ │ │ +244 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +245 inline __shared_ptr<_Tp, _Lp> │ │ │ │ +_2_4_6 atomic_exchange(__shared_ptr<_Tp, ___L_p>* __p, __shared_ptr<_Tp, ___L_p> __r) │ │ │ │ +247 { │ │ │ │ +248 return std::atomic_exchange_explicit(__p, _s_t_d_:_:_m_o_v_e(__r), │ │ │ │ +249 memory_order_seq_cst); │ │ │ │ +250 } │ │ │ │ +251 /// @} │ │ │ │ +252 │ │ │ │ +253 /** │ │ │ │ +254 * @brief Atomic compare-and-swap for shared_ptr objects. │ │ │ │ +255 * @param __p A non-null pointer to a shared_ptr object. │ │ │ │ +256 * @param __v A non-null pointer to a shared_ptr object. │ │ │ │ +257 * @param __w A non-null pointer to a shared_ptr object. │ │ │ │ +258 * @return True if `*__p` was equivalent to `*__v`, false otherwise. │ │ │ │ +259 * │ │ │ │ +260 * The memory order for failure shall not be `memory_order_release` or │ │ │ │ +261 * `memory_order_acq_rel`. │ │ │ │ +262 * @{ │ │ │ │ +263 */ │ │ │ │ +264 template │ │ │ │ +265 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +266 bool │ │ │ │ +_2_6_7 atomic_compare_exchange_strong_explicit(_s_h_a_r_e_d___p_t_r<_Tp>* __p, │ │ │ │ +268 _s_h_a_r_e_d___p_t_r<_Tp>* _____v, │ │ │ │ +269 _s_h_a_r_e_d___p_t_r<_Tp> _____w, │ │ │ │ +270 _m_e_m_o_r_y___o_r_d_e_r, │ │ │ │ +271 _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +272 { │ │ │ │ +273 _s_h_a_r_e_d___p_t_r_<___T_p_> __x; // goes out of scope after __lock │ │ │ │ +274 ___S_p___l_o_c_k_e_r _____l_o_c_k{__p, _____v}; │ │ │ │ +275 _o_w_n_e_r___l_e_s_s_<_s_h_a_r_e_d___p_t_r_<___T_p_>> __less; │ │ │ │ +276 if (*__p == *_____v && !__less(*__p, *_____v) && !__less(*_____v, *__p)) │ │ │ │ +277 { │ │ │ │ +278 __x = _s_t_d_:_:_m_o_v_e(*__p); │ │ │ │ +279 *__p = _s_t_d_:_:_m_o_v_e(_____w); │ │ │ │ +280 return true; │ │ │ │ +281 } │ │ │ │ +282 __x = _s_t_d_:_:_m_o_v_e(*_____v); │ │ │ │ +283 *_____v = *__p; │ │ │ │ +284 return false; │ │ │ │ +285 } │ │ │ │ +286 │ │ │ │ +287 template │ │ │ │ +288 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +289 inline bool │ │ │ │ +_2_9_0 atomic_compare_exchange_strong(_s_h_a_r_e_d___p_t_r<_Tp>* __p, _s_h_a_r_e_d___p_t_r<_Tp>* _____v, │ │ │ │ +291 _s_h_a_r_e_d___p_t_r<_Tp> _____w) │ │ │ │ +292 { │ │ │ │ +293 return std::atomic_compare_exchange_strong_explicit(__p, _____v, │ │ │ │ +294 _s_t_d_:_:_m_o_v_e(_____w), memory_order_seq_cst, memory_order_seq_cst); │ │ │ │ +295 } │ │ │ │ +296 │ │ │ │ +297 template │ │ │ │ +298 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +299 inline bool │ │ │ │ +_3_0_0 atomic_compare_exchange_weak_explicit(_s_h_a_r_e_d___p_t_r<_Tp>* __p, │ │ │ │ +301 _s_h_a_r_e_d___p_t_r<_Tp>* _____v, │ │ │ │ +302 _s_h_a_r_e_d___p_t_r<_Tp> _____w, │ │ │ │ +303 _m_e_m_o_r_y___o_r_d_e_r _____s_u_c_c_e_s_s, │ │ │ │ +304 _m_e_m_o_r_y___o_r_d_e_r _____f_a_i_l_u_r_e) │ │ │ │ +305 { │ │ │ │ +306 return std::atomic_compare_exchange_strong_explicit(__p, _____v, │ │ │ │ +307 _s_t_d_:_:_m_o_v_e(_____w), _____s_u_c_c_e_s_s, _____f_a_i_l_u_r_e); │ │ │ │ +308 } │ │ │ │ 309 │ │ │ │ -310 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -311 const _Tp_alloc_type& │ │ │ │ -312 _M_get_Tp_allocator() const ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -313 { return this->_M_impl; } │ │ │ │ -314 │ │ │ │ -315 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -316 allocator_type │ │ │ │ -_3_1_7 get_allocator() _c_o_n_s_t ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -318 { return allocator_type(_M_get_Tp_allocator()); } │ │ │ │ +310 template │ │ │ │ +311 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +312 inline bool │ │ │ │ +_3_1_3 atomic_compare_exchange_weak(_s_h_a_r_e_d___p_t_r<_Tp>* __p, _s_h_a_r_e_d___p_t_r<_Tp>* _____v, │ │ │ │ +314 _s_h_a_r_e_d___p_t_r<_Tp> _____w) │ │ │ │ +315 { │ │ │ │ +316 return std::atomic_compare_exchange_weak_explicit(__p, _____v, │ │ │ │ +317 _s_t_d_:_:_m_o_v_e(_____w), memory_order_seq_cst, memory_order_seq_cst); │ │ │ │ +318 } │ │ │ │ 319 │ │ │ │ -320#if __cplusplus >= 201103L │ │ │ │ -321 ___V_e_c_t_o_r___b_a_s_e() = default; │ │ │ │ -322#else │ │ │ │ -323 ___V_e_c_t_o_r___b_a_s_e() { } │ │ │ │ -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); } │ │ │ │ +320 template │ │ │ │ +321 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +322 bool │ │ │ │ +_3_2_3 atomic_compare_exchange_strong_explicit(__shared_ptr<_Tp, ___L_p>* __p, │ │ │ │ +324 __shared_ptr<_Tp, ___L_p>* _____v, │ │ │ │ +325 __shared_ptr<_Tp, ___L_p> _____w, │ │ │ │ +326 _m_e_m_o_r_y___o_r_d_e_r, │ │ │ │ +327 _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +328 { │ │ │ │ +329 _____s_h_a_r_e_d___p_t_r_<___T_p_,_ ___L_p_> __x; // goes out of scope after __lock │ │ │ │ +330 ___S_p___l_o_c_k_e_r _____l_o_c_k{__p, _____v}; │ │ │ │ +331 _o_w_n_e_r___l_e_s_s_<_____s_h_a_r_e_d___p_t_r_<___T_p_,_ ___L_p_>> __less; │ │ │ │ +332 if (*__p == *_____v && !__less(*__p, *_____v) && !__less(*_____v, *__p)) │ │ │ │ +333 { │ │ │ │ +334 __x = _s_t_d_:_:_m_o_v_e(*__p); │ │ │ │ +335 *__p = _s_t_d_:_:_m_o_v_e(_____w); │ │ │ │ +336 return true; │ │ │ │ +337 } │ │ │ │ +338 __x = _s_t_d_:_:_m_o_v_e(*_____v); │ │ │ │ +339 *_____v = *__p; │ │ │ │ +340 return false; │ │ │ │ +341 } │ │ │ │ 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(_s_t_d_:_:_m_o_v_e(__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), _s_t_d::_m_o_v_e(__x._M_impl)) │ │ │ │ -369 { } │ │ │ │ -370#endif │ │ │ │ -371 │ │ │ │ -372 _GLIBCXX20_CONSTEXPR │ │ │ │ -373 ~_Vector_base() _GLIBCXX_NOEXCEPT │ │ │ │ -374 { │ │ │ │ -375 _M_deallocate(_M_impl._M_start, │ │ │ │ -376 _M_impl._M_end_of_storage - _M_impl._M_start); │ │ │ │ -377 } │ │ │ │ +343 template │ │ │ │ +344 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +345 inline bool │ │ │ │ +_3_4_6 atomic_compare_exchange_strong(__shared_ptr<_Tp, ___L_p>* __p, │ │ │ │ +347 __shared_ptr<_Tp, ___L_p>* _____v, │ │ │ │ +348 __shared_ptr<_Tp, ___L_p> _____w) │ │ │ │ +349 { │ │ │ │ +350 return std::atomic_compare_exchange_strong_explicit(__p, _____v, │ │ │ │ +351 _s_t_d_:_:_m_o_v_e(_____w), memory_order_seq_cst, memory_order_seq_cst); │ │ │ │ +352 } │ │ │ │ +353 │ │ │ │ +354 template │ │ │ │ +355 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +356 inline bool │ │ │ │ +_3_5_7 atomic_compare_exchange_weak_explicit(__shared_ptr<_Tp, ___L_p>* __p, │ │ │ │ +358 __shared_ptr<_Tp, ___L_p>* _____v, │ │ │ │ +359 __shared_ptr<_Tp, ___L_p> _____w, │ │ │ │ +360 _m_e_m_o_r_y___o_r_d_e_r _____s_u_c_c_e_s_s, │ │ │ │ +361 _m_e_m_o_r_y___o_r_d_e_r _____f_a_i_l_u_r_e) │ │ │ │ +362 { │ │ │ │ +363 return std::atomic_compare_exchange_strong_explicit(__p, _____v, │ │ │ │ +364 _s_t_d_:_:_m_o_v_e(_____w), _____s_u_c_c_e_s_s, _____f_a_i_l_u_r_e); │ │ │ │ +365 } │ │ │ │ +366 │ │ │ │ +367 template │ │ │ │ +368 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic>") │ │ │ │ +369 inline bool │ │ │ │ +_3_7_0 atomic_compare_exchange_weak(__shared_ptr<_Tp, ___L_p>* __p, │ │ │ │ +371 __shared_ptr<_Tp, ___L_p>* _____v, │ │ │ │ +372 __shared_ptr<_Tp, ___L_p> _____w) │ │ │ │ +373 { │ │ │ │ +374 return std::atomic_compare_exchange_weak_explicit(__p, _____v, │ │ │ │ +375 _s_t_d_:_:_m_o_v_e(_____w), memory_order_seq_cst, memory_order_seq_cst); │ │ │ │ +376 } │ │ │ │ +377 /// @} │ │ │ │ 378 │ │ │ │ -379 public: │ │ │ │ -380 _Vector_impl _M_impl; │ │ │ │ -381 │ │ │ │ -382 _GLIBCXX20_CONSTEXPR │ │ │ │ -383 pointer │ │ │ │ -384 _M_allocate(size_t __n) │ │ │ │ -385 { │ │ │ │ -386 typedef _____g_n_u___c_x_x_:_:_____a_l_l_o_c___t_r_a_i_t_s_<___T_p___a_l_l_o_c___t_y_p_e_> _Tr; │ │ │ │ -387 return __n != 0 ? _Tr::allocate(_M_impl, __n) : pointer(); │ │ │ │ -388 } │ │ │ │ -389 │ │ │ │ -390 _GLIBCXX20_CONSTEXPR │ │ │ │ -391 void │ │ │ │ -392 _M_deallocate(pointer __p, size_t __n) │ │ │ │ +379 /// @} group pointer_abstractions │ │ │ │ +380 │ │ │ │ +381#ifdef __glibcxx_atomic_shared_ptr // C++ >= 20 && HOSTED │ │ │ │ +382 template │ │ │ │ +383 struct atomic; │ │ │ │ +384 │ │ │ │ +385 /** │ │ │ │ +386 * @addtogroup pointer_abstractions │ │ │ │ +387 * @relates shared_ptr │ │ │ │ +388 * @{ │ │ │ │ +389 */ │ │ │ │ +390 │ │ │ │ +391 template │ │ │ │ +392 class _Sp_atomic │ │ │ │ 393 { │ │ │ │ -394 typedef _____g_n_u___c_x_x_:_:_____a_l_l_o_c___t_r_a_i_t_s_<___T_p___a_l_l_o_c___t_y_p_e_> _Tr; │ │ │ │ -395 if (__p) │ │ │ │ -396 _Tr::deallocate(_M_impl, __p, __n); │ │ │ │ -397 } │ │ │ │ -398 │ │ │ │ -399 protected: │ │ │ │ -400 │ │ │ │ -401 _GLIBCXX20_CONSTEXPR │ │ │ │ -402 void │ │ │ │ -403 _M_create_storage(size_t __n) │ │ │ │ -404 { │ │ │ │ -405 this->_M_impl._M_start = this->_M_allocate(__n); │ │ │ │ -406 this->_M_impl._M_finish = this->_M_impl._M_start; │ │ │ │ -407 this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; │ │ │ │ -408 } │ │ │ │ -409 │ │ │ │ -410#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -411 // Called by insert_range, and indirectly by assign_range, append_range. │ │ │ │ -412 // Initializes new elements in storage at __ptr and updates __ptr to │ │ │ │ -413 // point after the last new element. │ │ │ │ -414 // Provides strong exception safety guarantee. │ │ │ │ -415 // Requires [ptr, ptr+distance(rg)) is a valid range. │ │ │ │ -416 template │ │ │ │ -417 constexpr void │ │ │ │ -418 _M_append_range_to(_Rg&& __rg, pointer& __ptr) │ │ │ │ -419 { │ │ │ │ -420 __ptr = _s_t_d_:_:_____u_n_i_n_i_t_i_a_l_i_z_e_d___c_o_p_y___a(ranges::begin(__rg), │ │ │ │ -421 ranges::end(__rg), │ │ │ │ -422 __ptr, _M_get_Tp_allocator()); │ │ │ │ -423 } │ │ │ │ -424 │ │ │ │ -425 // Called by assign_range, append_range, insert_range. │ │ │ │ -426 // Requires capacity() >= size()+distance(rg). │ │ │ │ -427 template │ │ │ │ -428 constexpr void │ │ │ │ -429 _M_append_range(_Rg&& __rg) │ │ │ │ -430 { _M_append_range_to(_s_t_d_:_:_f_o_r_w_a_r_d_<___R_g_>(__rg), _M_impl._M_finish); } │ │ │ │ -431#endif │ │ │ │ -432 }; │ │ │ │ -433 │ │ │ │ -434 /** │ │ │ │ -435 * @brief A standard container which offers fixed time access to │ │ │ │ -436 * individual elements in any order. │ │ │ │ -437 * │ │ │ │ -438 * @ingroup sequences │ │ │ │ -439 * @headerfile vector │ │ │ │ -440 * @since C++98 │ │ │ │ -441 * │ │ │ │ -442 * @tparam _Tp Type of element. │ │ │ │ -443 * @tparam _Alloc Allocator type, defaults to allocator<_Tp>. │ │ │ │ -444 * │ │ │ │ -445 * Meets the requirements of a container, a │ │ │ │ -446 * reversible container, and a │ │ │ │ -447 * sequence, including the │ │ │ │ -448 * optional sequence requirements with the │ │ │ │ -449 * %exception of @c push_front and @c pop_front. │ │ │ │ -450 * │ │ │ │ -451 * In some terminology a %vector can be described as a dynamic │ │ │ │ -452 * C-style array, it offers fast and efficient access to individual │ │ │ │ -453 * elements in any order and saves the user from worrying about │ │ │ │ -454 * memory and size allocation. Subscripting ( @c [] ) access is │ │ │ │ -455 * also provided as with C-style arrays. │ │ │ │ -456 */ │ │ │ │ -457 template > │ │ │ │ -_4_5_8 class _v_e_c_t_o_r : protected ___V_e_c_t_o_r___b_a_s_e<_Tp, _Alloc> │ │ │ │ -459 { │ │ │ │ -460#ifdef _GLIBCXX_CONCEPT_CHECKS │ │ │ │ -461 // Concept requirements. │ │ │ │ -462 typedef typename _Alloc::value_type ___A_l_l_o_c___v_a_l_u_e___t_y_p_e; │ │ │ │ -463# if __cplusplus < 201103L │ │ │ │ -464 __glibcxx_class_requires(_Tp, _SGIAssignableConcept) │ │ │ │ -465# endif │ │ │ │ -466 __glibcxx_class_requires2(_Tp, ___A_l_l_o_c___v_a_l_u_e___t_y_p_e, _SameTypeConcept) │ │ │ │ -467#endif │ │ │ │ -468 │ │ │ │ -469#if __cplusplus >= 201103L │ │ │ │ -470 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, │ │ │ │ -471 "std::vector must have a non-const, non-volatile value_type"); │ │ │ │ -472# if __cplusplus > 201703L || defined __STRICT_ANSI__ │ │ │ │ -473 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, │ │ │ │ -474 "std::vector must have the same value_type as its allocator"); │ │ │ │ -475# endif │ │ │ │ -476#endif │ │ │ │ -477 │ │ │ │ -478 typedef ___V_e_c_t_o_r___b_a_s_e_<___T_p_,_ ___A_l_l_o_c_> ___B_a_s_e; │ │ │ │ -479 typedef typename _Base::_Tp_alloc_type _Tp_alloc_type; │ │ │ │ -480 typedef _____g_n_u___c_x_x_:_:_____a_l_l_o_c___t_r_a_i_t_s_<___T_p___a_l_l_o_c___t_y_p_e_> ___A_l_l_o_c___t_r_a_i_t_s; │ │ │ │ -481 │ │ │ │ -482 public: │ │ │ │ -483 typedef _Tp value_type; │ │ │ │ -484 typedef typename _Base::pointer pointer; │ │ │ │ -485 typedef typename _Alloc_traits::const_pointer const_pointer; │ │ │ │ -486 typedef typename _Alloc_traits::reference reference; │ │ │ │ -487 typedef typename _Alloc_traits::const_reference const_reference; │ │ │ │ -488 typedef __gnu_cxx::__normal_iterator iterator; │ │ │ │ -489 typedef __gnu_cxx::__normal_iterator │ │ │ │ -490 const_iterator; │ │ │ │ -491 typedef _s_t_d_:_:_r_e_v_e_r_s_e___i_t_e_r_a_t_o_r_<_c_o_n_s_t___i_t_e_r_a_t_o_r_> _c_o_n_s_t___r_e_v_e_r_s_e___i_t_e_r_a_t_o_r; │ │ │ │ -492 typedef _s_t_d_:_:_r_e_v_e_r_s_e___i_t_e_r_a_t_o_r_<_i_t_e_r_a_t_o_r_> _r_e_v_e_r_s_e___i_t_e_r_a_t_o_r; │ │ │ │ -493 typedef size_t size_type; │ │ │ │ -494 typedef _p_t_r_d_i_f_f___t _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ -495 typedef _Alloc allocator_type; │ │ │ │ -496 │ │ │ │ -497 private: │ │ │ │ -498#if __cplusplus >= 201103L │ │ │ │ -499 static constexpr bool │ │ │ │ -500 _S_nothrow_relocate(_t_r_u_e___t_y_p_e) │ │ │ │ -501 { │ │ │ │ -502 return noexcept(_s_t_d_:_:_____r_e_l_o_c_a_t_e___a(_s_t_d_:_:_d_e_c_l_v_a_l_<_p_o_i_n_t_e_r_>(), │ │ │ │ -503 _s_t_d_:_:_d_e_c_l_v_a_l_<_p_o_i_n_t_e_r_>(), │ │ │ │ -504 _s_t_d_:_:_d_e_c_l_v_a_l_<_p_o_i_n_t_e_r_>(), │ │ │ │ -505 _s_t_d_:_:_d_e_c_l_v_a_l_<___T_p___a_l_l_o_c___t_y_p_e_&_>())); │ │ │ │ -506 } │ │ │ │ -507 │ │ │ │ -508 static constexpr bool │ │ │ │ -509 _S_nothrow_relocate(_f_a_l_s_e___t_y_p_e) │ │ │ │ -510 { return false; } │ │ │ │ -511 │ │ │ │ -512 static constexpr bool │ │ │ │ -513 _S_use_relocate() │ │ │ │ -514 { │ │ │ │ -515 // Instantiating std::__relocate_a might cause an error outside the │ │ │ │ -516 // immediate context (in __relocate_object_a's noexcept-specifier), │ │ │ │ -517 // so only do it if we know the type can be move-inserted into *this. │ │ │ │ -518 return _S_nothrow_relocate(_____i_s___m_o_v_e___i_n_s_e_r_t_a_b_l_e_<___T_p___a_l_l_o_c___t_y_p_e_>{}); │ │ │ │ -519 } │ │ │ │ -520 │ │ │ │ -521 static pointer │ │ │ │ -522 _S_do_relocate(pointer __first, pointer __last, pointer __result, │ │ │ │ -523 _Tp_alloc_type& _____a_l_l_o_c, _t_r_u_e___t_y_p_e) noexcept │ │ │ │ -524 { │ │ │ │ -525 return _s_t_d_:_:_____r_e_l_o_c_a_t_e___a(__first, __last, __result, _____a_l_l_o_c); │ │ │ │ -526 } │ │ │ │ +394 using value_type = _Tp; │ │ │ │ +395 │ │ │ │ +396 friend struct atomic<_Tp>; │ │ │ │ +397 │ │ │ │ +398 // An atomic version of __shared_count<> and __weak_count<>. │ │ │ │ +399 // Stores a _Sp_counted_base<>* but uses the LSB as a lock. │ │ │ │ +400 struct _Atomic_count │ │ │ │ +401 { │ │ │ │ +402 // Either __shared_count<> or __weak_count<> │ │ │ │ +403 using __count_type = decltype(_Tp::_M_refcount); │ │ │ │ +404 using uintptr_t = __UINTPTR_TYPE__; │ │ │ │ +405 │ │ │ │ +406 // _Sp_counted_base<>* │ │ │ │ +407 using pointer = decltype(__count_type::_M_pi); │ │ │ │ +408 │ │ │ │ +409 // Ensure we can use the LSB as the lock bit. │ │ │ │ +410 static_assert(alignof(remove_pointer_t) > 1); │ │ │ │ +411 │ │ │ │ +412 constexpr _Atomic_count() noexcept = default; │ │ │ │ +413 │ │ │ │ +414 explicit │ │ │ │ +415 _Atomic_count(__count_type&& __c) noexcept │ │ │ │ +416 : _M_val(reinterpret_cast(__c._M_pi)) │ │ │ │ +417 { │ │ │ │ +418 __c._M_pi = nullptr; │ │ │ │ +419 } │ │ │ │ +420 │ │ │ │ +421 ~_Atomic_count() │ │ │ │ +422 { │ │ │ │ +423 auto __val = _M_val.load(memory_order_relaxed); │ │ │ │ +424 _GLIBCXX_TSAN_MUTEX_DESTROY(&_M_val); │ │ │ │ +425 __glibcxx_assert(!(__val & _S_lock_bit)); │ │ │ │ +426 if (auto __pi = reinterpret_cast(__val)) │ │ │ │ +427 { │ │ │ │ +428 if constexpr (__is_shared_ptr<_Tp>) │ │ │ │ +429 __pi->_M_release(); │ │ │ │ +430 else │ │ │ │ +431 __pi->_M_weak_release(); │ │ │ │ +432 } │ │ │ │ +433 } │ │ │ │ +434 │ │ │ │ +435 _Atomic_count(const _Atomic_count&) = delete; │ │ │ │ +436 _Atomic_count& operator=(const _Atomic_count&) = delete; │ │ │ │ +437 │ │ │ │ +438 // Precondition: Caller does not hold lock! │ │ │ │ +439 // Returns the raw pointer value without the lock bit set. │ │ │ │ +440 pointer │ │ │ │ +441 _l_o_c_k(_m_e_m_o_r_y___o_r_d_e_r __o) const noexcept │ │ │ │ +442 { │ │ │ │ +443 // To acquire the lock we flip the LSB from 0 to 1. │ │ │ │ +444 │ │ │ │ +445 auto __current = _M_val.load(memory_order_relaxed); │ │ │ │ +446 while (__current & _S_lock_bit) │ │ │ │ +447 { │ │ │ │ +448#if __glibcxx_atomic_wait │ │ │ │ +449 __detail::__thread_relax(); │ │ │ │ +450#endif │ │ │ │ +451 __current = _M_val.load(memory_order_relaxed); │ │ │ │ +452 } │ │ │ │ +453 │ │ │ │ +454 _GLIBCXX_TSAN_MUTEX_TRY_LOCK(&_M_val); │ │ │ │ +455 │ │ │ │ +456 while (!_M_val.compare_exchange_strong(__current, │ │ │ │ +457 __current | _S_lock_bit, │ │ │ │ +458 __o, │ │ │ │ +459 memory_order_relaxed)) │ │ │ │ +460 { │ │ │ │ +461 _GLIBCXX_TSAN_MUTEX_TRY_LOCK_FAILED(&_M_val); │ │ │ │ +462#if __glibcxx_atomic_wait │ │ │ │ +463 __detail::__thread_relax(); │ │ │ │ +464#endif │ │ │ │ +465 __current = __current & ~_S_lock_bit; │ │ │ │ +466 _GLIBCXX_TSAN_MUTEX_TRY_LOCK(&_M_val); │ │ │ │ +467 } │ │ │ │ +468 _GLIBCXX_TSAN_MUTEX_LOCKED(&_M_val); │ │ │ │ +469 return reinterpret_cast(__current); │ │ │ │ +470 } │ │ │ │ +471 │ │ │ │ +472 // Precondition: caller holds lock! │ │ │ │ +473 void │ │ │ │ +474 unlock(_m_e_m_o_r_y___o_r_d_e_r __o) const noexcept │ │ │ │ +475 { │ │ │ │ +476 _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK(&_M_val); │ │ │ │ +477 _M_val.fetch_sub(1, __o); │ │ │ │ +478 _GLIBCXX_TSAN_MUTEX_POST_UNLOCK(&_M_val); │ │ │ │ +479 } │ │ │ │ +480 │ │ │ │ +481 // Swaps the values of *this and __c, and unlocks *this. │ │ │ │ +482 // Precondition: caller holds lock! │ │ │ │ +483 void │ │ │ │ +484 _M_swap_unlock(__count_type& __c, _m_e_m_o_r_y___o_r_d_e_r __o) noexcept │ │ │ │ +485 { │ │ │ │ +486 if (__o != memory_order_seq_cst) │ │ │ │ +487 __o = memory_order_release; │ │ │ │ +488 auto __x = reinterpret_cast(__c._M_pi); │ │ │ │ +489 _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK(&_M_val); │ │ │ │ +490 __x = _M_val.exchange(__x, __o); │ │ │ │ +491 _GLIBCXX_TSAN_MUTEX_POST_UNLOCK(&_M_val); │ │ │ │ +492 __c._M_pi = reinterpret_cast(__x & ~_S_lock_bit); │ │ │ │ +493 } │ │ │ │ +494 │ │ │ │ +495#if __glibcxx_atomic_wait │ │ │ │ +496 // Precondition: caller holds lock! │ │ │ │ +497 void │ │ │ │ +498 _M_wait_unlock(_m_e_m_o_r_y___o_r_d_e_r __o) const noexcept │ │ │ │ +499 { │ │ │ │ +500 _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK(&_M_val); │ │ │ │ +501 auto __v = _M_val.fetch_sub(1, memory_order_relaxed); │ │ │ │ +502 _GLIBCXX_TSAN_MUTEX_POST_UNLOCK(&_M_val); │ │ │ │ +503 _M_val.wait(__v & ~_S_lock_bit, __o); │ │ │ │ +504 } │ │ │ │ +505 │ │ │ │ +506 void │ │ │ │ +507 notify_one() noexcept │ │ │ │ +508 { │ │ │ │ +509 _GLIBCXX_TSAN_MUTEX_PRE_SIGNAL(&_M_val); │ │ │ │ +510 _M_val.notify_one(); │ │ │ │ +511 _GLIBCXX_TSAN_MUTEX_POST_SIGNAL(&_M_val); │ │ │ │ +512 } │ │ │ │ +513 │ │ │ │ +514 void │ │ │ │ +515 notify_all() noexcept │ │ │ │ +516 { │ │ │ │ +517 _GLIBCXX_TSAN_MUTEX_PRE_SIGNAL(&_M_val); │ │ │ │ +518 _M_val.notify_all(); │ │ │ │ +519 _GLIBCXX_TSAN_MUTEX_POST_SIGNAL(&_M_val); │ │ │ │ +520 } │ │ │ │ +521#endif │ │ │ │ +522 │ │ │ │ +523 private: │ │ │ │ +524 mutable __atomic_base _M_val{0}; │ │ │ │ +525 static constexpr uintptr_t _S_lock_bit{1}; │ │ │ │ +526 }; │ │ │ │ 527 │ │ │ │ -528 static pointer │ │ │ │ -529 _S_do_relocate(pointer, pointer, pointer __result, │ │ │ │ -530 _Tp_alloc_type&, _f_a_l_s_e___t_y_p_e) noexcept │ │ │ │ -531 { return __result; } │ │ │ │ -532 │ │ │ │ -533 static ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R pointer │ │ │ │ -534 _S_relocate(pointer __first, pointer __last, pointer __result, │ │ │ │ -535 _Tp_alloc_type& _____a_l_l_o_c) noexcept │ │ │ │ -536 { │ │ │ │ -537#if __cpp_if_constexpr │ │ │ │ -538 // All callers have already checked _S_use_relocate() so just do it. │ │ │ │ -539 return _s_t_d_:_:_____r_e_l_o_c_a_t_e___a(__first, __last, __result, _____a_l_l_o_c); │ │ │ │ -540#else │ │ │ │ -541 using _____d_o___i_t = __bool_constant<_S_use_relocate()>; │ │ │ │ -542 return _S_do_relocate(__first, __last, __result, _____a_l_l_o_c, _____d_o___i_t{}); │ │ │ │ -543#endif │ │ │ │ -544 } │ │ │ │ -545#endif // C++11 │ │ │ │ -546 │ │ │ │ -547 protected: │ │ │ │ -548 using _Base::_M_allocate; │ │ │ │ -549 using _Base::_M_deallocate; │ │ │ │ -550 using _Base::_M_impl; │ │ │ │ -551 using _Base::_M_get_Tp_allocator; │ │ │ │ +528 typename _Tp::element_type* _M_ptr = nullptr; │ │ │ │ +529 _Atomic_count _M_refcount; │ │ │ │ +530 │ │ │ │ +531 static typename _Atomic_count::pointer │ │ │ │ +532 _S_add_ref(typename _Atomic_count::pointer __p) │ │ │ │ +533 { │ │ │ │ +534 if (__p) │ │ │ │ +535 { │ │ │ │ +536 if constexpr (__is_shared_ptr<_Tp>) │ │ │ │ +537 __p->_M_add_ref_copy(); │ │ │ │ +538 else │ │ │ │ +539 __p->_M_weak_add_ref(); │ │ │ │ +540 } │ │ │ │ +541 return __p; │ │ │ │ +542 } │ │ │ │ +543 │ │ │ │ +544 constexpr _Sp_atomic() noexcept = default; │ │ │ │ +545 │ │ │ │ +546 explicit │ │ │ │ +547 _Sp_atomic(value_type __r) noexcept │ │ │ │ +548 : _M_ptr(__r._M_ptr), _M_refcount(_s_t_d::_m_o_v_e(__r._M_refcount)) │ │ │ │ +549 { } │ │ │ │ +550 │ │ │ │ +551 ~_Sp_atomic() = default; │ │ │ │ 552 │ │ │ │ -553 public: │ │ │ │ -554 // [23.2.4.1] construct/copy/destroy │ │ │ │ -555 // (assign() and get_allocator() are also listed in this section) │ │ │ │ -556 │ │ │ │ -557 /** │ │ │ │ -558 * @brief Creates a %vector with no elements. │ │ │ │ -559 */ │ │ │ │ -560#if __cplusplus >= 201103L │ │ │ │ -_5_6_1 _v_e_c_t_o_r() = default; │ │ │ │ -562#else │ │ │ │ -563 _v_e_c_t_o_r() { } │ │ │ │ -564#endif │ │ │ │ +553 _Sp_atomic(const _Sp_atomic&) = delete; │ │ │ │ +554 void operator=(const _Sp_atomic&) = delete; │ │ │ │ +555 │ │ │ │ +556 value_type │ │ │ │ +557 load(_m_e_m_o_r_y___o_r_d_e_r __o) const noexcept │ │ │ │ +558 { │ │ │ │ +559 __glibcxx_assert(__o != memory_order_release │ │ │ │ +560 && __o != memory_order_acq_rel); │ │ │ │ +561 // Ensure that the correct value of _M_ptr is visible after locking, │ │ │ │ +562 // by upgrading relaxed or consume to acquire. │ │ │ │ +563 if (__o != memory_order_seq_cst) │ │ │ │ +564 __o = memory_order_acquire; │ │ │ │ 565 │ │ │ │ -566 /** │ │ │ │ -567 * @brief Creates a %vector with no elements. │ │ │ │ -568 * @param __a An allocator object. │ │ │ │ -569 */ │ │ │ │ -570 explicit │ │ │ │ -571 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -_5_7_2 _v_e_c_t_o_r(const allocator_type& __a) ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -573 : ___B_a_s_e(__a) { } │ │ │ │ -574 │ │ │ │ -575#if __cplusplus >= 201103L │ │ │ │ -576 /** │ │ │ │ -577 * @brief Creates a %vector with default constructed elements. │ │ │ │ -578 * @param __n The number of elements to initially create. │ │ │ │ -579 * @param __a An allocator. │ │ │ │ -580 * │ │ │ │ -581 * This constructor fills the %vector with @a __n default │ │ │ │ -582 * constructed elements. │ │ │ │ -583 */ │ │ │ │ -584 explicit │ │ │ │ -585 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -_5_8_6 _v_e_c_t_o_r(size_type __n, const allocator_type& __a = allocator_type()) │ │ │ │ -587 : ___B_a_s_e(_S_check_init_len(__n, __a), __a) │ │ │ │ -588 { _M_default_initialize(__n); } │ │ │ │ -589 │ │ │ │ -590 /** │ │ │ │ -591 * @brief Creates a %vector with copies of an exemplar element. │ │ │ │ -592 * @param __n The number of elements to initially create. │ │ │ │ -593 * @param __value An element to copy. │ │ │ │ -594 * @param __a An allocator. │ │ │ │ -595 * │ │ │ │ -596 * This constructor fills the %vector with @a __n copies of @a __value. │ │ │ │ -597 */ │ │ │ │ -598 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -_5_9_9 _v_e_c_t_o_r(size_type __n, const value_type& __value, │ │ │ │ -600 const allocator_type& __a = allocator_type()) │ │ │ │ -601 : ___B_a_s_e(_S_check_init_len(__n, __a), __a) │ │ │ │ -602 { _M_fill_initialize(__n, __value); } │ │ │ │ -603#else │ │ │ │ -604 /** │ │ │ │ -605 * @brief Creates a %vector with copies of an exemplar element. │ │ │ │ -606 * @param __n The number of elements to initially create. │ │ │ │ -607 * @param __value An element to copy. │ │ │ │ -608 * @param __a An allocator. │ │ │ │ -609 * │ │ │ │ -610 * This constructor fills the %vector with @a __n copies of @a __value. │ │ │ │ -611 */ │ │ │ │ -612 explicit │ │ │ │ -613 _v_e_c_t_o_r(size_type __n, const value_type& __value = value_type(), │ │ │ │ -614 const allocator_type& __a = allocator_type()) │ │ │ │ -615 : _Base(_S_check_init_len(__n, __a), __a) │ │ │ │ -616 { _M_fill_initialize(__n, __value); } │ │ │ │ -617#endif │ │ │ │ -618 │ │ │ │ -619 /** │ │ │ │ -620 * @brief %Vector copy constructor. │ │ │ │ -621 * @param __x A %vector of identical element and allocator types. │ │ │ │ -622 * │ │ │ │ -623 * All the elements of @a __x are copied, but any unused capacity in │ │ │ │ -624 * @a __x will not be copied │ │ │ │ -625 * (i.e. capacity() == size() in the new %vector). │ │ │ │ -626 * │ │ │ │ -627 * The newly-created %vector uses a copy of the allocator object used │ │ │ │ -628 * by @a __x (unless the allocator traits dictate a different object). │ │ │ │ -629 */ │ │ │ │ -630 _GLIBCXX20_CONSTEXPR │ │ │ │ -_6_3_1 _v_e_c_t_o_r(const _v_e_c_t_o_r& __x) │ │ │ │ -632 : ___B_a_s_e(__x._s_i_z_e(), │ │ │ │ -633 ___A_l_l_o_c___t_r_a_i_t_s::_S_select_on_copy(__x._M_get_Tp_allocator())) │ │ │ │ -634 { │ │ │ │ -635 this->_M_impl._M_finish = │ │ │ │ -636 _s_t_d_:_:_____u_n_i_n_i_t_i_a_l_i_z_e_d___c_o_p_y___a(__x._b_e_g_i_n(), __x._e_n_d(), │ │ │ │ -637 _t_h_i_s->_M_impl._M_start, │ │ │ │ -638 _M_get_Tp_allocator()); │ │ │ │ -639 } │ │ │ │ -640 │ │ │ │ -641#if __cplusplus >= 201103L │ │ │ │ -642 /** │ │ │ │ -643 * @brief %Vector move constructor. │ │ │ │ -644 * │ │ │ │ -645 * The newly-created %vector contains the exact contents of the │ │ │ │ -646 * moved instance. │ │ │ │ -647 * The contents of the moved instance are a valid, but unspecified │ │ │ │ -648 * %vector. │ │ │ │ -649 */ │ │ │ │ -_6_5_0 _v_e_c_t_o_r(_v_e_c_t_o_r&&) noexcept = _d_e_f_a_u_l_t; │ │ │ │ +566 value_type __ret; │ │ │ │ +567 auto __pi = _M_refcount.lock(__o); │ │ │ │ +568 __ret._M_ptr = _M_ptr; │ │ │ │ +569 __ret._M_refcount._M_pi = _S_add_ref(__pi); │ │ │ │ +570 _M_refcount.unlock(memory_order_relaxed); │ │ │ │ +571 return __ret; │ │ │ │ +572 } │ │ │ │ +573 │ │ │ │ +574 void │ │ │ │ +575 swap(value_type& __r, _m_e_m_o_r_y___o_r_d_e_r __o) noexcept │ │ │ │ +576 { │ │ │ │ +577 _M_refcount.lock(memory_order_acquire); │ │ │ │ +578 std::swap(_M_ptr, __r._M_ptr); │ │ │ │ +579 _M_refcount._M_swap_unlock(__r._M_refcount, __o); │ │ │ │ +580 } │ │ │ │ +581 │ │ │ │ +582 bool │ │ │ │ +583 compare_exchange_strong(value_type& __expected, value_type __desired, │ │ │ │ +584 _m_e_m_o_r_y___o_r_d_e_r __o, _m_e_m_o_r_y___o_r_d_e_r __o2) noexcept │ │ │ │ +585 { │ │ │ │ +586 bool __result = true; │ │ │ │ +587 auto __pi = _M_refcount.lock(memory_order_acquire); │ │ │ │ +588 if (_M_ptr == __expected._M_ptr │ │ │ │ +589 && __pi == __expected._M_refcount._M_pi) │ │ │ │ +590 { │ │ │ │ +591 _M_ptr = __desired._M_ptr; │ │ │ │ +592 _M_refcount._M_swap_unlock(__desired._M_refcount, __o); │ │ │ │ +593 } │ │ │ │ +594 else │ │ │ │ +595 { │ │ │ │ +596 _Tp __sink = _s_t_d_:_:_m_o_v_e(__expected); │ │ │ │ +597 __expected._M_ptr = _M_ptr; │ │ │ │ +598 __expected._M_refcount._M_pi = _S_add_ref(__pi); │ │ │ │ +599 _M_refcount.unlock(__o2); │ │ │ │ +600 __result = false; │ │ │ │ +601 } │ │ │ │ +602 return __result; │ │ │ │ +603 } │ │ │ │ +604 │ │ │ │ +605#if __glibcxx_atomic_wait │ │ │ │ +606 void │ │ │ │ +607 wait(value_type __old, _m_e_m_o_r_y___o_r_d_e_r __o) const noexcept │ │ │ │ +608 { │ │ │ │ +609 auto __pi = _M_refcount.lock(memory_order_acquire); │ │ │ │ +610 if (_M_ptr == __old._M_ptr && __pi == __old._M_refcount._M_pi) │ │ │ │ +611 _M_refcount._M_wait_unlock(__o); │ │ │ │ +612 else │ │ │ │ +613 _M_refcount.unlock(memory_order_relaxed); │ │ │ │ +614 } │ │ │ │ +615 │ │ │ │ +616 void │ │ │ │ +617 notify_one() noexcept │ │ │ │ +618 { │ │ │ │ +619 _M_refcount.notify_one(); │ │ │ │ +620 } │ │ │ │ +621 │ │ │ │ +622 void │ │ │ │ +623 notify_all() noexcept │ │ │ │ +624 { │ │ │ │ +625 _M_refcount.notify_all(); │ │ │ │ +626 } │ │ │ │ +627#endif │ │ │ │ +628 }; │ │ │ │ +629 │ │ │ │ +630 template │ │ │ │ +631 struct atomic> │ │ │ │ +632 { │ │ │ │ +633 public: │ │ │ │ +634 using value_type = shared_ptr<_Tp>; │ │ │ │ +635 │ │ │ │ +636 static constexpr bool is_always_lock_free = false; │ │ │ │ +637 │ │ │ │ +638 bool │ │ │ │ +639 is_lock_free() const noexcept │ │ │ │ +640 { return false; } │ │ │ │ +641 │ │ │ │ +642 constexpr atomic() noexcept = default; │ │ │ │ +643 │ │ │ │ +644 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +645 // 3661. constinit atomic> a(nullptr); should work │ │ │ │ +646 constexpr atomic(nullptr_t) noexcept : atomic() { } │ │ │ │ +647 │ │ │ │ +648 atomic(shared_ptr<_Tp> __r) noexcept │ │ │ │ +649 : _M_impl(_s_t_d_:_:_m_o_v_e(__r)) │ │ │ │ +650 { } │ │ │ │ 651 │ │ │ │ -652 /// Copy constructor with alternative allocator │ │ │ │ -653 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -_6_5_4 _v_e_c_t_o_r(_c_o_n_s_t _v_e_c_t_o_r& __x, _c_o_n_s_t _____t_y_p_e___i_d_e_n_t_i_t_y___t& __a) │ │ │ │ -655 : ___B_a_s_e(__x._s_i_z_e(), __a) │ │ │ │ -656 { │ │ │ │ -657 this->_M_impl._M_finish = │ │ │ │ -658 _s_t_d_:_:_____u_n_i_n_i_t_i_a_l_i_z_e_d___c_o_p_y___a(__x.begin(), __x.end(), │ │ │ │ -659 _t_h_i_s->_M_impl._M_start, │ │ │ │ -660 _M_get_Tp_allocator()); │ │ │ │ -661 } │ │ │ │ -662 │ │ │ │ -663 private: │ │ │ │ -664 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -665 _v_e_c_t_o_r(_v_e_c_t_o_r&& _____r_v, const allocator_type& _____m, _t_r_u_e___t_y_p_e) noexcept │ │ │ │ -666 : _Base(_____m, _s_t_d_:_:_m_o_v_e(_____r_v)) │ │ │ │ -667 { } │ │ │ │ -668 │ │ │ │ -669 _GLIBCXX20_CONSTEXPR │ │ │ │ -670 _v_e_c_t_o_r(_v_e_c_t_o_r&& __rv, const allocator_type& __m, _f_a_l_s_e___t_y_p_e) │ │ │ │ -671 : _Base(__m) │ │ │ │ -672 { │ │ │ │ -673 if (__rv.get_allocator() == __m) │ │ │ │ -674 this->_M_impl._M_swap_data(__rv._M_impl); │ │ │ │ -675 else if (!__rv.empty()) │ │ │ │ -676 { │ │ │ │ -677 this->_M_create_storage(__rv.size()); │ │ │ │ -678 this->_M_impl._M_finish = │ │ │ │ -679 _s_t_d_:_:_____u_n_i_n_i_t_i_a_l_i_z_e_d___m_o_v_e___a(__rv.begin(), __rv.end(), │ │ │ │ -680 this->_M_impl._M_start, │ │ │ │ -681 _M_get_Tp_allocator()); │ │ │ │ -682 __rv.clear(); │ │ │ │ +652 atomic(const atomic&) = delete; │ │ │ │ +653 void operator=(const atomic&) = delete; │ │ │ │ +654 │ │ │ │ +655 shared_ptr<_Tp> │ │ │ │ +656 load(_m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) const noexcept │ │ │ │ +657 { return _M_impl.load(__o); } │ │ │ │ +658 │ │ │ │ +659 operator shared_ptr<_Tp>() const noexcept │ │ │ │ +660 { return _M_impl.load(memory_order_seq_cst); } │ │ │ │ +661 │ │ │ │ +662 void │ │ │ │ +663 store(shared_ptr<_Tp> __desired, │ │ │ │ +664 _m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) noexcept │ │ │ │ +665 { _M_impl.swap(__desired, __o); } │ │ │ │ +666 │ │ │ │ +667 void │ │ │ │ +668 operator=(shared_ptr<_Tp> __desired) noexcept │ │ │ │ +669 { _M_impl.swap(__desired, memory_order_seq_cst); } │ │ │ │ +670 │ │ │ │ +671 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +672 // 3893. LWG 3661 broke atomic> a; a = nullptr; │ │ │ │ +673 void │ │ │ │ +674 operator=(nullptr_t) noexcept │ │ │ │ +675 { store(nullptr); } │ │ │ │ +676 │ │ │ │ +677 shared_ptr<_Tp> │ │ │ │ +678 exchange(shared_ptr<_Tp> __desired, │ │ │ │ +679 _m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) noexcept │ │ │ │ +680 { │ │ │ │ +681 _M_impl.swap(__desired, __o); │ │ │ │ +682 return __desired; │ │ │ │ 683 } │ │ │ │ -684 } │ │ │ │ -685 │ │ │ │ -686 public: │ │ │ │ -687 /// Move constructor with alternative allocator │ │ │ │ -688 _GLIBCXX20_CONSTEXPR │ │ │ │ -_6_8_9 _v_e_c_t_o_r(_v_e_c_t_o_r&& _____r_v, const _____t_y_p_e___i_d_e_n_t_i_t_y___t_<_a_l_l_o_c_a_t_o_r___t_y_p_e_>& _____m) │ │ │ │ -690 noexcept( noexcept( │ │ │ │ -691 _v_e_c_t_o_r(_s_t_d_:_:_d_e_c_l_v_a_l_<_v_e_c_t_o_r_&_&_>(), _s_t_d_:_:_d_e_c_l_v_a_l_<_c_o_n_s_t_ _a_l_l_o_c_a_t_o_r___t_y_p_e_&_>(), │ │ │ │ -692 _s_t_d_:_:_d_e_c_l_v_a_l_<_t_y_p_e_n_a_m_e_ ___A_l_l_o_c___t_r_a_i_t_s_:_:_i_s___a_l_w_a_y_s___e_q_u_a_l_>())) ) │ │ │ │ -693 : _v_e_c_t_o_r(_s_t_d_:_:_m_o_v_e(_____r_v), _____m, typename ___A_l_l_o_c___t_r_a_i_t_s_:_:_i_s___a_l_w_a_y_s___e_q_u_a_l{}) │ │ │ │ -694 { } │ │ │ │ -695 │ │ │ │ -696 /** │ │ │ │ -697 * @brief Builds a %vector from an initializer list. │ │ │ │ -698 * @param __l An initializer_list. │ │ │ │ -699 * @param __a An allocator. │ │ │ │ -700 * │ │ │ │ -701 * Create a %vector consisting of copies of the elements in the │ │ │ │ -702 * initializer_list @a __l. │ │ │ │ -703 * │ │ │ │ -704 * This will call the element type's copy constructor N times │ │ │ │ -705 * (where N is @a __l.size()) and do no memory reallocation. │ │ │ │ -706 */ │ │ │ │ -707 _GLIBCXX20_CONSTEXPR │ │ │ │ -_7_0_8 _v_e_c_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, │ │ │ │ -709 const allocator_type& __a = allocator_type()) │ │ │ │ -710 : ___B_a_s_e(__a) │ │ │ │ -711 { │ │ │ │ -712 _M_range_initialize_n(_____l.begin(), _____l.end(), _____l.size()); │ │ │ │ -713 } │ │ │ │ -714#endif │ │ │ │ -715 │ │ │ │ -716 /** │ │ │ │ -717 * @brief Builds a %vector from a range. │ │ │ │ -718 * @param __first An input iterator. │ │ │ │ -719 * @param __last An input iterator. │ │ │ │ -720 * @param __a An allocator. │ │ │ │ -721 * │ │ │ │ -722 * Create a %vector consisting of copies of the elements from │ │ │ │ -723 * [first,last). │ │ │ │ -724 * │ │ │ │ -725 * If the iterators are forward, bidirectional, or │ │ │ │ -726 * random-access, then this will call the elements' copy │ │ │ │ -727 * constructor N times (where N is distance(first,last)) and do │ │ │ │ -728 * no memory reallocation. But if only input iterators are │ │ │ │ -729 * used, then this will do at most 2N calls to the copy │ │ │ │ -730 * constructor, and logN memory reallocations. │ │ │ │ -731 */ │ │ │ │ -732#if __cplusplus >= 201103L │ │ │ │ -733 template> │ │ │ │ -735 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -_7_3_6 _v_e_c_t_o_r(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __last, │ │ │ │ -737 const allocator_type& __a = allocator_type()) │ │ │ │ -738 : ___B_a_s_e(__a) │ │ │ │ -739 { │ │ │ │ -740#if __glibcxx_concepts // C++ >= C++20 │ │ │ │ -741 if constexpr (_s_i_z_e_d___s_e_n_t_i_n_e_l___f_o_r_<___I_n_p_u_t_I_t_e_r_a_t_o_r_,_ ___I_n_p_u_t_I_t_e_r_a_t_o_r_> │ │ │ │ -742 || _f_o_r_w_a_r_d___i_t_e_r_a_t_o_r_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>) │ │ │ │ -743 { │ │ │ │ -744 const auto __n │ │ │ │ -745 = static_cast(ranges::distance(__first, __last)); │ │ │ │ -746 _M_range_initialize_n(__first, __last, __n); │ │ │ │ -747 return; │ │ │ │ -748 } │ │ │ │ -749 else │ │ │ │ -750#endif │ │ │ │ -751 _M_range_initialize(__first, __last, │ │ │ │ -752 _s_t_d_:_:_____i_t_e_r_a_t_o_r___c_a_t_e_g_o_r_y(__first)); │ │ │ │ -753 } │ │ │ │ -754#else │ │ │ │ -755 template │ │ │ │ -756 _v_e_c_t_o_r(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __last, │ │ │ │ -757 const allocator_type& __a = allocator_type()) │ │ │ │ -758 : _Base(__a) │ │ │ │ -759 { │ │ │ │ -760 // Check whether it's an integral type. If so, it's not an iterator. │ │ │ │ -761 typedef typename std::__is_integer<_InputIterator>::__type ___I_n_t_e_g_r_a_l; │ │ │ │ -762 _M_initialize_dispatch(__first, __last, ___I_n_t_e_g_r_a_l()); │ │ │ │ -763 } │ │ │ │ -764#endif │ │ │ │ -765 │ │ │ │ -766#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -767 /** │ │ │ │ -768 * @brief Construct a vector from a range. │ │ │ │ -769 * @param __rg A range of values that are convertible to `bool`. │ │ │ │ -770 * @since C++23 │ │ │ │ -771 */ │ │ │ │ -772 template<__detail::__container_compatible_range<_Tp> _Rg> │ │ │ │ -773 constexpr │ │ │ │ -774 _v_e_c_t_o_r(from_range_t, _Rg&& __rg, const _Alloc& __a = _Alloc()) │ │ │ │ -775 : _v_e_c_t_o_r(__a) │ │ │ │ -776 { │ │ │ │ -777 if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>) │ │ │ │ -778 { │ │ │ │ -779 const auto __n = static_cast(ranges::distance(__rg)); │ │ │ │ -780 _M_range_initialize_n(ranges::begin(__rg), ranges::end(__rg), │ │ │ │ -781 __n); │ │ │ │ -782 } │ │ │ │ -783 else │ │ │ │ -784 { │ │ │ │ -785 auto __first = ranges::begin(__rg); │ │ │ │ -786 const auto __last = ranges::end(__rg); │ │ │ │ -787 for (; __first != __last; ++__first) │ │ │ │ -788 emplace_back(*__first); │ │ │ │ -789 } │ │ │ │ -790 } │ │ │ │ -791#endif │ │ │ │ -792 │ │ │ │ -793 /** │ │ │ │ -794 * The dtor only erases the elements, and note that if the │ │ │ │ -795 * elements themselves are pointers, the pointed-to memory is │ │ │ │ -796 * not touched in any way. Managing the pointer is the user's │ │ │ │ -797 * responsibility. │ │ │ │ -798 */ │ │ │ │ -799 _GLIBCXX20_CONSTEXPR │ │ │ │ -_8_0_0 _~_v_e_c_t_o_r() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -801 { │ │ │ │ -802 _s_t_d_:_:___D_e_s_t_r_o_y(this->_M_impl._M_start, _t_h_i_s->_M_impl._M_finish, │ │ │ │ -803 _M_get_Tp_allocator()); │ │ │ │ -804 _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC; │ │ │ │ -805 } │ │ │ │ -806 │ │ │ │ -807 /** │ │ │ │ -808 * @brief %Vector assignment operator. │ │ │ │ -809 * @param __x A %vector of identical element and allocator types. │ │ │ │ -810 * │ │ │ │ -811 * All the elements of @a __x are copied, but any unused capacity in │ │ │ │ -812 * @a __x will not be copied. │ │ │ │ -813 * │ │ │ │ -814 * Whether the allocator is copied depends on the allocator traits. │ │ │ │ -815 */ │ │ │ │ -816 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -817 _v_e_c_t_o_r& │ │ │ │ -_8_1_8 _o_p_e_r_a_t_o_r_=(const _v_e_c_t_o_r& __x); │ │ │ │ -819 │ │ │ │ -820#if __cplusplus >= 201103L │ │ │ │ -821 /** │ │ │ │ -822 * @brief %Vector move assignment operator. │ │ │ │ -823 * @param __x A %vector of identical element and allocator types. │ │ │ │ -824 * │ │ │ │ -825 * The contents of @a __x are moved into this %vector (without copying, │ │ │ │ -826 * if the allocators permit it). │ │ │ │ -827 * Afterwards @a __x is a valid, but unspecified %vector. │ │ │ │ -828 * │ │ │ │ -829 * Whether the allocator is moved depends on the allocator traits. │ │ │ │ -830 */ │ │ │ │ -831 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -832 _v_e_c_t_o_r& │ │ │ │ -_8_3_3 _o_p_e_r_a_t_o_r_=(_v_e_c_t_o_r&& __x) noexcept(_Alloc_traits::_S_nothrow_move()) │ │ │ │ -834 { │ │ │ │ -835 constexpr bool _____m_o_v_e___s_t_o_r_a_g_e = │ │ │ │ -836 _Alloc_traits::_S_propagate_on_move_assign() │ │ │ │ -837 || _Alloc_traits::_S_always_equal(); │ │ │ │ -838 _M_move_assign(_s_t_d_:_:_m_o_v_e(__x), _____b_o_o_l___c_o_n_s_t_a_n_t_<_____m_o_v_e___s_t_o_r_a_g_e_>()); │ │ │ │ -839 return *this; │ │ │ │ -840 } │ │ │ │ -841 │ │ │ │ -842 /** │ │ │ │ -843 * @brief %Vector list assignment operator. │ │ │ │ -844 * @param __l An initializer_list. │ │ │ │ -845 * │ │ │ │ -846 * This function fills a %vector with copies of the elements in the │ │ │ │ -847 * initializer list @a __l. │ │ │ │ -848 * │ │ │ │ -849 * Note that the assignment completely changes the %vector and │ │ │ │ -850 * that the resulting %vector's size is the same as the number │ │ │ │ -851 * of elements assigned. │ │ │ │ -852 */ │ │ │ │ -853 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -854 _v_e_c_t_o_r& │ │ │ │ -_8_5_5 _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) │ │ │ │ -856 { │ │ │ │ -857 this->_M_assign_aux(_____l.begin(), _____l.end(), │ │ │ │ -858 _r_a_n_d_o_m___a_c_c_e_s_s___i_t_e_r_a_t_o_r___t_a_g()); │ │ │ │ -859 return *this; │ │ │ │ -860 } │ │ │ │ -861#endif │ │ │ │ -862 │ │ │ │ -863 /** │ │ │ │ -864 * @brief Assigns a given value to a %vector. │ │ │ │ -865 * @param __n Number of elements to be assigned. │ │ │ │ -866 * @param __val Value to be assigned. │ │ │ │ -867 * │ │ │ │ -868 * This function fills a %vector with @a __n copies of the given │ │ │ │ -869 * value. Note that the assignment completely changes the │ │ │ │ -870 * %vector and that the resulting %vector's size is the same as │ │ │ │ -871 * the number of elements assigned. │ │ │ │ -872 */ │ │ │ │ -873 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -874 void │ │ │ │ -_8_7_5 _a_s_s_i_g_n(size_type __n, const value_type& __val) │ │ │ │ -876 { _M_fill_assign(__n, __val); } │ │ │ │ -877 │ │ │ │ -878 /** │ │ │ │ -879 * @brief Assigns a range to a %vector. │ │ │ │ -880 * @param __first An input iterator. │ │ │ │ -881 * @param __last An input iterator. │ │ │ │ -882 * │ │ │ │ -883 * This function fills a %vector with copies of the elements in the │ │ │ │ -884 * range [__first,__last). │ │ │ │ -885 * │ │ │ │ -886 * Note that the assignment completely changes the %vector and │ │ │ │ -887 * that the resulting %vector's size is the same as the number │ │ │ │ -888 * of elements assigned. │ │ │ │ -889 */ │ │ │ │ -890#if __cplusplus >= 201103L │ │ │ │ -891 template> │ │ │ │ -893 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -894 void │ │ │ │ -_8_9_5 _a_s_s_i_g_n(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __last) │ │ │ │ -896 { _M_assign_aux(__first, __last, _s_t_d_:_:_____i_t_e_r_a_t_o_r___c_a_t_e_g_o_r_y(__first)); } │ │ │ │ -897#else │ │ │ │ -898 template │ │ │ │ -899 void │ │ │ │ -900 _a_s_s_i_g_n(___I_n_p_u_t_I_t_e_r_a_t_o_r __first, ___I_n_p_u_t_I_t_e_r_a_t_o_r __last) │ │ │ │ -901 { │ │ │ │ -902 // Check whether it's an integral type. If so, it's not an iterator. │ │ │ │ -903 typedef typename std::__is_integer<_InputIterator>::__type ___I_n_t_e_g_r_a_l; │ │ │ │ -904 _M_assign_dispatch(__first, __last, ___I_n_t_e_g_r_a_l()); │ │ │ │ -905 } │ │ │ │ -906#endif │ │ │ │ -907 │ │ │ │ -908#if __cplusplus >= 201103L │ │ │ │ -909 /** │ │ │ │ -910 * @brief Assigns an initializer list to a %vector. │ │ │ │ -911 * @param __l An initializer_list. │ │ │ │ -912 * │ │ │ │ -913 * This function fills a %vector with copies of the elements in the │ │ │ │ -914 * initializer list @a __l. │ │ │ │ -915 * │ │ │ │ -916 * Note that the assignment completely changes the %vector and │ │ │ │ -917 * that the resulting %vector's size is the same as the number │ │ │ │ -918 * of elements assigned. │ │ │ │ -919 */ │ │ │ │ -920 _GLIBCXX20_CONSTEXPR │ │ │ │ -921 void │ │ │ │ -_9_2_2 _a_s_s_i_g_n(_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) │ │ │ │ -923 { │ │ │ │ -924 this->_M_assign_aux(_____l.begin(), _____l.end(), │ │ │ │ -925 _r_a_n_d_o_m___a_c_c_e_s_s___i_t_e_r_a_t_o_r___t_a_g()); │ │ │ │ -926 } │ │ │ │ -927#endif │ │ │ │ -928 │ │ │ │ -929#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -930 /** │ │ │ │ -931 * @brief Assign a range to the vector. │ │ │ │ -932 * @param __rg A range of values that are convertible to `value_type`. │ │ │ │ -933 * @pre `__rg` and `*this` do not overlap. │ │ │ │ -934 * @since C++23 │ │ │ │ -935 */ │ │ │ │ -936 template<__detail::__container_compatible_range<_Tp> _Rg> │ │ │ │ -937 constexpr void │ │ │ │ -938 _a_s_s_i_g_n___r_a_n_g_e(___R_g&& _____r_g) │ │ │ │ -939 { │ │ │ │ -940 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_>>); │ │ │ │ -941 │ │ │ │ -942 if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>) │ │ │ │ -943 { │ │ │ │ -944 const auto __n = size_type(ranges::distance(_____r_g)); │ │ │ │ -945 if (__n <= _s_i_z_e()) │ │ │ │ -946 { │ │ │ │ -947 auto _____r_e_s = ranges::copy(_____r_g, this->_M_impl._M_start); │ │ │ │ -948 _M_erase_at_end(_____r_e_s.out); │ │ │ │ -949 return; │ │ │ │ -950 } │ │ │ │ -951 │ │ │ │ -952 _r_e_s_e_r_v_e(__n); │ │ │ │ -953 auto __first = ranges::copy_n(ranges::begin(__rg), _s_i_z_e(), │ │ │ │ -954 this->_M_impl._M_start).in; │ │ │ │ -955 [[maybe_unused]] const auto __diff = __n - _s_i_z_e(); │ │ │ │ -956 _GLIBCXX_ASAN_ANNOTATE_GROW(__diff); │ │ │ │ -957 _Base::_M_append_range(ranges::subrange(_s_t_d_:_:_m_o_v_e(__first), │ │ │ │ -958 ranges::end(__rg))); │ │ │ │ -959 _GLIBCXX_ASAN_ANNOTATE_GREW(__diff); │ │ │ │ -960 } │ │ │ │ -961 else // input_range<_Rg> && !sized_range<_Rg> │ │ │ │ -962 { │ │ │ │ -963 auto __first = ranges::begin(__rg); │ │ │ │ -964 const auto __last = ranges::end(__rg); │ │ │ │ -965 pointer __ptr = this->_M_impl._M_start; │ │ │ │ -966 pointer const __end = this->_M_impl._M_finish; │ │ │ │ -967 │ │ │ │ -968 while (__ptr < __end && __first != __last) │ │ │ │ -969 { │ │ │ │ -970 *__ptr = *__first; │ │ │ │ -971 ++__ptr; │ │ │ │ -972 ++__first; │ │ │ │ -973 } │ │ │ │ -974 │ │ │ │ -975 if (__first == __last) │ │ │ │ -976 _M_erase_at_end(__ptr); │ │ │ │ -977 else │ │ │ │ -978 { │ │ │ │ -979 do │ │ │ │ -980 emplace_back(*__first); │ │ │ │ -981 while (++__first != __last); │ │ │ │ -982 } │ │ │ │ -983 } │ │ │ │ -984 } │ │ │ │ -985#endif // containers_ranges │ │ │ │ -986 │ │ │ │ -987 /// Get a copy of the memory allocation object. │ │ │ │ -_9_8_8 using _Base::get_allocator; │ │ │ │ -989 │ │ │ │ -990 // iterators │ │ │ │ -991 /** │ │ │ │ -992 * Returns a read/write iterator that points to the first │ │ │ │ -993 * element in the %vector. Iteration is done in ordinary │ │ │ │ -994 * element order. │ │ │ │ -995 */ │ │ │ │ -996 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -997 iterator │ │ │ │ -_9_9_8 _b_e_g_i_n() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -999 { return iterator(this->_M_impl._M_start); } │ │ │ │ -1000 │ │ │ │ -1001 /** │ │ │ │ -1002 * Returns a read-only (constant) iterator that points to the │ │ │ │ -1003 * first element in the %vector. Iteration is done in ordinary │ │ │ │ -1004 * element order. │ │ │ │ -1005 */ │ │ │ │ -1006 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1007 const_iterator │ │ │ │ -_1_0_0_8 _b_e_g_i_n() _c_o_n_s_t ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1009 { return const_iterator(this->_M_impl._M_start); } │ │ │ │ -1010 │ │ │ │ -1011 /** │ │ │ │ -1012 * Returns a read/write iterator that points one past the last │ │ │ │ -1013 * element in the %vector. Iteration is done in ordinary │ │ │ │ -1014 * element order. │ │ │ │ -1015 */ │ │ │ │ -1016 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1017 _i_t_e_r_a_t_o_r │ │ │ │ -_1_0_1_8 _e_n_d() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1019 { return iterator(this->_M_impl._M_finish); } │ │ │ │ -1020 │ │ │ │ -1021 /** │ │ │ │ -1022 * Returns a read-only (constant) iterator that points one past │ │ │ │ -1023 * the last element in the %vector. Iteration is done in │ │ │ │ -1024 * ordinary element order. │ │ │ │ -1025 */ │ │ │ │ -1026 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1027 const_iterator │ │ │ │ -_1_0_2_8 _e_n_d() _c_o_n_s_t ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1029 { return const_iterator(this->_M_impl._M_finish); } │ │ │ │ -1030 │ │ │ │ -1031 /** │ │ │ │ -1032 * Returns a read/write reverse iterator that points to the │ │ │ │ -1033 * last element in the %vector. Iteration is done in reverse │ │ │ │ -1034 * element order. │ │ │ │ -1035 */ │ │ │ │ -1036 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1037 _r_e_v_e_r_s_e___i_t_e_r_a_t_o_r │ │ │ │ -_1_0_3_8 _r_b_e_g_i_n() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1039 { return _r_e_v_e_r_s_e___i_t_e_r_a_t_o_r(_e_n_d()); } │ │ │ │ -1040 │ │ │ │ -1041 /** │ │ │ │ -1042 * Returns a read-only (constant) reverse iterator that points │ │ │ │ -1043 * to the last element in the %vector. Iteration is done in │ │ │ │ -1044 * reverse element order. │ │ │ │ -1045 */ │ │ │ │ -1046 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1047 const_reverse_iterator │ │ │ │ -_1_0_4_8 _r_b_e_g_i_n() _c_o_n_s_t ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1049 { return _c_o_n_s_t___r_e_v_e_r_s_e___i_t_e_r_a_t_o_r(_e_n_d()); } │ │ │ │ -1050 │ │ │ │ -1051 /** │ │ │ │ -1052 * Returns a read/write reverse iterator that points to one │ │ │ │ -1053 * before the first element in the %vector. Iteration is done │ │ │ │ -1054 * in reverse element order. │ │ │ │ -1055 */ │ │ │ │ -1056 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1057 _r_e_v_e_r_s_e___i_t_e_r_a_t_o_r │ │ │ │ -_1_0_5_8 _r_e_n_d() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1059 { return _r_e_v_e_r_s_e___i_t_e_r_a_t_o_r(_b_e_g_i_n()); } │ │ │ │ -1060 │ │ │ │ -1061 /** │ │ │ │ -1062 * Returns a read-only (constant) reverse iterator that points │ │ │ │ -1063 * to one before the first element in the %vector. Iteration │ │ │ │ -1064 * is done in reverse element order. │ │ │ │ -1065 */ │ │ │ │ -1066 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1067 const_reverse_iterator │ │ │ │ -_1_0_6_8 _r_e_n_d() _c_o_n_s_t ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1069 { return _c_o_n_s_t___r_e_v_e_r_s_e___i_t_e_r_a_t_o_r(_b_e_g_i_n()); } │ │ │ │ -1070 │ │ │ │ -1071#if __cplusplus >= 201103L │ │ │ │ -1072 /** │ │ │ │ -1073 * Returns a read-only (constant) iterator that points to the │ │ │ │ -1074 * first element in the %vector. Iteration is done in ordinary │ │ │ │ -1075 * element order. │ │ │ │ -1076 */ │ │ │ │ -1077 [[_____n_o_d_i_s_c_a_r_d____]] ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1078 const_iterator │ │ │ │ -_1_0_7_9 _c_b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ -1080 { return const_iterator(this->_M_impl._M_start); } │ │ │ │ -1081 │ │ │ │ -1082 /** │ │ │ │ -1083 * Returns a read-only (constant) iterator that points one past │ │ │ │ -1084 * the last element in the %vector. Iteration is done in │ │ │ │ -1085 * ordinary element order. │ │ │ │ -1086 */ │ │ │ │ -1087 [[_____n_o_d_i_s_c_a_r_d____]] ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1088 const_iterator │ │ │ │ -_1_0_8_9 _c_e_n_d() _c_o_n_s_t noexcept │ │ │ │ -1090 { return const_iterator(this->_M_impl._M_finish); } │ │ │ │ -1091 │ │ │ │ -1092 /** │ │ │ │ -1093 * Returns a read-only (constant) reverse iterator that points │ │ │ │ -1094 * to the last element in the %vector. Iteration is done in │ │ │ │ -1095 * reverse element order. │ │ │ │ -1096 */ │ │ │ │ -1097 [[_____n_o_d_i_s_c_a_r_d____]] ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1098 const_reverse_iterator │ │ │ │ -_1_0_9_9 _c_r_b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ -1100 { return _c_o_n_s_t___r_e_v_e_r_s_e___i_t_e_r_a_t_o_r(_e_n_d()); } │ │ │ │ -1101 │ │ │ │ -1102 /** │ │ │ │ -1103 * Returns a read-only (constant) reverse iterator that points │ │ │ │ -1104 * to one before the first element in the %vector. Iteration │ │ │ │ -1105 * is done in reverse element order. │ │ │ │ -1106 */ │ │ │ │ -1107 [[_____n_o_d_i_s_c_a_r_d____]] ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1108 const_reverse_iterator │ │ │ │ -_1_1_0_9 _c_r_e_n_d() _c_o_n_s_t noexcept │ │ │ │ -1110 { return _c_o_n_s_t___r_e_v_e_r_s_e___i_t_e_r_a_t_o_r(_b_e_g_i_n()); } │ │ │ │ -1111#endif │ │ │ │ -1112 │ │ │ │ -1113 // [23.2.4.2] capacity │ │ │ │ -1114 /** Returns the number of elements in the %vector. */ │ │ │ │ -1115 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1116 size_type │ │ │ │ -_1_1_1_7 _s_i_z_e() _c_o_n_s_t ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1118 { │ │ │ │ -1119 _p_t_r_d_i_f_f___t _____d_i_f = this->_M_impl._M_finish - this->_M_impl._M_start; │ │ │ │ -1120 if (_____d_i_f < 0) │ │ │ │ -1121 _____b_u_i_l_t_i_n___u_n_r_e_a_c_h_a_b_l_e (); │ │ │ │ -1122 return size_type(_____d_i_f); │ │ │ │ -1123 } │ │ │ │ -1124 │ │ │ │ -1125 /** Returns the size() of the largest possible %vector. */ │ │ │ │ -1126 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1127 size_type │ │ │ │ -_1_1_2_8 _m_a_x___s_i_z_e() _c_o_n_s_t ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1129 { return _S_max_size(_M_get_Tp_allocator()); } │ │ │ │ -1130 │ │ │ │ -1131#if __cplusplus >= 201103L │ │ │ │ -1132 /** │ │ │ │ -1133 * @brief Resizes the %vector to the specified number of elements. │ │ │ │ -1134 * @param __new_size Number of elements the %vector should contain. │ │ │ │ -1135 * │ │ │ │ -1136 * This function will %resize the %vector to the specified │ │ │ │ -1137 * number of elements. If the number is smaller than the │ │ │ │ -1138 * %vector's current size the %vector is truncated, otherwise │ │ │ │ -1139 * default constructed elements are appended. │ │ │ │ -1140 */ │ │ │ │ -1141 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1142 void │ │ │ │ -_1_1_4_3 _r_e_s_i_z_e(size_type _____n_e_w___s_i_z_e) │ │ │ │ -1144 { │ │ │ │ -1145 if (_____n_e_w___s_i_z_e > _s_i_z_e()) │ │ │ │ -1146 _M_default_append(_____n_e_w___s_i_z_e - _s_i_z_e()); │ │ │ │ -1147 else if (_____n_e_w___s_i_z_e < _s_i_z_e()) │ │ │ │ -1148 _M_erase_at_end(this->_M_impl._M_start + _____n_e_w___s_i_z_e); │ │ │ │ -1149 } │ │ │ │ -1150 │ │ │ │ -1151 /** │ │ │ │ -1152 * @brief Resizes the %vector to the specified number of elements. │ │ │ │ -1153 * @param __new_size Number of elements the %vector should contain. │ │ │ │ -1154 * @param __x Data with which new elements should be populated. │ │ │ │ -1155 * │ │ │ │ -1156 * This function will %resize the %vector to the specified │ │ │ │ -1157 * number of elements. If the number is smaller than the │ │ │ │ -1158 * %vector's current size the %vector is truncated, otherwise │ │ │ │ -1159 * the %vector is extended and new elements are populated with │ │ │ │ -1160 * given data. │ │ │ │ -1161 */ │ │ │ │ -1162 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1163 void │ │ │ │ -_1_1_6_4 _r_e_s_i_z_e(size_type _____n_e_w___s_i_z_e, const value_type& __x) │ │ │ │ -1165 { │ │ │ │ -1166 if (_____n_e_w___s_i_z_e > _s_i_z_e()) │ │ │ │ -1167 _M_fill_insert(_e_n_d(), _____n_e_w___s_i_z_e - _s_i_z_e(), __x); │ │ │ │ -1168 else if (_____n_e_w___s_i_z_e < _s_i_z_e()) │ │ │ │ -1169 _M_erase_at_end(this->_M_impl._M_start + _____n_e_w___s_i_z_e); │ │ │ │ -1170 } │ │ │ │ -1171#else │ │ │ │ -1172 /** │ │ │ │ -1173 * @brief Resizes the %vector to the specified number of elements. │ │ │ │ -1174 * @param __new_size Number of elements the %vector should contain. │ │ │ │ -1175 * @param __x Data with which new elements should be populated. │ │ │ │ -1176 * │ │ │ │ -1177 * This function will %resize the %vector to the specified │ │ │ │ -1178 * number of elements. If the number is smaller than the │ │ │ │ -1179 * %vector's current size the %vector is truncated, otherwise │ │ │ │ -1180 * the %vector is extended and new elements are populated with │ │ │ │ -1181 * given data. │ │ │ │ -1182 */ │ │ │ │ -1183 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1184 void │ │ │ │ -1185 _r_e_s_i_z_e(size_type _____n_e_w___s_i_z_e, value_type __x = value_type()) │ │ │ │ -1186 { │ │ │ │ -1187 if (_____n_e_w___s_i_z_e > _s_i_z_e()) │ │ │ │ -1188 _M_fill_insert(_e_n_d(), _____n_e_w___s_i_z_e - _s_i_z_e(), __x); │ │ │ │ -1189 else if (_____n_e_w___s_i_z_e < _s_i_z_e()) │ │ │ │ -1190 _M_erase_at_end(this->_M_impl._M_start + _____n_e_w___s_i_z_e); │ │ │ │ -1191 } │ │ │ │ -1192#endif │ │ │ │ -1193 │ │ │ │ -1194#if __cplusplus >= 201103L │ │ │ │ -1195 /** A non-binding request to reduce capacity() to size(). */ │ │ │ │ -1196 _GLIBCXX20_CONSTEXPR │ │ │ │ -1197 void │ │ │ │ -_1_1_9_8 _s_h_r_i_n_k___t_o___f_i_t() │ │ │ │ -1199 { _M_shrink_to_fit(); } │ │ │ │ -1200#endif │ │ │ │ -1201 │ │ │ │ -1202 /** │ │ │ │ -1203 * Returns the total number of elements that the %vector can │ │ │ │ -1204 * hold before needing to allocate more memory. │ │ │ │ -1205 */ │ │ │ │ -1206 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1207 size_type │ │ │ │ -_1_2_0_8 _c_a_p_a_c_i_t_y() _c_o_n_s_t ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1209 { │ │ │ │ -1210 _p_t_r_d_i_f_f___t _____d_i_f = this->_M_impl._M_end_of_storage │ │ │ │ -1211 - this->_M_impl._M_start; │ │ │ │ -1212 if (_____d_i_f < 0) │ │ │ │ -1213 _____b_u_i_l_t_i_n___u_n_r_e_a_c_h_a_b_l_e (); │ │ │ │ -1214 return size_type(_____d_i_f); │ │ │ │ -1215 } │ │ │ │ -1216 │ │ │ │ -1217 /** │ │ │ │ -1218 * Returns true if the %vector is empty. (Thus begin() would │ │ │ │ -1219 * equal end().) │ │ │ │ -1220 */ │ │ │ │ -1221 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1222 bool │ │ │ │ -_1_2_2_3 _e_m_p_t_y() _c_o_n_s_t ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1224 { return _b_e_g_i_n() == _e_n_d(); } │ │ │ │ -1225 │ │ │ │ -1226 /** │ │ │ │ -1227 * @brief Attempt to preallocate enough memory for specified number of │ │ │ │ -1228 * elements. │ │ │ │ -1229 * @param __n Number of elements required. │ │ │ │ -1230 * @throw std::length_error If @a n exceeds @c max_size(). │ │ │ │ -1231 * │ │ │ │ -1232 * This function attempts to reserve enough memory for the │ │ │ │ -1233 * %vector to hold the specified number of elements. If the │ │ │ │ -1234 * number requested is more than max_size(), length_error is │ │ │ │ -1235 * thrown. │ │ │ │ -1236 * │ │ │ │ -1237 * The advantage of this function is that if optimal code is a │ │ │ │ -1238 * necessity and the user can determine the number of elements │ │ │ │ -1239 * that will be required, the user can reserve the memory in │ │ │ │ -1240 * %advance, and thus prevent a possible reallocation of memory │ │ │ │ -1241 * and copying of %vector data. │ │ │ │ -1242 */ │ │ │ │ -1243 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1244 void │ │ │ │ -1245 _r_e_s_e_r_v_e(size_type __n); │ │ │ │ -1246 │ │ │ │ -1247 // element access │ │ │ │ -1248 /** │ │ │ │ -1249 * @brief Subscript access to the data contained in the %vector. │ │ │ │ -1250 * @param __n The index of the element for which data should be │ │ │ │ -1251 * accessed. │ │ │ │ -1252 * @return Read/write reference to data. │ │ │ │ -1253 * │ │ │ │ -1254 * This operator allows for easy, array-style, data access. │ │ │ │ -1255 * Note that data access with this operator is unchecked and │ │ │ │ -1256 * out_of_range lookups are not defined. (For checked lookups │ │ │ │ -1257 * see at().) │ │ │ │ -1258 */ │ │ │ │ -1259 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1260 reference │ │ │ │ -_1_2_6_1 _o_p_e_r_a_t_o_r_[_](size_type __n) ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1262 { │ │ │ │ -1263 __glibcxx_requires_subscript(__n); │ │ │ │ -1264 return *(this->_M_impl._M_start + __n); │ │ │ │ -1265 } │ │ │ │ -1266 │ │ │ │ -1267 /** │ │ │ │ -1268 * @brief Subscript access to the data contained in the %vector. │ │ │ │ -1269 * @param __n The index of the element for which data should be │ │ │ │ -1270 * accessed. │ │ │ │ -1271 * @return Read-only (constant) reference to data. │ │ │ │ -1272 * │ │ │ │ -1273 * This operator allows for easy, array-style, data access. │ │ │ │ -1274 * Note that data access with this operator is unchecked and │ │ │ │ -1275 * out_of_range lookups are not defined. (For checked lookups │ │ │ │ -1276 * see at().) │ │ │ │ -1277 */ │ │ │ │ -1278 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1279 const_reference │ │ │ │ -_1_2_8_0 _o_p_e_r_a_t_o_r_[_](size_type __n) const ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1281 { │ │ │ │ -1282 __glibcxx_requires_subscript(__n); │ │ │ │ -1283 return *(this->_M_impl._M_start + __n); │ │ │ │ -1284 } │ │ │ │ -1285 │ │ │ │ -1286 protected: │ │ │ │ -1287 /// Safety check used only from at(). │ │ │ │ -1288 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1289 void │ │ │ │ -_1_2_9_0 ___M___r_a_n_g_e___c_h_e_c_k(size_type __n) const │ │ │ │ -1291 { │ │ │ │ -1292 if (__n >= this->_s_i_z_e()) │ │ │ │ -1293 __throw_out_of_range_fmt(__N("vector::_M_range_check: __n " │ │ │ │ -1294 "(which is %zu) >= this->size() " │ │ │ │ -1295 "(which is %zu)"), │ │ │ │ -1296 __n, this->_s_i_z_e()); │ │ │ │ -1297 } │ │ │ │ -1298 │ │ │ │ -1299 public: │ │ │ │ -1300 /** │ │ │ │ -1301 * @brief Provides access to the data contained in the %vector. │ │ │ │ -1302 * @param __n The index of the element for which data should be │ │ │ │ -1303 * accessed. │ │ │ │ -1304 * @return Read/write reference to data. │ │ │ │ -1305 * @throw std::out_of_range If @a __n is an invalid index. │ │ │ │ -1306 * │ │ │ │ -1307 * This function provides for safer data access. The parameter │ │ │ │ -1308 * is first checked that it is in the range of the vector. The │ │ │ │ -1309 * function throws out_of_range if the check fails. │ │ │ │ -1310 */ │ │ │ │ -1311 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1312 reference │ │ │ │ -_1_3_1_3 _a_t(size_type __n) │ │ │ │ -1314 { │ │ │ │ -1315 ___M___r_a_n_g_e___c_h_e_c_k(__n); │ │ │ │ -1316 return (*this)[__n]; │ │ │ │ -1317 } │ │ │ │ -1318 │ │ │ │ -1319 /** │ │ │ │ -1320 * @brief Provides access to the data contained in the %vector. │ │ │ │ -1321 * @param __n The index of the element for which data should be │ │ │ │ -1322 * accessed. │ │ │ │ -1323 * @return Read-only (constant) reference to data. │ │ │ │ -1324 * @throw std::out_of_range If @a __n is an invalid index. │ │ │ │ -1325 * │ │ │ │ -1326 * This function provides for safer data access. The parameter │ │ │ │ -1327 * is first checked that it is in the range of the vector. The │ │ │ │ -1328 * function throws out_of_range if the check fails. │ │ │ │ -1329 */ │ │ │ │ -1330 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1331 const_reference │ │ │ │ -_1_3_3_2 _a_t(size_type __n) const │ │ │ │ -1333 { │ │ │ │ -1334 ___M___r_a_n_g_e___c_h_e_c_k(__n); │ │ │ │ -1335 return (*this)[__n]; │ │ │ │ -1336 } │ │ │ │ -1337 │ │ │ │ -1338 /** │ │ │ │ -1339 * Returns a read/write reference to the data at the first │ │ │ │ -1340 * element of the %vector. │ │ │ │ -1341 */ │ │ │ │ -1342 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1343 reference │ │ │ │ -_1_3_4_4 _f_r_o_n_t() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1345 { │ │ │ │ -1346 __glibcxx_requires_nonempty(); │ │ │ │ -1347 return *_b_e_g_i_n(); │ │ │ │ -1348 } │ │ │ │ -1349 │ │ │ │ -1350 /** │ │ │ │ -1351 * Returns a read-only (constant) reference to the data at the first │ │ │ │ -1352 * element of the %vector. │ │ │ │ -1353 */ │ │ │ │ -1354 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1355 const_reference │ │ │ │ -_1_3_5_6 _f_r_o_n_t() _c_o_n_s_t ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1357 { │ │ │ │ -1358 __glibcxx_requires_nonempty(); │ │ │ │ -1359 return *_b_e_g_i_n(); │ │ │ │ -1360 } │ │ │ │ -1361 │ │ │ │ -1362 /** │ │ │ │ -1363 * Returns a read/write reference to the data at the last │ │ │ │ -1364 * element of the %vector. │ │ │ │ -1365 */ │ │ │ │ -1366 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1367 reference │ │ │ │ -_1_3_6_8 _b_a_c_k() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1369 { │ │ │ │ -1370 __glibcxx_requires_nonempty(); │ │ │ │ -1371 return *(_e_n_d() - 1); │ │ │ │ -1372 } │ │ │ │ -1373 │ │ │ │ -1374 /** │ │ │ │ -1375 * Returns a read-only (constant) reference to the data at the │ │ │ │ -1376 * last element of the %vector. │ │ │ │ -1377 */ │ │ │ │ -1378 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1379 const_reference │ │ │ │ -_1_3_8_0 _b_a_c_k() _c_o_n_s_t ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1381 { │ │ │ │ -1382 __glibcxx_requires_nonempty(); │ │ │ │ -1383 return *(_e_n_d() - 1); │ │ │ │ -1384 } │ │ │ │ -1385 │ │ │ │ -1386 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1387 // DR 464. Suggestion for new member functions in standard containers. │ │ │ │ -1388 // data access │ │ │ │ -1389 /** │ │ │ │ -1390 * Returns a pointer such that [data(), data() + size()) is a valid │ │ │ │ -1391 * range. For a non-empty %vector, data() == &front(). │ │ │ │ -1392 */ │ │ │ │ -1393 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1394 _Tp* │ │ │ │ -_1_3_9_5 _d_a_t_a() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1396 { return _M_data_ptr(this->_M_impl._M_start); } │ │ │ │ -1397 │ │ │ │ -1398 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1399 const _Tp* │ │ │ │ -1400 _d_a_t_a() _c_o_n_s_t ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1401 { return _M_data_ptr(this->_M_impl._M_start); } │ │ │ │ -1402 │ │ │ │ -1403 // [23.2.4.3] modifiers │ │ │ │ -1404 /** │ │ │ │ -1405 * @brief Add data to the end of the %vector. │ │ │ │ -1406 * @param __x Data to be added. │ │ │ │ -1407 * │ │ │ │ -1408 * This is a typical stack operation. The function creates an │ │ │ │ -1409 * element at the end of the %vector and assigns the given data │ │ │ │ -1410 * to it. Due to the nature of a %vector this operation can be │ │ │ │ -1411 * done in constant time if the %vector has preallocated space │ │ │ │ -1412 * available. │ │ │ │ -1413 */ │ │ │ │ -1414 _GLIBCXX20_CONSTEXPR │ │ │ │ -1415 void │ │ │ │ -_1_4_1_6 _p_u_s_h___b_a_c_k(const value_type& __x) │ │ │ │ -1417 { │ │ │ │ -1418 if (this->_M_impl._M_finish != _t_h_i_s->_M_impl._M_end_of_storage) │ │ │ │ -1419 { │ │ │ │ -1420 _GLIBCXX_ASAN_ANNOTATE_GROW(1); │ │ │ │ -1421 _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, │ │ │ │ -1422 __x); │ │ │ │ -1423 ++this->_M_impl._M_finish; │ │ │ │ -1424 _GLIBCXX_ASAN_ANNOTATE_GREW(1); │ │ │ │ -1425 } │ │ │ │ -1426 else │ │ │ │ -1427 _M_realloc_append(__x); │ │ │ │ -1428 } │ │ │ │ -1429 │ │ │ │ -1430#if __cplusplus >= 201103L │ │ │ │ -1431 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1432 void │ │ │ │ -1433 _p_u_s_h___b_a_c_k(value_type&& __x) │ │ │ │ -1434 { emplace_back(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -1435 │ │ │ │ -1436 template │ │ │ │ -1437#if __cplusplus > 201402L │ │ │ │ -1438 _GLIBCXX20_CONSTEXPR │ │ │ │ -1439 reference │ │ │ │ -1440#else │ │ │ │ -1441 void │ │ │ │ -1442#endif │ │ │ │ -1443 emplace_back(_Args&&... __args); │ │ │ │ -1444#endif │ │ │ │ -1445 │ │ │ │ -1446 /** │ │ │ │ -1447 * @brief Removes last element. │ │ │ │ -1448 * │ │ │ │ -1449 * This is a typical stack operation. It shrinks the %vector by one. │ │ │ │ -1450 * │ │ │ │ -1451 * Note that no data is returned, and if the last element's │ │ │ │ -1452 * data is needed, it should be retrieved before pop_back() is │ │ │ │ -1453 * called. │ │ │ │ -1454 */ │ │ │ │ -1455 _GLIBCXX20_CONSTEXPR │ │ │ │ -1456 void │ │ │ │ -_1_4_5_7 _p_o_p___b_a_c_k() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1458 { │ │ │ │ -1459 __glibcxx_requires_nonempty(); │ │ │ │ -1460 --this->_M_impl._M_finish; │ │ │ │ -1461 _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish); │ │ │ │ -1462 _GLIBCXX_ASAN_ANNOTATE_SHRINK(1); │ │ │ │ -1463 } │ │ │ │ -1464 │ │ │ │ -1465#if __cplusplus >= 201103L │ │ │ │ -1466 /** │ │ │ │ -1467 * @brief Inserts an object in %vector before specified iterator. │ │ │ │ -1468 * @param __position A const_iterator into the %vector. │ │ │ │ -1469 * @param __args Arguments. │ │ │ │ -1470 * @return An iterator that points to the inserted data. │ │ │ │ -1471 * │ │ │ │ -1472 * This function will insert an object of type T constructed │ │ │ │ -1473 * with T(std::forward(args)...) before the specified location. │ │ │ │ -1474 * Note that this kind of operation could be expensive for a %vector │ │ │ │ -1475 * and if it is frequently used the user should consider using │ │ │ │ -1476 * std::list. │ │ │ │ -1477 */ │ │ │ │ -1478 template │ │ │ │ -1479 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1480 _i_t_e_r_a_t_o_r │ │ │ │ -_1_4_8_1 _e_m_p_l_a_c_e(const_iterator _____p_o_s_i_t_i_o_n, ___A_r_g_s&&... _____a_r_g_s) │ │ │ │ -1482 { return _M_emplace_aux(_____p_o_s_i_t_i_o_n, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); } │ │ │ │ -1483 │ │ │ │ -1484 /** │ │ │ │ -1485 * @brief Inserts given value into %vector before specified iterator. │ │ │ │ -1486 * @param __position A const_iterator into the %vector. │ │ │ │ -1487 * @param __x Data to be inserted. │ │ │ │ -1488 * @return An iterator that points to the inserted data. │ │ │ │ -1489 * │ │ │ │ -1490 * This function will insert a copy of the given value before │ │ │ │ -1491 * the specified location. Note that this kind of operation │ │ │ │ -1492 * could be expensive for a %vector and if it is frequently │ │ │ │ -1493 * used the user should consider using std::list. │ │ │ │ -1494 */ │ │ │ │ -1495 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1496 _i_t_e_r_a_t_o_r │ │ │ │ -1497 _i_n_s_e_r_t(const_iterator _____p_o_s_i_t_i_o_n, const value_type& __x); │ │ │ │ -1498#else │ │ │ │ -1499 /** │ │ │ │ -1500 * @brief Inserts given value into %vector before specified iterator. │ │ │ │ -1501 * @param __position An iterator into the %vector. │ │ │ │ -1502 * @param __x Data to be inserted. │ │ │ │ -1503 * @return An iterator that points to the inserted data. │ │ │ │ -1504 * │ │ │ │ -1505 * This function will insert a copy of the given value before │ │ │ │ -1506 * the specified location. Note that this kind of operation │ │ │ │ -1507 * could be expensive for a %vector and if it is frequently │ │ │ │ -1508 * used the user should consider using std::list. │ │ │ │ -1509 */ │ │ │ │ -1510 _i_t_e_r_a_t_o_r │ │ │ │ -1511 _i_n_s_e_r_t(_i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n, const value_type& __x); │ │ │ │ -1512#endif │ │ │ │ -1513 │ │ │ │ -1514#if __cplusplus >= 201103L │ │ │ │ -1515 /** │ │ │ │ -1516 * @brief Inserts given rvalue into %vector before specified iterator. │ │ │ │ -1517 * @param __position A const_iterator into the %vector. │ │ │ │ -1518 * @param __x Data to be inserted. │ │ │ │ -1519 * @return An iterator that points to the inserted data. │ │ │ │ -1520 * │ │ │ │ -1521 * This function will insert a copy of the given rvalue before │ │ │ │ -1522 * the specified location. Note that this kind of operation │ │ │ │ -1523 * could be expensive for a %vector and if it is frequently │ │ │ │ -1524 * used the user should consider using std::list. │ │ │ │ -1525 */ │ │ │ │ -1526 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1527 _i_t_e_r_a_t_o_r │ │ │ │ -_1_5_2_8 _i_n_s_e_r_t(const_iterator _____p_o_s_i_t_i_o_n, value_type&& __x) │ │ │ │ -1529 { return _M_insert_rval(_____p_o_s_i_t_i_o_n, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -1530 │ │ │ │ -1531 /** │ │ │ │ -1532 * @brief Inserts an initializer_list into the %vector. │ │ │ │ -1533 * @param __position An iterator into the %vector. │ │ │ │ -1534 * @param __l An initializer_list. │ │ │ │ -1535 * │ │ │ │ -1536 * This function will insert copies of the data in the │ │ │ │ -1537 * initializer_list @a l into the %vector before the location │ │ │ │ -1538 * specified by @a position. │ │ │ │ -1539 * │ │ │ │ -1540 * Note that this kind of operation could be expensive for a │ │ │ │ -1541 * %vector and if it is frequently used the user should │ │ │ │ -1542 * consider using std::list. │ │ │ │ -1543 */ │ │ │ │ -1544 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1545 _i_t_e_r_a_t_o_r │ │ │ │ -_1_5_4_6 _i_n_s_e_r_t(const_iterator _____p_o_s_i_t_i_o_n, _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) │ │ │ │ -1547 { │ │ │ │ -1548 auto __offset = _____p_o_s_i_t_i_o_n - _c_b_e_g_i_n(); │ │ │ │ -1549 _M_range_insert(_b_e_g_i_n() + __offset, _____l.begin(), _____l.end(), │ │ │ │ -1550 _s_t_d_:_:_r_a_n_d_o_m___a_c_c_e_s_s___i_t_e_r_a_t_o_r___t_a_g()); │ │ │ │ -1551 return _b_e_g_i_n() + __offset; │ │ │ │ -1552 } │ │ │ │ -1553#endif │ │ │ │ -1554 │ │ │ │ -1555#if __cplusplus >= 201103L │ │ │ │ -1556 /** │ │ │ │ -1557 * @brief Inserts a number of copies of given data into the %vector. │ │ │ │ -1558 * @param __position A const_iterator into the %vector. │ │ │ │ -1559 * @param __n Number of elements to be inserted. │ │ │ │ -1560 * @param __x Data to be inserted. │ │ │ │ -1561 * @return An iterator that points to the inserted data. │ │ │ │ -1562 * │ │ │ │ -1563 * This function will insert a specified number of copies of │ │ │ │ -1564 * the given data before the location specified by @a position. │ │ │ │ -1565 * │ │ │ │ -1566 * Note that this kind of operation could be expensive for a │ │ │ │ -1567 * %vector and if it is frequently used the user should │ │ │ │ -1568 * consider using std::list. │ │ │ │ -1569 */ │ │ │ │ -1570 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1571 _i_t_e_r_a_t_o_r │ │ │ │ -_1_5_7_2 _i_n_s_e_r_t(const_iterator _____p_o_s_i_t_i_o_n, size_type __n, const value_type& __x) │ │ │ │ -1573 { │ │ │ │ -1574 _d_i_f_f_e_r_e_n_c_e___t_y_p_e __offset = _____p_o_s_i_t_i_o_n - _c_b_e_g_i_n(); │ │ │ │ -1575 _M_fill_insert(_b_e_g_i_n() + __offset, __n, __x); │ │ │ │ -1576 return _b_e_g_i_n() + __offset; │ │ │ │ -1577 } │ │ │ │ -1578#else │ │ │ │ -1579 /** │ │ │ │ -1580 * @brief Inserts a number of copies of given data into the %vector. │ │ │ │ -1581 * @param __position An iterator into the %vector. │ │ │ │ -1582 * @param __n Number of elements to be inserted. │ │ │ │ -1583 * @param __x Data to be inserted. │ │ │ │ -1584 * │ │ │ │ -1585 * This function will insert a specified number of copies of │ │ │ │ -1586 * the given data before the location specified by @a position. │ │ │ │ -1587 * │ │ │ │ -1588 * Note that this kind of operation could be expensive for a │ │ │ │ -1589 * %vector and if it is frequently used the user should │ │ │ │ -1590 * consider using std::list. │ │ │ │ -1591 */ │ │ │ │ -1592 void │ │ │ │ -1593 _i_n_s_e_r_t(_i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n, size_type __n, const value_type& __x) │ │ │ │ -1594 { _M_fill_insert(_____p_o_s_i_t_i_o_n, __n, __x); } │ │ │ │ -1595#endif │ │ │ │ -1596 │ │ │ │ -1597#if __cplusplus >= 201103L │ │ │ │ -1598 /** │ │ │ │ -1599 * @brief Inserts a range into the %vector. │ │ │ │ -1600 * @param __position A const_iterator into the %vector. │ │ │ │ -1601 * @param __first An input iterator. │ │ │ │ -1602 * @param __last An input iterator. │ │ │ │ -1603 * @return An iterator that points to the inserted data. │ │ │ │ -1604 * │ │ │ │ -1605 * This function will insert copies of the data in the range │ │ │ │ -1606 * [__first,__last) into the %vector before the location specified │ │ │ │ -1607 * by @a pos. │ │ │ │ -1608 * │ │ │ │ -1609 * Note that this kind of operation could be expensive for a │ │ │ │ -1610 * %vector and if it is frequently used the user should │ │ │ │ -1611 * consider using std::list. │ │ │ │ -1612 */ │ │ │ │ -1613 template> │ │ │ │ -1615 _GLIBCXX20_CONSTEXPR │ │ │ │ -1616 iterator │ │ │ │ -_1_6_1_7 _i_n_s_e_r_t(const_iterator _____p_o_s_i_t_i_o_n, ___I_n_p_u_t_I_t_e_r_a_t_o_r __first, │ │ │ │ -1618 ___I_n_p_u_t_I_t_e_r_a_t_o_r __last) │ │ │ │ -1619 { │ │ │ │ -1620 _d_i_f_f_e_r_e_n_c_e___t_y_p_e __offset = _____p_o_s_i_t_i_o_n - _c_b_e_g_i_n(); │ │ │ │ -1621 _M_range_insert(_b_e_g_i_n() + __offset, __first, __last, │ │ │ │ -1622 _s_t_d_:_:_____i_t_e_r_a_t_o_r___c_a_t_e_g_o_r_y(__first)); │ │ │ │ -1623 return _b_e_g_i_n() + __offset; │ │ │ │ -1624 } │ │ │ │ -1625#else │ │ │ │ -1626 /** │ │ │ │ -1627 * @brief Inserts a range into the %vector. │ │ │ │ -1628 * @param __position An iterator into the %vector. │ │ │ │ -1629 * @param __first An input iterator. │ │ │ │ -1630 * @param __last An input iterator. │ │ │ │ -1631 * │ │ │ │ -1632 * This function will insert copies of the data in the range │ │ │ │ -1633 * [__first,__last) into the %vector before the location specified │ │ │ │ -1634 * by @a pos. │ │ │ │ -1635 * │ │ │ │ -1636 * Note that this kind of operation could be expensive for a │ │ │ │ -1637 * %vector and if it is frequently used the user should │ │ │ │ -1638 * consider using std::list. │ │ │ │ -1639 */ │ │ │ │ -1640 template │ │ │ │ -1641 void │ │ │ │ -1642 _i_n_s_e_r_t(_i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n, ___I_n_p_u_t_I_t_e_r_a_t_o_r __first, │ │ │ │ -1643 ___I_n_p_u_t_I_t_e_r_a_t_o_r __last) │ │ │ │ -1644 { │ │ │ │ -1645 // Check whether it's an integral type. If so, it's not an iterator. │ │ │ │ -1646 typedef typename std::__is_integer<_InputIterator>::__type ___I_n_t_e_g_r_a_l; │ │ │ │ -1647 _M_insert_dispatch(_____p_o_s_i_t_i_o_n, __first, __last, ___I_n_t_e_g_r_a_l()); │ │ │ │ -1648 } │ │ │ │ -1649#endif │ │ │ │ -1650 │ │ │ │ -1651#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -1652 /** │ │ │ │ -1653 * @brief Insert a range into the vector. │ │ │ │ -1654 * @param __rg A range of values that are convertible to `value_type`. │ │ │ │ -1655 * @return An iterator that points to the first new element inserted, │ │ │ │ -1656 * or to `__pos` if `__rg` is an empty range. │ │ │ │ -1657 * @pre `__rg` and `*this` do not overlap. │ │ │ │ -1658 * @since C++23 │ │ │ │ -1659 */ │ │ │ │ -1660 template<__detail::__container_compatible_range<_Tp> _Rg> │ │ │ │ -1661 constexpr iterator │ │ │ │ -1662 insert_range(const_iterator __pos, _Rg&& __rg); │ │ │ │ -1663 │ │ │ │ -1664 /** │ │ │ │ -1665 * @brief Append a range at the end of the vector. │ │ │ │ -1666 * @param __rg A range of values that are convertible to `value_type`. │ │ │ │ -1667 * @since C++23 │ │ │ │ -1668 */ │ │ │ │ -1669 template<__detail::__container_compatible_range<_Tp> _Rg> │ │ │ │ -1670 constexpr void │ │ │ │ -1671 append_range(_Rg&& __rg) │ │ │ │ -1672 { │ │ │ │ -1673 // N.B. __rg may overlap with *this, so we must copy from __rg before │ │ │ │ -1674 // existing elements or iterators referring to *this are invalidated. │ │ │ │ -1675 // e.g. in v.append_range(views::concat(v, foo)) rg overlaps v. │ │ │ │ -1676 if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>) │ │ │ │ -1677 { │ │ │ │ -1678 const auto __n = size_type(ranges::distance(__rg)); │ │ │ │ -1679 │ │ │ │ -1680 // If there is no existing storage, there are no iterators that │ │ │ │ -1681 // can be referring to our storage, so it's safe to allocate now. │ │ │ │ -1682 if (_c_a_p_a_c_i_t_y() == 0) │ │ │ │ -1683 _r_e_s_e_r_v_e(__n); │ │ │ │ -1684 │ │ │ │ -1685 const auto __sz = _s_i_z_e(); │ │ │ │ -1686 const auto __capacity = _c_a_p_a_c_i_t_y(); │ │ │ │ -1687 if ((__capacity - __sz) >= __n) │ │ │ │ -1688 { │ │ │ │ -1689 _GLIBCXX_ASAN_ANNOTATE_GROW(__n); │ │ │ │ -1690 _Base::_M_append_range(__rg); │ │ │ │ -1691 _GLIBCXX_ASAN_ANNOTATE_GREW(__n); │ │ │ │ -1692 return; │ │ │ │ -1693 } │ │ │ │ -1694 │ │ │ │ -1695 const size_type __len = _M_check_len(__n, "vector::append_range"); │ │ │ │ -1696 │ │ │ │ -1697 pointer __old_start = this->_M_impl._M_start; │ │ │ │ -1698 pointer __old_finish = this->_M_impl._M_finish; │ │ │ │ -1699 │ │ │ │ -1700 allocator_type& __a = _M_get_Tp_allocator(); │ │ │ │ -1701 const pointer __start = this->_M_allocate(__len); │ │ │ │ -1702 const pointer __mid = __start + __sz; │ │ │ │ -1703 const pointer __back = __mid + __n; │ │ │ │ -1704 _Guard_alloc __guard(__start, __len, *this); │ │ │ │ -1705 _s_t_d_:_:_____u_n_i_n_i_t_i_a_l_i_z_e_d___c_o_p_y___a(ranges::begin(__rg), │ │ │ │ -1706 ranges::end(__rg), │ │ │ │ -1707 __mid, __a); │ │ │ │ -1708 │ │ │ │ -1709 if constexpr (_S_use_relocate()) │ │ │ │ -1710 _S_relocate(__old_start, __old_finish, __start, __a); │ │ │ │ -1711 else │ │ │ │ -1712 { │ │ │ │ -1713 // RAII type to destroy initialized elements. │ │ │ │ -1714 struct _Guard_elts │ │ │ │ -1715 { │ │ │ │ -1716 pointer _M_first, _M_last; // Elements to destroy │ │ │ │ -1717 _Tp_alloc_type& _M_alloc; │ │ │ │ -1718 │ │ │ │ -1719 constexpr │ │ │ │ -1720 _Guard_elts(pointer __f, pointer __l, _Tp_alloc_type& __a) │ │ │ │ -1721 : _M_first(__f), _M_last(__l), _M_alloc(__a) │ │ │ │ -1722 { } │ │ │ │ -1723 │ │ │ │ -1724 constexpr │ │ │ │ -1725 ~_Guard_elts() │ │ │ │ -1726 { _s_t_d_:_:___D_e_s_t_r_o_y(_M_first, _M_last, _M_alloc); } │ │ │ │ -1727 │ │ │ │ -1728 _Guard_elts(_Guard_elts&&) = delete; │ │ │ │ -1729 }; │ │ │ │ -1730 _Guard_elts __guard_elts{__mid, __back, __a}; │ │ │ │ -1731 │ │ │ │ -1732 _s_t_d_:_:_____u_n_i_n_i_t_i_a_l_i_z_e_d___m_o_v_e___a(__old_start, __old_finish, │ │ │ │ -1733 __start, __a); │ │ │ │ -1734 │ │ │ │ -1735 // Let old elements get destroyed by __guard_elts: │ │ │ │ -1736 __guard_elts._M_first = __old_start; │ │ │ │ -1737 __guard_elts._M_last = __old_finish; │ │ │ │ -1738 } │ │ │ │ -1739 │ │ │ │ -1740 // Now give ownership of old storage to __guard: │ │ │ │ -1741 __guard._M_storage = __old_start; │ │ │ │ -1742 __guard._M_len = __capacity; │ │ │ │ -1743 // Finally, take ownership of new storage: │ │ │ │ -1744 this->_M_impl._M_start = __start; │ │ │ │ -1745 this->_M_impl._M_finish = __back; │ │ │ │ -1746 this->_M_impl._M_end_of_storage = __start + __len; │ │ │ │ -1747 } │ │ │ │ -1748 else │ │ │ │ -1749 { │ │ │ │ -1750 auto __first = ranges::begin(__rg); │ │ │ │ -1751 const auto __last = ranges::end(__rg); │ │ │ │ -1752 │ │ │ │ -1753 // Fill up to the end of current capacity. │ │ │ │ -1754 for (auto __free = _c_a_p_a_c_i_t_y() - _s_i_z_e(); │ │ │ │ -1755 __first != __last && __free > 0; │ │ │ │ -1756 ++__first, (void) --__free) │ │ │ │ -1757 emplace_back(*__first); │ │ │ │ -1758 │ │ │ │ -1759 if (__first == __last) │ │ │ │ -1760 return; │ │ │ │ -1761 │ │ │ │ -1762 // Copy the rest of the range to a new vector. │ │ │ │ -1763 _v_e_c_t_o_r __tmp(_M_get_Tp_allocator()); │ │ │ │ -1764 for (; __first != __last; ++__first) │ │ │ │ -1765 __tmp.emplace_back(*__first); │ │ │ │ -1766 _r_e_s_e_r_v_e(_M_check_len(__tmp.size(), "vector::append_range")); │ │ │ │ -1767 ranges::subrange __r(std::make_move_iterator(__tmp.begin()), │ │ │ │ -1768 std::make_move_iterator(__tmp.end())); │ │ │ │ -1769 append_range(__r); // This will take the fast path above. │ │ │ │ -1770 } │ │ │ │ -1771 } │ │ │ │ -1772#endif // containers_ranges │ │ │ │ -1773 │ │ │ │ -1774 /** │ │ │ │ -1775 * @brief Remove element at given position. │ │ │ │ -1776 * @param __position Iterator pointing to element to be erased. │ │ │ │ -1777 * @return An iterator pointing to the next element (or end()). │ │ │ │ -1778 * │ │ │ │ -1779 * This function will erase the element at the given position and thus │ │ │ │ -1780 * shorten the %vector by one. │ │ │ │ -1781 * │ │ │ │ -1782 * Note This operation could be expensive and if it is │ │ │ │ -1783 * frequently used the user should consider using std::list. │ │ │ │ -1784 * The user is also cautioned that this function only erases │ │ │ │ -1785 * the element, and that if the element is itself a pointer, │ │ │ │ -1786 * the pointed-to memory is not touched in any way. Managing │ │ │ │ -1787 * the pointer is the user's responsibility. │ │ │ │ -1788 */ │ │ │ │ -1789 _GLIBCXX20_CONSTEXPR │ │ │ │ -1790 iterator │ │ │ │ -1791#if __cplusplus >= 201103L │ │ │ │ -_1_7_9_2 _e_r_a_s_e(const_iterator _____p_o_s_i_t_i_o_n) │ │ │ │ -1793 { return _M_erase(_b_e_g_i_n() + (_____p_o_s_i_t_i_o_n - _c_b_e_g_i_n())); } │ │ │ │ -1794#else │ │ │ │ -1795 _e_r_a_s_e(_i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n) │ │ │ │ -1796 { return _M_erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ -1797#endif │ │ │ │ -1798 │ │ │ │ -1799 /** │ │ │ │ -1800 * @brief Remove a range of elements. │ │ │ │ -1801 * @param __first Iterator pointing to the first element to be erased. │ │ │ │ -1802 * @param __last Iterator pointing to one past the last element to be │ │ │ │ -1803 * erased. │ │ │ │ -1804 * @return An iterator pointing to the element pointed to by @a __last │ │ │ │ -1805 * prior to erasing (or end()). │ │ │ │ -1806 * │ │ │ │ -1807 * This function will erase the elements in the range │ │ │ │ -1808 * [__first,__last) and shorten the %vector accordingly. │ │ │ │ -1809 * │ │ │ │ -1810 * Note This operation could be expensive and if it is │ │ │ │ -1811 * frequently used the user should consider using std::list. │ │ │ │ -1812 * The user is also cautioned that this function only erases │ │ │ │ -1813 * the elements, and that if the elements themselves are │ │ │ │ -1814 * pointers, the pointed-to memory is not touched in any way. │ │ │ │ -1815 * Managing the pointer is the user's responsibility. │ │ │ │ -1816 */ │ │ │ │ -1817 _GLIBCXX20_CONSTEXPR │ │ │ │ -1818 iterator │ │ │ │ -1819#if __cplusplus >= 201103L │ │ │ │ -_1_8_2_0 _e_r_a_s_e(const_iterator __first, const_iterator __last) │ │ │ │ -1821 { │ │ │ │ -1822 const auto _____b_e_g = _b_e_g_i_n(); │ │ │ │ -1823 const auto _____c_b_e_g = _c_b_e_g_i_n(); │ │ │ │ -1824 return _M_erase(_____b_e_g + (__first - _____c_b_e_g), _____b_e_g + (__last - _____c_b_e_g)); │ │ │ │ -1825 } │ │ │ │ -1826#else │ │ │ │ -1827 _e_r_a_s_e(_i_t_e_r_a_t_o_r __first, _i_t_e_r_a_t_o_r __last) │ │ │ │ -1828 { return _M_erase(__first, __last); } │ │ │ │ -1829#endif │ │ │ │ -1830 │ │ │ │ -1831 /** │ │ │ │ -1832 * @brief Swaps data with another %vector. │ │ │ │ -1833 * @param __x A %vector of the same element and allocator types. │ │ │ │ -1834 * │ │ │ │ -1835 * This exchanges the elements between two vectors in constant time. │ │ │ │ -1836 * (Three pointers, so it should be quite fast.) │ │ │ │ -1837 * Note that the global std::swap() function is specialized such that │ │ │ │ -1838 * std::swap(v1,v2) will feed to this function. │ │ │ │ -1839 * │ │ │ │ -1840 * Whether the allocators are swapped depends on the allocator traits. │ │ │ │ -1841 */ │ │ │ │ -1842 _GLIBCXX20_CONSTEXPR │ │ │ │ -1843 void │ │ │ │ -_1_8_4_4 _s_w_a_p(_v_e_c_t_o_r& __x) ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1845 { │ │ │ │ -1846#if __cplusplus >= 201103L │ │ │ │ -1847 __glibcxx_assert(_Alloc_traits::propagate_on_container_swap::value │ │ │ │ -1848 || _M_get_Tp_allocator() == __x._M_get_Tp_allocator()); │ │ │ │ -1849#endif │ │ │ │ -1850 this->_M_impl._M_swap_data(__x._M_impl); │ │ │ │ -1851 _Alloc_traits::_S_on_swap(_M_get_Tp_allocator(), │ │ │ │ -1852 __x._M_get_Tp_allocator()); │ │ │ │ -1853 } │ │ │ │ -1854 │ │ │ │ -1855 /** │ │ │ │ -1856 * Erases all the elements. Note that this function only erases the │ │ │ │ -1857 * elements, and that if the elements themselves are pointers, the │ │ │ │ -1858 * pointed-to memory is not touched in any way. Managing the pointer is │ │ │ │ -1859 * the user's responsibility. │ │ │ │ -1860 */ │ │ │ │ -1861 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1862 void │ │ │ │ -_1_8_6_3 _c_l_e_a_r() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1864 { _M_erase_at_end(this->_M_impl._M_start); } │ │ │ │ -1865 │ │ │ │ -1866 private: │ │ │ │ -1867 // RAII guard for allocated storage. │ │ │ │ -1868 struct _Guard_alloc │ │ │ │ -1869 { │ │ │ │ -1870 pointer _M_storage; // Storage to deallocate │ │ │ │ -1871 size_type _M_len; │ │ │ │ -1872 _Base& _M_vect; │ │ │ │ -1873 │ │ │ │ -1874 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1875 _Guard_alloc(pointer _____s, size_type _____l, _Base& _____v_e_c_t) │ │ │ │ -1876 : _M_storage(_____s), _M_len(_____l), _M_vect(_____v_e_c_t) │ │ │ │ -1877 { } │ │ │ │ -1878 │ │ │ │ -1879 _GLIBCXX20_CONSTEXPR │ │ │ │ -1880 ~_Guard_alloc() │ │ │ │ -1881 { │ │ │ │ -1882 if (_M_storage) │ │ │ │ -1883 _M_vect._M_deallocate(_M_storage, _M_len); │ │ │ │ -1884 } │ │ │ │ -1885 │ │ │ │ -1886 _GLIBCXX20_CONSTEXPR │ │ │ │ -1887 pointer │ │ │ │ -1888 _M_release() │ │ │ │ -1889 { │ │ │ │ -1890 pointer __res = _M_storage; │ │ │ │ -1891 _M_storage = pointer(); │ │ │ │ -1892 return __res; │ │ │ │ -1893 } │ │ │ │ -1894 │ │ │ │ -1895 private: │ │ │ │ -1896 _Guard_alloc(const _Guard_alloc&); │ │ │ │ -1897 }; │ │ │ │ -1898 │ │ │ │ -1899 protected: │ │ │ │ -1900 /** │ │ │ │ -1901 * Memory expansion handler. Uses the member allocation function to │ │ │ │ -1902 * obtain @a n bytes of memory, and then copies [first,last) into it. │ │ │ │ -1903 */ │ │ │ │ -1904 template │ │ │ │ -1905 _GLIBCXX20_CONSTEXPR │ │ │ │ -1906 pointer │ │ │ │ -_1_9_0_7 ___M___a_l_l_o_c_a_t_e___a_n_d___c_o_p_y(size_type __n, │ │ │ │ -1908 ___F_o_r_w_a_r_d_I_t_e_r_a_t_o_r __first, ___F_o_r_w_a_r_d_I_t_e_r_a_t_o_r __last) │ │ │ │ -1909 { │ │ │ │ -1910 _Guard_alloc __guard(this->_M_allocate(__n), __n, *this); │ │ │ │ -1911 _s_t_d_:_:_____u_n_i_n_i_t_i_a_l_i_z_e_d___c_o_p_y___a │ │ │ │ -1912 (__first, __last, __guard._M_storage, _M_get_Tp_allocator()); │ │ │ │ -1913 return __guard._M_release(); │ │ │ │ -1914 } │ │ │ │ -1915 │ │ │ │ -1916 │ │ │ │ -1917 // Internal constructor functions follow. │ │ │ │ -1918 │ │ │ │ -1919 // Called by the range constructor to implement [23.1.1]/9 │ │ │ │ -1920 │ │ │ │ -1921#if __cplusplus < 201103L │ │ │ │ -1922 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1923 // 438. Ambiguity in the "do the right thing" clause │ │ │ │ -1924 template │ │ │ │ -1925 void │ │ │ │ -1926 _M_initialize_dispatch(___I_n_t_e_g_e_r _____i_n_t___n, ___I_n_t_e_g_e_r __value, __true_type) │ │ │ │ -1927 { │ │ │ │ -1928 const size_type __n = static_cast(_____i_n_t___n); │ │ │ │ -1929 pointer _____s_t_a_r_t = │ │ │ │ -1930 _M_allocate(_S_check_init_len(__n, _M_get_Tp_allocator())); │ │ │ │ -1931 this->_M_impl._M_start = _____s_t_a_r_t; │ │ │ │ -1932 this->_M_impl._M_end_of_storage = _____s_t_a_r_t + __n; │ │ │ │ -1933 _M_fill_initialize(__n, __value); │ │ │ │ -1934 } │ │ │ │ -1935 │ │ │ │ -1936 // Called by the range constructor to implement [23.1.1]/9 │ │ │ │ -1937 template │ │ │ │ -1938 void │ │ │ │ -1939 _M_initialize_dispatch(_InputIterator __first, _InputIterator __last, │ │ │ │ -1940 __false_type) │ │ │ │ -1941 { │ │ │ │ -1942 _M_range_initialize(__first, __last, │ │ │ │ -1943 _s_t_d_:_:_____i_t_e_r_a_t_o_r___c_a_t_e_g_o_r_y(__first)); │ │ │ │ -1944 } │ │ │ │ -1945#endif │ │ │ │ -1946 │ │ │ │ -1947 // Called by the second initialize_dispatch above │ │ │ │ -1948 template │ │ │ │ -1949 _GLIBCXX20_CONSTEXPR │ │ │ │ -1950 void │ │ │ │ -1951 _M_range_initialize(_InputIterator __first, _InputIterator __last, │ │ │ │ -1952 _s_t_d_:_:_i_n_p_u_t___i_t_e_r_a_t_o_r___t_a_g) │ │ │ │ -1953 { │ │ │ │ -1954 __try { │ │ │ │ -1955 for (; __first != __last; ++__first) │ │ │ │ -1956#if __cplusplus >= 201103L │ │ │ │ -1957 emplace_back(*__first); │ │ │ │ -1958#else │ │ │ │ -1959 _p_u_s_h___b_a_c_k(*__first); │ │ │ │ -1960#endif │ │ │ │ -1961 } __catch(...) { │ │ │ │ -1962 _c_l_e_a_r(); │ │ │ │ -1963 __throw_exception_again; │ │ │ │ -1964 } │ │ │ │ -1965 } │ │ │ │ -1966 │ │ │ │ -1967 // Called by the second initialize_dispatch above │ │ │ │ -1968 template │ │ │ │ -1969 _GLIBCXX20_CONSTEXPR │ │ │ │ -1970 void │ │ │ │ -1971 _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last, │ │ │ │ -1972 _s_t_d_:_:_f_o_r_w_a_r_d___i_t_e_r_a_t_o_r___t_a_g) │ │ │ │ -1973 { │ │ │ │ -1974 _M_range_initialize_n(__first, __last, │ │ │ │ -1975 _s_t_d_:_:_d_i_s_t_a_n_c_e(__first, __last)); │ │ │ │ -1976 } │ │ │ │ -1977 │ │ │ │ -1978 template │ │ │ │ -1979 _GLIBCXX20_CONSTEXPR │ │ │ │ -1980 void │ │ │ │ -1981 _M_range_initialize_n(_Iterator __first, _Sentinel __last, │ │ │ │ -1982 size_type __n) │ │ │ │ -1983 { │ │ │ │ -1984 pointer __start = │ │ │ │ -1985 this->_M_allocate(_S_check_init_len(__n, _M_get_Tp_allocator())); │ │ │ │ -1986 this->_M_impl._M_start = this->_M_impl._M_finish = __start; │ │ │ │ -1987 this->_M_impl._M_end_of_storage = __start + __n; │ │ │ │ -1988 this->_M_impl._M_finish │ │ │ │ -1989 = _s_t_d_:_:_____u_n_i_n_i_t_i_a_l_i_z_e_d___c_o_p_y___a(_GLIBCXX_MOVE(__first), __last, │ │ │ │ -1990 __start, _M_get_Tp_allocator()); │ │ │ │ -1991 } │ │ │ │ -1992 │ │ │ │ -1993 // Called by the first initialize_dispatch above and by the │ │ │ │ -1994 // vector(n,value,a) constructor. │ │ │ │ -1995 _GLIBCXX20_CONSTEXPR │ │ │ │ -1996 void │ │ │ │ -1997 _M_fill_initialize(size_type __n, const value_type& __value) │ │ │ │ -1998 { │ │ │ │ -1999 this->_M_impl._M_finish = │ │ │ │ -2000 _s_t_d_:_:_____u_n_i_n_i_t_i_a_l_i_z_e_d___f_i_l_l___n___a(this->_M_impl._M_start, __n, __value, │ │ │ │ -2001 _M_get_Tp_allocator()); │ │ │ │ -2002 } │ │ │ │ -2003 │ │ │ │ -2004#if __cplusplus >= 201103L │ │ │ │ -2005 // Called by the vector(n) constructor. │ │ │ │ -2006 _GLIBCXX20_CONSTEXPR │ │ │ │ -2007 void │ │ │ │ -2008 _M_default_initialize(size_type __n) │ │ │ │ -2009 { │ │ │ │ -2010 this->_M_impl._M_finish = │ │ │ │ -2011 _s_t_d_:_:_____u_n_i_n_i_t_i_a_l_i_z_e_d___d_e_f_a_u_l_t___n___a(this->_M_impl._M_start, __n, │ │ │ │ -2012 _M_get_Tp_allocator()); │ │ │ │ -2013 } │ │ │ │ -2014#endif │ │ │ │ -2015 │ │ │ │ -2016 // Internal assign functions follow. The *_aux functions do the actual │ │ │ │ -2017 // assignment work for the range versions. │ │ │ │ -2018 │ │ │ │ -2019 // Called by the range assign to implement [23.1.1]/9 │ │ │ │ -2020 │ │ │ │ -2021 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -2022 // 438. Ambiguity in the "do the right thing" clause │ │ │ │ -2023 template │ │ │ │ -2024 _GLIBCXX20_CONSTEXPR │ │ │ │ -2025 void │ │ │ │ -2026 _M_assign_dispatch(_Integer __n, _Integer __val, __true_type) │ │ │ │ -2027 { _M_fill_assign(__n, __val); } │ │ │ │ -2028 │ │ │ │ -2029 // Called by the range assign to implement [23.1.1]/9 │ │ │ │ -2030 template │ │ │ │ -2031 _GLIBCXX20_CONSTEXPR │ │ │ │ -2032 void │ │ │ │ -2033 _M_assign_dispatch(_InputIterator __first, _InputIterator __last, │ │ │ │ -2034 __false_type) │ │ │ │ -2035 { _M_assign_aux(__first, __last, _s_t_d_:_:_____i_t_e_r_a_t_o_r___c_a_t_e_g_o_r_y(__first)); } │ │ │ │ -2036 │ │ │ │ -2037 // Called by the second assign_dispatch above │ │ │ │ -2038 template │ │ │ │ -2039 _GLIBCXX20_CONSTEXPR │ │ │ │ -2040 void │ │ │ │ -2041 _M_assign_aux(_InputIterator __first, _InputIterator __last, │ │ │ │ -2042 _s_t_d_:_:_i_n_p_u_t___i_t_e_r_a_t_o_r___t_a_g); │ │ │ │ -2043 │ │ │ │ -2044 // Called by the second assign_dispatch above │ │ │ │ -2045 template │ │ │ │ -2046 _GLIBCXX20_CONSTEXPR │ │ │ │ -2047 void │ │ │ │ -2048 _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, │ │ │ │ -2049 _s_t_d_:_:_f_o_r_w_a_r_d___i_t_e_r_a_t_o_r___t_a_g); │ │ │ │ -2050 │ │ │ │ -2051 // Called by assign(n,t), and the range assign when it turns out │ │ │ │ -2052 // to be the same thing. │ │ │ │ -2053 _GLIBCXX20_CONSTEXPR │ │ │ │ -2054 void │ │ │ │ -2055 _M_fill_assign(size_type __n, const value_type& __val); │ │ │ │ -2056 │ │ │ │ -2057 // Internal insert functions follow. │ │ │ │ -2058 │ │ │ │ -2059 // Called by the range insert to implement [23.1.1]/9 │ │ │ │ -2060 │ │ │ │ -2061 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -2062 // 438. Ambiguity in the "do the right thing" clause │ │ │ │ -2063 template │ │ │ │ -2064 _GLIBCXX20_CONSTEXPR │ │ │ │ -2065 void │ │ │ │ -2066 _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __val, │ │ │ │ -2067 __true_type) │ │ │ │ -2068 { _M_fill_insert(__pos, __n, __val); } │ │ │ │ -2069 │ │ │ │ -2070 // Called by the range insert to implement [23.1.1]/9 │ │ │ │ -2071 template │ │ │ │ -2072 _GLIBCXX20_CONSTEXPR │ │ │ │ -2073 void │ │ │ │ -2074 _M_insert_dispatch(iterator __pos, _InputIterator __first, │ │ │ │ -2075 _InputIterator __last, __false_type) │ │ │ │ -2076 { │ │ │ │ -2077 _M_range_insert(__pos, __first, __last, │ │ │ │ -2078 _s_t_d_:_:_____i_t_e_r_a_t_o_r___c_a_t_e_g_o_r_y(__first)); │ │ │ │ -2079 } │ │ │ │ -2080 │ │ │ │ -2081 // Called by the second insert_dispatch above │ │ │ │ -2082 template │ │ │ │ -2083 _GLIBCXX20_CONSTEXPR │ │ │ │ -2084 void │ │ │ │ -2085 _M_range_insert(iterator __pos, _InputIterator __first, │ │ │ │ -2086 _InputIterator __last, _s_t_d_:_:_i_n_p_u_t___i_t_e_r_a_t_o_r___t_a_g); │ │ │ │ -2087 │ │ │ │ -2088 // Called by the second insert_dispatch above │ │ │ │ -2089 template │ │ │ │ -2090 _GLIBCXX20_CONSTEXPR │ │ │ │ -2091 void │ │ │ │ -2092 _M_range_insert(iterator __pos, _ForwardIterator __first, │ │ │ │ -2093 _ForwardIterator __last, _s_t_d_:_:_f_o_r_w_a_r_d___i_t_e_r_a_t_o_r___t_a_g); │ │ │ │ -2094 │ │ │ │ -2095 // Called by insert(p,n,x), and the range insert when it turns out to be │ │ │ │ -2096 // the same thing. │ │ │ │ -2097 _GLIBCXX20_CONSTEXPR │ │ │ │ -2098 void │ │ │ │ -2099 _M_fill_insert(iterator __pos, size_type __n, const value_type& __x); │ │ │ │ -2100 │ │ │ │ -2101#if __cplusplus >= 201103L │ │ │ │ -2102 // Called by resize(n). │ │ │ │ -2103 _GLIBCXX20_CONSTEXPR │ │ │ │ -2104 void │ │ │ │ -2105 _M_default_append(size_type __n); │ │ │ │ -2106 │ │ │ │ -2107 _GLIBCXX20_CONSTEXPR │ │ │ │ -2108 bool │ │ │ │ -2109 _M_shrink_to_fit(); │ │ │ │ -2110#endif │ │ │ │ -2111 │ │ │ │ -2112#if __cplusplus < 201103L │ │ │ │ -2113 // Called by insert(p,x) │ │ │ │ -2114 void │ │ │ │ -2115 _M_insert_aux(iterator __position, const value_type& __x); │ │ │ │ -2116 │ │ │ │ -2117 void │ │ │ │ -2118 _M_realloc_insert(iterator __position, const value_type& __x); │ │ │ │ -2119 │ │ │ │ -2120 void │ │ │ │ -2121 _M_realloc_append(const value_type& __x); │ │ │ │ -2122#else │ │ │ │ -2123 // A value_type object constructed with _Alloc_traits::construct() │ │ │ │ -2124 // and destroyed with _Alloc_traits::destroy(). │ │ │ │ -2125 struct _Temporary_value │ │ │ │ -2126 { │ │ │ │ -2127 template │ │ │ │ -2128 _GLIBCXX20_CONSTEXPR explicit │ │ │ │ -2129 _Temporary_value(_v_e_c_t_o_r* __vec, _Args&&... __args) : _M_this(__vec) │ │ │ │ -2130 { │ │ │ │ -2131 _Alloc_traits::construct(_M_this->_M_impl, _M_ptr(), │ │ │ │ -2132 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ -2133 } │ │ │ │ -2134 │ │ │ │ -2135 _GLIBCXX20_CONSTEXPR │ │ │ │ -2136 ~_Temporary_value() │ │ │ │ -2137 { _Alloc_traits::destroy(_M_this->_M_impl, _M_ptr()); } │ │ │ │ -2138 │ │ │ │ -2139 _GLIBCXX20_CONSTEXPR value_type& │ │ │ │ -2140 _M_val() noexcept { return _M_storage._M_val; } │ │ │ │ -2141 │ │ │ │ -2142 private: │ │ │ │ -2143 _GLIBCXX20_CONSTEXPR _Tp* │ │ │ │ -2144 _M_ptr() noexcept { return _s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_M_storage._M_val); } │ │ │ │ -2145 │ │ │ │ -2146 union _Storage │ │ │ │ -2147 { │ │ │ │ -2148 constexpr _Storage() : _M_byte() { } │ │ │ │ -2149 _GLIBCXX20_CONSTEXPR ~_Storage() { } │ │ │ │ -2150 _Storage& operator=(const _Storage&) = delete; │ │ │ │ -2151 unsigned char _M_byte; │ │ │ │ -2152 _Tp _M_val; │ │ │ │ -2153 }; │ │ │ │ -2154 │ │ │ │ -2155 _v_e_c_t_o_r* _M_this; │ │ │ │ -2156 _Storage _M_storage; │ │ │ │ -2157 }; │ │ │ │ -2158 │ │ │ │ -2159 // Called by insert(p,x) and other functions when insertion needs to │ │ │ │ -2160 // reallocate or move existing elements. _Arg is either _Tp& or _Tp. │ │ │ │ -2161 template │ │ │ │ -2162 _GLIBCXX20_CONSTEXPR │ │ │ │ -2163 void │ │ │ │ -2164 _M_insert_aux(iterator __position, _Arg&& __arg); │ │ │ │ -2165 │ │ │ │ -2166 template │ │ │ │ -2167 _GLIBCXX20_CONSTEXPR │ │ │ │ -2168 void │ │ │ │ -2169 _M_realloc_insert(iterator __position, _Args&&... __args); │ │ │ │ -2170 │ │ │ │ -2171 template │ │ │ │ -2172 _GLIBCXX20_CONSTEXPR │ │ │ │ -2173 void │ │ │ │ -2174 _M_realloc_append(_Args&&... __args); │ │ │ │ -2175 │ │ │ │ -2176 // Either move-construct at the end, or forward to _M_insert_aux. │ │ │ │ -2177 _GLIBCXX20_CONSTEXPR │ │ │ │ -2178 iterator │ │ │ │ -2179 _M_insert_rval(const_iterator __position, value_type&& __v); │ │ │ │ -2180 │ │ │ │ -2181 // Try to emplace at the end, otherwise forward to _M_insert_aux. │ │ │ │ -2182 template │ │ │ │ -2183 _GLIBCXX20_CONSTEXPR │ │ │ │ -2184 iterator │ │ │ │ -2185 _M_emplace_aux(const_iterator __position, _Args&&... __args); │ │ │ │ -2186 │ │ │ │ -2187 // Emplacing an rvalue of the correct type can use _M_insert_rval. │ │ │ │ -2188 _GLIBCXX20_CONSTEXPR │ │ │ │ -2189 iterator │ │ │ │ -2190 _M_emplace_aux(const_iterator __position, value_type&& __v) │ │ │ │ -2191 { return _M_insert_rval(__position, _s_t_d_:_:_m_o_v_e(__v)); } │ │ │ │ -2192#endif │ │ │ │ -2193 │ │ │ │ -2194 // Called by _M_fill_insert, _M_insert_aux etc. │ │ │ │ -2195 _GLIBCXX20_CONSTEXPR │ │ │ │ -2196 size_type │ │ │ │ -2197 _M_check_len(size_type __n, const char* __s) const │ │ │ │ -2198 { │ │ │ │ -2199 if (_m_a_x___s_i_z_e() - _s_i_z_e() < __n) │ │ │ │ -2200 __throw_length_error(__N(__s)); │ │ │ │ -2201 │ │ │ │ -2202 const size_type __len = _s_i_z_e() + (_s_t_d_:_:_m_a_x)(_s_i_z_e(), __n); │ │ │ │ -2203 return (__len < _s_i_z_e() || __len > _m_a_x___s_i_z_e()) ? _m_a_x___s_i_z_e() : __len; │ │ │ │ -2204 } │ │ │ │ -2205 │ │ │ │ -2206 // Called by constructors to check initial size. │ │ │ │ -2207 static _GLIBCXX20_CONSTEXPR size_type │ │ │ │ -2208 _S_check_init_len(size_type __n, const allocator_type& __a) │ │ │ │ -2209 { │ │ │ │ -2210 if (__n > _S_max_size(_Tp_alloc_type(__a))) │ │ │ │ -2211 __throw_length_error( │ │ │ │ -2212 __N("cannot create std::vector larger than max_size()")); │ │ │ │ -2213 return __n; │ │ │ │ -2214 } │ │ │ │ -2215 │ │ │ │ -2216 static _GLIBCXX20_CONSTEXPR size_type │ │ │ │ -2217 _S_max_size(const _Tp_alloc_type& __a) _GLIBCXX_NOEXCEPT │ │ │ │ -2218 { │ │ │ │ -2219 // std::distance(begin(), end()) cannot be greater than PTRDIFF_MAX, │ │ │ │ -2220 // and realistically we can't store more than PTRDIFF_MAX/sizeof(T) │ │ │ │ -2221 // (even if std::allocator_traits::max_size says we can). │ │ │ │ -2222 const size_t __diffmax │ │ │ │ -2223 = __gnu_cxx::__numeric_traits::__max / sizeof(_Tp); │ │ │ │ -2224 const size_t __allocmax = ___A_l_l_o_c___t_r_a_i_t_s_:_:_m_a_x___s_i_z_e(__a); │ │ │ │ -2225 return (_s_t_d_:_:_m_i_n)(__diffmax, __allocmax); │ │ │ │ -2226 } │ │ │ │ -2227 │ │ │ │ -2228 // Internal erase functions follow. │ │ │ │ -2229 │ │ │ │ -2230 // Called by erase(q1,q2), clear(), resize(), _M_fill_assign, │ │ │ │ -2231 // _M_assign_aux. │ │ │ │ -2232 _GLIBCXX20_CONSTEXPR │ │ │ │ -2233 void │ │ │ │ -2234 _M_erase_at_end(pointer __pos) _GLIBCXX_NOEXCEPT │ │ │ │ -2235 { │ │ │ │ -2236 if (size_type __n = this->_M_impl._M_finish - __pos) │ │ │ │ -2237 { │ │ │ │ -2238 _s_t_d_:_:___D_e_s_t_r_o_y(__pos, this->_M_impl._M_finish, │ │ │ │ -2239 _M_get_Tp_allocator()); │ │ │ │ -2240 this->_M_impl._M_finish = __pos; │ │ │ │ -2241 _GLIBCXX_ASAN_ANNOTATE_SHRINK(__n); │ │ │ │ -2242 } │ │ │ │ -2243 } │ │ │ │ -2244 │ │ │ │ -2245 _GLIBCXX20_CONSTEXPR │ │ │ │ -2246 iterator │ │ │ │ -2247 _M_erase(iterator __position); │ │ │ │ -2248 │ │ │ │ -2249 _GLIBCXX20_CONSTEXPR │ │ │ │ -2250 iterator │ │ │ │ -2251 _M_erase(iterator __first, iterator __last); │ │ │ │ -2252 │ │ │ │ -2253#if __cplusplus >= 201103L │ │ │ │ -2254 private: │ │ │ │ -2255 // Constant-time move assignment when source object's memory can be │ │ │ │ -2256 // moved, either because the source's allocator will move too │ │ │ │ -2257 // or because the allocators are equal. │ │ │ │ -2258 _GLIBCXX20_CONSTEXPR │ │ │ │ -2259 void │ │ │ │ -2260 _M_move_assign(_v_e_c_t_o_r&& __x, _t_r_u_e___t_y_p_e) noexcept │ │ │ │ -2261 { │ │ │ │ -2262 _v_e_c_t_o_r __tmp(_g_e_t___a_l_l_o_c_a_t_o_r()); │ │ │ │ -2263 this->_M_impl._M_swap_data(__x._M_impl); │ │ │ │ -2264 __tmp._M_impl._M_swap_data(__x._M_impl); │ │ │ │ -2265 _s_t_d_:_:_____a_l_l_o_c___o_n___m_o_v_e(_M_get_Tp_allocator(), __x._M_get_Tp_allocator()); │ │ │ │ -2266 } │ │ │ │ -2267 │ │ │ │ -2268 // Do move assignment when it might not be possible to move source │ │ │ │ -2269 // object's memory, resulting in a linear-time operation. │ │ │ │ -2270 _GLIBCXX20_CONSTEXPR │ │ │ │ -2271 void │ │ │ │ -2272 _M_move_assign(_v_e_c_t_o_r&& __x, _f_a_l_s_e___t_y_p_e) │ │ │ │ -2273 { │ │ │ │ -2274 if (__x._M_get_Tp_allocator() == this->_M_get_Tp_allocator()) │ │ │ │ -2275 _M_move_assign(_s_t_d_:_:_m_o_v_e(__x), _t_r_u_e___t_y_p_e()); │ │ │ │ -2276 else │ │ │ │ -2277 { │ │ │ │ -2278 // The rvalue's allocator cannot be moved and is not equal, │ │ │ │ -2279 // so we need to individually move each element. │ │ │ │ -2280 this->_M_assign_aux(std::make_move_iterator(__x.begin()), │ │ │ │ -2281 std::make_move_iterator(__x.end()), │ │ │ │ -2282 _s_t_d_:_:_r_a_n_d_o_m___a_c_c_e_s_s___i_t_e_r_a_t_o_r___t_a_g()); │ │ │ │ -2283 __x.clear(); │ │ │ │ -2284 } │ │ │ │ -2285 } │ │ │ │ -2286#endif │ │ │ │ -2287 │ │ │ │ -2288 template │ │ │ │ -2289 _GLIBCXX20_CONSTEXPR │ │ │ │ -2290 _Up* │ │ │ │ -2291 _M_data_ptr(_Up* __ptr) const _GLIBCXX_NOEXCEPT │ │ │ │ -2292 { return __ptr; } │ │ │ │ -2293 │ │ │ │ -2294#if __cplusplus >= 201103L │ │ │ │ -2295 template │ │ │ │ -2296 _GLIBCXX20_CONSTEXPR │ │ │ │ -2297 typename _s_t_d_:_:_p_o_i_n_t_e_r___t_r_a_i_t_s_<___P_t_r_>_:_:_e_l_e_m_e_n_t___t_y_p_e* │ │ │ │ -2298 _M_data_ptr(_Ptr __ptr) const │ │ │ │ -2299 { return _e_m_p_t_y() ? nullptr : _s_t_d_:_:_____t_o___a_d_d_r_e_s_s(__ptr); } │ │ │ │ -2300#else │ │ │ │ -2301 template │ │ │ │ -2302 value_type* │ │ │ │ -2303 _M_data_ptr(_Ptr __ptr) const │ │ │ │ -2304 { return _e_m_p_t_y() ? (value_type*)0 : __ptr.operator->(); } │ │ │ │ -2305#endif │ │ │ │ -2306 }; │ │ │ │ -2307 │ │ │ │ -2308#if __cpp_deduction_guides >= 201606 │ │ │ │ -2309 template::value_type, │ │ │ │ -2311 typename _Allocator = allocator<_ValT>, │ │ │ │ -2312 typename = _RequireInputIter<_InputIterator>, │ │ │ │ -2313 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2314 vector(_InputIterator, _InputIterator, _Allocator = _Allocator()) │ │ │ │ -2315 -> vector<_ValT, _Allocator>; │ │ │ │ -2316 │ │ │ │ -2317#if __glibcxx_containers_ranges // C++ >= 23 │ │ │ │ -2318 template>> │ │ │ │ -2320 vector(from_range_t, _Rg&&, _Alloc = _Alloc()) │ │ │ │ -2321 -> vector, _Alloc>; │ │ │ │ -2322#endif │ │ │ │ -2323#endif │ │ │ │ -2324 │ │ │ │ -2325 /** │ │ │ │ -2326 * @brief Vector equality comparison. │ │ │ │ -2327 * @param __x A %vector. │ │ │ │ -2328 * @param __y A %vector of the same type as @a __x. │ │ │ │ -2329 * @return True iff the size and elements of the vectors are equal. │ │ │ │ -2330 * │ │ │ │ -2331 * This is an equivalence relation. It is linear in the size of the │ │ │ │ -2332 * vectors. Vectors are considered equivalent if their sizes are equal, │ │ │ │ -2333 * and if corresponding elements compare equal. │ │ │ │ -2334 */ │ │ │ │ -2335 template │ │ │ │ -2336 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR │ │ │ │ -2337 inline bool │ │ │ │ -_2_3_3_8 operator==(const _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>& __x, const _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -2339 { return (__x.size() == __y.size() │ │ │ │ -2340 && std::equal(__x.begin(), __x.end(), __y.begin())); } │ │ │ │ -2341 │ │ │ │ -2342#if __cpp_lib_three_way_comparison // >= C++20 │ │ │ │ -2343 /** │ │ │ │ -2344 * @brief Vector ordering relation. │ │ │ │ -2345 * @param __x A `vector`. │ │ │ │ -2346 * @param __y A `vector` of the same type as `__x`. │ │ │ │ -2347 * @return A value indicating whether `__x` is less than, equal to, │ │ │ │ -2348 * greater than, or incomparable with `__y`. │ │ │ │ -2349 * │ │ │ │ -2350 * See `std::lexicographical_compare_three_way()` for how the determination │ │ │ │ -2351 * is made. This operator is used to synthesize relational operators like │ │ │ │ -2352 * `<` and `>=` etc. │ │ │ │ -2353 */ │ │ │ │ -2354 template │ │ │ │ -2355 [[nodiscard]] │ │ │ │ -_2_3_5_6 constexpr __detail::__synth3way_t<_Tp> │ │ │ │ -2357 operator<=>(const _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>& __x, const _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>& │ │ │ │ -__y) │ │ │ │ -2358 { │ │ │ │ -2359 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.begin(), __x.end(), │ │ │ │ -2360 __y.begin(), __y.end(), │ │ │ │ -2361 __detail::__synth3way); │ │ │ │ -2362 } │ │ │ │ -2363#else │ │ │ │ -2364 /** │ │ │ │ -2365 * @brief Vector ordering relation. │ │ │ │ -2366 * @param __x A %vector. │ │ │ │ -2367 * @param __y A %vector of the same type as @a __x. │ │ │ │ -2368 * @return True iff @a __x is lexicographically less than @a __y. │ │ │ │ -2369 * │ │ │ │ -2370 * This is a total ordering relation. It is linear in the size of the │ │ │ │ -2371 * vectors. The elements must be comparable with @c <. │ │ │ │ -2372 * │ │ │ │ -2373 * See std::lexicographical_compare() for how the determination is made. │ │ │ │ -2374 */ │ │ │ │ -2375 template │ │ │ │ -2376 _GLIBCXX_NODISCARD inline bool │ │ │ │ -2377 operator<(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) │ │ │ │ -2378 { return std::lexicographical_compare(__x.begin(), __x.end(), │ │ │ │ -2379 __y.begin(), __y.end()); } │ │ │ │ -2380 │ │ │ │ -2381 /// Based on operator== │ │ │ │ -2382 template │ │ │ │ -2383 _GLIBCXX_NODISCARD inline bool │ │ │ │ -2384 operator!=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) │ │ │ │ -2385 { return !(__x == __y); } │ │ │ │ -2386 │ │ │ │ -2387 /// Based on operator< │ │ │ │ -2388 template │ │ │ │ -2389 _GLIBCXX_NODISCARD inline bool │ │ │ │ -2390 _o_p_e_r_a_t_o_r_>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) │ │ │ │ -2391 { return __y < __x; } │ │ │ │ -2392 │ │ │ │ -2393 /// Based on operator< │ │ │ │ -2394 template │ │ │ │ -2395 _GLIBCXX_NODISCARD inline bool │ │ │ │ -2396 _o_p_e_r_a_t_o_r_<_=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) │ │ │ │ -2397 { return !(__y < __x); } │ │ │ │ -2398 │ │ │ │ -2399 /// Based on operator< │ │ │ │ -2400 template │ │ │ │ -2401 _GLIBCXX_NODISCARD inline bool │ │ │ │ -2402 _o_p_e_r_a_t_o_r_>_=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) │ │ │ │ -2403 { return !(__x < __y); } │ │ │ │ -2404#endif // three-way comparison │ │ │ │ -2405 │ │ │ │ -2406 /// See std::vector::swap(). │ │ │ │ -2407 template │ │ │ │ -2408 _GLIBCXX20_CONSTEXPR │ │ │ │ -2409 inline void │ │ │ │ -_2_4_1_0 swap(_v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>& __x, _v_e_c_t_o_r_<___T_p_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -2411 ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T___I_F(noexcept(__x.swap(__y))) │ │ │ │ -2412 { __x.swap(__y); } │ │ │ │ -2413 │ │ │ │ -2414_GLIBCXX_END_NAMESPACE_CONTAINER │ │ │ │ -2415 │ │ │ │ -2416#if __cplusplus >= 201703L │ │ │ │ -2417 namespace __detail::__variant │ │ │ │ -2418 { │ │ │ │ -2419 template struct _Never_valueless_alt; // see │ │ │ │ -2420 │ │ │ │ -2421 // Provide the strong exception-safety guarantee when emplacing a │ │ │ │ -2422 // vector into a variant, but only if move assignment cannot throw. │ │ │ │ -2423 template │ │ │ │ -2424 struct _Never_valueless_alt<_GLIBCXX_STD_C::vector<_Tp, _Alloc>> │ │ │ │ -2425 : _s_t_d_:_:_i_s___n_o_t_h_r_o_w___m_o_v_e___a_s_s_i_g_n_a_b_l_e<_GLIBCXX_STD_C::vector<_Tp, _Alloc>> │ │ │ │ -2426 { }; │ │ │ │ -2427 } // namespace __detail::__variant │ │ │ │ -2428#endif // C++17 │ │ │ │ -2429 │ │ │ │ -2430_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -2431} // namespace std │ │ │ │ -2432 │ │ │ │ -2433#endif /* _STL_VECTOR_H */ │ │ │ │ -_c_o_m_p_a_r_e │ │ │ │ -_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t │ │ │ │ -_s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___f_u_n_c_s_._h │ │ │ │ -_r_a_n_g_e_s___u_t_i_l_._h │ │ │ │ -_r_a_n_g_e_s___b_a_s_e_._h │ │ │ │ -_r_a_n_g_e_s___a_l_g_o_b_a_s_e_._h │ │ │ │ -_f_u_n_c_t_e_x_c_e_p_t_._h │ │ │ │ -_c_o_n_c_e_p_t___c_h_e_c_k_._h │ │ │ │ -_a_s_s_e_r_t_i_o_n_s_._h │ │ │ │ -_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_:_:_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_:_:_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_:_:_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_6 │ │ │ │ -_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_1_9 │ │ │ │ +684 │ │ │ │ +685 bool │ │ │ │ +686 compare_exchange_strong(shared_ptr<_Tp>& __expected, │ │ │ │ +687 shared_ptr<_Tp> __desired, │ │ │ │ +688 _m_e_m_o_r_y___o_r_d_e_r __o, _m_e_m_o_r_y___o_r_d_e_r __o2) noexcept │ │ │ │ +689 { │ │ │ │ +690 return _M_impl.compare_exchange_strong(__expected, __desired, __o, __o2); │ │ │ │ +691 } │ │ │ │ +692 │ │ │ │ +693 bool │ │ │ │ +694 compare_exchange_strong(value_type& __expected, value_type __desired, │ │ │ │ +695 _m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) noexcept │ │ │ │ +696 { │ │ │ │ +697 _m_e_m_o_r_y___o_r_d_e_r __o2; │ │ │ │ +698 switch (__o) │ │ │ │ +699 { │ │ │ │ +700 case memory_order_acq_rel: │ │ │ │ +701 __o2 = memory_order_acquire; │ │ │ │ +702 break; │ │ │ │ +703 case memory_order_release: │ │ │ │ +704 __o2 = memory_order_relaxed; │ │ │ │ +705 break; │ │ │ │ +706 default: │ │ │ │ +707 __o2 = __o; │ │ │ │ +708 } │ │ │ │ +709 return compare_exchange_strong(__expected, _s_t_d_:_:_m_o_v_e(__desired), │ │ │ │ +710 __o, __o2); │ │ │ │ +711 } │ │ │ │ +712 │ │ │ │ +713 bool │ │ │ │ +714 compare_exchange_weak(value_type& __expected, value_type __desired, │ │ │ │ +715 _m_e_m_o_r_y___o_r_d_e_r __o, _m_e_m_o_r_y___o_r_d_e_r __o2) noexcept │ │ │ │ +716 { │ │ │ │ +717 return compare_exchange_strong(__expected, _s_t_d_:_:_m_o_v_e(__desired), │ │ │ │ +718 __o, __o2); │ │ │ │ +719 } │ │ │ │ +720 │ │ │ │ +721 bool │ │ │ │ +722 compare_exchange_weak(value_type& __expected, value_type __desired, │ │ │ │ +723 _m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) noexcept │ │ │ │ +724 { │ │ │ │ +725 return compare_exchange_strong(__expected, _s_t_d_:_:_m_o_v_e(__desired), __o); │ │ │ │ +726 } │ │ │ │ +727 │ │ │ │ +728#if __glibcxx_atomic_wait │ │ │ │ +729 void │ │ │ │ +730 wait(value_type __old, │ │ │ │ +731 _m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) const noexcept │ │ │ │ +732 { │ │ │ │ +733 _M_impl.wait(_s_t_d_:_:_m_o_v_e(__old), __o); │ │ │ │ +734 } │ │ │ │ +735 │ │ │ │ +736 void │ │ │ │ +737 notify_one() noexcept │ │ │ │ +738 { │ │ │ │ +739 _M_impl.notify_one(); │ │ │ │ +740 } │ │ │ │ +741 │ │ │ │ +742 void │ │ │ │ +743 notify_all() noexcept │ │ │ │ +744 { │ │ │ │ +745 _M_impl.notify_all(); │ │ │ │ +746 } │ │ │ │ +747#endif │ │ │ │ +748 │ │ │ │ +749 private: │ │ │ │ +750 _Sp_atomic> _M_impl; │ │ │ │ +751 }; │ │ │ │ +752 │ │ │ │ +753 template │ │ │ │ +754 struct atomic> │ │ │ │ +755 { │ │ │ │ +756 public: │ │ │ │ +757 using value_type = weak_ptr<_Tp>; │ │ │ │ +758 │ │ │ │ +759 static constexpr bool is_always_lock_free = false; │ │ │ │ +760 │ │ │ │ +761 bool │ │ │ │ +762 is_lock_free() const noexcept │ │ │ │ +763 { return false; } │ │ │ │ +764 │ │ │ │ +765 constexpr atomic() noexcept = default; │ │ │ │ +766 │ │ │ │ +767 atomic(weak_ptr<_Tp> __r) noexcept │ │ │ │ +768 : _M_impl(_m_o_v_e(__r)) │ │ │ │ +769 { } │ │ │ │ +770 │ │ │ │ +771 atomic(const atomic&) = delete; │ │ │ │ +772 void operator=(const atomic&) = delete; │ │ │ │ +773 │ │ │ │ +774 weak_ptr<_Tp> │ │ │ │ +775 load(_m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) const noexcept │ │ │ │ +776 { return _M_impl.load(__o); } │ │ │ │ +777 │ │ │ │ +778 operator weak_ptr<_Tp>() const noexcept │ │ │ │ +779 { return _M_impl.load(memory_order_seq_cst); } │ │ │ │ +780 │ │ │ │ +781 void │ │ │ │ +782 store(weak_ptr<_Tp> __desired, │ │ │ │ +783 _m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) noexcept │ │ │ │ +784 { _M_impl.swap(__desired, __o); } │ │ │ │ +785 │ │ │ │ +786 void │ │ │ │ +787 operator=(weak_ptr<_Tp> __desired) noexcept │ │ │ │ +788 { _M_impl.swap(__desired, memory_order_seq_cst); } │ │ │ │ +789 │ │ │ │ +790 weak_ptr<_Tp> │ │ │ │ +791 exchange(weak_ptr<_Tp> __desired, │ │ │ │ +792 _m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) noexcept │ │ │ │ +793 { │ │ │ │ +794 _M_impl.swap(__desired, __o); │ │ │ │ +795 return __desired; │ │ │ │ +796 } │ │ │ │ +797 │ │ │ │ +798 bool │ │ │ │ +799 compare_exchange_strong(weak_ptr<_Tp>& __expected, │ │ │ │ +800 weak_ptr<_Tp> __desired, │ │ │ │ +801 _m_e_m_o_r_y___o_r_d_e_r __o, _m_e_m_o_r_y___o_r_d_e_r __o2) noexcept │ │ │ │ +802 { │ │ │ │ +803 return _M_impl.compare_exchange_strong(__expected, __desired, __o, __o2); │ │ │ │ +804 } │ │ │ │ +805 │ │ │ │ +806 bool │ │ │ │ +807 compare_exchange_strong(value_type& __expected, value_type __desired, │ │ │ │ +808 _m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) noexcept │ │ │ │ +809 { │ │ │ │ +810 _m_e_m_o_r_y___o_r_d_e_r __o2; │ │ │ │ +811 switch (__o) │ │ │ │ +812 { │ │ │ │ +813 case memory_order_acq_rel: │ │ │ │ +814 __o2 = memory_order_acquire; │ │ │ │ +815 break; │ │ │ │ +816 case memory_order_release: │ │ │ │ +817 __o2 = memory_order_relaxed; │ │ │ │ +818 break; │ │ │ │ +819 default: │ │ │ │ +820 __o2 = __o; │ │ │ │ +821 } │ │ │ │ +822 return compare_exchange_strong(__expected, _s_t_d_:_:_m_o_v_e(__desired), │ │ │ │ +823 __o, __o2); │ │ │ │ +824 } │ │ │ │ +825 │ │ │ │ +826 bool │ │ │ │ +827 compare_exchange_weak(value_type& __expected, value_type __desired, │ │ │ │ +828 _m_e_m_o_r_y___o_r_d_e_r __o, _m_e_m_o_r_y___o_r_d_e_r __o2) noexcept │ │ │ │ +829 { │ │ │ │ +830 return compare_exchange_strong(__expected, _s_t_d_:_:_m_o_v_e(__desired), │ │ │ │ +831 __o, __o2); │ │ │ │ +832 } │ │ │ │ +833 │ │ │ │ +834 bool │ │ │ │ +835 compare_exchange_weak(value_type& __expected, value_type __desired, │ │ │ │ +836 _m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) noexcept │ │ │ │ +837 { │ │ │ │ +838 return compare_exchange_strong(__expected, _s_t_d_:_:_m_o_v_e(__desired), __o); │ │ │ │ +839 } │ │ │ │ +840 │ │ │ │ +841#if __glibcxx_atomic_wait │ │ │ │ +842 void │ │ │ │ +843 wait(value_type __old, │ │ │ │ +844 _m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) const noexcept │ │ │ │ +845 { │ │ │ │ +846 _M_impl.wait(_s_t_d_:_:_m_o_v_e(__old), __o); │ │ │ │ +847 } │ │ │ │ +848 │ │ │ │ +849 void │ │ │ │ +850 notify_one() noexcept │ │ │ │ +851 { │ │ │ │ +852 _M_impl.notify_one(); │ │ │ │ +853 } │ │ │ │ +854 │ │ │ │ +855 void │ │ │ │ +856 notify_all() noexcept │ │ │ │ +857 { │ │ │ │ +858 _M_impl.notify_all(); │ │ │ │ +859 } │ │ │ │ +860#endif │ │ │ │ +861 │ │ │ │ +862 private: │ │ │ │ +863 _Sp_atomic> _M_impl; │ │ │ │ +864 }; │ │ │ │ +865 /// @} group pointer_abstractions │ │ │ │ +866#endif // C++20 │ │ │ │ +867 │ │ │ │ +868_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +869} // namespace │ │ │ │ +870 │ │ │ │ +871#endif // _SHARED_PTR_ATOMIC_H │ │ │ │ +_a_t_o_m_i_c___b_a_s_e_._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_:_:_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_2 │ │ │ │ -_s_t_d_:_:_m_a_x │ │ │ │ -constexpr const _Tp & max(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_5_8 │ │ │ │ -_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_4 │ │ │ │ -_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 │ │ │ │ +_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_:_:_l_o_c_k │ │ │ │ +void lock(_L1 &__l1, _L2 &__l2, _L3 &... __l3) │ │ │ │ +Generic lock. │ │ │ │ +DDeeffiinniittiioonn _m_u_t_e_x_:_7_0_0 │ │ │ │ _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_5_0 │ │ │ │ -_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_:_:_i_s___s_a_m_e │ │ │ │ -is_same │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_5_4_0 │ │ │ │ -_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_2_4_5 │ │ │ │ -_s_t_d_:_:_i_s___n_o_t_h_r_o_w___m_o_v_e___a_s_s_i_g_n_a_b_l_e │ │ │ │ -is_nothrow_move_assignable │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_3_3_1 │ │ │ │ -_s_t_d_:_:_a_l_l_o_c_a_t_o_r___t_r_a_i_t_s_:_:_i_s___a_l_w_a_y_s___e_q_u_a_l │ │ │ │ -typename __detected_or_t< is_empty< _Alloc >, __equal, _Alloc >::type │ │ │ │ -is_always_equal │ │ │ │ -Whether all instances of the allocator type compare equal. │ │ │ │ -DDeeffiinniittiioonn _b_i_t_s_/_a_l_l_o_c___t_r_a_i_t_s_._h_:_3_6_9 │ │ │ │ -_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_:_:_r_e_v_e_r_s_e___i_t_e_r_a_t_o_r │ │ │ │ -DDeeffiinniittiioonn _b_i_t_s_/_s_t_l___i_t_e_r_a_t_o_r_._h_:_1_3_7 │ │ │ │ -_s_t_d_:_:_i_n_p_u_t___i_t_e_r_a_t_o_r___t_a_g │ │ │ │ -Marking input iterators. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h_:_9_5 │ │ │ │ -_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_:_:_r_a_n_d_o_m___a_c_c_e_s_s___i_t_e_r_a_t_o_r___t_a_g │ │ │ │ -Random-access iterators support a superset of bidirectional 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_9 │ │ │ │ -_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___b_a_s_e │ │ │ │ -See bits/stl_deque.h's _Deque_base for an explanation. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_9_2 │ │ │ │ -_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_5_9 │ │ │ │ -_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_5 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_p_u_s_h___b_a_c_k │ │ │ │ -constexpr void push_back(const value_type &__x) │ │ │ │ -Add data to the end of the vector. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_4_1_6 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_r_e_s_i_z_e │ │ │ │ -constexpr void resize(size_type __new_size, const value_type &__x) │ │ │ │ -Resizes the vector to the specified number of elements. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_1_6_4 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ -constexpr vector & operator=(initializer_list< value_type > __l) │ │ │ │ -Vector list assignment operator. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_8_5_5 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_r_b_e_g_i_n │ │ │ │ -constexpr reverse_iterator rbegin() noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_0_3_8 │ │ │ │ -_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_1_8 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_v_e_c_t_o_r │ │ │ │ -constexpr vector(const vector &__x) │ │ │ │ -Vector copy constructor. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_6_3_1 │ │ │ │ -_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_:_:_e_m_p_l_a_c_e │ │ │ │ -constexpr iterator emplace(const_iterator __position, _Args &&... __args) │ │ │ │ -Inserts an object in vector before specified iterator. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_4_8_1 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_i_n_s_e_r_t │ │ │ │ -constexpr iterator insert(const_iterator __position, value_type &&__x) │ │ │ │ -Inserts given rvalue into vector before specified iterator. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_5_2_8 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_r_e_n_d │ │ │ │ -constexpr const_reverse_iterator rend() const noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_0_6_8 │ │ │ │ -_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_9_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_2_0_8 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_i_n_s_e_r_t │ │ │ │ -constexpr iterator insert(const_iterator __position, initializer_list< │ │ │ │ -value_type > __l) │ │ │ │ -Inserts an initializer_list into the vector. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_5_4_6 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_~_v_e_c_t_o_r │ │ │ │ -constexpr ~vector() noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_8_0_0 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_b_e_g_i_n │ │ │ │ -constexpr const_iterator begin() const 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_:_:_a_s_s_i_g_n │ │ │ │ -constexpr void assign(_InputIterator __first, _InputIterator __last) │ │ │ │ -Assigns a range to a vector. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_8_9_5 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_a_s_s_i_g_n │ │ │ │ -constexpr void assign(size_type __n, const value_type &__val) │ │ │ │ -Assigns a given value to a vector. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_8_7_5 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_e_r_a_s_e │ │ │ │ -constexpr iterator erase(const_iterator __first, const_iterator __last) │ │ │ │ -Remove a range of elements. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_8_2_0 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_s_w_a_p │ │ │ │ -constexpr void swap(vector &__x) noexcept │ │ │ │ -Swaps data with another vector. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_8_4_4 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_v_e_c_t_o_r │ │ │ │ -constexpr vector(vector &&__rv, const __type_identity_t< allocator_type > &__m) │ │ │ │ -noexcept(noexcept(vector(std::declval< vector && >(), std::declval< const │ │ │ │ -allocator_type & >(), std::declval< typename _Alloc_traits::is_always_equal > │ │ │ │ -()))) │ │ │ │ -Move constructor with alternative allocator. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_6_8_9 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_d_a_t_a │ │ │ │ -constexpr _Tp * data() noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_3_9_5 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_v_e_c_t_o_r │ │ │ │ -constexpr vector(size_type __n, const allocator_type &__a=allocator_type()) │ │ │ │ -Creates a vector with default constructed elements. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_5_8_6 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_f_r_o_n_t │ │ │ │ -constexpr const_reference front() const noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_3_5_6 │ │ │ │ -_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. │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_p_o_p___b_a_c_k │ │ │ │ -constexpr void pop_back() noexcept │ │ │ │ -Removes last element. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_4_5_7 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ -constexpr vector & operator=(vector &&__x) noexcept(_Alloc_traits:: │ │ │ │ -_S_nothrow_move()) │ │ │ │ -Vector move assignment operator. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_8_3_3 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_b_a_c_k │ │ │ │ -constexpr const_reference back() const noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_3_8_0 │ │ │ │ -_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_:_6_8 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_a_t │ │ │ │ -constexpr reference at(size_type __n) │ │ │ │ -Provides access to the data contained in the vector. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_3_1_3 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_r_e_s_i_z_e │ │ │ │ -constexpr void resize(size_type __new_size) │ │ │ │ -Resizes the vector to the specified number of elements. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_1_4_3 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:___M___r_a_n_g_e___c_h_e_c_k │ │ │ │ -constexpr void _M_range_check(size_type __n) const │ │ │ │ -Safety check used only from at(). │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_2_9_0 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_f_r_o_n_t │ │ │ │ -constexpr reference front() noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_3_4_4 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_i_n_s_e_r_t │ │ │ │ -constexpr iterator insert(const_iterator __position, size_type __n, const │ │ │ │ -value_type &__x) │ │ │ │ -Inserts a number of copies of given data into the vector. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_5_7_2 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ -constexpr const_reference operator[](size_type __n) const noexcept │ │ │ │ -Subscript access to the data contained in the vector. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_2_8_0 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_v_e_c_t_o_r │ │ │ │ -constexpr vector(const allocator_type &__a) noexcept │ │ │ │ -Creates a vector with no elements. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_5_7_2 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_e_r_a_s_e │ │ │ │ -constexpr iterator erase(const_iterator __position) │ │ │ │ -Remove element at given position. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_7_9_2 │ │ │ │ -_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_9_0_7 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_e_m_p_t_y │ │ │ │ -constexpr bool empty() const noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_2_2_3 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_r_e_n_d │ │ │ │ -constexpr reverse_iterator rend() noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_0_5_8 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_r_b_e_g_i_n │ │ │ │ -constexpr const_reverse_iterator rbegin() const noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_0_4_8 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_c_r_b_e_g_i_n │ │ │ │ -constexpr const_reverse_iterator crbegin() const noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_0_9_9 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_a_t │ │ │ │ -constexpr const_reference at(size_type __n) const │ │ │ │ -Provides access to the data contained in the vector. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_3_3_2 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_c_b_e_g_i_n │ │ │ │ -constexpr const_iterator cbegin() const noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_0_7_9 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_v_e_c_t_o_r │ │ │ │ -constexpr vector(_InputIterator __first, _InputIterator __last, const │ │ │ │ -allocator_type &__a=allocator_type()) │ │ │ │ -Builds a vector from a range. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_7_3_6 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_v_e_c_t_o_r │ │ │ │ -constexpr vector(initializer_list< value_type > __l, const allocator_type │ │ │ │ -&__a=allocator_type()) │ │ │ │ -Builds a vector from an initializer list. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_7_0_8 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_e_n_d │ │ │ │ -constexpr const_iterator end() const noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_0_2_8 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_v_e_c_t_o_r │ │ │ │ -vector(vector &&) noexcept=default │ │ │ │ -Vector move constructor. │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_i_n_s_e_r_t │ │ │ │ -constexpr iterator insert(const_iterator __position, _InputIterator __first, │ │ │ │ -_InputIterator __last) │ │ │ │ -Inserts a range into the vector. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_6_1_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_6_3 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_a_s_s_i_g_n │ │ │ │ -constexpr void assign(initializer_list< value_type > __l) │ │ │ │ -Assigns an initializer list to a vector. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_9_2_2 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_g_e_t___a_l_l_o_c_a_t_o_r │ │ │ │ -constexpr allocator_type get_allocator() const noexcept │ │ │ │ -Get a copy of the memory allocation object. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_3_1_7 │ │ │ │ -_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_1_7 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_v_e_c_t_o_r │ │ │ │ -constexpr vector(size_type __n, const value_type &__value, const allocator_type │ │ │ │ -&__a=allocator_type()) │ │ │ │ -Creates a vector with copies of an exemplar element. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_5_9_9 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_b_a_c_k │ │ │ │ -constexpr reference back() noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_3_6_8 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_c_r_e_n_d │ │ │ │ -constexpr const_reverse_iterator crend() const noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_1_0_9 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_c_e_n_d │ │ │ │ -constexpr const_iterator cend() const noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_0_8_9 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ -constexpr reference operator[](size_type __n) noexcept │ │ │ │ -Subscript access to the data contained in the vector. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_2_6_1 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_s_h_r_i_n_k___t_o___f_i_t │ │ │ │ -constexpr void shrink_to_fit() │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_1_9_8 │ │ │ │ -_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_2_8 │ │ │ │ +_s_t_d_:_:_s_h_a_r_e_d___p_t_r │ │ │ │ +A smart pointer with reference-counted copy semantics. │ │ │ │ +DDeeffiinniittiioonn _b_i_t_s_/_s_h_a_r_e_d___p_t_r_._h_:_1_7_6 │ │ │ │ _s_t_d_:_:_a_u_t_o___p_t_r___r_e_f │ │ │ │ DDeeffiinniittiioonn _a_u_t_o___p_t_r_._h_:_4_9 │ │ │ │ -_____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_<_ ___T_p___a_l_l_o_c___t_y_p_e_ _>_:_:_m_a_x___s_i_z_e │ │ │ │ -static constexpr size_type max_size(const _Tp_alloc_type &__a) noexcept │ │ │ │ -The maximum supported allocation size. │ │ │ │ -DDeeffiinniittiioonn _b_i_t_s_/_a_l_l_o_c___t_r_a_i_t_s_._h_:_4_7_4 │ │ │ │ * _b_i_t_s │ │ │ │ - * _s_t_l___v_e_c_t_o_r_._h │ │ │ │ + * _s_h_a_r_e_d___p_t_r___a_t_o_m_i_c_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00413.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stl_tree.h File Reference │ │ │ +libstdc++: version.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -46,87 +46,2355 @@ │ │ │ /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ │ │ │ $(document).ready(function(){initNavTree('a00413.html',''); initResizable(); }); │ │ │ /* @license-end */ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -Namespaces | │ │ │ -Macros | │ │ │ -Enumerations | │ │ │ -Functions
│ │ │ -
stl_tree.h File Reference
│ │ │ +Macros
│ │ │ +
version.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ -Namespaces

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

│ │ │ Macros

#define _GLIBCXX_USE_ALLOC_PTR_FOR_RB_TREE
 
│ │ │ - │ │ │ - │ │ │ - │ │ │ -

│ │ │ -Enumerations

enum  _Rb_tree_color { _S_red │ │ │ -, _S_black │ │ │ - }
 
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ -Functions

│ │ │ -unsigned int std::_Rb_tree_black_count (const _Rb_tree_node_base *__node, const _Rb_tree_node_base *__root) throw ()
 
│ │ │ -_Rb_tree_node_base * std::_Rb_tree_decrement (_Rb_tree_node_base *__x) throw ()
 
│ │ │ -_Rb_tree_node_base * std::_Rb_tree_increment (_Rb_tree_node_base *__x) throw ()
 
│ │ │ -void std::_Rb_tree_insert_and_rebalance (const bool __insert_left, _Rb_tree_node_base *__x, _Rb_tree_node_base *__p, _Rb_tree_node_base &__header) throw ()
 
│ │ │ -_Rb_tree_node_base * std::_Rb_tree_rebalance_for_erase (_Rb_tree_node_base *const __z, _Rb_tree_node_base &__header) throw ()
 
template<typename _Key , typename _Val , typename _KeyOfValue , typename _Compare , typename _Alloc >
void std::swap (_Rb_tree< _Key, _Val, _KeyOfValue, _Compare, _Alloc > &__x, _Rb_tree< _Key, _Val, _KeyOfValue, _Compare, _Alloc > &__y)
 
#define __glibcxx_addressof_constexpr
 
#define __glibcxx_allocator_traits_is_always_equal
 
#define __glibcxx_any
 
#define __glibcxx_apply
 
#define __glibcxx_array_constexpr
 
#define __glibcxx_as_const
 
#define __glibcxx_assume_aligned
 
#define __glibcxx_atomic_flag_test
 
#define __glibcxx_atomic_float
 
#define __glibcxx_atomic_is_always_lock_free
 
#define __glibcxx_atomic_ref
 
#define __glibcxx_atomic_shared_ptr
 
#define __glibcxx_atomic_value_initialization
 
#define __glibcxx_atomic_wait
 
#define __glibcxx_barrier
 
#define __glibcxx_bind_front
 
#define __glibcxx_bit_cast
 
#define __glibcxx_bitops
 
#define __glibcxx_bool_constant
 
#define __glibcxx_bounded_array_traits
 
#define __glibcxx_boyer_moore_searcher
 
#define __glibcxx_byte
 
#define __glibcxx_chrono
 
#define __glibcxx_chrono_udls
 
#define __glibcxx_clamp
 
#define __glibcxx_complex_udls
 
#define __glibcxx_concepts
 
#define __glibcxx_constexpr_algorithms
 
#define __glibcxx_constexpr_char_traits
 
#define __glibcxx_constexpr_complex
 
#define __glibcxx_constexpr_dynamic_alloc
 
#define __glibcxx_constexpr_functional
 
#define __glibcxx_constexpr_iterator
 
#define __glibcxx_constexpr_memory
 
#define __glibcxx_constexpr_numeric
 
#define __glibcxx_constexpr_string
 
#define __glibcxx_constexpr_string_view
 
#define __glibcxx_constexpr_tuple
 
#define __glibcxx_constexpr_utility
 
#define __glibcxx_constexpr_vector
 
#define __glibcxx_constrained_equality
 
#define __glibcxx_coroutine
 
#define __glibcxx_enable_shared_from_this
 
#define __glibcxx_endian
 
#define __glibcxx_erase_if
 
#define __glibcxx_exchange_function
 
#define __glibcxx_execution
 
#define __glibcxx_filesystem
 
#define __glibcxx_format
 
#define __glibcxx_format_uchar
 
#define __glibcxx_gcd
 
#define __glibcxx_gcd_lcm
 
#define __glibcxx_generic_associative_lookup
 
#define __glibcxx_generic_unordered_lookup
 
#define __glibcxx_has_unique_object_representations
 
#define __glibcxx_hypot
 
#define __glibcxx_incomplete_container_elements
 
#define __glibcxx_int_pow2
 
#define __glibcxx_integer_comparison_functions
 
#define __glibcxx_integer_sequence
 
#define __glibcxx_integral_constant_callable
 
#define __glibcxx_interpolate
 
#define __glibcxx_invoke
 
#define __glibcxx_is_aggregate
 
#define __glibcxx_is_constant_evaluated
 
#define __glibcxx_is_final
 
#define __glibcxx_is_invocable
 
#define __glibcxx_is_layout_compatible
 
#define __glibcxx_is_nothrow_convertible
 
#define __glibcxx_is_null_pointer
 
#define __glibcxx_is_pointer_interconvertible
 
#define __glibcxx_is_swappable
 
#define __glibcxx_jthread
 
#define __glibcxx_latch
 
#define __glibcxx_launder
 
#define __glibcxx_lcm
 
#define __glibcxx_list_remove_return_type
 
#define __glibcxx_logical_traits
 
#define __glibcxx_make_from_tuple
 
#define __glibcxx_make_obj_using_allocator
 
#define __glibcxx_make_reverse_iterator
 
#define __glibcxx_make_unique
 
#define __glibcxx_map_try_emplace
 
#define __glibcxx_math_constants
 
#define __glibcxx_math_spec_funcs
 
#define __glibcxx_math_special_functions
 
#define __glibcxx_memory_resource
 
#define __glibcxx_move_iterator_concept
 
#define __glibcxx_node_extract
 
#define __glibcxx_nonmember_container_access
 
#define __glibcxx_not_fn
 
#define __glibcxx_null_iterators
 
#define __glibcxx_optional
 
#define __glibcxx_parallel_algorithm
 
#define __glibcxx_polymorphic_allocator
 
#define __glibcxx_quoted_string_io
 
#define __glibcxx_ranges
 
#define __glibcxx_raw_memory_algorithms
 
#define __glibcxx_remove_cvref
 
#define __glibcxx_result_of_sfinae
 
#define __glibcxx_robust_nonmodifying_seq_ops
 
#define __glibcxx_sample
 
#define __glibcxx_scoped_lock
 
#define __glibcxx_semaphore
 
#define __glibcxx_shared_mutex
 
#define __glibcxx_shared_ptr_arrays
 
#define __glibcxx_shared_ptr_weak_type
 
#define __glibcxx_shared_timed_mutex
 
#define __glibcxx_shift
 
#define __glibcxx_smart_ptr_for_overwrite
 
#define __glibcxx_source_location
 
#define __glibcxx_span
 
#define __glibcxx_ssize
 
#define __glibcxx_starts_ends_with
 
#define __glibcxx_string_udls
 
#define __glibcxx_string_view
 
#define __glibcxx_three_way_comparison
 
#define __glibcxx_to_address
 
#define __glibcxx_transformation_trait_aliases
 
#define __glibcxx_transparent_operators
 
#define __glibcxx_tuple_element_t
 
#define __glibcxx_tuples_by_type
 
#define __glibcxx_type_identity
 
#define __glibcxx_type_trait_variable_templates
 
#define __glibcxx_uncaught_exceptions
 
#define __glibcxx_unordered_map_try_emplace
 
#define __glibcxx_unwrap_ref
 
#define __glibcxx_variant
 
#define __glibcxx_void_t
 
│ │ │

Detailed Description

│ │ │ -

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

│ │ │ +

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

│ │ │ │ │ │ -

Definition in file stl_tree.h.

│ │ │ +

Definition in file version.h.

│ │ │

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ _GLIBCXX_USE_ALLOC_PTR_FOR_RB_TREE

│ │ │ + │ │ │ +

◆ __glibcxx_addressof_constexpr

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ - │ │ │ + │ │ │ │ │ │
#define _GLIBCXX_USE_ALLOC_PTR_FOR_RB_TREE#define __glibcxx_addressof_constexpr
│ │ │
│ │ │ │ │ │ -

Definition at line 82 of file stl_tree.h.

│ │ │ +

Definition at line 365 of file version.h.

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

◆ __glibcxx_allocator_traits_is_always_equal

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_allocator_traits_is_always_equal
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 75 of file version.h.

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

◆ __glibcxx_any

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_any
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 375 of file version.h.

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

◆ __glibcxx_apply

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_apply
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 385 of file version.h.

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

◆ __glibcxx_array_constexpr

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_array_constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 600 of file version.h.

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

◆ __glibcxx_as_const

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_as_const
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 395 of file version.h.

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

◆ __glibcxx_assume_aligned

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_assume_aligned
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 810 of file version.h.

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

◆ __glibcxx_atomic_flag_test

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_atomic_flag_test
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 820 of file version.h.

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

◆ __glibcxx_atomic_float

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_atomic_float
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 830 of file version.h.

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

◆ __glibcxx_atomic_is_always_lock_free

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_atomic_is_always_lock_free
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 405 of file version.h.

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

◆ __glibcxx_atomic_ref

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_atomic_ref
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 850 of file version.h.

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

◆ __glibcxx_atomic_shared_ptr

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_atomic_shared_ptr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1300 of file version.h.

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

◆ __glibcxx_atomic_value_initialization

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_atomic_value_initialization
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 860 of file version.h.

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

◆ __glibcxx_atomic_wait

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_atomic_wait
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1310 of file version.h.

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

◆ __glibcxx_barrier

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_barrier
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1325 of file version.h.

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

◆ __glibcxx_bind_front

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_bind_front
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 870 of file version.h.

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

◆ __glibcxx_bit_cast

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_bit_cast
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 900 of file version.h.

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

◆ __glibcxx_bitops

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_bitops
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 910 of file version.h.

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

◆ __glibcxx_bool_constant

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_bool_constant
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 415 of file version.h.

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

◆ __glibcxx_bounded_array_traits

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_bounded_array_traits
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 920 of file version.h.

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

◆ __glibcxx_boyer_moore_searcher

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_boyer_moore_searcher
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 645 of file version.h.

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

◆ __glibcxx_byte

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_byte
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 425 of file version.h.

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

◆ __glibcxx_chrono

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_chrono
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 660 of file version.h.

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

◆ __glibcxx_chrono_udls

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_chrono_udls
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 295 of file version.h.

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

◆ __glibcxx_clamp

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_clamp
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 625 of file version.h.

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

◆ __glibcxx_complex_udls

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_complex_udls
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 305 of file version.h.

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

◆ __glibcxx_concepts

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_concepts
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 930 of file version.h.

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

◆ __glibcxx_constexpr_algorithms

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_constexpr_algorithms
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1265 of file version.h.

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

◆ __glibcxx_constexpr_char_traits

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_constexpr_char_traits
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1020 of file version.h.

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

◆ __glibcxx_constexpr_complex

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_constexpr_complex
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1360 of file version.h.

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

◆ __glibcxx_constexpr_dynamic_alloc

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_constexpr_dynamic_alloc
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1370 of file version.h.

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

◆ __glibcxx_constexpr_functional

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_constexpr_functional
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1250 of file version.h.

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

◆ __glibcxx_constexpr_iterator

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_constexpr_iterator
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1180 of file version.h.

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

◆ __glibcxx_constexpr_memory

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_constexpr_memory
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1290 of file version.h.

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

◆ __glibcxx_constexpr_numeric

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_constexpr_numeric
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1240 of file version.h.

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

◆ __glibcxx_constexpr_string

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_constexpr_string
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1385 of file version.h.

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

◆ __glibcxx_constexpr_string_view

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_constexpr_string_view
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 970 of file version.h.

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

◆ __glibcxx_constexpr_tuple

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_constexpr_tuple
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1275 of file version.h.

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

◆ __glibcxx_constexpr_utility

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_constexpr_utility
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1200 of file version.h.

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

◆ __glibcxx_constexpr_vector

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_constexpr_vector
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1400 of file version.h.

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

◆ __glibcxx_constrained_equality

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_constrained_equality
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1415 of file version.h.

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

◆ __glibcxx_coroutine

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_coroutine
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 160 of file version.h.

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

◆ __glibcxx_enable_shared_from_this

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_enable_shared_from_this
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 140 of file version.h.

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

◆ __glibcxx_endian

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_endian
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 980 of file version.h.

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

◆ __glibcxx_erase_if

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_erase_if
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1425 of file version.h.

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

◆ __glibcxx_exchange_function

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_exchange_function
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 170 of file version.h.

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

◆ __glibcxx_execution

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_execution
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 670 of file version.h.

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

◆ __glibcxx_filesystem

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_filesystem
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 680 of file version.h.

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

◆ __glibcxx_format

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_format
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1340 of file version.h.

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

◆ __glibcxx_format_uchar

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_format_uchar
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1350 of file version.h.

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

◆ __glibcxx_gcd

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_gcd
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 565 of file version.h.

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

◆ __glibcxx_gcd_lcm

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_gcd_lcm
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 575 of file version.h.

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

◆ __glibcxx_generic_associative_lookup

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_generic_associative_lookup
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 315 of file version.h.

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

◆ __glibcxx_generic_unordered_lookup

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_generic_unordered_lookup
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1435 of file version.h.

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

◆ __glibcxx_has_unique_object_representations

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_has_unique_object_representations
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 435 of file version.h.

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

◆ __glibcxx_hypot

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_hypot
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 690 of file version.h.

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

◆ __glibcxx_incomplete_container_elements

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_incomplete_container_elements
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 55 of file version.h.

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

◆ __glibcxx_int_pow2

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_int_pow2
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 990 of file version.h.

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

◆ __glibcxx_integer_comparison_functions

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_integer_comparison_functions
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1000 of file version.h.

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

◆ __glibcxx_integer_sequence

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_integer_sequence
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 180 of file version.h.

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

◆ __glibcxx_integral_constant_callable

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_integral_constant_callable
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 190 of file version.h.

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

◆ __glibcxx_interpolate

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_interpolate
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1190 of file version.h.

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

◆ __glibcxx_invoke

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_invoke
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 455 of file version.h.

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

◆ __glibcxx_is_aggregate

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_is_aggregate
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 465 of file version.h.

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

◆ __glibcxx_is_constant_evaluated

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_is_constant_evaluated
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1010 of file version.h.

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

◆ __glibcxx_is_final

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_is_final
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 200 of file version.h.

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

◆ __glibcxx_is_invocable

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_is_invocable
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 475 of file version.h.

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

◆ __glibcxx_is_layout_compatible

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_is_layout_compatible
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1035 of file version.h.

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

◆ __glibcxx_is_nothrow_convertible

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_is_nothrow_convertible
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1045 of file version.h.

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

◆ __glibcxx_is_null_pointer

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_is_null_pointer
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 85 of file version.h.

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

◆ __glibcxx_is_pointer_interconvertible

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_is_pointer_interconvertible
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1055 of file version.h.

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

◆ __glibcxx_is_swappable

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_is_swappable
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 120 of file version.h.

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

◆ __glibcxx_jthread

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_jthread
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1445 of file version.h.

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

◆ __glibcxx_latch

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_latch
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1455 of file version.h.

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

◆ __glibcxx_launder

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_launder
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 485 of file version.h.

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

◆ __glibcxx_lcm

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_lcm
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 555 of file version.h.

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

◆ __glibcxx_list_remove_return_type

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_list_remove_return_type
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1465 of file version.h.

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

◆ __glibcxx_logical_traits

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_logical_traits
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 495 of file version.h.

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

◆ __glibcxx_make_from_tuple

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_make_from_tuple
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 505 of file version.h.

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

◆ __glibcxx_make_obj_using_allocator

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_make_obj_using_allocator
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1075 of file version.h.

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

◆ __glibcxx_make_reverse_iterator

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_make_reverse_iterator
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 210 of file version.h.

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

◆ __glibcxx_make_unique

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_make_unique
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 325 of file version.h.

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

◆ __glibcxx_map_try_emplace

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_map_try_emplace
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 700 of file version.h.

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

◆ __glibcxx_math_constants

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_math_constants
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1065 of file version.h.

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

◆ __glibcxx_math_spec_funcs

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_math_spec_funcs
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 150 of file version.h.

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

◆ __glibcxx_math_special_functions

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_math_special_functions
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 710 of file version.h.

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

◆ __glibcxx_memory_resource

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_memory_resource
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 720 of file version.h.

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

◆ __glibcxx_move_iterator_concept

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_move_iterator_concept
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1485 of file version.h.

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

◆ __glibcxx_node_extract

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_node_extract
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 735 of file version.h.

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

◆ __glibcxx_nonmember_container_access

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_nonmember_container_access
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 615 of file version.h.

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

◆ __glibcxx_not_fn

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_not_fn
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 515 of file version.h.

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

◆ __glibcxx_null_iterators

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_null_iterators
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 220 of file version.h.

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

◆ __glibcxx_optional

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_optional
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 945 of file version.h.

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

◆ __glibcxx_parallel_algorithm

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_parallel_algorithm
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 745 of file version.h.

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

◆ __glibcxx_polymorphic_allocator

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_polymorphic_allocator
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1475 of file version.h.

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

◆ __glibcxx_quoted_string_io

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_quoted_string_io
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 335 of file version.h.

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

◆ __glibcxx_ranges

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_ranges
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1230 of file version.h.

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

◆ __glibcxx_raw_memory_algorithms

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_raw_memory_algorithms
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 590 of file version.h.

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

◆ __glibcxx_remove_cvref

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_remove_cvref
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1085 of file version.h.

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

◆ __glibcxx_result_of_sfinae

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_result_of_sfinae
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 95 of file version.h.

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

◆ __glibcxx_robust_nonmodifying_seq_ops

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_robust_nonmodifying_seq_ops
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 270 of file version.h.

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

◆ __glibcxx_sample

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_sample
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 635 of file version.h.

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

◆ __glibcxx_scoped_lock

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_scoped_lock
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 755 of file version.h.

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

◆ __glibcxx_semaphore

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_semaphore
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1495 of file version.h.

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

◆ __glibcxx_shared_mutex

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_shared_mutex
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 765 of file version.h.

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

◆ __glibcxx_shared_ptr_arrays

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_shared_ptr_arrays
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 105 of file version.h.

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

◆ __glibcxx_shared_ptr_weak_type

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_shared_ptr_weak_type
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 775 of file version.h.

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

◆ __glibcxx_shared_timed_mutex

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_shared_timed_mutex
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 345 of file version.h.

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

◆ __glibcxx_shift

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_shift
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1210 of file version.h.

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

◆ __glibcxx_smart_ptr_for_overwrite

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_smart_ptr_for_overwrite
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1505 of file version.h.

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

◆ __glibcxx_source_location

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_source_location
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1095 of file version.h.

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

◆ __glibcxx_span

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_span
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1110 of file version.h.

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

◆ __glibcxx_ssize

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_ssize
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1120 of file version.h.

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

◆ __glibcxx_starts_ends_with

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_starts_ends_with
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 890 of file version.h.

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

◆ __glibcxx_string_udls

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_string_udls
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 355 of file version.h.

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

◆ __glibcxx_string_view

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_string_view
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 790 of file version.h.

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

◆ __glibcxx_three_way_comparison

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_three_way_comparison
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1130 of file version.h.

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

◆ __glibcxx_to_address

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_to_address
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1140 of file version.h.

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

◆ __glibcxx_transformation_trait_aliases

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_transformation_trait_aliases
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 230 of file version.h.

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

◆ __glibcxx_transparent_operators

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_transparent_operators
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 240 of file version.h.

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

◆ __glibcxx_tuple_element_t

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_tuple_element_t
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 250 of file version.h.

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

◆ __glibcxx_tuples_by_type

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_tuples_by_type
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 260 of file version.h.

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

◆ __glibcxx_type_identity

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_type_identity
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1160 of file version.h.

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

◆ __glibcxx_type_trait_variable_templates

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_type_trait_variable_templates
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 525 of file version.h.

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

◆ __glibcxx_uncaught_exceptions

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_uncaught_exceptions
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 65 of file version.h.

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

◆ __glibcxx_unordered_map_try_emplace

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_unordered_map_try_emplace
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 800 of file version.h.

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

◆ __glibcxx_unwrap_ref

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_unwrap_ref
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 1170 of file version.h.

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

◆ __glibcxx_variant

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_variant
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 545 of file version.h.

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

◆ __glibcxx_void_t

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_void_t
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 130 of file version.h.

│ │ │ │ │ │
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,48 +1,658 @@ │ │ │ │ libstdc++ │ │ │ │ -_N_a_m_e_s_p_a_c_e_s | _M_a_c_r_o_s | _E_n_u_m_e_r_a_t_i_o_n_s | _F_u_n_c_t_i_o_n_s │ │ │ │ -stl_tree.h File Reference │ │ │ │ +_M_a_c_r_o_s │ │ │ │ +version.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 │ │ │ │ -  │ │ │ │ MMaaccrrooss │ │ │ │ -#define  ___G_L_I_B_C_X_X___U_S_E___A_L_L_O_C___P_T_R___F_O_R___R_B___T_R_E_E │ │ │ │ +#define  _____g_l_i_b_c_x_x___a_d_d_r_e_s_s_o_f___c_o_n_s_t_e_x_p_r │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___a_l_l_o_c_a_t_o_r___t_r_a_i_t_s___i_s___a_l_w_a_y_s___e_q_u_a_l │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___a_n_y │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___a_p_p_l_y │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___a_r_r_a_y___c_o_n_s_t_e_x_p_r │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___a_s___c_o_n_s_t │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___a_s_s_u_m_e___a_l_i_g_n_e_d │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___a_t_o_m_i_c___f_l_a_g___t_e_s_t │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___a_t_o_m_i_c___f_l_o_a_t │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___a_t_o_m_i_c___i_s___a_l_w_a_y_s___l_o_c_k___f_r_e_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___a_t_o_m_i_c___r_e_f │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___a_t_o_m_i_c___s_h_a_r_e_d___p_t_r │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___a_t_o_m_i_c___v_a_l_u_e___i_n_i_t_i_a_l_i_z_a_t_i_o_n │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___a_t_o_m_i_c___w_a_i_t │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___b_a_r_r_i_e_r │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___b_i_n_d___f_r_o_n_t │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___b_i_t___c_a_s_t │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___b_i_t_o_p_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___b_o_o_l___c_o_n_s_t_a_n_t │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___b_o_u_n_d_e_d___a_r_r_a_y___t_r_a_i_t_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___b_o_y_e_r___m_o_o_r_e___s_e_a_r_c_h_e_r │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___b_y_t_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___c_h_r_o_n_o │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___c_h_r_o_n_o___u_d_l_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___c_l_a_m_p │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___c_o_m_p_l_e_x___u_d_l_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___c_o_n_c_e_p_t_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___c_o_n_s_t_e_x_p_r___a_l_g_o_r_i_t_h_m_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___c_o_n_s_t_e_x_p_r___c_h_a_r___t_r_a_i_t_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___c_o_n_s_t_e_x_p_r___c_o_m_p_l_e_x │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___c_o_n_s_t_e_x_p_r___d_y_n_a_m_i_c___a_l_l_o_c │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___c_o_n_s_t_e_x_p_r___f_u_n_c_t_i_o_n_a_l │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___c_o_n_s_t_e_x_p_r___i_t_e_r_a_t_o_r │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___c_o_n_s_t_e_x_p_r___m_e_m_o_r_y │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___c_o_n_s_t_e_x_p_r___n_u_m_e_r_i_c │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___c_o_n_s_t_e_x_p_r___s_t_r_i_n_g │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___c_o_n_s_t_e_x_p_r___s_t_r_i_n_g___v_i_e_w │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___c_o_n_s_t_e_x_p_r___t_u_p_l_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___c_o_n_s_t_e_x_p_r___u_t_i_l_i_t_y │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___c_o_n_s_t_e_x_p_r___v_e_c_t_o_r │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___c_o_n_s_t_r_a_i_n_e_d___e_q_u_a_l_i_t_y │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___c_o_r_o_u_t_i_n_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___e_n_a_b_l_e___s_h_a_r_e_d___f_r_o_m___t_h_i_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___e_n_d_i_a_n │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___e_r_a_s_e___i_f │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___e_x_c_h_a_n_g_e___f_u_n_c_t_i_o_n │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___e_x_e_c_u_t_i_o_n │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___f_i_l_e_s_y_s_t_e_m │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___f_o_r_m_a_t │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___f_o_r_m_a_t___u_c_h_a_r │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___g_c_d │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___g_c_d___l_c_m │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___g_e_n_e_r_i_c___a_s_s_o_c_i_a_t_i_v_e___l_o_o_k_u_p │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___g_e_n_e_r_i_c___u_n_o_r_d_e_r_e_d___l_o_o_k_u_p │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___h_a_s___u_n_i_q_u_e___o_b_j_e_c_t___r_e_p_r_e_s_e_n_t_a_t_i_o_n_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___h_y_p_o_t │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___i_n_c_o_m_p_l_e_t_e___c_o_n_t_a_i_n_e_r___e_l_e_m_e_n_t_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___i_n_t___p_o_w_2 │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___i_n_t_e_g_e_r___c_o_m_p_a_r_i_s_o_n___f_u_n_c_t_i_o_n_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___i_n_t_e_g_e_r___s_e_q_u_e_n_c_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___i_n_t_e_g_r_a_l___c_o_n_s_t_a_n_t___c_a_l_l_a_b_l_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___i_n_t_e_r_p_o_l_a_t_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___i_n_v_o_k_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___i_s___a_g_g_r_e_g_a_t_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___i_s___c_o_n_s_t_a_n_t___e_v_a_l_u_a_t_e_d │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___i_s___f_i_n_a_l │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___i_s___i_n_v_o_c_a_b_l_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___i_s___l_a_y_o_u_t___c_o_m_p_a_t_i_b_l_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___i_s___n_o_t_h_r_o_w___c_o_n_v_e_r_t_i_b_l_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___i_s___n_u_l_l___p_o_i_n_t_e_r │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___i_s___p_o_i_n_t_e_r___i_n_t_e_r_c_o_n_v_e_r_t_i_b_l_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___i_s___s_w_a_p_p_a_b_l_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___j_t_h_r_e_a_d │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___l_a_t_c_h │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___l_a_u_n_d_e_r │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___l_c_m │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___l_i_s_t___r_e_m_o_v_e___r_e_t_u_r_n___t_y_p_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___l_o_g_i_c_a_l___t_r_a_i_t_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___m_a_k_e___f_r_o_m___t_u_p_l_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___m_a_k_e___o_b_j___u_s_i_n_g___a_l_l_o_c_a_t_o_r │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___m_a_k_e___r_e_v_e_r_s_e___i_t_e_r_a_t_o_r │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___m_a_k_e___u_n_i_q_u_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___m_a_p___t_r_y___e_m_p_l_a_c_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___m_a_t_h___c_o_n_s_t_a_n_t_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___m_a_t_h___s_p_e_c___f_u_n_c_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___m_a_t_h___s_p_e_c_i_a_l___f_u_n_c_t_i_o_n_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___m_e_m_o_r_y___r_e_s_o_u_r_c_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___m_o_v_e___i_t_e_r_a_t_o_r___c_o_n_c_e_p_t │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___n_o_d_e___e_x_t_r_a_c_t │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___n_o_n_m_e_m_b_e_r___c_o_n_t_a_i_n_e_r___a_c_c_e_s_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___n_o_t___f_n │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___n_u_l_l___i_t_e_r_a_t_o_r_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___o_p_t_i_o_n_a_l │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___p_a_r_a_l_l_e_l___a_l_g_o_r_i_t_h_m │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___q_u_o_t_e_d___s_t_r_i_n_g___i_o │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___r_a_n_g_e_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___r_a_w___m_e_m_o_r_y___a_l_g_o_r_i_t_h_m_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___r_e_m_o_v_e___c_v_r_e_f │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___r_e_s_u_l_t___o_f___s_f_i_n_a_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___r_o_b_u_s_t___n_o_n_m_o_d_i_f_y_i_n_g___s_e_q___o_p_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___s_a_m_p_l_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___s_c_o_p_e_d___l_o_c_k │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___s_e_m_a_p_h_o_r_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___s_h_a_r_e_d___m_u_t_e_x │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___s_h_a_r_e_d___p_t_r___a_r_r_a_y_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___s_h_a_r_e_d___p_t_r___w_e_a_k___t_y_p_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___s_h_a_r_e_d___t_i_m_e_d___m_u_t_e_x │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___s_h_i_f_t │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___s_m_a_r_t___p_t_r___f_o_r___o_v_e_r_w_r_i_t_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___s_o_u_r_c_e___l_o_c_a_t_i_o_n │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___s_p_a_n │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___s_s_i_z_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___s_t_a_r_t_s___e_n_d_s___w_i_t_h │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___s_t_r_i_n_g___u_d_l_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___s_t_r_i_n_g___v_i_e_w │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___t_h_r_e_e___w_a_y___c_o_m_p_a_r_i_s_o_n │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___t_o___a_d_d_r_e_s_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___t_r_a_n_s_f_o_r_m_a_t_i_o_n___t_r_a_i_t___a_l_i_a_s_e_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___t_r_a_n_s_p_a_r_e_n_t___o_p_e_r_a_t_o_r_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___t_u_p_l_e___e_l_e_m_e_n_t___t │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___t_u_p_l_e_s___b_y___t_y_p_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___t_y_p_e___i_d_e_n_t_i_t_y │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___t_y_p_e___t_r_a_i_t___v_a_r_i_a_b_l_e___t_e_m_p_l_a_t_e_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___u_n_c_a_u_g_h_t___e_x_c_e_p_t_i_o_n_s │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___u_n_o_r_d_e_r_e_d___m_a_p___t_r_y___e_m_p_l_a_c_e │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___u_n_w_r_a_p___r_e_f │ │ │ │   │ │ │ │ -EEnnuummeerraattiioonnss │ │ │ │ -enum   __RRbb__ttrreeee__ccoolloorr { __SS__rreedd , __SS__bbllaacckk } │ │ │ │ +#define  _____g_l_i_b_c_x_x___v_a_r_i_a_n_t │ │ │ │   │ │ │ │ -FFuunnccttiioonnss │ │ │ │ - unsigned int  ssttdd::::__RRbb__ttrreeee__bbllaacckk__ccoouunntt (_c_o_n_s_t _Rb_tree_node_base │ │ │ │ - *_____n_o_d_e, _c_o_n_s_t _Rb_tree_node_base *_____r_o_o_t) _t_h_r_o_w () │ │ │ │ -  │ │ │ │ -_Rb_tree_node_base *  ssttdd::::__RRbb__ttrreeee__ddeeccrreemmeenntt (_Rb_tree_node_base *__x) _t_h_r_o_w │ │ │ │ - () │ │ │ │ -  │ │ │ │ -_Rb_tree_node_base *  ssttdd::::__RRbb__ttrreeee__iinnccrreemmeenntt (_Rb_tree_node_base *__x) _t_h_r_o_w │ │ │ │ - () │ │ │ │ -  │ │ │ │ - _v_o_i_d  ssttdd::::__RRbb__ttrreeee__iinnsseerrtt__aanndd__rreebbaallaannccee (_c_o_n_s_t bool │ │ │ │ - _____i_n_s_e_r_t___l_e_f_t, _Rb_tree_node_base *__x, │ │ │ │ - _Rb_tree_node_base *__p, _Rb_tree_node_base &_____h_e_a_d_e_r) │ │ │ │ - _t_h_r_o_w () │ │ │ │ -  │ │ │ │ -_Rb_tree_node_base *  ssttdd::::__RRbb__ttrreeee__rreebbaallaannccee__ffoorr__eerraassee (_Rb_tree_node_base │ │ │ │ - *_c_o_n_s_t _____z, _Rb_tree_node_base &_____h_e_a_d_e_r) _t_h_r_o_w () │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e ___K_e_y , _t_y_p_e_n_a_m_e _Val , _t_y_p_e_n_a_m_e ___K_e_y_O_f_V_a_l_u_e , _t_y_p_e_n_a_m_e │ │ │ │ -_Compare , _t_y_p_e_n_a_m_e _Alloc > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_s_w_a_p (_Rb_tree< ___K_e_y, _Val, ___K_e_y_O_f_V_a_l_u_e, _Compare, │ │ │ │ - _Alloc > &__x, _Rb_tree< ___K_e_y, _Val, ___K_e_y_O_f_V_a_l_u_e, │ │ │ │ - _Compare, _Alloc > &__y) │ │ │ │ +#define  _____g_l_i_b_c_x_x___v_o_i_d___t │ │ │ │   │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include or . │ │ │ │ -Definition in file _s_t_l___t_r_e_e_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _v_e_r_s_i_o_n_._h. │ │ │ │ ********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? __GGLLIIBBCCXXXX__UUSSEE__AALLLLOOCC__PPTTRR__FFOORR__RRBB__TTRREEEE ********** │ │ │ │ -#define _GLIBCXX_USE_ALLOC_PTR_FOR_RB_TREE │ │ │ │ -Definition at line _8_2 of file _s_t_l___t_r_e_e_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aaddddrreessssooff__ccoonnsstteexxpprr ********** │ │ │ │ +#define __glibcxx_addressof_constexpr │ │ │ │ +Definition at line _3_6_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aallllooccaattoorr__ttrraaiittss__iiss__aallwwaayyss__eeqquuaall ********** │ │ │ │ +#define __glibcxx_allocator_traits_is_always_equal │ │ │ │ +Definition at line _7_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aannyy ********** │ │ │ │ +#define __glibcxx_any │ │ │ │ +Definition at line _3_7_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aappppllyy ********** │ │ │ │ +#define __glibcxx_apply │ │ │ │ +Definition at line _3_8_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aarrrraayy__ccoonnsstteexxpprr ********** │ │ │ │ +#define __glibcxx_array_constexpr │ │ │ │ +Definition at line _6_0_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aass__ccoonnsstt ********** │ │ │ │ +#define __glibcxx_as_const │ │ │ │ +Definition at line _3_9_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aassssuummee__aalliiggnneedd ********** │ │ │ │ +#define __glibcxx_assume_aligned │ │ │ │ +Definition at line _8_1_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aattoommiicc__ffllaagg__tteesstt ********** │ │ │ │ +#define __glibcxx_atomic_flag_test │ │ │ │ +Definition at line _8_2_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aattoommiicc__ffllooaatt ********** │ │ │ │ +#define __glibcxx_atomic_float │ │ │ │ +Definition at line _8_3_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aattoommiicc__iiss__aallwwaayyss__lloocckk__ffrreeee ********** │ │ │ │ +#define __glibcxx_atomic_is_always_lock_free │ │ │ │ +Definition at line _4_0_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aattoommiicc__rreeff ********** │ │ │ │ +#define __glibcxx_atomic_ref │ │ │ │ +Definition at line _8_5_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aattoommiicc__sshhaarreedd__ppttrr ********** │ │ │ │ +#define __glibcxx_atomic_shared_ptr │ │ │ │ +Definition at line _1_3_0_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aattoommiicc__vvaalluuee__iinniittiiaalliizzaattiioonn ********** │ │ │ │ +#define __glibcxx_atomic_value_initialization │ │ │ │ +Definition at line _8_6_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aattoommiicc__wwaaiitt ********** │ │ │ │ +#define __glibcxx_atomic_wait │ │ │ │ +Definition at line _1_3_1_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__bbaarrrriieerr ********** │ │ │ │ +#define __glibcxx_barrier │ │ │ │ +Definition at line _1_3_2_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__bbiinndd__ffrroonntt ********** │ │ │ │ +#define __glibcxx_bind_front │ │ │ │ +Definition at line _8_7_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__bbiitt__ccaasstt ********** │ │ │ │ +#define __glibcxx_bit_cast │ │ │ │ +Definition at line _9_0_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__bbiittooppss ********** │ │ │ │ +#define __glibcxx_bitops │ │ │ │ +Definition at line _9_1_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__bbooooll__ccoonnssttaanntt ********** │ │ │ │ +#define __glibcxx_bool_constant │ │ │ │ +Definition at line _4_1_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__bboouunnddeedd__aarrrraayy__ttrraaiittss ********** │ │ │ │ +#define __glibcxx_bounded_array_traits │ │ │ │ +Definition at line _9_2_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__bbooyyeerr__mmoooorree__sseeaarrcchheerr ********** │ │ │ │ +#define __glibcxx_boyer_moore_searcher │ │ │ │ +Definition at line _6_4_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__bbyyttee ********** │ │ │ │ +#define __glibcxx_byte │ │ │ │ +Definition at line _4_2_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__cchhrroonnoo ********** │ │ │ │ +#define __glibcxx_chrono │ │ │ │ +Definition at line _6_6_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__cchhrroonnoo__uuddllss ********** │ │ │ │ +#define __glibcxx_chrono_udls │ │ │ │ +Definition at line _2_9_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccllaammpp ********** │ │ │ │ +#define __glibcxx_clamp │ │ │ │ +Definition at line _6_2_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoommpplleexx__uuddllss ********** │ │ │ │ +#define __glibcxx_complex_udls │ │ │ │ +Definition at line _3_0_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonncceeppttss ********** │ │ │ │ +#define __glibcxx_concepts │ │ │ │ +Definition at line _9_3_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__aallggoorriitthhmmss ********** │ │ │ │ +#define __glibcxx_constexpr_algorithms │ │ │ │ +Definition at line _1_2_6_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__cchhaarr__ttrraaiittss ********** │ │ │ │ +#define __glibcxx_constexpr_char_traits │ │ │ │ +Definition at line _1_0_2_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__ccoommpplleexx ********** │ │ │ │ +#define __glibcxx_constexpr_complex │ │ │ │ +Definition at line _1_3_6_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__ddyynnaammiicc__aalllloocc ********** │ │ │ │ +#define __glibcxx_constexpr_dynamic_alloc │ │ │ │ +Definition at line _1_3_7_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__ffuunnccttiioonnaall ********** │ │ │ │ +#define __glibcxx_constexpr_functional │ │ │ │ +Definition at line _1_2_5_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__iitteerraattoorr ********** │ │ │ │ +#define __glibcxx_constexpr_iterator │ │ │ │ +Definition at line _1_1_8_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__mmeemmoorryy ********** │ │ │ │ +#define __glibcxx_constexpr_memory │ │ │ │ +Definition at line _1_2_9_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__nnuummeerriicc ********** │ │ │ │ +#define __glibcxx_constexpr_numeric │ │ │ │ +Definition at line _1_2_4_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__ssttrriinngg ********** │ │ │ │ +#define __glibcxx_constexpr_string │ │ │ │ +Definition at line _1_3_8_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__ssttrriinngg__vviieeww ********** │ │ │ │ +#define __glibcxx_constexpr_string_view │ │ │ │ +Definition at line _9_7_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__ttuuppllee ********** │ │ │ │ +#define __glibcxx_constexpr_tuple │ │ │ │ +Definition at line _1_2_7_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__uuttiilliittyy ********** │ │ │ │ +#define __glibcxx_constexpr_utility │ │ │ │ +Definition at line _1_2_0_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__vveeccttoorr ********** │ │ │ │ +#define __glibcxx_constexpr_vector │ │ │ │ +Definition at line _1_4_0_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnssttrraaiinneedd__eeqquuaalliittyy ********** │ │ │ │ +#define __glibcxx_constrained_equality │ │ │ │ +Definition at line _1_4_1_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoorroouuttiinnee ********** │ │ │ │ +#define __glibcxx_coroutine │ │ │ │ +Definition at line _1_6_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__eennaabbllee__sshhaarreedd__ffrroomm__tthhiiss ********** │ │ │ │ +#define __glibcxx_enable_shared_from_this │ │ │ │ +Definition at line _1_4_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__eennddiiaann ********** │ │ │ │ +#define __glibcxx_endian │ │ │ │ +Definition at line _9_8_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__eerraassee__iiff ********** │ │ │ │ +#define __glibcxx_erase_if │ │ │ │ +Definition at line _1_4_2_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__eexxcchhaannggee__ffuunnccttiioonn ********** │ │ │ │ +#define __glibcxx_exchange_function │ │ │ │ +Definition at line _1_7_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__eexxeeccuuttiioonn ********** │ │ │ │ +#define __glibcxx_execution │ │ │ │ +Definition at line _6_7_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ffiilleessyysstteemm ********** │ │ │ │ +#define __glibcxx_filesystem │ │ │ │ +Definition at line _6_8_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ffoorrmmaatt ********** │ │ │ │ +#define __glibcxx_format │ │ │ │ +Definition at line _1_3_4_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ffoorrmmaatt__uucchhaarr ********** │ │ │ │ +#define __glibcxx_format_uchar │ │ │ │ +Definition at line _1_3_5_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ggccdd ********** │ │ │ │ +#define __glibcxx_gcd │ │ │ │ +Definition at line _5_6_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ggccdd__llccmm ********** │ │ │ │ +#define __glibcxx_gcd_lcm │ │ │ │ +Definition at line _5_7_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ggeenneerriicc__aassssoocciiaattiivvee__llooookkuupp ********** │ │ │ │ +#define __glibcxx_generic_associative_lookup │ │ │ │ +Definition at line _3_1_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ggeenneerriicc__uunnoorrddeerreedd__llooookkuupp ********** │ │ │ │ +#define __glibcxx_generic_unordered_lookup │ │ │ │ +Definition at line _1_4_3_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__hhaass__uunniiqquuee__oobbjjeecctt__rreepprreesseennttaattiioonnss ********** │ │ │ │ +#define __glibcxx_has_unique_object_representations │ │ │ │ +Definition at line _4_3_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__hhyyppoott ********** │ │ │ │ +#define __glibcxx_hypot │ │ │ │ +Definition at line _6_9_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iinnccoommpplleettee__ccoonnttaaiinneerr__eelleemmeennttss ********** │ │ │ │ +#define __glibcxx_incomplete_container_elements │ │ │ │ +Definition at line _5_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iinntt__ppooww22 ********** │ │ │ │ +#define __glibcxx_int_pow2 │ │ │ │ +Definition at line _9_9_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iinntteeggeerr__ccoommppaarriissoonn__ffuunnccttiioonnss ********** │ │ │ │ +#define __glibcxx_integer_comparison_functions │ │ │ │ +Definition at line _1_0_0_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iinntteeggeerr__sseeqquueennccee ********** │ │ │ │ +#define __glibcxx_integer_sequence │ │ │ │ +Definition at line _1_8_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iinntteeggrraall__ccoonnssttaanntt__ccaallllaabbllee ********** │ │ │ │ +#define __glibcxx_integral_constant_callable │ │ │ │ +Definition at line _1_9_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iinntteerrppoollaattee ********** │ │ │ │ +#define __glibcxx_interpolate │ │ │ │ +Definition at line _1_1_9_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iinnvvookkee ********** │ │ │ │ +#define __glibcxx_invoke │ │ │ │ +Definition at line _4_5_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iiss__aaggggrreeggaattee ********** │ │ │ │ +#define __glibcxx_is_aggregate │ │ │ │ +Definition at line _4_6_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iiss__ccoonnssttaanntt__eevvaalluuaatteedd ********** │ │ │ │ +#define __glibcxx_is_constant_evaluated │ │ │ │ +Definition at line _1_0_1_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iiss__ffiinnaall ********** │ │ │ │ +#define __glibcxx_is_final │ │ │ │ +Definition at line _2_0_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iiss__iinnvvooccaabbllee ********** │ │ │ │ +#define __glibcxx_is_invocable │ │ │ │ +Definition at line _4_7_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iiss__llaayyoouutt__ccoommppaattiibbllee ********** │ │ │ │ +#define __glibcxx_is_layout_compatible │ │ │ │ +Definition at line _1_0_3_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iiss__nnootthhrrooww__ccoonnvveerrttiibbllee ********** │ │ │ │ +#define __glibcxx_is_nothrow_convertible │ │ │ │ +Definition at line _1_0_4_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iiss__nnuullll__ppooiinntteerr ********** │ │ │ │ +#define __glibcxx_is_null_pointer │ │ │ │ +Definition at line _8_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iiss__ppooiinntteerr__iinntteerrccoonnvveerrttiibbllee ********** │ │ │ │ +#define __glibcxx_is_pointer_interconvertible │ │ │ │ +Definition at line _1_0_5_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iiss__sswwaappppaabbllee ********** │ │ │ │ +#define __glibcxx_is_swappable │ │ │ │ +Definition at line _1_2_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__jjtthhrreeaadd ********** │ │ │ │ +#define __glibcxx_jthread │ │ │ │ +Definition at line _1_4_4_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__llaattcchh ********** │ │ │ │ +#define __glibcxx_latch │ │ │ │ +Definition at line _1_4_5_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__llaauunnddeerr ********** │ │ │ │ +#define __glibcxx_launder │ │ │ │ +Definition at line _4_8_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__llccmm ********** │ │ │ │ +#define __glibcxx_lcm │ │ │ │ +Definition at line _5_5_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__lliisstt__rreemmoovvee__rreettuurrnn__ttyyppee ********** │ │ │ │ +#define __glibcxx_list_remove_return_type │ │ │ │ +Definition at line _1_4_6_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__llooggiiccaall__ttrraaiittss ********** │ │ │ │ +#define __glibcxx_logical_traits │ │ │ │ +Definition at line _4_9_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__mmaakkee__ffrroomm__ttuuppllee ********** │ │ │ │ +#define __glibcxx_make_from_tuple │ │ │ │ +Definition at line _5_0_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__mmaakkee__oobbjj__uussiinngg__aallllooccaattoorr ********** │ │ │ │ +#define __glibcxx_make_obj_using_allocator │ │ │ │ +Definition at line _1_0_7_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__mmaakkee__rreevveerrssee__iitteerraattoorr ********** │ │ │ │ +#define __glibcxx_make_reverse_iterator │ │ │ │ +Definition at line _2_1_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__mmaakkee__uunniiqquuee ********** │ │ │ │ +#define __glibcxx_make_unique │ │ │ │ +Definition at line _3_2_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__mmaapp__ttrryy__eemmppllaaccee ********** │ │ │ │ +#define __glibcxx_map_try_emplace │ │ │ │ +Definition at line _7_0_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__mmaatthh__ccoonnssttaannttss ********** │ │ │ │ +#define __glibcxx_math_constants │ │ │ │ +Definition at line _1_0_6_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__mmaatthh__ssppeecc__ffuunnccss ********** │ │ │ │ +#define __glibcxx_math_spec_funcs │ │ │ │ +Definition at line _1_5_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__mmaatthh__ssppeecciiaall__ffuunnccttiioonnss ********** │ │ │ │ +#define __glibcxx_math_special_functions │ │ │ │ +Definition at line _7_1_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__mmeemmoorryy__rreessoouurrccee ********** │ │ │ │ +#define __glibcxx_memory_resource │ │ │ │ +Definition at line _7_2_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__mmoovvee__iitteerraattoorr__ccoonncceepptt ********** │ │ │ │ +#define __glibcxx_move_iterator_concept │ │ │ │ +Definition at line _1_4_8_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__nnooddee__eexxttrraacctt ********** │ │ │ │ +#define __glibcxx_node_extract │ │ │ │ +Definition at line _7_3_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__nnoonnmmeemmbbeerr__ccoonnttaaiinneerr__aacccceessss ********** │ │ │ │ +#define __glibcxx_nonmember_container_access │ │ │ │ +Definition at line _6_1_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__nnoott__ffnn ********** │ │ │ │ +#define __glibcxx_not_fn │ │ │ │ +Definition at line _5_1_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__nnuullll__iitteerraattoorrss ********** │ │ │ │ +#define __glibcxx_null_iterators │ │ │ │ +Definition at line _2_2_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ooppttiioonnaall ********** │ │ │ │ +#define __glibcxx_optional │ │ │ │ +Definition at line _9_4_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ppaarraalllleell__aallggoorriitthhmm ********** │ │ │ │ +#define __glibcxx_parallel_algorithm │ │ │ │ +Definition at line _7_4_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ppoollyymmoorrpphhiicc__aallllooccaattoorr ********** │ │ │ │ +#define __glibcxx_polymorphic_allocator │ │ │ │ +Definition at line _1_4_7_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__qquuootteedd__ssttrriinngg__iioo ********** │ │ │ │ +#define __glibcxx_quoted_string_io │ │ │ │ +Definition at line _3_3_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__rraannggeess ********** │ │ │ │ +#define __glibcxx_ranges │ │ │ │ +Definition at line _1_2_3_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__rraaww__mmeemmoorryy__aallggoorriitthhmmss ********** │ │ │ │ +#define __glibcxx_raw_memory_algorithms │ │ │ │ +Definition at line _5_9_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__rreemmoovvee__ccvvrreeff ********** │ │ │ │ +#define __glibcxx_remove_cvref │ │ │ │ +Definition at line _1_0_8_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__rreessuulltt__ooff__ssffiinnaaee ********** │ │ │ │ +#define __glibcxx_result_of_sfinae │ │ │ │ +Definition at line _9_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__rroobbuusstt__nnoonnmmooddiiffyyiinngg__sseeqq__ooppss ********** │ │ │ │ +#define __glibcxx_robust_nonmodifying_seq_ops │ │ │ │ +Definition at line _2_7_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ssaammppllee ********** │ │ │ │ +#define __glibcxx_sample │ │ │ │ +Definition at line _6_3_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ssccooppeedd__lloocckk ********** │ │ │ │ +#define __glibcxx_scoped_lock │ │ │ │ +Definition at line _7_5_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__sseemmaapphhoorree ********** │ │ │ │ +#define __glibcxx_semaphore │ │ │ │ +Definition at line _1_4_9_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__sshhaarreedd__mmuutteexx ********** │ │ │ │ +#define __glibcxx_shared_mutex │ │ │ │ +Definition at line _7_6_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__sshhaarreedd__ppttrr__aarrrraayyss ********** │ │ │ │ +#define __glibcxx_shared_ptr_arrays │ │ │ │ +Definition at line _1_0_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__sshhaarreedd__ppttrr__wweeaakk__ttyyppee ********** │ │ │ │ +#define __glibcxx_shared_ptr_weak_type │ │ │ │ +Definition at line _7_7_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__sshhaarreedd__ttiimmeedd__mmuutteexx ********** │ │ │ │ +#define __glibcxx_shared_timed_mutex │ │ │ │ +Definition at line _3_4_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__sshhiifftt ********** │ │ │ │ +#define __glibcxx_shift │ │ │ │ +Definition at line _1_2_1_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ssmmaarrtt__ppttrr__ffoorr__oovveerrwwrriittee ********** │ │ │ │ +#define __glibcxx_smart_ptr_for_overwrite │ │ │ │ +Definition at line _1_5_0_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ssoouurrccee__llooccaattiioonn ********** │ │ │ │ +#define __glibcxx_source_location │ │ │ │ +Definition at line _1_0_9_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ssppaann ********** │ │ │ │ +#define __glibcxx_span │ │ │ │ +Definition at line _1_1_1_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ssssiizzee ********** │ │ │ │ +#define __glibcxx_ssize │ │ │ │ +Definition at line _1_1_2_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ssttaarrttss__eennddss__wwiitthh ********** │ │ │ │ +#define __glibcxx_starts_ends_with │ │ │ │ +Definition at line _8_9_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ssttrriinngg__uuddllss ********** │ │ │ │ +#define __glibcxx_string_udls │ │ │ │ +Definition at line _3_5_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ssttrriinngg__vviieeww ********** │ │ │ │ +#define __glibcxx_string_view │ │ │ │ +Definition at line _7_9_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__tthhrreeee__wwaayy__ccoommppaarriissoonn ********** │ │ │ │ +#define __glibcxx_three_way_comparison │ │ │ │ +Definition at line _1_1_3_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ttoo__aaddddrreessss ********** │ │ │ │ +#define __glibcxx_to_address │ │ │ │ +Definition at line _1_1_4_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ttrraannssffoorrmmaattiioonn__ttrraaiitt__aalliiaasseess ********** │ │ │ │ +#define __glibcxx_transformation_trait_aliases │ │ │ │ +Definition at line _2_3_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ttrraannssppaarreenntt__ooppeerraattoorrss ********** │ │ │ │ +#define __glibcxx_transparent_operators │ │ │ │ +Definition at line _2_4_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ttuuppllee__eelleemmeenntt__tt ********** │ │ │ │ +#define __glibcxx_tuple_element_t │ │ │ │ +Definition at line _2_5_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ttuupplleess__bbyy__ttyyppee ********** │ │ │ │ +#define __glibcxx_tuples_by_type │ │ │ │ +Definition at line _2_6_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ttyyppee__iiddeennttiittyy ********** │ │ │ │ +#define __glibcxx_type_identity │ │ │ │ +Definition at line _1_1_6_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ttyyppee__ttrraaiitt__vvaarriiaabbllee__tteemmppllaatteess ********** │ │ │ │ +#define __glibcxx_type_trait_variable_templates │ │ │ │ +Definition at line _5_2_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__uunnccaauugghhtt__eexxcceeppttiioonnss ********** │ │ │ │ +#define __glibcxx_uncaught_exceptions │ │ │ │ +Definition at line _6_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__uunnoorrddeerreedd__mmaapp__ttrryy__eemmppllaaccee ********** │ │ │ │ +#define __glibcxx_unordered_map_try_emplace │ │ │ │ +Definition at line _8_0_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__uunnwwrraapp__rreeff ********** │ │ │ │ +#define __glibcxx_unwrap_ref │ │ │ │ +Definition at line _1_1_7_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__vvaarriiaanntt ********** │ │ │ │ +#define __glibcxx_variant │ │ │ │ +Definition at line _5_4_5 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__vvooiidd__tt ********** │ │ │ │ +#define __glibcxx_void_t │ │ │ │ +Definition at line _1_3_0 of file _v_e_r_s_i_o_n_._h. │ │ │ │ * _b_i_t_s │ │ │ │ - * _s_t_l___t_r_e_e_._h │ │ │ │ + * _v_e_r_s_i_o_n_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-15-base/libstdc++/user/a00413_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stl_tree.h Source File │ │ │ +libstdc++: version.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,3296 +45,2200 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
stl_tree.h
│ │ │ +
version.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// RB tree implementation -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// Copyright (C) 2023-2025 Free Software Foundation, Inc.
│ │ │
2
│ │ │ -
3// Copyright (C) 2001-2025 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/*
│ │ │ -
26 *
│ │ │ -
27 * Copyright (c) 1996,1997
│ │ │ -
28 * Silicon Graphics Computer Systems, Inc.
│ │ │ -
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. Silicon Graphics 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) 1994
│ │ │ -
40 * Hewlett-Packard Company
│ │ │ -
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. Hewlett-Packard Company 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 */
│ │ │ -
52
│ │ │ -
53/** @file bits/stl_tree.h
│ │ │ -
54 * This is an internal header file, included by other library headers.
│ │ │ -
55 * Do not attempt to use it directly. @headername{map,set}
│ │ │ -
56 */
│ │ │ -
57
│ │ │ -
58#ifndef _STL_TREE_H
│ │ │ -
59#define _STL_TREE_H 1
│ │ │ -
60
│ │ │ -
61#ifdef _GLIBCXX_SYSHDR
│ │ │ -
62#pragma GCC system_header
│ │ │ -
63#endif
│ │ │ -
64
│ │ │ -
65#include <bits/stl_algobase.h>
│ │ │ -
66#include <bits/allocator.h>
│ │ │ -
67#include <bits/stl_function.h>
│ │ │ - │ │ │ -
69#include <bits/ptr_traits.h>
│ │ │ -
70#include <ext/alloc_traits.h>
│ │ │ -
71#if __cplusplus >= 201103L
│ │ │ -
72# include <ext/aligned_buffer.h>
│ │ │ -
73#endif
│ │ │ -
74#ifdef __glibcxx_node_extract // >= C++17
│ │ │ -
75# include <bits/node_handle.h>
│ │ │ -
76#endif
│ │ │ -
77
│ │ │ -
78#if __cplusplus < 201103L
│ │ │ -
79# undef _GLIBCXX_USE_ALLOC_PTR_FOR_RB_TREE
│ │ │ -
80# define _GLIBCXX_USE_ALLOC_PTR_FOR_RB_TREE 0
│ │ │ -
81#elif ! defined _GLIBCXX_USE_ALLOC_PTR_FOR_RB_TREE
│ │ │ -
82# define _GLIBCXX_USE_ALLOC_PTR_FOR_RB_TREE 1
│ │ │ -
83#endif
│ │ │ -
84
│ │ │ -
85namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
86{
│ │ │ -
87_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
88
│ │ │ -
89 // Red-black tree class, designed for use in implementing STL
│ │ │ -
90 // associative containers (set, multiset, map, and multimap). The
│ │ │ -
91 // insertion and deletion algorithms are based on those in Cormen,
│ │ │ -
92 // Leiserson, and Rivest, Introduction to Algorithms (MIT Press,
│ │ │ -
93 // 1990), except that
│ │ │ -
94 //
│ │ │ -
95 // (1) the header cell is maintained with links not only to the root
│ │ │ -
96 // but also to the leftmost node of the tree, to enable constant
│ │ │ -
97 // time begin(), and to the rightmost node of the tree, to enable
│ │ │ -
98 // linear time performance when used with the generic set algorithms
│ │ │ -
99 // (set_union, etc.)
│ │ │ -
100 //
│ │ │ -
101 // (2) when a node being deleted has two children its successor node
│ │ │ -
102 // is relinked into its place, rather than copied, so that the only
│ │ │ -
103 // iterators invalidated are those referring to the deleted node.
│ │ │ -
104
│ │ │ -
105 enum _Rb_tree_color { _S_red = false, _S_black = true };
│ │ │ -
106
│ │ │ -
107 struct _Rb_tree_node_base
│ │ │ -
108 {
│ │ │ -
109 typedef _Rb_tree_node_base* _Base_ptr;
│ │ │ -
110
│ │ │ -
111 _Rb_tree_color _M_color;
│ │ │ -
112 _Base_ptr _M_parent;
│ │ │ -
113 _Base_ptr _M_left;
│ │ │ -
114 _Base_ptr _M_right;
│ │ │ -
115
│ │ │ -
116 static _Base_ptr
│ │ │ -
117 _S_minimum(_Base_ptr __x) _GLIBCXX_NOEXCEPT
│ │ │ -
118 {
│ │ │ -
119 while (__x->_M_left != 0) __x = __x->_M_left;
│ │ │ -
120 return __x;
│ │ │ -
121 }
│ │ │ -
122
│ │ │ -
123 static _Base_ptr
│ │ │ -
124 _S_maximum(_Base_ptr __x) _GLIBCXX_NOEXCEPT
│ │ │ -
125 {
│ │ │ -
126 while (__x->_M_right != 0) __x = __x->_M_right;
│ │ │ -
127 return __x;
│ │ │ -
128 }
│ │ │ -
129
│ │ │ -
130 // This is not const-correct, but it's only used in a const access path
│ │ │ -
131 // by std::_Rb_tree::_M_end() where the pointer is used to initialize a
│ │ │ -
132 // const_iterator and so constness is restored.
│ │ │ -
133 _Base_ptr
│ │ │ -
134 _M_base_ptr() const _GLIBCXX_NOEXCEPT
│ │ │ -
135 { return const_cast<_Rb_tree_node_base*>(this); }
│ │ │ -
136 };
│ │ │ +
3// This file is part of the GNU ISO C++ Library. This library is free
│ │ │ +
4// software; you can redistribute it and/or modify it under the
│ │ │ +
5// terms of the GNU General Public License as published by the
│ │ │ +
6// Free Software Foundation; either version 3, or (at your option)
│ │ │ +
7// any later version.
│ │ │ +
8
│ │ │ +
9// This library is distributed in the hope that it will be useful,
│ │ │ +
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
│ │ │ +
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
│ │ │ +
12// GNU General Public License for more details.
│ │ │ +
13
│ │ │ +
14// Under Section 7 of GPL version 3, you are granted additional
│ │ │ +
15// permissions described in the GCC Runtime Library Exception, version
│ │ │ +
16// 3.1, as published by the Free Software Foundation.
│ │ │ +
17
│ │ │ +
18// You should have received a copy of the GNU General Public License and
│ │ │ +
19// a copy of the GCC Runtime Library Exception along with this program;
│ │ │ +
20// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │ +
21// <http://www.gnu.org/licenses/>.
│ │ │ +
22
│ │ │ +
23// DO NOT EDIT THIS FILE (version.h)
│ │ │ +
24//
│ │ │ +
25// It has been AutoGen-ed
│ │ │ +
26// From the definitions version.def
│ │ │ +
27// and the template file version.tpl
│ │ │ +
28
│ │ │ +
29/** @file bits/version.h
│ │ │ +
30 * This is an internal header file, included by other library headers.
│ │ │ +
31 * Do not attempt to use it directly. @headername{version}
│ │ │ +
32 */
│ │ │ +
33
│ │ │ +
34// Usage guide:
│ │ │ +
35//
│ │ │ +
36// In your usual header, do something like:
│ │ │ +
37//
│ │ │ +
38// #define __glibcxx_want_ranges
│ │ │ +
39// #define __glibcxx_want_concepts
│ │ │ +
40// #include <bits/version.h>
│ │ │ +
41//
│ │ │ +
42// This will generate the FTMs you named, and let you use them in your code as
│ │ │ +
43// if it was user code. All macros are also exposed under __glibcxx_NAME even
│ │ │ +
44// if unwanted, to permit bits and other FTMs to depend on them for condtional
│ │ │ +
45// computation without exposing extra FTMs to user code.
│ │ │ +
46
│ │ │ +
47#ifdef _GLIBCXX_SYSHDR
│ │ │ +
48#pragma GCC system_header
│ │ │ +
49#endif
│ │ │ +
50
│ │ │ +
51#include <bits/c++config.h>
│ │ │ +
52
│ │ │ +
53#if !defined(__cpp_lib_incomplete_container_elements)
│ │ │ +
54# if _GLIBCXX_HOSTED
│ │ │ +
55# define __glibcxx_incomplete_container_elements 201505L
│ │ │ +
56# if defined(__glibcxx_want_all) || defined(__glibcxx_want_incomplete_container_elements)
│ │ │ +
57# define __cpp_lib_incomplete_container_elements 201505L
│ │ │ +
58# endif
│ │ │ +
59# endif
│ │ │ +
60#endif /* !defined(__cpp_lib_incomplete_container_elements) && defined(__glibcxx_want_incomplete_container_elements) */
│ │ │ +
61#undef __glibcxx_want_incomplete_container_elements
│ │ │ +
62
│ │ │ +
63#if !defined(__cpp_lib_uncaught_exceptions)
│ │ │ +
64# if ((defined(__STRICT_ANSI__) && __cplusplus >= 201703L) || (!defined(__STRICT_ANSI__) && __cplusplus >= 199711L))
│ │ │ +
65# define __glibcxx_uncaught_exceptions 201411L
│ │ │ +
66# if defined(__glibcxx_want_all) || defined(__glibcxx_want_uncaught_exceptions)
│ │ │ +
67# define __cpp_lib_uncaught_exceptions 201411L
│ │ │ +
68# endif
│ │ │ +
69# endif
│ │ │ +
70#endif /* !defined(__cpp_lib_uncaught_exceptions) && defined(__glibcxx_want_uncaught_exceptions) */
│ │ │ +
71#undef __glibcxx_want_uncaught_exceptions
│ │ │ +
72
│ │ │ +
73#if !defined(__cpp_lib_allocator_traits_is_always_equal)
│ │ │ +
74# if (__cplusplus >= 201103L)
│ │ │ +
75# define __glibcxx_allocator_traits_is_always_equal 201411L
│ │ │ +
76# if defined(__glibcxx_want_all) || defined(__glibcxx_want_allocator_traits_is_always_equal)
│ │ │ +
77# define __cpp_lib_allocator_traits_is_always_equal 201411L
│ │ │ +
78# endif
│ │ │ +
79# endif
│ │ │ +
80#endif /* !defined(__cpp_lib_allocator_traits_is_always_equal) && defined(__glibcxx_want_allocator_traits_is_always_equal) */
│ │ │ +
81#undef __glibcxx_want_allocator_traits_is_always_equal
│ │ │ +
82
│ │ │ +
83#if !defined(__cpp_lib_is_null_pointer)
│ │ │ +
84# if (__cplusplus >= 201103L)
│ │ │ +
85# define __glibcxx_is_null_pointer 201309L
│ │ │ +
86# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_null_pointer)
│ │ │ +
87# define __cpp_lib_is_null_pointer 201309L
│ │ │ +
88# endif
│ │ │ +
89# endif
│ │ │ +
90#endif /* !defined(__cpp_lib_is_null_pointer) && defined(__glibcxx_want_is_null_pointer) */
│ │ │ +
91#undef __glibcxx_want_is_null_pointer
│ │ │ +
92
│ │ │ +
93#if !defined(__cpp_lib_result_of_sfinae)
│ │ │ +
94# if (__cplusplus >= 201103L)
│ │ │ +
95# define __glibcxx_result_of_sfinae 201210L
│ │ │ +
96# if defined(__glibcxx_want_all) || defined(__glibcxx_want_result_of_sfinae)
│ │ │ +
97# define __cpp_lib_result_of_sfinae 201210L
│ │ │ +
98# endif
│ │ │ +
99# endif
│ │ │ +
100#endif /* !defined(__cpp_lib_result_of_sfinae) && defined(__glibcxx_want_result_of_sfinae) */
│ │ │ +
101#undef __glibcxx_want_result_of_sfinae
│ │ │ +
102
│ │ │ +
103#if !defined(__cpp_lib_shared_ptr_arrays)
│ │ │ +
104# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
│ │ │ +
105# define __glibcxx_shared_ptr_arrays 201707L
│ │ │ +
106# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_ptr_arrays)
│ │ │ +
107# define __cpp_lib_shared_ptr_arrays 201707L
│ │ │ +
108# endif
│ │ │ +
109# elif (__cplusplus >= 201103L) && _GLIBCXX_HOSTED
│ │ │ +
110# define __glibcxx_shared_ptr_arrays 201611L
│ │ │ +
111# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_ptr_arrays)
│ │ │ +
112# define __cpp_lib_shared_ptr_arrays 201611L
│ │ │ +
113# endif
│ │ │ +
114# endif
│ │ │ +
115#endif /* !defined(__cpp_lib_shared_ptr_arrays) && defined(__glibcxx_want_shared_ptr_arrays) */
│ │ │ +
116#undef __glibcxx_want_shared_ptr_arrays
│ │ │ +
117
│ │ │ +
118#if !defined(__cpp_lib_is_swappable)
│ │ │ +
119# if ((defined(__STRICT_ANSI__) && __cplusplus >= 201703L) || (!defined(__STRICT_ANSI__) && __cplusplus >= 201103L))
│ │ │ +
120# define __glibcxx_is_swappable 201603L
│ │ │ +
121# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_swappable)
│ │ │ +
122# define __cpp_lib_is_swappable 201603L
│ │ │ +
123# endif
│ │ │ +
124# endif
│ │ │ +
125#endif /* !defined(__cpp_lib_is_swappable) && defined(__glibcxx_want_is_swappable) */
│ │ │ +
126#undef __glibcxx_want_is_swappable
│ │ │ +
127
│ │ │ +
128#if !defined(__cpp_lib_void_t)
│ │ │ +
129# if ((defined(__STRICT_ANSI__) && __cplusplus >= 201703L) || (!defined(__STRICT_ANSI__) && __cplusplus >= 201103L))
│ │ │ +
130# define __glibcxx_void_t 201411L
│ │ │ +
131# if defined(__glibcxx_want_all) || defined(__glibcxx_want_void_t)
│ │ │ +
132# define __cpp_lib_void_t 201411L
│ │ │ +
133# endif
│ │ │ +
134# endif
│ │ │ +
135#endif /* !defined(__cpp_lib_void_t) && defined(__glibcxx_want_void_t) */
│ │ │ +
136#undef __glibcxx_want_void_t
│ │ │
137
│ │ │ -
138 // Helper type offering value initialization guarantee on the compare functor.
│ │ │ -
139 template<typename _Key_compare>
│ │ │ -
140 struct _Rb_tree_key_compare
│ │ │ -
141 {
│ │ │ -
142 _Key_compare _M_key_compare;
│ │ │ -
143
│ │ │ -
144 _Rb_tree_key_compare()
│ │ │ -
145 _GLIBCXX_NOEXCEPT_IF(
│ │ │ -
146 is_nothrow_default_constructible<_Key_compare>::value)
│ │ │ -
147 : _M_key_compare()
│ │ │ -
148 { }
│ │ │ -
149
│ │ │ -
150 _Rb_tree_key_compare(const _Key_compare& __comp)
│ │ │ -
151 : _M_key_compare(__comp)
│ │ │ -
152 { }
│ │ │ -
153
│ │ │ -
154#if __cplusplus >= 201103L
│ │ │ -
155 // Copy constructor added for consistency with C++98 mode.
│ │ │ -
156 _Rb_tree_key_compare(const _Rb_tree_key_compare&) = default;
│ │ │ +
138#if !defined(__cpp_lib_enable_shared_from_this)
│ │ │ +
139# if ((defined(__STRICT_ANSI__) && __cplusplus >= 201703L) || (!defined(__STRICT_ANSI__) && __cplusplus >= 201103L)) && _GLIBCXX_HOSTED
│ │ │ +
140# define __glibcxx_enable_shared_from_this 201603L
│ │ │ +
141# if defined(__glibcxx_want_all) || defined(__glibcxx_want_enable_shared_from_this)
│ │ │ +
142# define __cpp_lib_enable_shared_from_this 201603L
│ │ │ +
143# endif
│ │ │ +
144# endif
│ │ │ +
145#endif /* !defined(__cpp_lib_enable_shared_from_this) && defined(__glibcxx_want_enable_shared_from_this) */
│ │ │ +
146#undef __glibcxx_want_enable_shared_from_this
│ │ │ +
147
│ │ │ +
148#if !defined(__cpp_lib_math_spec_funcs)
│ │ │ +
149# if (__cplusplus >= 201103L)
│ │ │ +
150# define __glibcxx_math_spec_funcs 201003L
│ │ │ +
151# if defined(__glibcxx_want_all) || defined(__glibcxx_want_math_spec_funcs)
│ │ │ +
152# define __STDCPP_MATH_SPEC_FUNCS__ 201003L
│ │ │ +
153# endif
│ │ │ +
154# endif
│ │ │ +
155#endif /* !defined(__cpp_lib_math_spec_funcs) && defined(__glibcxx_want_math_spec_funcs) */
│ │ │ +
156#undef __glibcxx_want_math_spec_funcs
│ │ │
157
│ │ │ -
158 _Rb_tree_key_compare(_Rb_tree_key_compare&& __x)
│ │ │ -
159 noexcept(is_nothrow_copy_constructible<_Key_compare>::value)
│ │ │ -
160 : _M_key_compare(__x._M_key_compare)
│ │ │ -
161 { }
│ │ │ -
162#endif
│ │ │ -
163 };
│ │ │ -
164
│ │ │ -
165 // Helper type to manage default initialization of node count and header.
│ │ │ -
166 struct _Rb_tree_header
│ │ │ -
167 {
│ │ │ -
168 _Rb_tree_node_base _M_header;
│ │ │ -
169 size_t _M_node_count; // Keeps track of size of tree.
│ │ │ -
170
│ │ │ -
171 _Rb_tree_header() _GLIBCXX_NOEXCEPT
│ │ │ -
172 {
│ │ │ -
173 _M_header._M_color = _S_red;
│ │ │ -
174 _M_reset();
│ │ │ -
175 }
│ │ │ -
176
│ │ │ -
177#if __cplusplus >= 201103L
│ │ │ -
178 _Rb_tree_header(_Rb_tree_header&& __x) noexcept
│ │ │ -
179 {
│ │ │ -
180 if (__x._M_header._M_parent != nullptr)
│ │ │ -
181 _M_move_data(__x);
│ │ │ -
182 else
│ │ │ -
183 {
│ │ │ -
184 _M_header._M_color = _S_red;
│ │ │ -
185 _M_reset();
│ │ │ -
186 }
│ │ │ -
187 }
│ │ │ -
188#endif
│ │ │ -
189
│ │ │ -
190 void
│ │ │ -
191 _M_move_data(_Rb_tree_header& __from)
│ │ │ -
192 {
│ │ │ -
193 _M_header._M_color = __from._M_header._M_color;
│ │ │ -
194 _M_header._M_parent = __from._M_header._M_parent;
│ │ │ -
195 _M_header._M_left = __from._M_header._M_left;
│ │ │ -
196 _M_header._M_right = __from._M_header._M_right;
│ │ │ -
197 _M_header._M_parent->_M_parent = &_M_header;
│ │ │ -
198 _M_node_count = __from._M_node_count;
│ │ │ -
199
│ │ │ -
200 __from._M_reset();
│ │ │ -
201 }
│ │ │ -
202
│ │ │ -
203 void
│ │ │ -
204 _M_reset()
│ │ │ -
205 {
│ │ │ -
206 _M_header._M_parent = 0;
│ │ │ -
207 _M_header._M_left = &_M_header;
│ │ │ -
208 _M_header._M_right = &_M_header;
│ │ │ -
209 _M_node_count = 0;
│ │ │ -
210 }
│ │ │ -
211 };
│ │ │ -
212
│ │ │ -
213 template<typename _Val>
│ │ │ -
214 struct _Rb_tree_node : public _Rb_tree_node_base
│ │ │ -
215 {
│ │ │ -
216#if __cplusplus < 201103L
│ │ │ -
217 _Val _M_value_field;
│ │ │ -
218
│ │ │ -
219 _Val*
│ │ │ -
220 _M_valptr()
│ │ │ -
221 { return std::__addressof(_M_value_field); }
│ │ │ -
222
│ │ │ -
223 const _Val*
│ │ │ -
224 _M_valptr() const
│ │ │ -
225 { return std::__addressof(_M_value_field); }
│ │ │ -
226#else
│ │ │ -
227 __gnu_cxx::__aligned_membuf<_Val> _M_storage;
│ │ │ -
228
│ │ │ -
229 _Val*
│ │ │ -
230 _M_valptr()
│ │ │ -
231 { return _M_storage._M_ptr(); }
│ │ │ -
232
│ │ │ -
233 const _Val*
│ │ │ -
234 _M_valptr() const
│ │ │ -
235 { return _M_storage._M_ptr(); }
│ │ │ -
236#endif
│ │ │ +
158#if !defined(__cpp_lib_coroutine)
│ │ │ +
159# if (__cplusplus >= 201402L) && (__cpp_impl_coroutine)
│ │ │ +
160# define __glibcxx_coroutine 201902L
│ │ │ +
161# if defined(__glibcxx_want_all) || defined(__glibcxx_want_coroutine)
│ │ │ +
162# define __cpp_lib_coroutine 201902L
│ │ │ +
163# endif
│ │ │ +
164# endif
│ │ │ +
165#endif /* !defined(__cpp_lib_coroutine) && defined(__glibcxx_want_coroutine) */
│ │ │ +
166#undef __glibcxx_want_coroutine
│ │ │ +
167
│ │ │ +
168#if !defined(__cpp_lib_exchange_function)
│ │ │ +
169# if (__cplusplus >= 201402L)
│ │ │ +
170# define __glibcxx_exchange_function 201304L
│ │ │ +
171# if defined(__glibcxx_want_all) || defined(__glibcxx_want_exchange_function)
│ │ │ +
172# define __cpp_lib_exchange_function 201304L
│ │ │ +
173# endif
│ │ │ +
174# endif
│ │ │ +
175#endif /* !defined(__cpp_lib_exchange_function) && defined(__glibcxx_want_exchange_function) */
│ │ │ +
176#undef __glibcxx_want_exchange_function
│ │ │ +
177
│ │ │ +
178#if !defined(__cpp_lib_integer_sequence)
│ │ │ +
179# if (__cplusplus >= 201402L)
│ │ │ +
180# define __glibcxx_integer_sequence 201304L
│ │ │ +
181# if defined(__glibcxx_want_all) || defined(__glibcxx_want_integer_sequence)
│ │ │ +
182# define __cpp_lib_integer_sequence 201304L
│ │ │ +
183# endif
│ │ │ +
184# endif
│ │ │ +
185#endif /* !defined(__cpp_lib_integer_sequence) && defined(__glibcxx_want_integer_sequence) */
│ │ │ +
186#undef __glibcxx_want_integer_sequence
│ │ │ +
187
│ │ │ +
188#if !defined(__cpp_lib_integral_constant_callable)
│ │ │ +
189# if (__cplusplus >= 201402L)
│ │ │ +
190# define __glibcxx_integral_constant_callable 201304L
│ │ │ +
191# if defined(__glibcxx_want_all) || defined(__glibcxx_want_integral_constant_callable)
│ │ │ +
192# define __cpp_lib_integral_constant_callable 201304L
│ │ │ +
193# endif
│ │ │ +
194# endif
│ │ │ +
195#endif /* !defined(__cpp_lib_integral_constant_callable) && defined(__glibcxx_want_integral_constant_callable) */
│ │ │ +
196#undef __glibcxx_want_integral_constant_callable
│ │ │ +
197
│ │ │ +
198#if !defined(__cpp_lib_is_final)
│ │ │ +
199# if (__cplusplus >= 201402L)
│ │ │ +
200# define __glibcxx_is_final 201402L
│ │ │ +
201# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_final)
│ │ │ +
202# define __cpp_lib_is_final 201402L
│ │ │ +
203# endif
│ │ │ +
204# endif
│ │ │ +
205#endif /* !defined(__cpp_lib_is_final) && defined(__glibcxx_want_is_final) */
│ │ │ +
206#undef __glibcxx_want_is_final
│ │ │ +
207
│ │ │ +
208#if !defined(__cpp_lib_make_reverse_iterator)
│ │ │ +
209# if (__cplusplus >= 201402L)
│ │ │ +
210# define __glibcxx_make_reverse_iterator 201402L
│ │ │ +
211# if defined(__glibcxx_want_all) || defined(__glibcxx_want_make_reverse_iterator)
│ │ │ +
212# define __cpp_lib_make_reverse_iterator 201402L
│ │ │ +
213# endif
│ │ │ +
214# endif
│ │ │ +
215#endif /* !defined(__cpp_lib_make_reverse_iterator) && defined(__glibcxx_want_make_reverse_iterator) */
│ │ │ +
216#undef __glibcxx_want_make_reverse_iterator
│ │ │ +
217
│ │ │ +
218#if !defined(__cpp_lib_null_iterators)
│ │ │ +
219# if (__cplusplus >= 201402L)
│ │ │ +
220# define __glibcxx_null_iterators 201304L
│ │ │ +
221# if defined(__glibcxx_want_all) || defined(__glibcxx_want_null_iterators)
│ │ │ +
222# define __cpp_lib_null_iterators 201304L
│ │ │ +
223# endif
│ │ │ +
224# endif
│ │ │ +
225#endif /* !defined(__cpp_lib_null_iterators) && defined(__glibcxx_want_null_iterators) */
│ │ │ +
226#undef __glibcxx_want_null_iterators
│ │ │ +
227
│ │ │ +
228#if !defined(__cpp_lib_transformation_trait_aliases)
│ │ │ +
229# if (__cplusplus >= 201402L)
│ │ │ +
230# define __glibcxx_transformation_trait_aliases 201304L
│ │ │ +
231# if defined(__glibcxx_want_all) || defined(__glibcxx_want_transformation_trait_aliases)
│ │ │ +
232# define __cpp_lib_transformation_trait_aliases 201304L
│ │ │ +
233# endif
│ │ │ +
234# endif
│ │ │ +
235#endif /* !defined(__cpp_lib_transformation_trait_aliases) && defined(__glibcxx_want_transformation_trait_aliases) */
│ │ │ +
236#undef __glibcxx_want_transformation_trait_aliases
│ │ │
237
│ │ │ -
238 _Rb_tree_node*
│ │ │ -
239 _M_node_ptr() _GLIBCXX_NOEXCEPT
│ │ │ -
240 { return this; }
│ │ │ -
241 };
│ │ │ -
242
│ │ │ -
243#if _GLIBCXX_USE_ALLOC_PTR_FOR_RB_TREE
│ │ │ -
244namespace __rb_tree
│ │ │ -
245{
│ │ │ -
246 template<typename _VoidPtr>
│ │ │ -
247 struct _Node_base
│ │ │ -
248 {
│ │ │ -
249 using _Base_ptr = __ptr_rebind<_VoidPtr, _Node_base>;
│ │ │ -
250
│ │ │ -
251 _Rb_tree_color _M_color;
│ │ │ -
252 _Base_ptr _M_parent;
│ │ │ -
253 _Base_ptr _M_left;
│ │ │ -
254 _Base_ptr _M_right;
│ │ │ -
255
│ │ │ -
256 static _Base_ptr
│ │ │ -
257 _S_minimum(_Base_ptr __x) _GLIBCXX_NOEXCEPT
│ │ │ -
258 {
│ │ │ -
259 while (__x->_M_left) __x = __x->_M_left;
│ │ │ -
260 return __x;
│ │ │ -
261 }
│ │ │ -
262
│ │ │ -
263 static _Base_ptr
│ │ │ -
264 _S_maximum(_Base_ptr __x) _GLIBCXX_NOEXCEPT
│ │ │ -
265 {
│ │ │ -
266 while (__x->_M_right) __x = __x->_M_right;
│ │ │ -
267 return __x;
│ │ │ -
268 }
│ │ │ -
269
│ │ │ -
270 // This is not const-correct, but it's only used in a const access path
│ │ │ -
271 // by std::_Rb_tree::_M_end() where the pointer is used to initialize a
│ │ │ -
272 // const_iterator and so constness is restored.
│ │ │ -
273 _Base_ptr
│ │ │ -
274 _M_base_ptr() const noexcept
│ │ │ -
275 {
│ │ │ -
276 return pointer_traits<_Base_ptr>::pointer_to
│ │ │ -
277 (*const_cast<_Node_base*>(this));
│ │ │ -
278 }
│ │ │ -
279 };
│ │ │ -
280
│ │ │ -
281 // Helper type to manage default initialization of node count and header.
│ │ │ -
282 template<typename _NodeBase>
│ │ │ -
283 struct _Header
│ │ │ -
284 {
│ │ │ -
285 private:
│ │ │ -
286 using _Base_ptr = typename _NodeBase::_Base_ptr;
│ │ │ -
287
│ │ │ -
288 public:
│ │ │ -
289 _NodeBase _M_header;
│ │ │ -
290 size_t _M_node_count; // Keeps track of size of tree.
│ │ │ -
291
│ │ │ -
292 _Header() noexcept
│ │ │ -
293 {
│ │ │ -
294 _M_header._M_color = _S_red;
│ │ │ -
295 _M_reset();
│ │ │ -
296 }
│ │ │ -
297
│ │ │ -
298 _Header(_Header&& __x) noexcept
│ │ │ -
299 {
│ │ │ -
300 if (__x._M_header._M_parent)
│ │ │ -
301 _M_move_data(__x);
│ │ │ -
302 else
│ │ │ -
303 {
│ │ │ -
304 _M_header._M_color = _S_red;
│ │ │ -
305 _M_reset();
│ │ │ -
306 }
│ │ │ -
307 }
│ │ │ -
308
│ │ │ -
309 void
│ │ │ -
310 _M_move_data(_Header& __from)
│ │ │ -
311 {
│ │ │ -
312 _M_header._M_color = __from._M_header._M_color;
│ │ │ -
313 _M_header._M_parent = __from._M_header._M_parent;
│ │ │ -
314 _M_header._M_left = __from._M_header._M_left;
│ │ │ -
315 _M_header._M_right = __from._M_header._M_right;
│ │ │ -
316 _M_header._M_parent->_M_parent = _M_header._M_base_ptr();
│ │ │ -
317 _M_node_count = __from._M_node_count;
│ │ │ -
318
│ │ │ -
319 __from._M_reset();
│ │ │ -
320 }
│ │ │ -
321
│ │ │ -
322 void
│ │ │ -
323 _M_reset()
│ │ │ -
324 {
│ │ │ -
325 _M_header._M_parent = nullptr;
│ │ │ -
326 _M_header._M_left = _M_header._M_right = _M_header._M_base_ptr();
│ │ │ -
327 _M_node_count = 0;
│ │ │ -
328 }
│ │ │ -
329 };
│ │ │ -
330
│ │ │ -
331 template<typename _ValPtr>
│ │ │ -
332 struct _Node : public __rb_tree::_Node_base<__ptr_rebind<_ValPtr, void>>
│ │ │ -
333 {
│ │ │ -
334 using value_type = typename pointer_traits<_ValPtr>::element_type;
│ │ │ -
335 using _Node_ptr = __ptr_rebind<_ValPtr, _Node>;
│ │ │ -
336
│ │ │ -
337 _Node() noexcept { }
│ │ │ -
338 ~_Node() { }
│ │ │ -
339 _Node(_Node&&) = delete;
│ │ │ -
340
│ │ │ -
341 union _Uninit_storage
│ │ │ -
342 {
│ │ │ -
343 _Uninit_storage() noexcept { }
│ │ │ -
344 ~_Uninit_storage() { }
│ │ │ -
345
│ │ │ -
346 value_type _M_data;
│ │ │ -
347 };
│ │ │ -
348 _Uninit_storage _M_u;
│ │ │ -
349
│ │ │ -
350 value_type*
│ │ │ -
351 _M_valptr()
│ │ │ -
352 { return std::addressof(_M_u._M_data); }
│ │ │ -
353
│ │ │ -
354 value_type const*
│ │ │ -
355 _M_valptr() const
│ │ │ -
356 { return std::addressof(_M_u._M_data); }
│ │ │ -
357
│ │ │ -
358 _Node_ptr
│ │ │ -
359 _M_node_ptr() noexcept
│ │ │ -
360 { return pointer_traits<_Node_ptr>::pointer_to(*this); }
│ │ │ -
361 };
│ │ │ -
362} // namespace __rb_tree
│ │ │ -
363#endif // _GLIBCXX_USE_ALLOC_PTR_FOR_RB_TREE
│ │ │ -
364
│ │ │ -
365 _GLIBCXX_PURE _Rb_tree_node_base*
│ │ │ -
366 _Rb_tree_increment(_Rb_tree_node_base* __x) throw ();
│ │ │ -
367
│ │ │ -
368 _GLIBCXX_PURE _Rb_tree_node_base*
│ │ │ -
369 _Rb_tree_decrement(_Rb_tree_node_base* __x) throw ();
│ │ │ -
370
│ │ │ -
371 template<typename _Tp>
│ │ │ -
372 struct _Rb_tree_iterator
│ │ │ -
373 {
│ │ │ -
374 typedef _Tp value_type;
│ │ │ -
375 typedef _Tp& reference;
│ │ │ -
376 typedef _Tp* pointer;
│ │ │ -
377
│ │ │ -
378 typedef bidirectional_iterator_tag iterator_category;
│ │ │ -
379 typedef ptrdiff_t difference_type;
│ │ │ -
380
│ │ │ -
381 typedef _Rb_tree_node_base::_Base_ptr _Base_ptr;
│ │ │ -
382 typedef _Rb_tree_node<_Tp>* _Node_ptr;
│ │ │ -
383
│ │ │ -
384 _Rb_tree_iterator() _GLIBCXX_NOEXCEPT
│ │ │ -
385 : _M_node() { }
│ │ │ -
386
│ │ │ -
387 explicit
│ │ │ -
388 _Rb_tree_iterator(_Base_ptr __x) _GLIBCXX_NOEXCEPT
│ │ │ -
389 : _M_node(__x) { }
│ │ │ -
390
│ │ │ -
391 reference
│ │ │ -
392 operator*() const _GLIBCXX_NOEXCEPT
│ │ │ -
393 { return *static_cast<_Node_ptr>(_M_node)->_M_valptr(); }
│ │ │ -
394
│ │ │ -
395 pointer
│ │ │ -
396 operator->() const _GLIBCXX_NOEXCEPT
│ │ │ -
397 { return static_cast<_Node_ptr>(_M_node)->_M_valptr(); }
│ │ │ -
398
│ │ │ -
399 _Rb_tree_iterator&
│ │ │ -
400 operator++() _GLIBCXX_NOEXCEPT
│ │ │ -
401 {
│ │ │ -
402 _M_node = _Rb_tree_increment(_M_node);
│ │ │ -
403 return *this;
│ │ │ -
404 }
│ │ │ -
405
│ │ │ -
406 _Rb_tree_iterator
│ │ │ -
407 operator++(int) _GLIBCXX_NOEXCEPT
│ │ │ -
408 {
│ │ │ -
409 _Rb_tree_iterator __tmp = *this;
│ │ │ -
410 _M_node = _Rb_tree_increment(_M_node);
│ │ │ -
411 return __tmp;
│ │ │ -
412 }
│ │ │ -
413
│ │ │ -
414 _Rb_tree_iterator&
│ │ │ -
415 operator--() _GLIBCXX_NOEXCEPT
│ │ │ -
416 {
│ │ │ -
417 _M_node = _Rb_tree_decrement(_M_node);
│ │ │ -
418 return *this;
│ │ │ -
419 }
│ │ │ -
420
│ │ │ -
421 _Rb_tree_iterator
│ │ │ -
422 operator--(int) _GLIBCXX_NOEXCEPT
│ │ │ -
423 {
│ │ │ -
424 _Rb_tree_iterator __tmp = *this;
│ │ │ -
425 _M_node = _Rb_tree_decrement(_M_node);
│ │ │ -
426 return __tmp;
│ │ │ -
427 }
│ │ │ -
428
│ │ │ -
429 friend bool
│ │ │ -
430 operator==(const _Rb_tree_iterator& __x,
│ │ │ -
431 const _Rb_tree_iterator& __y) _GLIBCXX_NOEXCEPT
│ │ │ -
432 { return __x._M_node == __y._M_node; }
│ │ │ -
433
│ │ │ -
434#if ! __cpp_lib_three_way_comparison
│ │ │ -
435 friend bool
│ │ │ -
436 operator!=(const _Rb_tree_iterator& __x,
│ │ │ -
437 const _Rb_tree_iterator& __y) _GLIBCXX_NOEXCEPT
│ │ │ -
438 { return __x._M_node != __y._M_node; }
│ │ │ -
439#endif
│ │ │ -
440
│ │ │ -
441 _Base_ptr _M_node;
│ │ │ -
442 };
│ │ │ -
443
│ │ │ -
444 template<typename _Tp>
│ │ │ -
445 struct _Rb_tree_const_iterator
│ │ │ -
446 {
│ │ │ -
447 typedef _Tp value_type;
│ │ │ -
448 typedef const _Tp& reference;
│ │ │ -
449 typedef const _Tp* pointer;
│ │ │ -
450
│ │ │ -
451 typedef _Rb_tree_iterator<_Tp> iterator;
│ │ │ +
238#if !defined(__cpp_lib_transparent_operators)
│ │ │ +
239# if (__cplusplus >= 201402L)
│ │ │ +
240# define __glibcxx_transparent_operators 201510L
│ │ │ +
241# if defined(__glibcxx_want_all) || defined(__glibcxx_want_transparent_operators)
│ │ │ +
242# define __cpp_lib_transparent_operators 201510L
│ │ │ +
243# endif
│ │ │ +
244# endif
│ │ │ +
245#endif /* !defined(__cpp_lib_transparent_operators) && defined(__glibcxx_want_transparent_operators) */
│ │ │ +
246#undef __glibcxx_want_transparent_operators
│ │ │ +
247
│ │ │ +
248#if !defined(__cpp_lib_tuple_element_t)
│ │ │ +
249# if (__cplusplus >= 201402L)
│ │ │ +
250# define __glibcxx_tuple_element_t 201402L
│ │ │ +
251# if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuple_element_t)
│ │ │ +
252# define __cpp_lib_tuple_element_t 201402L
│ │ │ +
253# endif
│ │ │ +
254# endif
│ │ │ +
255#endif /* !defined(__cpp_lib_tuple_element_t) && defined(__glibcxx_want_tuple_element_t) */
│ │ │ +
256#undef __glibcxx_want_tuple_element_t
│ │ │ +
257
│ │ │ +
258#if !defined(__cpp_lib_tuples_by_type)
│ │ │ +
259# if (__cplusplus >= 201402L)
│ │ │ +
260# define __glibcxx_tuples_by_type 201304L
│ │ │ +
261# if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuples_by_type)
│ │ │ +
262# define __cpp_lib_tuples_by_type 201304L
│ │ │ +
263# endif
│ │ │ +
264# endif
│ │ │ +
265#endif /* !defined(__cpp_lib_tuples_by_type) && defined(__glibcxx_want_tuples_by_type) */
│ │ │ +
266#undef __glibcxx_want_tuples_by_type
│ │ │ +
267
│ │ │ +
268#if !defined(__cpp_lib_robust_nonmodifying_seq_ops)
│ │ │ +
269# if (__cplusplus >= 201402L)
│ │ │ +
270# define __glibcxx_robust_nonmodifying_seq_ops 201304L
│ │ │ +
271# if defined(__glibcxx_want_all) || defined(__glibcxx_want_robust_nonmodifying_seq_ops)
│ │ │ +
272# define __cpp_lib_robust_nonmodifying_seq_ops 201304L
│ │ │ +
273# endif
│ │ │ +
274# endif
│ │ │ +
275#endif /* !defined(__cpp_lib_robust_nonmodifying_seq_ops) && defined(__glibcxx_want_robust_nonmodifying_seq_ops) */
│ │ │ +
276#undef __glibcxx_want_robust_nonmodifying_seq_ops
│ │ │ +
277
│ │ │ +
278#if !defined(__cpp_lib_to_chars)
│ │ │ +
279# if (__cplusplus > 202302L) && (_GLIBCXX_FLOAT_IS_IEEE_BINARY32 && _GLIBCXX_DOUBLE_IS_IEEE_BINARY64 && __SIZE_WIDTH__ >= 32)
│ │ │ +
280# define __glibcxx_to_chars 202306L
│ │ │ +
281# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_chars)
│ │ │ +
282# define __cpp_lib_to_chars 202306L
│ │ │ +
283# endif
│ │ │ +
284# elif (__cplusplus >= 201402L) && (_GLIBCXX_FLOAT_IS_IEEE_BINARY32 && _GLIBCXX_DOUBLE_IS_IEEE_BINARY64 && __SIZE_WIDTH__ >= 32)
│ │ │ +
285# define __glibcxx_to_chars 201611L
│ │ │ +
286# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_chars)
│ │ │ +
287# define __cpp_lib_to_chars 201611L
│ │ │ +
288# endif
│ │ │ +
289# endif
│ │ │ +
290#endif /* !defined(__cpp_lib_to_chars) && defined(__glibcxx_want_to_chars) */
│ │ │ +
291#undef __glibcxx_want_to_chars
│ │ │ +
292
│ │ │ +
293#if !defined(__cpp_lib_chrono_udls)
│ │ │ +
294# if (__cplusplus >= 201402L)
│ │ │ +
295# define __glibcxx_chrono_udls 201304L
│ │ │ +
296# if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono_udls)
│ │ │ +
297# define __cpp_lib_chrono_udls 201304L
│ │ │ +
298# endif
│ │ │ +
299# endif
│ │ │ +
300#endif /* !defined(__cpp_lib_chrono_udls) && defined(__glibcxx_want_chrono_udls) */
│ │ │ +
301#undef __glibcxx_want_chrono_udls
│ │ │ +
302
│ │ │ +
303#if !defined(__cpp_lib_complex_udls)
│ │ │ +
304# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED
│ │ │ +
305# define __glibcxx_complex_udls 201309L
│ │ │ +
306# if defined(__glibcxx_want_all) || defined(__glibcxx_want_complex_udls)
│ │ │ +
307# define __cpp_lib_complex_udls 201309L
│ │ │ +
308# endif
│ │ │ +
309# endif
│ │ │ +
310#endif /* !defined(__cpp_lib_complex_udls) && defined(__glibcxx_want_complex_udls) */
│ │ │ +
311#undef __glibcxx_want_complex_udls
│ │ │ +
312
│ │ │ +
313#if !defined(__cpp_lib_generic_associative_lookup)
│ │ │ +
314# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED
│ │ │ +
315# define __glibcxx_generic_associative_lookup 201304L
│ │ │ +
316# if defined(__glibcxx_want_all) || defined(__glibcxx_want_generic_associative_lookup)
│ │ │ +
317# define __cpp_lib_generic_associative_lookup 201304L
│ │ │ +
318# endif
│ │ │ +
319# endif
│ │ │ +
320#endif /* !defined(__cpp_lib_generic_associative_lookup) && defined(__glibcxx_want_generic_associative_lookup) */
│ │ │ +
321#undef __glibcxx_want_generic_associative_lookup
│ │ │ +
322
│ │ │ +
323#if !defined(__cpp_lib_make_unique)
│ │ │ +
324# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED
│ │ │ +
325# define __glibcxx_make_unique 201304L
│ │ │ +
326# if defined(__glibcxx_want_all) || defined(__glibcxx_want_make_unique)
│ │ │ +
327# define __cpp_lib_make_unique 201304L
│ │ │ +
328# endif
│ │ │ +
329# endif
│ │ │ +
330#endif /* !defined(__cpp_lib_make_unique) && defined(__glibcxx_want_make_unique) */
│ │ │ +
331#undef __glibcxx_want_make_unique
│ │ │ +
332
│ │ │ +
333#if !defined(__cpp_lib_quoted_string_io)
│ │ │ +
334# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED
│ │ │ +
335# define __glibcxx_quoted_string_io 201304L
│ │ │ +
336# if defined(__glibcxx_want_all) || defined(__glibcxx_want_quoted_string_io)
│ │ │ +
337# define __cpp_lib_quoted_string_io 201304L
│ │ │ +
338# endif
│ │ │ +
339# endif
│ │ │ +
340#endif /* !defined(__cpp_lib_quoted_string_io) && defined(__glibcxx_want_quoted_string_io) */
│ │ │ +
341#undef __glibcxx_want_quoted_string_io
│ │ │ +
342
│ │ │ +
343#if !defined(__cpp_lib_shared_timed_mutex)
│ │ │ +
344# if (__cplusplus >= 201402L) && defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED
│ │ │ +
345# define __glibcxx_shared_timed_mutex 201402L
│ │ │ +
346# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_timed_mutex)
│ │ │ +
347# define __cpp_lib_shared_timed_mutex 201402L
│ │ │ +
348# endif
│ │ │ +
349# endif
│ │ │ +
350#endif /* !defined(__cpp_lib_shared_timed_mutex) && defined(__glibcxx_want_shared_timed_mutex) */
│ │ │ +
351#undef __glibcxx_want_shared_timed_mutex
│ │ │ +
352
│ │ │ +
353#if !defined(__cpp_lib_string_udls)
│ │ │ +
354# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED
│ │ │ +
355# define __glibcxx_string_udls 201304L
│ │ │ +
356# if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_udls)
│ │ │ +
357# define __cpp_lib_string_udls 201304L
│ │ │ +
358# endif
│ │ │ +
359# endif
│ │ │ +
360#endif /* !defined(__cpp_lib_string_udls) && defined(__glibcxx_want_string_udls) */
│ │ │ +
361#undef __glibcxx_want_string_udls
│ │ │ +
362
│ │ │ +
363#if !defined(__cpp_lib_addressof_constexpr)
│ │ │ +
364# if (__cplusplus >= 201703L)
│ │ │ +
365# define __glibcxx_addressof_constexpr 201603L
│ │ │ +
366# if defined(__glibcxx_want_all) || defined(__glibcxx_want_addressof_constexpr)
│ │ │ +
367# define __cpp_lib_addressof_constexpr 201603L
│ │ │ +
368# endif
│ │ │ +
369# endif
│ │ │ +
370#endif /* !defined(__cpp_lib_addressof_constexpr) && defined(__glibcxx_want_addressof_constexpr) */
│ │ │ +
371#undef __glibcxx_want_addressof_constexpr
│ │ │ +
372
│ │ │ +
373#if !defined(__cpp_lib_any)
│ │ │ +
374# if (__cplusplus >= 201703L)
│ │ │ +
375# define __glibcxx_any 201606L
│ │ │ +
376# if defined(__glibcxx_want_all) || defined(__glibcxx_want_any)
│ │ │ +
377# define __cpp_lib_any 201606L
│ │ │ +
378# endif
│ │ │ +
379# endif
│ │ │ +
380#endif /* !defined(__cpp_lib_any) && defined(__glibcxx_want_any) */
│ │ │ +
381#undef __glibcxx_want_any
│ │ │ +
382
│ │ │ +
383#if !defined(__cpp_lib_apply)
│ │ │ +
384# if (__cplusplus >= 201703L)
│ │ │ +
385# define __glibcxx_apply 201603L
│ │ │ +
386# if defined(__glibcxx_want_all) || defined(__glibcxx_want_apply)
│ │ │ +
387# define __cpp_lib_apply 201603L
│ │ │ +
388# endif
│ │ │ +
389# endif
│ │ │ +
390#endif /* !defined(__cpp_lib_apply) && defined(__glibcxx_want_apply) */
│ │ │ +
391#undef __glibcxx_want_apply
│ │ │ +
392
│ │ │ +
393#if !defined(__cpp_lib_as_const)
│ │ │ +
394# if (__cplusplus >= 201703L)
│ │ │ +
395# define __glibcxx_as_const 201510L
│ │ │ +
396# if defined(__glibcxx_want_all) || defined(__glibcxx_want_as_const)
│ │ │ +
397# define __cpp_lib_as_const 201510L
│ │ │ +
398# endif
│ │ │ +
399# endif
│ │ │ +
400#endif /* !defined(__cpp_lib_as_const) && defined(__glibcxx_want_as_const) */
│ │ │ +
401#undef __glibcxx_want_as_const
│ │ │ +
402
│ │ │ +
403#if !defined(__cpp_lib_atomic_is_always_lock_free)
│ │ │ +
404# if (__cplusplus >= 201703L)
│ │ │ +
405# define __glibcxx_atomic_is_always_lock_free 201603L
│ │ │ +
406# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_is_always_lock_free)
│ │ │ +
407# define __cpp_lib_atomic_is_always_lock_free 201603L
│ │ │ +
408# endif
│ │ │ +
409# endif
│ │ │ +
410#endif /* !defined(__cpp_lib_atomic_is_always_lock_free) && defined(__glibcxx_want_atomic_is_always_lock_free) */
│ │ │ +
411#undef __glibcxx_want_atomic_is_always_lock_free
│ │ │ +
412
│ │ │ +
413#if !defined(__cpp_lib_bool_constant)
│ │ │ +
414# if (__cplusplus >= 201703L)
│ │ │ +
415# define __glibcxx_bool_constant 201505L
│ │ │ +
416# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bool_constant)
│ │ │ +
417# define __cpp_lib_bool_constant 201505L
│ │ │ +
418# endif
│ │ │ +
419# endif
│ │ │ +
420#endif /* !defined(__cpp_lib_bool_constant) && defined(__glibcxx_want_bool_constant) */
│ │ │ +
421#undef __glibcxx_want_bool_constant
│ │ │ +
422
│ │ │ +
423#if !defined(__cpp_lib_byte)
│ │ │ +
424# if (__cplusplus >= 201703L)
│ │ │ +
425# define __glibcxx_byte 201603L
│ │ │ +
426# if defined(__glibcxx_want_all) || defined(__glibcxx_want_byte)
│ │ │ +
427# define __cpp_lib_byte 201603L
│ │ │ +
428# endif
│ │ │ +
429# endif
│ │ │ +
430#endif /* !defined(__cpp_lib_byte) && defined(__glibcxx_want_byte) */
│ │ │ +
431#undef __glibcxx_want_byte
│ │ │ +
432
│ │ │ +
433#if !defined(__cpp_lib_has_unique_object_representations)
│ │ │ +
434# if (__cplusplus >= 201703L) && (defined(_GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP))
│ │ │ +
435# define __glibcxx_has_unique_object_representations 201606L
│ │ │ +
436# if defined(__glibcxx_want_all) || defined(__glibcxx_want_has_unique_object_representations)
│ │ │ +
437# define __cpp_lib_has_unique_object_representations 201606L
│ │ │ +
438# endif
│ │ │ +
439# endif
│ │ │ +
440#endif /* !defined(__cpp_lib_has_unique_object_representations) && defined(__glibcxx_want_has_unique_object_representations) */
│ │ │ +
441#undef __glibcxx_want_has_unique_object_representations
│ │ │ +
442
│ │ │ +
443#if !defined(__cpp_lib_hardware_interference_size)
│ │ │ +
444# if (__cplusplus >= 201703L) && (defined(__GCC_DESTRUCTIVE_SIZE))
│ │ │ +
445# define __glibcxx_hardware_interference_size 201703L
│ │ │ +
446# if defined(__glibcxx_want_all) || defined(__glibcxx_want_hardware_interference_size)
│ │ │ +
447# define __cpp_lib_hardware_interference_size 201703L
│ │ │ +
448# endif
│ │ │ +
449# endif
│ │ │ +
450#endif /* !defined(__cpp_lib_hardware_interference_size) && defined(__glibcxx_want_hardware_interference_size) */
│ │ │ +
451#undef __glibcxx_want_hardware_interference_size
│ │ │
452
│ │ │ -
453 typedef bidirectional_iterator_tag iterator_category;
│ │ │ -
454 typedef ptrdiff_t difference_type;
│ │ │ -
455
│ │ │ -
456 typedef _Rb_tree_node_base::_Base_ptr _Base_ptr;
│ │ │ -
457 typedef const _Rb_tree_node<_Tp>* _Node_ptr;
│ │ │ -
458
│ │ │ -
459 _Rb_tree_const_iterator() _GLIBCXX_NOEXCEPT
│ │ │ -
460 : _M_node() { }
│ │ │ -
461
│ │ │ -
462 explicit
│ │ │ -
463 _Rb_tree_const_iterator(_Base_ptr __x) _GLIBCXX_NOEXCEPT
│ │ │ -
464 : _M_node(__x) { }
│ │ │ -
465
│ │ │ -
466 _Rb_tree_const_iterator(const iterator& __it) _GLIBCXX_NOEXCEPT
│ │ │ -
467 : _M_node(__it._M_node) { }
│ │ │ -
468
│ │ │ -
469 reference
│ │ │ -
470 operator*() const _GLIBCXX_NOEXCEPT
│ │ │ -
471 { return *static_cast<_Node_ptr>(_M_node)->_M_valptr(); }
│ │ │ +
453#if !defined(__cpp_lib_invoke)
│ │ │ +
454# if (__cplusplus >= 201703L)
│ │ │ +
455# define __glibcxx_invoke 201411L
│ │ │ +
456# if defined(__glibcxx_want_all) || defined(__glibcxx_want_invoke)
│ │ │ +
457# define __cpp_lib_invoke 201411L
│ │ │ +
458# endif
│ │ │ +
459# endif
│ │ │ +
460#endif /* !defined(__cpp_lib_invoke) && defined(__glibcxx_want_invoke) */
│ │ │ +
461#undef __glibcxx_want_invoke
│ │ │ +
462
│ │ │ +
463#if !defined(__cpp_lib_is_aggregate)
│ │ │ +
464# if (__cplusplus >= 201703L) && (defined(_GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE))
│ │ │ +
465# define __glibcxx_is_aggregate 201703L
│ │ │ +
466# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_aggregate)
│ │ │ +
467# define __cpp_lib_is_aggregate 201703L
│ │ │ +
468# endif
│ │ │ +
469# endif
│ │ │ +
470#endif /* !defined(__cpp_lib_is_aggregate) && defined(__glibcxx_want_is_aggregate) */
│ │ │ +
471#undef __glibcxx_want_is_aggregate
│ │ │
472
│ │ │ -
473 pointer
│ │ │ -
474 operator->() const _GLIBCXX_NOEXCEPT
│ │ │ -
475 { return static_cast<_Node_ptr>(_M_node)->_M_valptr(); }
│ │ │ -
476
│ │ │ -
477 _Rb_tree_const_iterator&
│ │ │ -
478 operator++() _GLIBCXX_NOEXCEPT
│ │ │ -
479 {
│ │ │ -
480 _M_node = _Rb_tree_increment(_M_node);
│ │ │ -
481 return *this;
│ │ │ -
482 }
│ │ │ -
483
│ │ │ -
484 _Rb_tree_const_iterator
│ │ │ -
485 operator++(int) _GLIBCXX_NOEXCEPT
│ │ │ -
486 {
│ │ │ -
487 _Rb_tree_const_iterator __tmp = *this;
│ │ │ -
488 _M_node = _Rb_tree_increment(_M_node);
│ │ │ -
489 return __tmp;
│ │ │ -
490 }
│ │ │ -
491
│ │ │ -
492 _Rb_tree_const_iterator&
│ │ │ -
493 operator--() _GLIBCXX_NOEXCEPT
│ │ │ -
494 {
│ │ │ -
495 _M_node = _Rb_tree_decrement(_M_node);
│ │ │ -
496 return *this;
│ │ │ -
497 }
│ │ │ -
498
│ │ │ -
499 _Rb_tree_const_iterator
│ │ │ -
500 operator--(int) _GLIBCXX_NOEXCEPT
│ │ │ -
501 {
│ │ │ -
502 _Rb_tree_const_iterator __tmp = *this;
│ │ │ -
503 _M_node = _Rb_tree_decrement(_M_node);
│ │ │ -
504 return __tmp;
│ │ │ -
505 }
│ │ │ -
506
│ │ │ -
507 friend bool
│ │ │ -
508 operator==(const _Rb_tree_const_iterator& __x,
│ │ │ -
509 const _Rb_tree_const_iterator& __y) _GLIBCXX_NOEXCEPT
│ │ │ -
510 { return __x._M_node == __y._M_node; }
│ │ │ -
511
│ │ │ -
512#if ! __cpp_lib_three_way_comparison
│ │ │ -
513 friend bool
│ │ │ -
514 operator!=(const _Rb_tree_const_iterator& __x,
│ │ │ -
515 const _Rb_tree_const_iterator& __y) _GLIBCXX_NOEXCEPT
│ │ │ -
516 { return __x._M_node != __y._M_node; }
│ │ │ -
517#endif
│ │ │ -
518
│ │ │ -
519 _Base_ptr _M_node;
│ │ │ -
520 };
│ │ │ -
521
│ │ │ -
522 __attribute__((__nonnull__))
│ │ │ -
523 void
│ │ │ -
524 _Rb_tree_insert_and_rebalance(const bool __insert_left,
│ │ │ -
525 _Rb_tree_node_base* __x,
│ │ │ -
526 _Rb_tree_node_base* __p,
│ │ │ -
527 _Rb_tree_node_base& __header) throw ();
│ │ │ -
528
│ │ │ -
529 __attribute__((__nonnull__,__returns_nonnull__))
│ │ │ -
530 _Rb_tree_node_base*
│ │ │ -
531 _Rb_tree_rebalance_for_erase(_Rb_tree_node_base* const __z,
│ │ │ -
532 _Rb_tree_node_base& __header) throw ();
│ │ │ -
533
│ │ │ -
534namespace __rb_tree
│ │ │ -
535{
│ │ │ -
536#if _GLIBCXX_USE_ALLOC_PTR_FOR_RB_TREE
│ │ │ -
537 template<bool _Const, typename _ValPtr>
│ │ │ -
538 struct _Iterator
│ │ │ -
539 {
│ │ │ -
540 template<typename _Tp>
│ │ │ -
541 using __maybe_const = __conditional_t<_Const, const _Tp, _Tp>;
│ │ │ -
542
│ │ │ -
543 using __ptr_traits = pointer_traits<_ValPtr>;
│ │ │ -
544 using value_type = typename __ptr_traits::element_type;
│ │ │ -
545 using reference = __maybe_const<value_type>&;
│ │ │ -
546 using pointer = __maybe_const<value_type>*;
│ │ │ -
547
│ │ │ -
548 using iterator_category = bidirectional_iterator_tag;
│ │ │ -
549 using difference_type = ptrdiff_t;
│ │ │ -
550
│ │ │ -
551 using _Node = __rb_tree::_Node<_ValPtr>;
│ │ │ -
552 using _Node_base = __rb_tree::_Node_base<__ptr_rebind<_ValPtr, void>>;
│ │ │ -
553 using _Base_ptr = typename _Node_base::_Base_ptr;
│ │ │ -
554
│ │ │ -
555 _Iterator() noexcept
│ │ │ -
556 : _M_node() { }
│ │ │ -
557
│ │ │ -
558 constexpr explicit
│ │ │ -
559 _Iterator(_Base_ptr __x) noexcept
│ │ │ -
560 : _M_node(__x) { }
│ │ │ -
561
│ │ │ -
562 _Iterator(const _Iterator&) = default;
│ │ │ -
563 _Iterator& operator=(const _Iterator&) = default;
│ │ │ -
564
│ │ │ -
565#ifdef __glibcxx_concepts
│ │ │ -
566 constexpr
│ │ │ -
567 _Iterator(const _Iterator<false, _ValPtr>& __it) requires _Const
│ │ │ -
568#else
│ │ │ -
569 template<bool _OtherConst,
│ │ │ -
570 typename = __enable_if_t<_Const && !_OtherConst>>
│ │ │ -
571 constexpr
│ │ │ -
572 _Iterator(const _Iterator<_OtherConst, _ValPtr>& __it)
│ │ │ -
573#endif
│ │ │ -
574 : _M_node(__it._M_node) { }
│ │ │ -
575
│ │ │ -
576 [[__nodiscard__]]
│ │ │ -
577 reference
│ │ │ -
578 operator*() const noexcept
│ │ │ -
579 { return *static_cast<_Node&>(*_M_node)._M_valptr(); }
│ │ │ -
580
│ │ │ -
581 [[__nodiscard__]]
│ │ │ -
582 pointer
│ │ │ -
583 operator->() const noexcept
│ │ │ -
584 { return static_cast<_Node&>(*_M_node)._M_valptr(); }
│ │ │ -
585
│ │ │ -
586 _GLIBCXX14_CONSTEXPR _Iterator&
│ │ │ -
587 operator++() noexcept
│ │ │ -
588 {
│ │ │ -
589 if (_M_node->_M_right)
│ │ │ -
590 {
│ │ │ -
591 _M_node = _M_node->_M_right;
│ │ │ -
592 while (_M_node->_M_left)
│ │ │ -
593 _M_node = _M_node->_M_left;
│ │ │ -
594 }
│ │ │ -
595 else
│ │ │ -
596 {
│ │ │ -
597 _Base_ptr __y = _M_node->_M_parent;
│ │ │ -
598 while (_M_node == __y->_M_right)
│ │ │ -
599 {
│ │ │ -
600 _M_node = __y;
│ │ │ -
601 __y = __y->_M_parent;
│ │ │ -
602 }
│ │ │ -
603 if (_M_node->_M_right != __y)
│ │ │ -
604 _M_node = __y;
│ │ │ -
605 }
│ │ │ -
606
│ │ │ -
607 return *this;
│ │ │ -
608 }
│ │ │ -
609
│ │ │ -
610 _GLIBCXX14_CONSTEXPR _Iterator
│ │ │ -
611 operator++(int) noexcept
│ │ │ -
612 {
│ │ │ -
613 _Iterator __tmp(this->_M_node);
│ │ │ -
614 ++*this;
│ │ │ -
615 return __tmp;
│ │ │ -
616 }
│ │ │ -
617
│ │ │ -
618 _GLIBCXX14_CONSTEXPR _Iterator&
│ │ │ -
619 operator--() noexcept
│ │ │ -
620 {
│ │ │ -
621 if (_M_node->_M_color == _S_red
│ │ │ -
622 && _M_node->_M_parent->_M_parent == _M_node)
│ │ │ -
623 _M_node = _M_node->_M_right;
│ │ │ -
624 else if (_M_node->_M_left)
│ │ │ -
625 {
│ │ │ -
626 _Base_ptr __y = _M_node->_M_left;
│ │ │ -
627 while (__y->_M_right)
│ │ │ -
628 __y = __y->_M_right;
│ │ │ -
629 _M_node = __y;
│ │ │ -
630 }
│ │ │ -
631 else
│ │ │ -
632 {
│ │ │ -
633 _Base_ptr __y = _M_node->_M_parent;
│ │ │ -
634 while (_M_node == __y->_M_left)
│ │ │ -
635 {
│ │ │ -
636 _M_node = __y;
│ │ │ -
637 __y = __y->_M_parent;
│ │ │ -
638 }
│ │ │ -
639 _M_node = __y;
│ │ │ -
640 }
│ │ │ -
641 return *this;
│ │ │ -
642 }
│ │ │ -
643
│ │ │ -
644 _GLIBCXX14_CONSTEXPR _Iterator
│ │ │ -
645 operator--(int) noexcept
│ │ │ -
646 {
│ │ │ -
647 _Iterator __tmp(this->_M_node);
│ │ │ -
648 --*this;
│ │ │ -
649 return __tmp;
│ │ │ -
650 }
│ │ │ -
651
│ │ │ -
652 [[__nodiscard__]]
│ │ │ -
653 friend bool
│ │ │ -
654 operator==(const _Iterator& __x, const _Iterator& __y) _GLIBCXX_NOEXCEPT
│ │ │ -
655 { return __x._M_node == __y._M_node; }
│ │ │ -
656
│ │ │ -
657#if ! __cpp_lib_three_way_comparison
│ │ │ -
658 [[__nodiscard__]]
│ │ │ -
659 friend bool
│ │ │ -
660 operator!=(const _Iterator& __x, const _Iterator& __y) _GLIBCXX_NOEXCEPT
│ │ │ -
661 { return __x._M_node != __y._M_node; }
│ │ │ -
662#endif
│ │ │ -
663
│ │ │ -
664 _Base_ptr _M_node;
│ │ │ -
665 };
│ │ │ -
666#endif // USE_ALLOC_PTR_FOR_RB_TREE
│ │ │ +
473#if !defined(__cpp_lib_is_invocable)
│ │ │ +
474# if (__cplusplus >= 201703L)
│ │ │ +
475# define __glibcxx_is_invocable 201703L
│ │ │ +
476# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_invocable)
│ │ │ +
477# define __cpp_lib_is_invocable 201703L
│ │ │ +
478# endif
│ │ │ +
479# endif
│ │ │ +
480#endif /* !defined(__cpp_lib_is_invocable) && defined(__glibcxx_want_is_invocable) */
│ │ │ +
481#undef __glibcxx_want_is_invocable
│ │ │ +
482
│ │ │ +
483#if !defined(__cpp_lib_launder)
│ │ │ +
484# if (__cplusplus >= 201703L) && (defined(_GLIBCXX_HAVE_BUILTIN_LAUNDER))
│ │ │ +
485# define __glibcxx_launder 201606L
│ │ │ +
486# if defined(__glibcxx_want_all) || defined(__glibcxx_want_launder)
│ │ │ +
487# define __cpp_lib_launder 201606L
│ │ │ +
488# endif
│ │ │ +
489# endif
│ │ │ +
490#endif /* !defined(__cpp_lib_launder) && defined(__glibcxx_want_launder) */
│ │ │ +
491#undef __glibcxx_want_launder
│ │ │ +
492
│ │ │ +
493#if !defined(__cpp_lib_logical_traits)
│ │ │ +
494# if (__cplusplus >= 201703L)
│ │ │ +
495# define __glibcxx_logical_traits 201510L
│ │ │ +
496# if defined(__glibcxx_want_all) || defined(__glibcxx_want_logical_traits)
│ │ │ +
497# define __cpp_lib_logical_traits 201510L
│ │ │ +
498# endif
│ │ │ +
499# endif
│ │ │ +
500#endif /* !defined(__cpp_lib_logical_traits) && defined(__glibcxx_want_logical_traits) */
│ │ │ +
501#undef __glibcxx_want_logical_traits
│ │ │ +
502
│ │ │ +
503#if !defined(__cpp_lib_make_from_tuple)
│ │ │ +
504# if (__cplusplus >= 201703L)
│ │ │ +
505# define __glibcxx_make_from_tuple 201606L
│ │ │ +
506# if defined(__glibcxx_want_all) || defined(__glibcxx_want_make_from_tuple)
│ │ │ +
507# define __cpp_lib_make_from_tuple 201606L
│ │ │ +
508# endif
│ │ │ +
509# endif
│ │ │ +
510#endif /* !defined(__cpp_lib_make_from_tuple) && defined(__glibcxx_want_make_from_tuple) */
│ │ │ +
511#undef __glibcxx_want_make_from_tuple
│ │ │ +
512
│ │ │ +
513#if !defined(__cpp_lib_not_fn)
│ │ │ +
514# if (__cplusplus >= 201703L)
│ │ │ +
515# define __glibcxx_not_fn 201603L
│ │ │ +
516# if defined(__glibcxx_want_all) || defined(__glibcxx_want_not_fn)
│ │ │ +
517# define __cpp_lib_not_fn 201603L
│ │ │ +
518# endif
│ │ │ +
519# endif
│ │ │ +
520#endif /* !defined(__cpp_lib_not_fn) && defined(__glibcxx_want_not_fn) */
│ │ │ +
521#undef __glibcxx_want_not_fn
│ │ │ +
522
│ │ │ +
523#if !defined(__cpp_lib_type_trait_variable_templates)
│ │ │ +
524# if (__cplusplus >= 201703L)
│ │ │ +
525# define __glibcxx_type_trait_variable_templates 201510L
│ │ │ +
526# if defined(__glibcxx_want_all) || defined(__glibcxx_want_type_trait_variable_templates)
│ │ │ +
527# define __cpp_lib_type_trait_variable_templates 201510L
│ │ │ +
528# endif
│ │ │ +
529# endif
│ │ │ +
530#endif /* !defined(__cpp_lib_type_trait_variable_templates) && defined(__glibcxx_want_type_trait_variable_templates) */
│ │ │ +
531#undef __glibcxx_want_type_trait_variable_templates
│ │ │ +
532
│ │ │ +
533#if !defined(__cpp_lib_variant)
│ │ │ +
534# if (__cplusplus > 202302L) && (__cpp_concepts >= 202002L && __cpp_constexpr >= 201811L && __cpp_explicit_this_parameter)
│ │ │ +
535# define __glibcxx_variant 202306L
│ │ │ +
536# if defined(__glibcxx_want_all) || defined(__glibcxx_want_variant)
│ │ │ +
537# define __cpp_lib_variant 202306L
│ │ │ +
538# endif
│ │ │ +
539# elif (__cplusplus >= 202002L) && (__cpp_concepts >= 202002L && __cpp_constexpr >= 201811L)
│ │ │ +
540# define __glibcxx_variant 202106L
│ │ │ +
541# if defined(__glibcxx_want_all) || defined(__glibcxx_want_variant)
│ │ │ +
542# define __cpp_lib_variant 202106L
│ │ │ +
543# endif
│ │ │ +
544# elif (__cplusplus >= 201703L)
│ │ │ +
545# define __glibcxx_variant 202102L
│ │ │ +
546# if defined(__glibcxx_want_all) || defined(__glibcxx_want_variant)
│ │ │ +
547# define __cpp_lib_variant 202102L
│ │ │ +
548# endif
│ │ │ +
549# endif
│ │ │ +
550#endif /* !defined(__cpp_lib_variant) && defined(__glibcxx_want_variant) */
│ │ │ +
551#undef __glibcxx_want_variant
│ │ │ +
552
│ │ │ +
553#if !defined(__cpp_lib_lcm)
│ │ │ +
554# if (__cplusplus >= 201703L)
│ │ │ +
555# define __glibcxx_lcm 201606L
│ │ │ +
556# if defined(__glibcxx_want_all) || defined(__glibcxx_want_lcm)
│ │ │ +
557# define __cpp_lib_lcm 201606L
│ │ │ +
558# endif
│ │ │ +
559# endif
│ │ │ +
560#endif /* !defined(__cpp_lib_lcm) && defined(__glibcxx_want_lcm) */
│ │ │ +
561#undef __glibcxx_want_lcm
│ │ │ +
562
│ │ │ +
563#if !defined(__cpp_lib_gcd)
│ │ │ +
564# if (__cplusplus >= 201703L)
│ │ │ +
565# define __glibcxx_gcd 201606L
│ │ │ +
566# if defined(__glibcxx_want_all) || defined(__glibcxx_want_gcd)
│ │ │ +
567# define __cpp_lib_gcd 201606L
│ │ │ +
568# endif
│ │ │ +
569# endif
│ │ │ +
570#endif /* !defined(__cpp_lib_gcd) && defined(__glibcxx_want_gcd) */
│ │ │ +
571#undef __glibcxx_want_gcd
│ │ │ +
572
│ │ │ +
573#if !defined(__cpp_lib_gcd_lcm)
│ │ │ +
574# if (__cplusplus >= 201703L)
│ │ │ +
575# define __glibcxx_gcd_lcm 201606L
│ │ │ +
576# if defined(__glibcxx_want_all) || defined(__glibcxx_want_gcd_lcm)
│ │ │ +
577# define __cpp_lib_gcd_lcm 201606L
│ │ │ +
578# endif
│ │ │ +
579# endif
│ │ │ +
580#endif /* !defined(__cpp_lib_gcd_lcm) && defined(__glibcxx_want_gcd_lcm) */
│ │ │ +
581#undef __glibcxx_want_gcd_lcm
│ │ │ +
582
│ │ │ +
583#if !defined(__cpp_lib_raw_memory_algorithms)
│ │ │ +
584# if (__cplusplus > 202302L) && (__cpp_constexpr >= 202406L)
│ │ │ +
585# define __glibcxx_raw_memory_algorithms 202411L
│ │ │ +
586# if defined(__glibcxx_want_all) || defined(__glibcxx_want_raw_memory_algorithms)
│ │ │ +
587# define __cpp_lib_raw_memory_algorithms 202411L
│ │ │ +
588# endif
│ │ │ +
589# elif (__cplusplus >= 201703L)
│ │ │ +
590# define __glibcxx_raw_memory_algorithms 201606L
│ │ │ +
591# if defined(__glibcxx_want_all) || defined(__glibcxx_want_raw_memory_algorithms)
│ │ │ +
592# define __cpp_lib_raw_memory_algorithms 201606L
│ │ │ +
593# endif
│ │ │ +
594# endif
│ │ │ +
595#endif /* !defined(__cpp_lib_raw_memory_algorithms) && defined(__glibcxx_want_raw_memory_algorithms) */
│ │ │ +
596#undef __glibcxx_want_raw_memory_algorithms
│ │ │ +
597
│ │ │ +
598#if !defined(__cpp_lib_array_constexpr)
│ │ │ +
599# if (__cplusplus >= 202002L)
│ │ │ +
600# define __glibcxx_array_constexpr 201811L
│ │ │ +
601# if defined(__glibcxx_want_all) || defined(__glibcxx_want_array_constexpr)
│ │ │ +
602# define __cpp_lib_array_constexpr 201811L
│ │ │ +
603# endif
│ │ │ +
604# elif (__cplusplus >= 201703L)
│ │ │ +
605# define __glibcxx_array_constexpr 201803L
│ │ │ +
606# if defined(__glibcxx_want_all) || defined(__glibcxx_want_array_constexpr)
│ │ │ +
607# define __cpp_lib_array_constexpr 201803L
│ │ │ +
608# endif
│ │ │ +
609# endif
│ │ │ +
610#endif /* !defined(__cpp_lib_array_constexpr) && defined(__glibcxx_want_array_constexpr) */
│ │ │ +
611#undef __glibcxx_want_array_constexpr
│ │ │ +
612
│ │ │ +
613#if !defined(__cpp_lib_nonmember_container_access)
│ │ │ +
614# if (__cplusplus >= 201703L)
│ │ │ +
615# define __glibcxx_nonmember_container_access 201411L
│ │ │ +
616# if defined(__glibcxx_want_all) || defined(__glibcxx_want_nonmember_container_access)
│ │ │ +
617# define __cpp_lib_nonmember_container_access 201411L
│ │ │ +
618# endif
│ │ │ +
619# endif
│ │ │ +
620#endif /* !defined(__cpp_lib_nonmember_container_access) && defined(__glibcxx_want_nonmember_container_access) */
│ │ │ +
621#undef __glibcxx_want_nonmember_container_access
│ │ │ +
622
│ │ │ +
623#if !defined(__cpp_lib_clamp)
│ │ │ +
624# if (__cplusplus >= 201703L)
│ │ │ +
625# define __glibcxx_clamp 201603L
│ │ │ +
626# if defined(__glibcxx_want_all) || defined(__glibcxx_want_clamp)
│ │ │ +
627# define __cpp_lib_clamp 201603L
│ │ │ +
628# endif
│ │ │ +
629# endif
│ │ │ +
630#endif /* !defined(__cpp_lib_clamp) && defined(__glibcxx_want_clamp) */
│ │ │ +
631#undef __glibcxx_want_clamp
│ │ │ +
632
│ │ │ +
633#if !defined(__cpp_lib_sample)
│ │ │ +
634# if (__cplusplus >= 201703L)
│ │ │ +
635# define __glibcxx_sample 201603L
│ │ │ +
636# if defined(__glibcxx_want_all) || defined(__glibcxx_want_sample)
│ │ │ +
637# define __cpp_lib_sample 201603L
│ │ │ +
638# endif
│ │ │ +
639# endif
│ │ │ +
640#endif /* !defined(__cpp_lib_sample) && defined(__glibcxx_want_sample) */
│ │ │ +
641#undef __glibcxx_want_sample
│ │ │ +
642
│ │ │ +
643#if !defined(__cpp_lib_boyer_moore_searcher)
│ │ │ +
644# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
645# define __glibcxx_boyer_moore_searcher 201603L
│ │ │ +
646# if defined(__glibcxx_want_all) || defined(__glibcxx_want_boyer_moore_searcher)
│ │ │ +
647# define __cpp_lib_boyer_moore_searcher 201603L
│ │ │ +
648# endif
│ │ │ +
649# endif
│ │ │ +
650#endif /* !defined(__cpp_lib_boyer_moore_searcher) && defined(__glibcxx_want_boyer_moore_searcher) */
│ │ │ +
651#undef __glibcxx_want_boyer_moore_searcher
│ │ │ +
652
│ │ │ +
653#if !defined(__cpp_lib_chrono)
│ │ │ +
654# if (__cplusplus >= 202002L) && _GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED
│ │ │ +
655# define __glibcxx_chrono 201907L
│ │ │ +
656# if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono)
│ │ │ +
657# define __cpp_lib_chrono 201907L
│ │ │ +
658# endif
│ │ │ +
659# elif (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
660# define __glibcxx_chrono 201611L
│ │ │ +
661# if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono)
│ │ │ +
662# define __cpp_lib_chrono 201611L
│ │ │ +
663# endif
│ │ │ +
664# endif
│ │ │ +
665#endif /* !defined(__cpp_lib_chrono) && defined(__glibcxx_want_chrono) */
│ │ │ +
666#undef __glibcxx_want_chrono
│ │ │
667
│ │ │ -
668 // Determine the node and iterator types used by std::_Rb_tree.
│ │ │ -
669 template<typename _Val, typename _Ptr>
│ │ │ -
670 struct _Node_traits;
│ │ │ -
671
│ │ │ -
672#if _GLIBCXX_USE_ALLOC_PTR_FOR_RB_TREE <= 9000
│ │ │ -
673 // Specialization for the simple case where the allocator's pointer type
│ │ │ -
674 // is the same type as value_type*.
│ │ │ -
675 // For ABI compatibility we can't change the types used for this case.
│ │ │ -
676 template<typename _Val>
│ │ │ -
677 struct _Node_traits<_Val, _Val*>
│ │ │ -
678 {
│ │ │ -
679 typedef _Rb_tree_node<_Val> _Node;
│ │ │ -
680 typedef _Node* _Node_ptr;
│ │ │ -
681 typedef _Rb_tree_node_base _Node_base;
│ │ │ -
682 typedef _Node_base* _Base_ptr;
│ │ │ -
683 typedef _Rb_tree_header _Header_t;
│ │ │ -
684 typedef _Rb_tree_iterator<_Val> _Iterator;
│ │ │ -
685 typedef _Rb_tree_const_iterator<_Val> _Const_iterator;
│ │ │ -
686
│ │ │ -
687 __attribute__((__nonnull__))
│ │ │ -
688 static void
│ │ │ -
689 _S_insert_and_rebalance(const bool __insert_left,
│ │ │ -
690 _Node_base* __x, _Node_base* __p,
│ │ │ -
691 _Node_base& __header) _GLIBCXX_USE_NOEXCEPT
│ │ │ -
692 {
│ │ │ -
693 return _Rb_tree_insert_and_rebalance(__insert_left, __x, __p, __header);
│ │ │ -
694 }
│ │ │ -
695
│ │ │ -
696 __attribute__((__nonnull__,__returns_nonnull__))
│ │ │ -
697 static _Node_base*
│ │ │ -
698 _S_rebalance_for_erase(_Node_base* const __z,
│ │ │ -
699 _Node_base& __header) _GLIBCXX_USE_NOEXCEPT
│ │ │ -
700 { return _Rb_tree_rebalance_for_erase(__z, __header); }
│ │ │ -
701 };
│ │ │ -
702#endif
│ │ │ -
703
│ │ │ -
704#if ! _GLIBCXX_USE_ALLOC_PTR_FOR_RB_TREE
│ │ │ -
705 // Always use the T* specialization.
│ │ │ -
706 template<typename _Val, typename _Ptr>
│ │ │ -
707 struct _Node_traits
│ │ │ -
708 : _Node_traits<_Val, _Val*>
│ │ │ -
709 { };
│ │ │ -
710#else
│ │ │ -
711 // Primary template used when the allocator uses fancy pointers.
│ │ │ -
712 template<typename _Val, typename _ValPtr>
│ │ │ -
713 struct _Node_traits
│ │ │ -
714 {
│ │ │ -
715 using _Node = __rb_tree::_Node<_ValPtr>;
│ │ │ -
716 using _Node_ptr = __ptr_rebind<_ValPtr, _Node>;
│ │ │ -
717 using _Node_base = __rb_tree::_Node_base<__ptr_rebind<_ValPtr, void>>;
│ │ │ -
718 using _Base_ptr = __ptr_rebind<_ValPtr, _Node_base>;
│ │ │ -
719 using _Header_t = __rb_tree::_Header<_Node_base>;
│ │ │ -
720 using _Iterator = __rb_tree::_Iterator<false, _ValPtr>;
│ │ │ -
721 using _Const_iterator = __rb_tree::_Iterator<true, _ValPtr>;
│ │ │ -
722
│ │ │ -
723 static void
│ │ │ -
724 _Rotate_left(_Base_ptr __x, _Base_ptr& __root)
│ │ │ -
725 {
│ │ │ -
726 const _Base_ptr __y = __x->_M_right;
│ │ │ -
727
│ │ │ -
728 __x->_M_right = __y->_M_left;
│ │ │ -
729 if (__y->_M_left)
│ │ │ -
730 __y->_M_left->_M_parent = __x;
│ │ │ -
731 __y->_M_parent = __x->_M_parent;
│ │ │ +
668#if !defined(__cpp_lib_execution)
│ │ │ +
669# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
670# define __glibcxx_execution 201902L
│ │ │ +
671# if defined(__glibcxx_want_all) || defined(__glibcxx_want_execution)
│ │ │ +
672# define __cpp_lib_execution 201902L
│ │ │ +
673# endif
│ │ │ +
674# endif
│ │ │ +
675#endif /* !defined(__cpp_lib_execution) && defined(__glibcxx_want_execution) */
│ │ │ +
676#undef __glibcxx_want_execution
│ │ │ +
677
│ │ │ +
678#if !defined(__cpp_lib_filesystem)
│ │ │ +
679# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
680# define __glibcxx_filesystem 201703L
│ │ │ +
681# if defined(__glibcxx_want_all) || defined(__glibcxx_want_filesystem)
│ │ │ +
682# define __cpp_lib_filesystem 201703L
│ │ │ +
683# endif
│ │ │ +
684# endif
│ │ │ +
685#endif /* !defined(__cpp_lib_filesystem) && defined(__glibcxx_want_filesystem) */
│ │ │ +
686#undef __glibcxx_want_filesystem
│ │ │ +
687
│ │ │ +
688#if !defined(__cpp_lib_hypot)
│ │ │ +
689# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
690# define __glibcxx_hypot 201603L
│ │ │ +
691# if defined(__glibcxx_want_all) || defined(__glibcxx_want_hypot)
│ │ │ +
692# define __cpp_lib_hypot 201603L
│ │ │ +
693# endif
│ │ │ +
694# endif
│ │ │ +
695#endif /* !defined(__cpp_lib_hypot) && defined(__glibcxx_want_hypot) */
│ │ │ +
696#undef __glibcxx_want_hypot
│ │ │ +
697
│ │ │ +
698#if !defined(__cpp_lib_map_try_emplace)
│ │ │ +
699# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
700# define __glibcxx_map_try_emplace 201411L
│ │ │ +
701# if defined(__glibcxx_want_all) || defined(__glibcxx_want_map_try_emplace)
│ │ │ +
702# define __cpp_lib_map_try_emplace 201411L
│ │ │ +
703# endif
│ │ │ +
704# endif
│ │ │ +
705#endif /* !defined(__cpp_lib_map_try_emplace) && defined(__glibcxx_want_map_try_emplace) */
│ │ │ +
706#undef __glibcxx_want_map_try_emplace
│ │ │ +
707
│ │ │ +
708#if !defined(__cpp_lib_math_special_functions)
│ │ │ +
709# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
710# define __glibcxx_math_special_functions 201603L
│ │ │ +
711# if defined(__glibcxx_want_all) || defined(__glibcxx_want_math_special_functions)
│ │ │ +
712# define __cpp_lib_math_special_functions 201603L
│ │ │ +
713# endif
│ │ │ +
714# endif
│ │ │ +
715#endif /* !defined(__cpp_lib_math_special_functions) && defined(__glibcxx_want_math_special_functions) */
│ │ │ +
716#undef __glibcxx_want_math_special_functions
│ │ │ +
717
│ │ │ +
718#if !defined(__cpp_lib_memory_resource)
│ │ │ +
719# if (__cplusplus >= 201703L) && defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED
│ │ │ +
720# define __glibcxx_memory_resource 201603L
│ │ │ +
721# if defined(__glibcxx_want_all) || defined(__glibcxx_want_memory_resource)
│ │ │ +
722# define __cpp_lib_memory_resource 201603L
│ │ │ +
723# endif
│ │ │ +
724# elif (__cplusplus >= 201703L) && !defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED
│ │ │ +
725# define __glibcxx_memory_resource 1L
│ │ │ +
726# if defined(__glibcxx_want_all) || defined(__glibcxx_want_memory_resource)
│ │ │ +
727# define __cpp_lib_memory_resource 1L
│ │ │ +
728# endif
│ │ │ +
729# endif
│ │ │ +
730#endif /* !defined(__cpp_lib_memory_resource) && defined(__glibcxx_want_memory_resource) */
│ │ │ +
731#undef __glibcxx_want_memory_resource
│ │ │
732
│ │ │ -
733 if (__x == __root)
│ │ │ -
734 __root = __y;
│ │ │ -
735 else if (__x == __x->_M_parent->_M_left)
│ │ │ -
736 __x->_M_parent->_M_left = __y;
│ │ │ -
737 else
│ │ │ -
738 __x->_M_parent->_M_right = __y;
│ │ │ -
739 __y->_M_left = __x;
│ │ │ -
740 __x->_M_parent = __y;
│ │ │ -
741 }
│ │ │ +
733#if !defined(__cpp_lib_node_extract)
│ │ │ +
734# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
735# define __glibcxx_node_extract 201606L
│ │ │ +
736# if defined(__glibcxx_want_all) || defined(__glibcxx_want_node_extract)
│ │ │ +
737# define __cpp_lib_node_extract 201606L
│ │ │ +
738# endif
│ │ │ +
739# endif
│ │ │ +
740#endif /* !defined(__cpp_lib_node_extract) && defined(__glibcxx_want_node_extract) */
│ │ │ +
741#undef __glibcxx_want_node_extract
│ │ │
742
│ │ │ -
743 static void
│ │ │ -
744 _Rotate_right(_Base_ptr __x, _Base_ptr& __root)
│ │ │ -
745 {
│ │ │ -
746 const _Base_ptr __y = __x->_M_left;
│ │ │ -
747
│ │ │ -
748 __x->_M_left = __y->_M_right;
│ │ │ -
749 if (__y->_M_right)
│ │ │ -
750 __y->_M_right->_M_parent = __x;
│ │ │ -
751 __y->_M_parent = __x->_M_parent;
│ │ │ +
743#if !defined(__cpp_lib_parallel_algorithm)
│ │ │ +
744# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
745# define __glibcxx_parallel_algorithm 201603L
│ │ │ +
746# if defined(__glibcxx_want_all) || defined(__glibcxx_want_parallel_algorithm)
│ │ │ +
747# define __cpp_lib_parallel_algorithm 201603L
│ │ │ +
748# endif
│ │ │ +
749# endif
│ │ │ +
750#endif /* !defined(__cpp_lib_parallel_algorithm) && defined(__glibcxx_want_parallel_algorithm) */
│ │ │ +
751#undef __glibcxx_want_parallel_algorithm
│ │ │
752
│ │ │ -
753 if (__x == __root)
│ │ │ -
754 __root = __y;
│ │ │ -
755 else if (__x == __x->_M_parent->_M_right)
│ │ │ -
756 __x->_M_parent->_M_right = __y;
│ │ │ -
757 else
│ │ │ -
758 __x->_M_parent->_M_left = __y;
│ │ │ -
759 __y->_M_right = __x;
│ │ │ -
760 __x->_M_parent = __y;
│ │ │ -
761 }
│ │ │ +
753#if !defined(__cpp_lib_scoped_lock)
│ │ │ +
754# if (__cplusplus >= 201703L)
│ │ │ +
755# define __glibcxx_scoped_lock 201703L
│ │ │ +
756# if defined(__glibcxx_want_all) || defined(__glibcxx_want_scoped_lock)
│ │ │ +
757# define __cpp_lib_scoped_lock 201703L
│ │ │ +
758# endif
│ │ │ +
759# endif
│ │ │ +
760#endif /* !defined(__cpp_lib_scoped_lock) && defined(__glibcxx_want_scoped_lock) */
│ │ │ +
761#undef __glibcxx_want_scoped_lock
│ │ │
762
│ │ │ -
763 static void
│ │ │ -
764 _S_insert_and_rebalance(const bool __insert_left,
│ │ │ -
765 _Base_ptr __x, _Base_ptr __p,
│ │ │ -
766 _Node_base& __header)
│ │ │ -
767 {
│ │ │ -
768 _Base_ptr& __root = __header._M_parent;
│ │ │ -
769
│ │ │ -
770 // Initialize fields in new node to insert.
│ │ │ -
771 __x->_M_parent = __p;
│ │ │ -
772 __x->_M_left = __x->_M_right = nullptr;
│ │ │ -
773 __x->_M_color = _S_red;
│ │ │ -
774
│ │ │ -
775 // Insert.
│ │ │ -
776 // Make new node child of parent and maintain root, leftmost and
│ │ │ -
777 // rightmost nodes.
│ │ │ -
778 // N.B. First node is always inserted left.
│ │ │ -
779 if (__insert_left)
│ │ │ -
780 {
│ │ │ -
781 __p->_M_left = __x; // also makes leftmost = __x when __p == &__header
│ │ │ +
763#if !defined(__cpp_lib_shared_mutex)
│ │ │ +
764# if (__cplusplus >= 201703L) && defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED
│ │ │ +
765# define __glibcxx_shared_mutex 201505L
│ │ │ +
766# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_mutex)
│ │ │ +
767# define __cpp_lib_shared_mutex 201505L
│ │ │ +
768# endif
│ │ │ +
769# endif
│ │ │ +
770#endif /* !defined(__cpp_lib_shared_mutex) && defined(__glibcxx_want_shared_mutex) */
│ │ │ +
771#undef __glibcxx_want_shared_mutex
│ │ │ +
772
│ │ │ +
773#if !defined(__cpp_lib_shared_ptr_weak_type)
│ │ │ +
774# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
775# define __glibcxx_shared_ptr_weak_type 201606L
│ │ │ +
776# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_ptr_weak_type)
│ │ │ +
777# define __cpp_lib_shared_ptr_weak_type 201606L
│ │ │ +
778# endif
│ │ │ +
779# endif
│ │ │ +
780#endif /* !defined(__cpp_lib_shared_ptr_weak_type) && defined(__glibcxx_want_shared_ptr_weak_type) */
│ │ │ +
781#undef __glibcxx_want_shared_ptr_weak_type
│ │ │
782
│ │ │ -
783 if (std::__to_address(__p) == std::addressof(__header))
│ │ │ -
784 {
│ │ │ -
785 __header._M_parent = __x;
│ │ │ -
786 __header._M_right = __x;
│ │ │ -
787 }
│ │ │ -
788 else if (__p == __header._M_left)
│ │ │ -
789 __header._M_left = __x; // maintain leftmost pointing to min node
│ │ │ -
790 }
│ │ │ -
791 else
│ │ │ -
792 {
│ │ │ -
793 __p->_M_right = __x;
│ │ │ -
794
│ │ │ -
795 if (__p == __header._M_right)
│ │ │ -
796 __header._M_right = __x; // maintain rightmost pointing to max node
│ │ │ -
797 }
│ │ │ -
798 // Rebalance.
│ │ │ -
799 while (__x != __root
│ │ │ -
800 && __x->_M_parent->_M_color == _S_red)
│ │ │ -
801 {
│ │ │ -
802 const _Base_ptr __xpp = __x->_M_parent->_M_parent;
│ │ │ -
803
│ │ │ -
804 if (__x->_M_parent == __xpp->_M_left)
│ │ │ -
805 {
│ │ │ -
806 const _Base_ptr __y = __xpp->_M_right;
│ │ │ -
807 if (__y && __y->_M_color == _S_red)
│ │ │ -
808 {
│ │ │ -
809 __x->_M_parent->_M_color = _S_black;
│ │ │ -
810 __y->_M_color = _S_black;
│ │ │ -
811 __xpp->_M_color = _S_red;
│ │ │ -
812 __x = __xpp;
│ │ │ -
813 }
│ │ │ -
814 else
│ │ │ -
815 {
│ │ │ -
816 if (__x == __x->_M_parent->_M_right)
│ │ │ -
817 {
│ │ │ -
818 __x = __x->_M_parent;
│ │ │ -
819 _Rotate_left(__x, __root);
│ │ │ -
820 }
│ │ │ -
821 __x->_M_parent->_M_color = _S_black;
│ │ │ -
822 __xpp->_M_color = _S_red;
│ │ │ -
823 _Rotate_right(__xpp, __root);
│ │ │ -
824 }
│ │ │ -
825 }
│ │ │ -
826 else
│ │ │ -
827 {
│ │ │ -
828 const _Base_ptr __y = __xpp->_M_left;
│ │ │ -
829 if (__y && __y->_M_color == _S_red)
│ │ │ -
830 {
│ │ │ -
831 __x->_M_parent->_M_color = _S_black;
│ │ │ -
832 __y->_M_color = _S_black;
│ │ │ -
833 __xpp->_M_color = _S_red;
│ │ │ -
834 __x = __xpp;
│ │ │ -
835 }
│ │ │ -
836 else
│ │ │ -
837 {
│ │ │ -
838 if (__x == __x->_M_parent->_M_left)
│ │ │ -
839 {
│ │ │ -
840 __x = __x->_M_parent;
│ │ │ -
841 _Rotate_right(__x, __root);
│ │ │ -
842 }
│ │ │ -
843 __x->_M_parent->_M_color = _S_black;
│ │ │ -
844 __xpp->_M_color = _S_red;
│ │ │ -
845 _Rotate_left(__xpp, __root);
│ │ │ -
846 }
│ │ │ -
847 }
│ │ │ -
848 }
│ │ │ -
849 __root->_M_color = _S_black;
│ │ │ -
850 }
│ │ │ -
851
│ │ │ -
852 static _Base_ptr
│ │ │ -
853 _S_rebalance_for_erase(_Base_ptr __z, _Node_base& __header)
│ │ │ -
854 {
│ │ │ -
855 _Base_ptr& __root = __header._M_parent;
│ │ │ -
856 _Base_ptr& __leftmost = __header._M_left;
│ │ │ -
857 _Base_ptr& __rightmost = __header._M_right;
│ │ │ -
858 _Base_ptr __y = __z;
│ │ │ -
859 _Base_ptr __x{};
│ │ │ -
860 _Base_ptr __x_parent{};
│ │ │ -
861
│ │ │ -
862 if (!__y->_M_left) // __z has at most one non-null child. y == z.
│ │ │ -
863 __x = __y->_M_right; // __x might be null.
│ │ │ -
864 else
│ │ │ -
865 if (!__y->_M_right) // __z has exactly one non-null child. y == z.
│ │ │ -
866 __x = __y->_M_left; // __x is not null.
│ │ │ -
867 else
│ │ │ -
868 {
│ │ │ -
869 // __z has two non-null children. Set __y to
│ │ │ -
870 __y = __y->_M_right; // __z's successor. __x might be null.
│ │ │ -
871 while (__y->_M_left)
│ │ │ -
872 __y = __y->_M_left;
│ │ │ -
873 __x = __y->_M_right;
│ │ │ -
874 }
│ │ │ -
875 if (__y != __z)
│ │ │ -
876 {
│ │ │ -
877 // relink y in place of z. y is z's successor
│ │ │ -
878 __z->_M_left->_M_parent = __y;
│ │ │ -
879 __y->_M_left = __z->_M_left;
│ │ │ -
880 if (__y != __z->_M_right)
│ │ │ -
881 {
│ │ │ -
882 __x_parent = __y->_M_parent;
│ │ │ -
883 if (__x)
│ │ │ -
884 __x->_M_parent = __y->_M_parent;
│ │ │ -
885 __y->_M_parent->_M_left = __x; // __y must be a child of _M_left
│ │ │ -
886 __y->_M_right = __z->_M_right;
│ │ │ -
887 __z->_M_right->_M_parent = __y;
│ │ │ -
888 }
│ │ │ -
889 else
│ │ │ -
890 __x_parent = __y;
│ │ │ -
891 if (__root == __z)
│ │ │ -
892 __root = __y;
│ │ │ -
893 else if (__z->_M_parent->_M_left == __z)
│ │ │ -
894 __z->_M_parent->_M_left = __y;
│ │ │ -
895 else
│ │ │ -
896 __z->_M_parent->_M_right = __y;
│ │ │ -
897 __y->_M_parent = __z->_M_parent;
│ │ │ -
898 std::swap(__y->_M_color, __z->_M_color);
│ │ │ -
899 __y = __z;
│ │ │ -
900 // __y now points to node to be actually deleted
│ │ │ -
901 }
│ │ │ -
902 else
│ │ │ -
903 { // __y == __z
│ │ │ -
904 __x_parent = __y->_M_parent;
│ │ │ -
905 if (__x)
│ │ │ -
906 __x->_M_parent = __y->_M_parent;
│ │ │ -
907 if (__root == __z)
│ │ │ -
908 __root = __x;
│ │ │ -
909 else
│ │ │ -
910 if (__z->_M_parent->_M_left == __z)
│ │ │ -
911 __z->_M_parent->_M_left = __x;
│ │ │ -
912 else
│ │ │ -
913 __z->_M_parent->_M_right = __x;
│ │ │ -
914 if (__leftmost == __z)
│ │ │ -
915 {
│ │ │ -
916 if (!__z->_M_right) // __z->_M_left must be null also
│ │ │ -
917 __leftmost = __z->_M_parent;
│ │ │ -
918 // makes __leftmost == _M_header if __z == __root
│ │ │ -
919 else
│ │ │ -
920 __leftmost = _Node_base::_S_minimum(__x);
│ │ │ -
921 }
│ │ │ -
922 if (__rightmost == __z)
│ │ │ -
923 {
│ │ │ -
924 if (__z->_M_left == 0) // __z->_M_right must be null also
│ │ │ -
925 __rightmost = __z->_M_parent;
│ │ │ -
926 // makes __rightmost == _M_header if __z == __root
│ │ │ -
927 else // __x == __z->_M_left
│ │ │ -
928 __rightmost = _Node_base::_S_maximum(__x);
│ │ │ -
929 }
│ │ │ -
930 }
│ │ │ -
931 if (__y->_M_color != _S_red)
│ │ │ -
932 {
│ │ │ -
933 while (__x != __root && (__x == 0 || __x->_M_color == _S_black))
│ │ │ -
934 if (__x == __x_parent->_M_left)
│ │ │ -
935 {
│ │ │ -
936 _Base_ptr __w = __x_parent->_M_right;
│ │ │ -
937 if (__w->_M_color == _S_red)
│ │ │ -
938 {
│ │ │ -
939 __w->_M_color = _S_black;
│ │ │ -
940 __x_parent->_M_color = _S_red;
│ │ │ -
941 _Rotate_left(__x_parent, __root);
│ │ │ -
942 __w = __x_parent->_M_right;
│ │ │ -
943 }
│ │ │ -
944 if ((!__w->_M_left || __w->_M_left->_M_color == _S_black) &&
│ │ │ -
945 (!__w->_M_right || __w->_M_right->_M_color == _S_black))
│ │ │ -
946 {
│ │ │ -
947 __w->_M_color = _S_red;
│ │ │ -
948 __x = __x_parent;
│ │ │ -
949 __x_parent = __x_parent->_M_parent;
│ │ │ -
950 }
│ │ │ -
951 else
│ │ │ -
952 {
│ │ │ -
953 if (!__w->_M_right || __w->_M_right->_M_color == _S_black)
│ │ │ -
954 {
│ │ │ -
955 __w->_M_left->_M_color = _S_black;
│ │ │ -
956 __w->_M_color = _S_red;
│ │ │ -
957 _Rotate_right(__w, __root);
│ │ │ -
958 __w = __x_parent->_M_right;
│ │ │ -
959 }
│ │ │ -
960 __w->_M_color = __x_parent->_M_color;
│ │ │ -
961 __x_parent->_M_color = _S_black;
│ │ │ -
962 if (__w->_M_right)
│ │ │ -
963 __w->_M_right->_M_color = _S_black;
│ │ │ -
964 _Rotate_left(__x_parent, __root);
│ │ │ -
965 break;
│ │ │ -
966 }
│ │ │ -
967 }
│ │ │ -
968 else
│ │ │ -
969 {
│ │ │ -
970 // same as above, with _M_right <-> _M_left.
│ │ │ -
971 _Base_ptr __w = __x_parent->_M_left;
│ │ │ -
972 if (__w->_M_color == _S_red)
│ │ │ -
973 {
│ │ │ -
974 __w->_M_color = _S_black;
│ │ │ -
975 __x_parent->_M_color = _S_red;
│ │ │ -
976 _Rotate_right(__x_parent, __root);
│ │ │ -
977 __w = __x_parent->_M_left;
│ │ │ -
978 }
│ │ │ -
979 if ((!__w->_M_right || __w->_M_right->_M_color == _S_black) &&
│ │ │ -
980 (!__w->_M_left || __w->_M_left->_M_color == _S_black))
│ │ │ -
981 {
│ │ │ -
982 __w->_M_color = _S_red;
│ │ │ -
983 __x = __x_parent;
│ │ │ -
984 __x_parent = __x_parent->_M_parent;
│ │ │ -
985 }
│ │ │ -
986 else
│ │ │ -
987 {
│ │ │ -
988 if (!__w->_M_left || __w->_M_left->_M_color == _S_black)
│ │ │ -
989 {
│ │ │ -
990 __w->_M_right->_M_color = _S_black;
│ │ │ -
991 __w->_M_color = _S_red;
│ │ │ -
992 _Rotate_left(__w, __root);
│ │ │ -
993 __w = __x_parent->_M_left;
│ │ │ -
994 }
│ │ │ -
995 __w->_M_color = __x_parent->_M_color;
│ │ │ -
996 __x_parent->_M_color = _S_black;
│ │ │ -
997 if (__w->_M_left)
│ │ │ -
998 __w->_M_left->_M_color = _S_black;
│ │ │ -
999 _Rotate_right(__x_parent, __root);
│ │ │ -
1000 break;
│ │ │ -
1001 }
│ │ │ -
1002 }
│ │ │ -
1003 if (__x)
│ │ │ -
1004 __x->_M_color = _S_black;
│ │ │ -
1005 }
│ │ │ -
1006
│ │ │ -
1007 return __y;
│ │ │ -
1008 }
│ │ │ -
1009 };
│ │ │ -
1010#endif
│ │ │ -
1011} // namespace __rb_tree
│ │ │ -
1012
│ │ │ -
1013#ifdef __glibcxx_node_extract // >= C++17
│ │ │ -
1014 template<typename _Tree1, typename _Cmp2>
│ │ │ -
1015 struct _Rb_tree_merge_helper { };
│ │ │ -
1016#endif
│ │ │ +
783#if !defined(__cpp_lib_string_view)
│ │ │ +
784# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED
│ │ │ +
785# define __glibcxx_string_view 202403L
│ │ │ +
786# if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_view)
│ │ │ +
787# define __cpp_lib_string_view 202403L
│ │ │ +
788# endif
│ │ │ +
789# elif (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
790# define __glibcxx_string_view 201803L
│ │ │ +
791# if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_view)
│ │ │ +
792# define __cpp_lib_string_view 201803L
│ │ │ +
793# endif
│ │ │ +
794# endif
│ │ │ +
795#endif /* !defined(__cpp_lib_string_view) && defined(__glibcxx_want_string_view) */
│ │ │ +
796#undef __glibcxx_want_string_view
│ │ │ +
797
│ │ │ +
798#if !defined(__cpp_lib_unordered_map_try_emplace)
│ │ │ +
799# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
800# define __glibcxx_unordered_map_try_emplace 201411L
│ │ │ +
801# if defined(__glibcxx_want_all) || defined(__glibcxx_want_unordered_map_try_emplace)
│ │ │ +
802# define __cpp_lib_unordered_map_try_emplace 201411L
│ │ │ +
803# endif
│ │ │ +
804# endif
│ │ │ +
805#endif /* !defined(__cpp_lib_unordered_map_try_emplace) && defined(__glibcxx_want_unordered_map_try_emplace) */
│ │ │ +
806#undef __glibcxx_want_unordered_map_try_emplace
│ │ │ +
807
│ │ │ +
808#if !defined(__cpp_lib_assume_aligned)
│ │ │ +
809# if (__cplusplus >= 202002L)
│ │ │ +
810# define __glibcxx_assume_aligned 201811L
│ │ │ +
811# if defined(__glibcxx_want_all) || defined(__glibcxx_want_assume_aligned)
│ │ │ +
812# define __cpp_lib_assume_aligned 201811L
│ │ │ +
813# endif
│ │ │ +
814# endif
│ │ │ +
815#endif /* !defined(__cpp_lib_assume_aligned) && defined(__glibcxx_want_assume_aligned) */
│ │ │ +
816#undef __glibcxx_want_assume_aligned
│ │ │ +
817
│ │ │ +
818#if !defined(__cpp_lib_atomic_flag_test)
│ │ │ +
819# if (__cplusplus >= 202002L)
│ │ │ +
820# define __glibcxx_atomic_flag_test 201907L
│ │ │ +
821# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_flag_test)
│ │ │ +
822# define __cpp_lib_atomic_flag_test 201907L
│ │ │ +
823# endif
│ │ │ +
824# endif
│ │ │ +
825#endif /* !defined(__cpp_lib_atomic_flag_test) && defined(__glibcxx_want_atomic_flag_test) */
│ │ │ +
826#undef __glibcxx_want_atomic_flag_test
│ │ │ +
827
│ │ │ +
828#if !defined(__cpp_lib_atomic_float)
│ │ │ +
829# if (__cplusplus >= 202002L)
│ │ │ +
830# define __glibcxx_atomic_float 201711L
│ │ │ +
831# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_float)
│ │ │ +
832# define __cpp_lib_atomic_float 201711L
│ │ │ +
833# endif
│ │ │ +
834# endif
│ │ │ +
835#endif /* !defined(__cpp_lib_atomic_float) && defined(__glibcxx_want_atomic_float) */
│ │ │ +
836#undef __glibcxx_want_atomic_float
│ │ │ +
837
│ │ │ +
838#if !defined(__cpp_lib_atomic_lock_free_type_aliases)
│ │ │ +
839# if (__cplusplus >= 202002L) && ((__GCC_ATOMIC_INT_LOCK_FREE | __GCC_ATOMIC_LONG_LOCK_FREE | __GCC_ATOMIC_CHAR_LOCK_FREE) & 2)
│ │ │ +
840# define __glibcxx_atomic_lock_free_type_aliases 201907L
│ │ │ +
841# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_lock_free_type_aliases)
│ │ │ +
842# define __cpp_lib_atomic_lock_free_type_aliases 201907L
│ │ │ +
843# endif
│ │ │ +
844# endif
│ │ │ +
845#endif /* !defined(__cpp_lib_atomic_lock_free_type_aliases) && defined(__glibcxx_want_atomic_lock_free_type_aliases) */
│ │ │ +
846#undef __glibcxx_want_atomic_lock_free_type_aliases
│ │ │ +
847
│ │ │ +
848#if !defined(__cpp_lib_atomic_ref)
│ │ │ +
849# if (__cplusplus >= 202002L)
│ │ │ +
850# define __glibcxx_atomic_ref 201806L
│ │ │ +
851# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_ref)
│ │ │ +
852# define __cpp_lib_atomic_ref 201806L
│ │ │ +
853# endif
│ │ │ +
854# endif
│ │ │ +
855#endif /* !defined(__cpp_lib_atomic_ref) && defined(__glibcxx_want_atomic_ref) */
│ │ │ +
856#undef __glibcxx_want_atomic_ref
│ │ │ +
857
│ │ │ +
858#if !defined(__cpp_lib_atomic_value_initialization)
│ │ │ +
859# if (__cplusplus >= 202002L) && (__cpp_concepts >= 201907L)
│ │ │ +
860# define __glibcxx_atomic_value_initialization 201911L
│ │ │ +
861# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_value_initialization)
│ │ │ +
862# define __cpp_lib_atomic_value_initialization 201911L
│ │ │ +
863# endif
│ │ │ +
864# endif
│ │ │ +
865#endif /* !defined(__cpp_lib_atomic_value_initialization) && defined(__glibcxx_want_atomic_value_initialization) */
│ │ │ +
866#undef __glibcxx_want_atomic_value_initialization
│ │ │ +
867
│ │ │ +
868#if !defined(__cpp_lib_bind_front)
│ │ │ +
869# if (__cplusplus >= 202002L)
│ │ │ +
870# define __glibcxx_bind_front 201907L
│ │ │ +
871# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bind_front)
│ │ │ +
872# define __cpp_lib_bind_front 201907L
│ │ │ +
873# endif
│ │ │ +
874# endif
│ │ │ +
875#endif /* !defined(__cpp_lib_bind_front) && defined(__glibcxx_want_bind_front) */
│ │ │ +
876#undef __glibcxx_want_bind_front
│ │ │ +
877
│ │ │ +
878#if !defined(__cpp_lib_bind_back)
│ │ │ +
879# if (__cplusplus >= 202100L) && (__cpp_explicit_this_parameter)
│ │ │ +
880# define __glibcxx_bind_back 202202L
│ │ │ +
881# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bind_back)
│ │ │ +
882# define __cpp_lib_bind_back 202202L
│ │ │ +
883# endif
│ │ │ +
884# endif
│ │ │ +
885#endif /* !defined(__cpp_lib_bind_back) && defined(__glibcxx_want_bind_back) */
│ │ │ +
886#undef __glibcxx_want_bind_back
│ │ │ +
887
│ │ │ +
888#if !defined(__cpp_lib_starts_ends_with)
│ │ │ +
889# if (__cplusplus >= 202002L)
│ │ │ +
890# define __glibcxx_starts_ends_with 201711L
│ │ │ +
891# if defined(__glibcxx_want_all) || defined(__glibcxx_want_starts_ends_with)
│ │ │ +
892# define __cpp_lib_starts_ends_with 201711L
│ │ │ +
893# endif
│ │ │ +
894# endif
│ │ │ +
895#endif /* !defined(__cpp_lib_starts_ends_with) && defined(__glibcxx_want_starts_ends_with) */
│ │ │ +
896#undef __glibcxx_want_starts_ends_with
│ │ │ +
897
│ │ │ +
898#if !defined(__cpp_lib_bit_cast)
│ │ │ +
899# if (__cplusplus >= 202002L) && (__has_builtin(__builtin_bit_cast))
│ │ │ +
900# define __glibcxx_bit_cast 201806L
│ │ │ +
901# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bit_cast)
│ │ │ +
902# define __cpp_lib_bit_cast 201806L
│ │ │ +
903# endif
│ │ │ +
904# endif
│ │ │ +
905#endif /* !defined(__cpp_lib_bit_cast) && defined(__glibcxx_want_bit_cast) */
│ │ │ +
906#undef __glibcxx_want_bit_cast
│ │ │ +
907
│ │ │ +
908#if !defined(__cpp_lib_bitops)
│ │ │ +
909# if (__cplusplus >= 202002L)
│ │ │ +
910# define __glibcxx_bitops 201907L
│ │ │ +
911# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bitops)
│ │ │ +
912# define __cpp_lib_bitops 201907L
│ │ │ +
913# endif
│ │ │ +
914# endif
│ │ │ +
915#endif /* !defined(__cpp_lib_bitops) && defined(__glibcxx_want_bitops) */
│ │ │ +
916#undef __glibcxx_want_bitops
│ │ │ +
917
│ │ │ +
918#if !defined(__cpp_lib_bounded_array_traits)
│ │ │ +
919# if (__cplusplus >= 202002L)
│ │ │ +
920# define __glibcxx_bounded_array_traits 201902L
│ │ │ +
921# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bounded_array_traits)
│ │ │ +
922# define __cpp_lib_bounded_array_traits 201902L
│ │ │ +
923# endif
│ │ │ +
924# endif
│ │ │ +
925#endif /* !defined(__cpp_lib_bounded_array_traits) && defined(__glibcxx_want_bounded_array_traits) */
│ │ │ +
926#undef __glibcxx_want_bounded_array_traits
│ │ │ +
927
│ │ │ +
928#if !defined(__cpp_lib_concepts)
│ │ │ +
929# if (__cplusplus >= 202002L) && (__cpp_concepts >= 201907L)
│ │ │ +
930# define __glibcxx_concepts 202002L
│ │ │ +
931# if defined(__glibcxx_want_all) || defined(__glibcxx_want_concepts)
│ │ │ +
932# define __cpp_lib_concepts 202002L
│ │ │ +
933# endif
│ │ │ +
934# endif
│ │ │ +
935#endif /* !defined(__cpp_lib_concepts) && defined(__glibcxx_want_concepts) */
│ │ │ +
936#undef __glibcxx_want_concepts
│ │ │ +
937
│ │ │ +
938#if !defined(__cpp_lib_optional)
│ │ │ +
939# if (__cplusplus >= 202100L) && (__glibcxx_concepts)
│ │ │ +
940# define __glibcxx_optional 202110L
│ │ │ +
941# if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional)
│ │ │ +
942# define __cpp_lib_optional 202110L
│ │ │ +
943# endif
│ │ │ +
944# elif (__cplusplus >= 202002L)
│ │ │ +
945# define __glibcxx_optional 202106L
│ │ │ +
946# if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional)
│ │ │ +
947# define __cpp_lib_optional 202106L
│ │ │ +
948# endif
│ │ │ +
949# elif (__cplusplus >= 201703L)
│ │ │ +
950# define __glibcxx_optional 201606L
│ │ │ +
951# if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional)
│ │ │ +
952# define __cpp_lib_optional 201606L
│ │ │ +
953# endif
│ │ │ +
954# endif
│ │ │ +
955#endif /* !defined(__cpp_lib_optional) && defined(__glibcxx_want_optional) */
│ │ │ +
956#undef __glibcxx_want_optional
│ │ │ +
957
│ │ │ +
958#if !defined(__cpp_lib_destroying_delete)
│ │ │ +
959# if (__cplusplus >= 202002L) && (__cpp_impl_destroying_delete)
│ │ │ +
960# define __glibcxx_destroying_delete 201806L
│ │ │ +
961# if defined(__glibcxx_want_all) || defined(__glibcxx_want_destroying_delete)
│ │ │ +
962# define __cpp_lib_destroying_delete 201806L
│ │ │ +
963# endif
│ │ │ +
964# endif
│ │ │ +
965#endif /* !defined(__cpp_lib_destroying_delete) && defined(__glibcxx_want_destroying_delete) */
│ │ │ +
966#undef __glibcxx_want_destroying_delete
│ │ │ +
967
│ │ │ +
968#if !defined(__cpp_lib_constexpr_string_view)
│ │ │ +
969# if (__cplusplus >= 202002L)
│ │ │ +
970# define __glibcxx_constexpr_string_view 201811L
│ │ │ +
971# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_string_view)
│ │ │ +
972# define __cpp_lib_constexpr_string_view 201811L
│ │ │ +
973# endif
│ │ │ +
974# endif
│ │ │ +
975#endif /* !defined(__cpp_lib_constexpr_string_view) && defined(__glibcxx_want_constexpr_string_view) */
│ │ │ +
976#undef __glibcxx_want_constexpr_string_view
│ │ │ +
977
│ │ │ +
978#if !defined(__cpp_lib_endian)
│ │ │ +
979# if (__cplusplus >= 202002L)
│ │ │ +
980# define __glibcxx_endian 201907L
│ │ │ +
981# if defined(__glibcxx_want_all) || defined(__glibcxx_want_endian)
│ │ │ +
982# define __cpp_lib_endian 201907L
│ │ │ +
983# endif
│ │ │ +
984# endif
│ │ │ +
985#endif /* !defined(__cpp_lib_endian) && defined(__glibcxx_want_endian) */
│ │ │ +
986#undef __glibcxx_want_endian
│ │ │ +
987
│ │ │ +
988#if !defined(__cpp_lib_int_pow2)
│ │ │ +
989# if (__cplusplus >= 202002L)
│ │ │ +
990# define __glibcxx_int_pow2 202002L
│ │ │ +
991# if defined(__glibcxx_want_all) || defined(__glibcxx_want_int_pow2)
│ │ │ +
992# define __cpp_lib_int_pow2 202002L
│ │ │ +
993# endif
│ │ │ +
994# endif
│ │ │ +
995#endif /* !defined(__cpp_lib_int_pow2) && defined(__glibcxx_want_int_pow2) */
│ │ │ +
996#undef __glibcxx_want_int_pow2
│ │ │ +
997
│ │ │ +
998#if !defined(__cpp_lib_integer_comparison_functions)
│ │ │ +
999# if (__cplusplus >= 202002L)
│ │ │ +
1000# define __glibcxx_integer_comparison_functions 202002L
│ │ │ +
1001# if defined(__glibcxx_want_all) || defined(__glibcxx_want_integer_comparison_functions)
│ │ │ +
1002# define __cpp_lib_integer_comparison_functions 202002L
│ │ │ +
1003# endif
│ │ │ +
1004# endif
│ │ │ +
1005#endif /* !defined(__cpp_lib_integer_comparison_functions) && defined(__glibcxx_want_integer_comparison_functions) */
│ │ │ +
1006#undef __glibcxx_want_integer_comparison_functions
│ │ │ +
1007
│ │ │ +
1008#if !defined(__cpp_lib_is_constant_evaluated)
│ │ │ +
1009# if (__cplusplus >= 202002L) && (defined(_GLIBCXX_HAVE_IS_CONSTANT_EVALUATED))
│ │ │ +
1010# define __glibcxx_is_constant_evaluated 201811L
│ │ │ +
1011# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_constant_evaluated)
│ │ │ +
1012# define __cpp_lib_is_constant_evaluated 201811L
│ │ │ +
1013# endif
│ │ │ +
1014# endif
│ │ │ +
1015#endif /* !defined(__cpp_lib_is_constant_evaluated) && defined(__glibcxx_want_is_constant_evaluated) */
│ │ │ +
1016#undef __glibcxx_want_is_constant_evaluated
│ │ │
1017
│ │ │ -
1018 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
1019 typename _Compare, typename _Alloc = allocator<_Val> >
│ │ │ -
1020 class _Rb_tree
│ │ │ -
1021 {
│ │ │ - │ │ │ -
1023 rebind<_Val>::other _Val_alloc_type;
│ │ │ -
1024
│ │ │ -
1025 typedef __gnu_cxx::__alloc_traits<_Val_alloc_type> _Val_alloc_traits;
│ │ │ -
1026 typedef typename _Val_alloc_traits::pointer _ValPtr;
│ │ │ -
1027 typedef __rb_tree::_Node_traits<_Val, _ValPtr> _Node_traits;
│ │ │ -
1028
│ │ │ -
1029 typedef typename _Node_traits::_Node_base _Node_base;
│ │ │ -
1030 typedef typename _Node_traits::_Node _Node;
│ │ │ -
1031
│ │ │ - │ │ │ -
1033 rebind<_Node>::other _Node_allocator;
│ │ │ -
1034
│ │ │ -
1035 typedef __gnu_cxx::__alloc_traits<_Node_allocator> _Node_alloc_traits;
│ │ │ -
1036
│ │ │ -
1037 protected:
│ │ │ -
1038 typedef typename _Node_traits::_Base_ptr _Base_ptr;
│ │ │ -
1039 typedef typename _Node_traits::_Node_ptr _Node_ptr;
│ │ │ -
1040
│ │ │ -
1041 private:
│ │ │ -
1042 // Functor recycling a pool of nodes and using allocation once the pool
│ │ │ -
1043 // is empty.
│ │ │ -
1044 struct _Reuse_or_alloc_node
│ │ │ -
1045 {
│ │ │ -
1046 _Reuse_or_alloc_node(_Rb_tree& __t)
│ │ │ -
1047 : _M_root(__t._M_root()), _M_nodes(__t._M_rightmost()), _M_t(__t)
│ │ │ -
1048 {
│ │ │ -
1049 if (_M_root)
│ │ │ -
1050 {
│ │ │ -
1051 _M_root->_M_parent = _Base_ptr();
│ │ │ +
1018#if !defined(__cpp_lib_constexpr_char_traits)
│ │ │ +
1019# if (__cplusplus >= 202002L) && (defined(__glibcxx_is_constant_evaluated))
│ │ │ +
1020# define __glibcxx_constexpr_char_traits 201811L
│ │ │ +
1021# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_char_traits)
│ │ │ +
1022# define __cpp_lib_constexpr_char_traits 201811L
│ │ │ +
1023# endif
│ │ │ +
1024# elif (__cplusplus >= 201703L) && (_GLIBCXX_HAVE_IS_CONSTANT_EVALUATED)
│ │ │ +
1025# define __glibcxx_constexpr_char_traits 201611L
│ │ │ +
1026# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_char_traits)
│ │ │ +
1027# define __cpp_lib_constexpr_char_traits 201611L
│ │ │ +
1028# endif
│ │ │ +
1029# endif
│ │ │ +
1030#endif /* !defined(__cpp_lib_constexpr_char_traits) && defined(__glibcxx_want_constexpr_char_traits) */
│ │ │ +
1031#undef __glibcxx_want_constexpr_char_traits
│ │ │ +
1032
│ │ │ +
1033#if !defined(__cpp_lib_is_layout_compatible)
│ │ │ +
1034# if (__cplusplus >= 202002L) && (__has_builtin(__is_layout_compatible) && __has_builtin(__builtin_is_corresponding_member))
│ │ │ +
1035# define __glibcxx_is_layout_compatible 201907L
│ │ │ +
1036# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_layout_compatible)
│ │ │ +
1037# define __cpp_lib_is_layout_compatible 201907L
│ │ │ +
1038# endif
│ │ │ +
1039# endif
│ │ │ +
1040#endif /* !defined(__cpp_lib_is_layout_compatible) && defined(__glibcxx_want_is_layout_compatible) */
│ │ │ +
1041#undef __glibcxx_want_is_layout_compatible
│ │ │ +
1042
│ │ │ +
1043#if !defined(__cpp_lib_is_nothrow_convertible)
│ │ │ +
1044# if (__cplusplus >= 202002L)
│ │ │ +
1045# define __glibcxx_is_nothrow_convertible 201806L
│ │ │ +
1046# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_nothrow_convertible)
│ │ │ +
1047# define __cpp_lib_is_nothrow_convertible 201806L
│ │ │ +
1048# endif
│ │ │ +
1049# endif
│ │ │ +
1050#endif /* !defined(__cpp_lib_is_nothrow_convertible) && defined(__glibcxx_want_is_nothrow_convertible) */
│ │ │ +
1051#undef __glibcxx_want_is_nothrow_convertible
│ │ │
1052
│ │ │ -
1053 if (_M_nodes->_M_left)
│ │ │ -
1054 _M_nodes = _M_nodes->_M_left;
│ │ │ -
1055 }
│ │ │ -
1056 else
│ │ │ -
1057 _M_nodes = _Base_ptr();
│ │ │ -
1058 }
│ │ │ -
1059
│ │ │ -
1060#if __cplusplus >= 201103L
│ │ │ -
1061 _Reuse_or_alloc_node(const _Reuse_or_alloc_node&) = delete;
│ │ │ -
1062#endif
│ │ │ -
1063
│ │ │ -
1064 ~_Reuse_or_alloc_node()
│ │ │ -
1065 {
│ │ │ -
1066 if (_M_root)
│ │ │ -
1067 _M_t._M_erase(static_cast<_Node&>(*_M_root)._M_node_ptr());
│ │ │ -
1068 }
│ │ │ -
1069
│ │ │ -
1070 template<typename _Arg>
│ │ │ -
1071 _Node_ptr
│ │ │ -
1072 operator()(_GLIBCXX_FWDREF(_Arg) __arg)
│ │ │ -
1073 {
│ │ │ -
1074 _Base_ptr __base = _M_extract();
│ │ │ -
1075 if (__base)
│ │ │ -
1076 {
│ │ │ -
1077 _Node_ptr __node = static_cast<_Node&>(*__base)._M_node_ptr();
│ │ │ -
1078 _M_t._M_destroy_node(__node);
│ │ │ -
1079 _M_t._M_construct_node(__node, _GLIBCXX_FORWARD(_Arg, __arg));
│ │ │ -
1080 return __node;
│ │ │ -
1081 }
│ │ │ +
1053#if !defined(__cpp_lib_is_pointer_interconvertible)
│ │ │ +
1054# if (__cplusplus >= 202002L) && (__has_builtin(__is_pointer_interconvertible_base_of) && __has_builtin(__builtin_is_pointer_interconvertible_with_class))
│ │ │ +
1055# define __glibcxx_is_pointer_interconvertible 201907L
│ │ │ +
1056# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_pointer_interconvertible)
│ │ │ +
1057# define __cpp_lib_is_pointer_interconvertible 201907L
│ │ │ +
1058# endif
│ │ │ +
1059# endif
│ │ │ +
1060#endif /* !defined(__cpp_lib_is_pointer_interconvertible) && defined(__glibcxx_want_is_pointer_interconvertible) */
│ │ │ +
1061#undef __glibcxx_want_is_pointer_interconvertible
│ │ │ +
1062
│ │ │ +
1063#if !defined(__cpp_lib_math_constants)
│ │ │ +
1064# if (__cplusplus >= 202002L)
│ │ │ +
1065# define __glibcxx_math_constants 201907L
│ │ │ +
1066# if defined(__glibcxx_want_all) || defined(__glibcxx_want_math_constants)
│ │ │ +
1067# define __cpp_lib_math_constants 201907L
│ │ │ +
1068# endif
│ │ │ +
1069# endif
│ │ │ +
1070#endif /* !defined(__cpp_lib_math_constants) && defined(__glibcxx_want_math_constants) */
│ │ │ +
1071#undef __glibcxx_want_math_constants
│ │ │ +
1072
│ │ │ +
1073#if !defined(__cpp_lib_make_obj_using_allocator)
│ │ │ +
1074# if (__cplusplus >= 202002L) && (__cpp_concepts)
│ │ │ +
1075# define __glibcxx_make_obj_using_allocator 201811L
│ │ │ +
1076# if defined(__glibcxx_want_all) || defined(__glibcxx_want_make_obj_using_allocator)
│ │ │ +
1077# define __cpp_lib_make_obj_using_allocator 201811L
│ │ │ +
1078# endif
│ │ │ +
1079# endif
│ │ │ +
1080#endif /* !defined(__cpp_lib_make_obj_using_allocator) && defined(__glibcxx_want_make_obj_using_allocator) */
│ │ │ +
1081#undef __glibcxx_want_make_obj_using_allocator
│ │ │
1082
│ │ │ -
1083 return _M_t._M_create_node(_GLIBCXX_FORWARD(_Arg, __arg));
│ │ │ -
1084 }
│ │ │ -
1085
│ │ │ -
1086 private:
│ │ │ -
1087 _Base_ptr
│ │ │ -
1088 _M_extract()
│ │ │ -
1089 {
│ │ │ -
1090 if (!_M_nodes)
│ │ │ -
1091 return _M_nodes;
│ │ │ +
1083#if !defined(__cpp_lib_remove_cvref)
│ │ │ +
1084# if (__cplusplus >= 202002L)
│ │ │ +
1085# define __glibcxx_remove_cvref 201711L
│ │ │ +
1086# if defined(__glibcxx_want_all) || defined(__glibcxx_want_remove_cvref)
│ │ │ +
1087# define __cpp_lib_remove_cvref 201711L
│ │ │ +
1088# endif
│ │ │ +
1089# endif
│ │ │ +
1090#endif /* !defined(__cpp_lib_remove_cvref) && defined(__glibcxx_want_remove_cvref) */
│ │ │ +
1091#undef __glibcxx_want_remove_cvref
│ │ │
1092
│ │ │ -
1093 _Base_ptr __node = _M_nodes;
│ │ │ -
1094 _M_nodes = _M_nodes->_M_parent;
│ │ │ -
1095 if (_M_nodes)
│ │ │ -
1096 {
│ │ │ -
1097 if (_M_nodes->_M_right == __node)
│ │ │ -
1098 {
│ │ │ -
1099 _M_nodes->_M_right = _Base_ptr();
│ │ │ -
1100
│ │ │ -
1101 if (_M_nodes->_M_left)
│ │ │ -
1102 {
│ │ │ -
1103 _M_nodes = _M_nodes->_M_left;
│ │ │ -
1104
│ │ │ -
1105 while (_M_nodes->_M_right)
│ │ │ -
1106 _M_nodes = _M_nodes->_M_right;
│ │ │ -
1107
│ │ │ -
1108 if (_M_nodes->_M_left)
│ │ │ -
1109 _M_nodes = _M_nodes->_M_left;
│ │ │ -
1110 }
│ │ │ -
1111 }
│ │ │ -
1112 else // __node is on the left.
│ │ │ -
1113 _M_nodes->_M_left = _Base_ptr();
│ │ │ -
1114 }
│ │ │ -
1115 else
│ │ │ -
1116 _M_root = _Base_ptr();
│ │ │ +
1093#if !defined(__cpp_lib_source_location)
│ │ │ +
1094# if (__cplusplus >= 202002L) && (__has_builtin(__builtin_source_location))
│ │ │ +
1095# define __glibcxx_source_location 201907L
│ │ │ +
1096# if defined(__glibcxx_want_all) || defined(__glibcxx_want_source_location)
│ │ │ +
1097# define __cpp_lib_source_location 201907L
│ │ │ +
1098# endif
│ │ │ +
1099# endif
│ │ │ +
1100#endif /* !defined(__cpp_lib_source_location) && defined(__glibcxx_want_source_location) */
│ │ │ +
1101#undef __glibcxx_want_source_location
│ │ │ +
1102
│ │ │ +
1103#if !defined(__cpp_lib_span)
│ │ │ +
1104# if (__cplusplus > 202302L) && (__glibcxx_concepts)
│ │ │ +
1105# define __glibcxx_span 202311L
│ │ │ +
1106# if defined(__glibcxx_want_all) || defined(__glibcxx_want_span)
│ │ │ +
1107# define __cpp_lib_span 202311L
│ │ │ +
1108# endif
│ │ │ +
1109# elif (__cplusplus >= 202002L) && (__glibcxx_concepts)
│ │ │ +
1110# define __glibcxx_span 202002L
│ │ │ +
1111# if defined(__glibcxx_want_all) || defined(__glibcxx_want_span)
│ │ │ +
1112# define __cpp_lib_span 202002L
│ │ │ +
1113# endif
│ │ │ +
1114# endif
│ │ │ +
1115#endif /* !defined(__cpp_lib_span) && defined(__glibcxx_want_span) */
│ │ │ +
1116#undef __glibcxx_want_span
│ │ │
1117
│ │ │ -
1118 return __node;
│ │ │ -
1119 }
│ │ │ -
1120
│ │ │ -
1121 _Base_ptr _M_root;
│ │ │ -
1122 _Base_ptr _M_nodes;
│ │ │ -
1123 _Rb_tree& _M_t;
│ │ │ -
1124 };
│ │ │ -
1125
│ │ │ -
1126 // Functor similar to the previous one but without any pool of nodes to
│ │ │ -
1127 // recycle.
│ │ │ -
1128 struct _Alloc_node
│ │ │ -
1129 {
│ │ │ -
1130 _Alloc_node(_Rb_tree& __t)
│ │ │ -
1131 : _M_t(__t) { }
│ │ │ -
1132
│ │ │ -
1133 template<typename _Arg>
│ │ │ -
1134 _Node_ptr
│ │ │ -
1135 operator()(_GLIBCXX_FWDREF(_Arg) __arg) const
│ │ │ -
1136 { return _M_t._M_create_node(_GLIBCXX_FORWARD(_Arg, __arg)); }
│ │ │ +
1118#if !defined(__cpp_lib_ssize)
│ │ │ +
1119# if (__cplusplus >= 202002L)
│ │ │ +
1120# define __glibcxx_ssize 201902L
│ │ │ +
1121# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ssize)
│ │ │ +
1122# define __cpp_lib_ssize 201902L
│ │ │ +
1123# endif
│ │ │ +
1124# endif
│ │ │ +
1125#endif /* !defined(__cpp_lib_ssize) && defined(__glibcxx_want_ssize) */
│ │ │ +
1126#undef __glibcxx_want_ssize
│ │ │ +
1127
│ │ │ +
1128#if !defined(__cpp_lib_three_way_comparison)
│ │ │ +
1129# if (__cplusplus >= 202002L) && (__cpp_impl_three_way_comparison >= 201907L && __glibcxx_concepts)
│ │ │ +
1130# define __glibcxx_three_way_comparison 201907L
│ │ │ +
1131# if defined(__glibcxx_want_all) || defined(__glibcxx_want_three_way_comparison)
│ │ │ +
1132# define __cpp_lib_three_way_comparison 201907L
│ │ │ +
1133# endif
│ │ │ +
1134# endif
│ │ │ +
1135#endif /* !defined(__cpp_lib_three_way_comparison) && defined(__glibcxx_want_three_way_comparison) */
│ │ │ +
1136#undef __glibcxx_want_three_way_comparison
│ │ │
1137
│ │ │ -
1138 private:
│ │ │ -
1139 _Rb_tree& _M_t;
│ │ │ -
1140 };
│ │ │ -
1141
│ │ │ -
1142 public:
│ │ │ -
1143 typedef _Key key_type;
│ │ │ -
1144 typedef _Val value_type;
│ │ │ -
1145 typedef value_type* pointer;
│ │ │ -
1146 typedef const value_type* const_pointer;
│ │ │ -
1147 typedef value_type& reference;
│ │ │ -
1148 typedef const value_type& const_reference;
│ │ │ -
1149 typedef size_t size_type;
│ │ │ -
1150 typedef ptrdiff_t difference_type;
│ │ │ -
1151 typedef _Alloc allocator_type;
│ │ │ -
1152
│ │ │ -
1153 _Node_allocator&
│ │ │ -
1154 _M_get_Node_allocator() _GLIBCXX_NOEXCEPT
│ │ │ -
1155 { return this->_M_impl; }
│ │ │ -
1156
│ │ │ -
1157 const _Node_allocator&
│ │ │ -
1158 _M_get_Node_allocator() const _GLIBCXX_NOEXCEPT
│ │ │ -
1159 { return this->_M_impl; }
│ │ │ -
1160
│ │ │ -
1161 allocator_type
│ │ │ -
1162 get_allocator() const _GLIBCXX_NOEXCEPT
│ │ │ -
1163 { return allocator_type(_M_get_Node_allocator()); }
│ │ │ -
1164
│ │ │ -
1165 protected:
│ │ │ -
1166 _Node_ptr
│ │ │ -
1167 _M_get_node()
│ │ │ -
1168 {
│ │ │ -
1169#if __cplusplus < 201102L || _GLIBCXX_USE_ALLOC_PTR_FOR_RB_TREE
│ │ │ -
1170 return _Node_alloc_traits::allocate(_M_get_Node_allocator(), 1);
│ │ │ -
1171#else
│ │ │ -
1172#pragma GCC diagnostic push
│ │ │ -
1173#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
│ │ │ -
1174 using __alloc_pointer = typename _Node_alloc_traits::pointer;
│ │ │ -
1175 if constexpr (is_same<_Node_ptr, __alloc_pointer>::value)
│ │ │ -
1176 return _Node_alloc_traits::allocate(_M_get_Node_allocator(), 1);
│ │ │ -
1177 else
│ │ │ -
1178 {
│ │ │ -
1179 auto __ptr =
│ │ │ -
1180 _Node_alloc_traits::allocate(_M_get_Node_allocator(), 1);
│ │ │ -
1181 return std::__to_address(__ptr);
│ │ │ -
1182 }
│ │ │ -
1183#pragma GCC diagnostic pop
│ │ │ -
1184#endif
│ │ │ -
1185 }
│ │ │ -
1186
│ │ │ -
1187 void
│ │ │ -
1188 _M_put_node(_Node_ptr __p) _GLIBCXX_NOEXCEPT
│ │ │ -
1189 {
│ │ │ -
1190#if __cplusplus < 201102L || _GLIBCXX_USE_ALLOC_PTR_FOR_RB_TREE
│ │ │ -
1191 _Node_alloc_traits::deallocate(_M_get_Node_allocator(), __p, 1);
│ │ │ -
1192#else
│ │ │ -
1193#pragma GCC diagnostic push
│ │ │ -
1194#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
│ │ │ -
1195 using __alloc_pointer = typename _Node_alloc_traits::pointer;
│ │ │ -
1196 if constexpr (is_same<_Node_ptr, __alloc_pointer>::value)
│ │ │ -
1197 _Node_alloc_traits::deallocate(_M_get_Node_allocator(), __p, 1);
│ │ │ -
1198 else
│ │ │ -
1199 {
│ │ │ -
1200 // When not using the allocator's pointer type internally we must
│ │ │ -
1201 // convert __p to __alloc_pointer so it can be deallocated.
│ │ │ -
1202 auto __ap = pointer_traits<__alloc_pointer>::pointer_to(*__p);
│ │ │ -
1203 _Node_alloc_traits::deallocate(_M_get_Node_allocator(), __ap, 1);
│ │ │ -
1204 }
│ │ │ -
1205#pragma GCC diagnostic pop
│ │ │ -
1206#endif
│ │ │ -
1207 }
│ │ │ -
1208
│ │ │ -
1209#if __cplusplus < 201103L
│ │ │ -
1210 void
│ │ │ -
1211 _M_construct_node(_Node_ptr __node, const value_type& __x)
│ │ │ -
1212 {
│ │ │ -
1213 __try
│ │ │ -
1214 { get_allocator().construct(__node->_M_valptr(), __x); }
│ │ │ -
1215 __catch(...)
│ │ │ -
1216 {
│ │ │ -
1217 _M_put_node(__node);
│ │ │ -
1218 __throw_exception_again;
│ │ │ -
1219 }
│ │ │ -
1220 }
│ │ │ -
1221
│ │ │ -
1222 _Node_ptr
│ │ │ -
1223 _M_create_node(const value_type& __x)
│ │ │ -
1224 {
│ │ │ -
1225 _Node_ptr __tmp = _M_get_node();
│ │ │ -
1226 _M_construct_node(__tmp, __x);
│ │ │ -
1227 return __tmp;
│ │ │ -
1228 }
│ │ │ -
1229#else
│ │ │ -
1230 template<typename... _Args>
│ │ │ -
1231 void
│ │ │ -
1232 _M_construct_node(_Node_ptr __node, _Args&&... __args)
│ │ │ -
1233 {
│ │ │ -
1234 __try
│ │ │ -
1235 {
│ │ │ -
1236 ::new(std::addressof(*__node)) _Node;
│ │ │ -
1237 _Node_alloc_traits::construct(_M_get_Node_allocator(),
│ │ │ -
1238 __node->_M_valptr(),
│ │ │ -
1239 std::forward<_Args>(__args)...);
│ │ │ -
1240 }
│ │ │ -
1241 __catch(...)
│ │ │ -
1242 {
│ │ │ -
1243 __node->~_Node();
│ │ │ -
1244 _M_put_node(__node);
│ │ │ -
1245 __throw_exception_again;
│ │ │ -
1246 }
│ │ │ -
1247 }
│ │ │ -
1248
│ │ │ -
1249 template<typename... _Args>
│ │ │ -
1250 _Node_ptr
│ │ │ -
1251 _M_create_node(_Args&&... __args)
│ │ │ -
1252 {
│ │ │ -
1253 _Node_ptr __tmp = _M_get_node();
│ │ │ -
1254 _M_construct_node(__tmp, std::forward<_Args>(__args)...);
│ │ │ -
1255 return __tmp;
│ │ │ -
1256 }
│ │ │ -
1257#endif
│ │ │ -
1258
│ │ │ -
1259 void
│ │ │ -
1260 _M_destroy_node(_Node_ptr __p) _GLIBCXX_NOEXCEPT
│ │ │ -
1261 {
│ │ │ -
1262#if __cplusplus < 201103L
│ │ │ -
1263 get_allocator().destroy(__p->_M_valptr());
│ │ │ -
1264#else
│ │ │ -
1265 _Node_alloc_traits::destroy(_M_get_Node_allocator(), __p->_M_valptr());
│ │ │ -
1266 __p->~_Node();
│ │ │ -
1267#endif
│ │ │ -
1268 }
│ │ │ -
1269
│ │ │ -
1270 void
│ │ │ -
1271 _M_drop_node(_Node_ptr __p) _GLIBCXX_NOEXCEPT
│ │ │ -
1272 {
│ │ │ -
1273 _M_destroy_node(__p);
│ │ │ -
1274 _M_put_node(__p);
│ │ │ -
1275 }
│ │ │ -
1276
│ │ │ -
1277 template<bool _MoveValue, typename _NodeGen>
│ │ │ -
1278 _Node_ptr
│ │ │ -
1279 _M_clone_node(_Node_ptr __x, _NodeGen& __node_gen)
│ │ │ -
1280 {
│ │ │ -
1281#if __cplusplus >= 201103L
│ │ │ -
1282 using _Vp = __conditional_t<_MoveValue,
│ │ │ -
1283 value_type&&,
│ │ │ -
1284 const value_type&>;
│ │ │ -
1285#endif
│ │ │ -
1286 _Node_ptr __tmp
│ │ │ -
1287 = __node_gen(_GLIBCXX_FORWARD(_Vp, *__x->_M_valptr()));
│ │ │ -
1288 __tmp->_M_color = __x->_M_color;
│ │ │ -
1289 __tmp->_M_left = __tmp->_M_right = _Base_ptr();
│ │ │ -
1290 return __tmp;
│ │ │ -
1291 }
│ │ │ -
1292
│ │ │ -
1293 protected:
│ │ │ -
1294 typedef typename _Node_traits::_Header_t _Header_t;
│ │ │ -
1295
│ │ │ -
1296#if _GLIBCXX_INLINE_VERSION
│ │ │ -
1297 template<typename _Key_compare>
│ │ │ -
1298#else
│ │ │ -
1299 // Unused _Is_pod_comparator is kept as it is part of mangled name.
│ │ │ -
1300 template<typename _Key_compare,
│ │ │ -
1301 bool /* _Is_pod_comparator */ = __is_pod(_Key_compare)>
│ │ │ -
1302#endif
│ │ │ -
1303 struct _Rb_tree_impl
│ │ │ -
1304 : public _Node_allocator
│ │ │ -
1305 , public _Rb_tree_key_compare<_Key_compare>
│ │ │ -
1306 , public _Header_t
│ │ │ -
1307 {
│ │ │ -
1308 typedef _Rb_tree_key_compare<_Key_compare> _Base_key_compare;
│ │ │ -
1309
│ │ │ -
1310 _Rb_tree_impl()
│ │ │ -
1311 _GLIBCXX_NOEXCEPT_IF(
│ │ │ -
1312 is_nothrow_default_constructible<_Node_allocator>::value
│ │ │ -
1313 && is_nothrow_default_constructible<_Base_key_compare>::value )
│ │ │ -
1314 : _Node_allocator()
│ │ │ -
1315 { }
│ │ │ -
1316
│ │ │ -
1317 _Rb_tree_impl(const _Rb_tree_impl& __x)
│ │ │ -
1318 : _Node_allocator(_Node_alloc_traits::_S_select_on_copy(__x))
│ │ │ -
1319 , _Base_key_compare(__x._M_key_compare)
│ │ │ -
1320 , _Header_t()
│ │ │ -
1321 { }
│ │ │ +
1138#if !defined(__cpp_lib_to_address)
│ │ │ +
1139# if (__cplusplus >= 202002L)
│ │ │ +
1140# define __glibcxx_to_address 201711L
│ │ │ +
1141# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_address)
│ │ │ +
1142# define __cpp_lib_to_address 201711L
│ │ │ +
1143# endif
│ │ │ +
1144# endif
│ │ │ +
1145#endif /* !defined(__cpp_lib_to_address) && defined(__glibcxx_want_to_address) */
│ │ │ +
1146#undef __glibcxx_want_to_address
│ │ │ +
1147
│ │ │ +
1148#if !defined(__cpp_lib_to_array)
│ │ │ +
1149# if (__cplusplus >= 202002L) && (__cpp_generic_lambdas >= 201707L)
│ │ │ +
1150# define __glibcxx_to_array 201907L
│ │ │ +
1151# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_array)
│ │ │ +
1152# define __cpp_lib_to_array 201907L
│ │ │ +
1153# endif
│ │ │ +
1154# endif
│ │ │ +
1155#endif /* !defined(__cpp_lib_to_array) && defined(__glibcxx_want_to_array) */
│ │ │ +
1156#undef __glibcxx_want_to_array
│ │ │ +
1157
│ │ │ +
1158#if !defined(__cpp_lib_type_identity)
│ │ │ +
1159# if (__cplusplus >= 202002L)
│ │ │ +
1160# define __glibcxx_type_identity 201806L
│ │ │ +
1161# if defined(__glibcxx_want_all) || defined(__glibcxx_want_type_identity)
│ │ │ +
1162# define __cpp_lib_type_identity 201806L
│ │ │ +
1163# endif
│ │ │ +
1164# endif
│ │ │ +
1165#endif /* !defined(__cpp_lib_type_identity) && defined(__glibcxx_want_type_identity) */
│ │ │ +
1166#undef __glibcxx_want_type_identity
│ │ │ +
1167
│ │ │ +
1168#if !defined(__cpp_lib_unwrap_ref)
│ │ │ +
1169# if (__cplusplus >= 202002L)
│ │ │ +
1170# define __glibcxx_unwrap_ref 201811L
│ │ │ +
1171# if defined(__glibcxx_want_all) || defined(__glibcxx_want_unwrap_ref)
│ │ │ +
1172# define __cpp_lib_unwrap_ref 201811L
│ │ │ +
1173# endif
│ │ │ +
1174# endif
│ │ │ +
1175#endif /* !defined(__cpp_lib_unwrap_ref) && defined(__glibcxx_want_unwrap_ref) */
│ │ │ +
1176#undef __glibcxx_want_unwrap_ref
│ │ │ +
1177
│ │ │ +
1178#if !defined(__cpp_lib_constexpr_iterator)
│ │ │ +
1179# if (__cplusplus >= 202002L)
│ │ │ +
1180# define __glibcxx_constexpr_iterator 201811L
│ │ │ +
1181# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_iterator)
│ │ │ +
1182# define __cpp_lib_constexpr_iterator 201811L
│ │ │ +
1183# endif
│ │ │ +
1184# endif
│ │ │ +
1185#endif /* !defined(__cpp_lib_constexpr_iterator) && defined(__glibcxx_want_constexpr_iterator) */
│ │ │ +
1186#undef __glibcxx_want_constexpr_iterator
│ │ │ +
1187
│ │ │ +
1188#if !defined(__cpp_lib_interpolate)
│ │ │ +
1189# if (__cplusplus >= 202002L)
│ │ │ +
1190# define __glibcxx_interpolate 201902L
│ │ │ +
1191# if defined(__glibcxx_want_all) || defined(__glibcxx_want_interpolate)
│ │ │ +
1192# define __cpp_lib_interpolate 201902L
│ │ │ +
1193# endif
│ │ │ +
1194# endif
│ │ │ +
1195#endif /* !defined(__cpp_lib_interpolate) && defined(__glibcxx_want_interpolate) */
│ │ │ +
1196#undef __glibcxx_want_interpolate
│ │ │ +
1197
│ │ │ +
1198#if !defined(__cpp_lib_constexpr_utility)
│ │ │ +
1199# if (__cplusplus >= 202002L)
│ │ │ +
1200# define __glibcxx_constexpr_utility 201811L
│ │ │ +
1201# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_utility)
│ │ │ +
1202# define __cpp_lib_constexpr_utility 201811L
│ │ │ +
1203# endif
│ │ │ +
1204# endif
│ │ │ +
1205#endif /* !defined(__cpp_lib_constexpr_utility) && defined(__glibcxx_want_constexpr_utility) */
│ │ │ +
1206#undef __glibcxx_want_constexpr_utility
│ │ │ +
1207
│ │ │ +
1208#if !defined(__cpp_lib_shift)
│ │ │ +
1209# if (__cplusplus >= 202002L)
│ │ │ +
1210# define __glibcxx_shift 201806L
│ │ │ +
1211# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shift)
│ │ │ +
1212# define __cpp_lib_shift 201806L
│ │ │ +
1213# endif
│ │ │ +
1214# endif
│ │ │ +
1215#endif /* !defined(__cpp_lib_shift) && defined(__glibcxx_want_shift) */
│ │ │ +
1216#undef __glibcxx_want_shift
│ │ │ +
1217
│ │ │ +
1218#if !defined(__cpp_lib_ranges)
│ │ │ +
1219# if (__cplusplus > 202302L) && (__glibcxx_concepts)
│ │ │ +
1220# define __glibcxx_ranges 202406L
│ │ │ +
1221# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges)
│ │ │ +
1222# define __cpp_lib_ranges 202406L
│ │ │ +
1223# endif
│ │ │ +
1224# elif (__cplusplus >= 202100L) && (__glibcxx_concepts)
│ │ │ +
1225# define __glibcxx_ranges 202302L
│ │ │ +
1226# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges)
│ │ │ +
1227# define __cpp_lib_ranges 202302L
│ │ │ +
1228# endif
│ │ │ +
1229# elif (__cplusplus >= 202002L) && (__glibcxx_concepts)
│ │ │ +
1230# define __glibcxx_ranges 202110L
│ │ │ +
1231# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges)
│ │ │ +
1232# define __cpp_lib_ranges 202110L
│ │ │ +
1233# endif
│ │ │ +
1234# endif
│ │ │ +
1235#endif /* !defined(__cpp_lib_ranges) && defined(__glibcxx_want_ranges) */
│ │ │ +
1236#undef __glibcxx_want_ranges
│ │ │ +
1237
│ │ │ +
1238#if !defined(__cpp_lib_constexpr_numeric)
│ │ │ +
1239# if (__cplusplus >= 202002L)
│ │ │ +
1240# define __glibcxx_constexpr_numeric 201911L
│ │ │ +
1241# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_numeric)
│ │ │ +
1242# define __cpp_lib_constexpr_numeric 201911L
│ │ │ +
1243# endif
│ │ │ +
1244# endif
│ │ │ +
1245#endif /* !defined(__cpp_lib_constexpr_numeric) && defined(__glibcxx_want_constexpr_numeric) */
│ │ │ +
1246#undef __glibcxx_want_constexpr_numeric
│ │ │ +
1247
│ │ │ +
1248#if !defined(__cpp_lib_constexpr_functional)
│ │ │ +
1249# if (__cplusplus >= 202002L)
│ │ │ +
1250# define __glibcxx_constexpr_functional 201907L
│ │ │ +
1251# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_functional)
│ │ │ +
1252# define __cpp_lib_constexpr_functional 201907L
│ │ │ +
1253# endif
│ │ │ +
1254# endif
│ │ │ +
1255#endif /* !defined(__cpp_lib_constexpr_functional) && defined(__glibcxx_want_constexpr_functional) */
│ │ │ +
1256#undef __glibcxx_want_constexpr_functional
│ │ │ +
1257
│ │ │ +
1258#if !defined(__cpp_lib_constexpr_algorithms)
│ │ │ +
1259# if (__cplusplus > 202302L)
│ │ │ +
1260# define __glibcxx_constexpr_algorithms 202306L
│ │ │ +
1261# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_algorithms)
│ │ │ +
1262# define __cpp_lib_constexpr_algorithms 202306L
│ │ │ +
1263# endif
│ │ │ +
1264# elif (__cplusplus >= 202002L)
│ │ │ +
1265# define __glibcxx_constexpr_algorithms 201806L
│ │ │ +
1266# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_algorithms)
│ │ │ +
1267# define __cpp_lib_constexpr_algorithms 201806L
│ │ │ +
1268# endif
│ │ │ +
1269# endif
│ │ │ +
1270#endif /* !defined(__cpp_lib_constexpr_algorithms) && defined(__glibcxx_want_constexpr_algorithms) */
│ │ │ +
1271#undef __glibcxx_want_constexpr_algorithms
│ │ │ +
1272
│ │ │ +
1273#if !defined(__cpp_lib_constexpr_tuple)
│ │ │ +
1274# if (__cplusplus >= 202002L)
│ │ │ +
1275# define __glibcxx_constexpr_tuple 201811L
│ │ │ +
1276# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_tuple)
│ │ │ +
1277# define __cpp_lib_constexpr_tuple 201811L
│ │ │ +
1278# endif
│ │ │ +
1279# endif
│ │ │ +
1280#endif /* !defined(__cpp_lib_constexpr_tuple) && defined(__glibcxx_want_constexpr_tuple) */
│ │ │ +
1281#undef __glibcxx_want_constexpr_tuple
│ │ │ +
1282
│ │ │ +
1283#if !defined(__cpp_lib_constexpr_memory)
│ │ │ +
1284# if (__cplusplus >= 202100L) && (__cpp_constexpr_dynamic_alloc)
│ │ │ +
1285# define __glibcxx_constexpr_memory 202202L
│ │ │ +
1286# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_memory)
│ │ │ +
1287# define __cpp_lib_constexpr_memory 202202L
│ │ │ +
1288# endif
│ │ │ +
1289# elif (__cplusplus >= 202002L)
│ │ │ +
1290# define __glibcxx_constexpr_memory 201811L
│ │ │ +
1291# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_memory)
│ │ │ +
1292# define __cpp_lib_constexpr_memory 201811L
│ │ │ +
1293# endif
│ │ │ +
1294# endif
│ │ │ +
1295#endif /* !defined(__cpp_lib_constexpr_memory) && defined(__glibcxx_want_constexpr_memory) */
│ │ │ +
1296#undef __glibcxx_want_constexpr_memory
│ │ │ +
1297
│ │ │ +
1298#if !defined(__cpp_lib_atomic_shared_ptr)
│ │ │ +
1299# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
│ │ │ +
1300# define __glibcxx_atomic_shared_ptr 201711L
│ │ │ +
1301# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_shared_ptr)
│ │ │ +
1302# define __cpp_lib_atomic_shared_ptr 201711L
│ │ │ +
1303# endif
│ │ │ +
1304# endif
│ │ │ +
1305#endif /* !defined(__cpp_lib_atomic_shared_ptr) && defined(__glibcxx_want_atomic_shared_ptr) */
│ │ │ +
1306#undef __glibcxx_want_atomic_shared_ptr
│ │ │ +
1307
│ │ │ +
1308#if !defined(__cpp_lib_atomic_wait)
│ │ │ +
1309# if (__cplusplus >= 202002L) && defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED
│ │ │ +
1310# define __glibcxx_atomic_wait 201907L
│ │ │ +
1311# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_wait)
│ │ │ +
1312# define __cpp_lib_atomic_wait 201907L
│ │ │ +
1313# endif
│ │ │ +
1314# elif (__cplusplus >= 202002L) && !defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED && (defined(_GLIBCXX_HAVE_LINUX_FUTEX))
│ │ │ +
1315# define __glibcxx_atomic_wait 201907L
│ │ │ +
1316# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_wait)
│ │ │ +
1317# define __cpp_lib_atomic_wait 201907L
│ │ │ +
1318# endif
│ │ │ +
1319# endif
│ │ │ +
1320#endif /* !defined(__cpp_lib_atomic_wait) && defined(__glibcxx_want_atomic_wait) */
│ │ │ +
1321#undef __glibcxx_want_atomic_wait
│ │ │
1322
│ │ │ -
1323#if __cplusplus < 201103L
│ │ │ -
1324 _Rb_tree_impl(const _Key_compare& __comp, const _Node_allocator& __a)
│ │ │ -
1325 : _Node_allocator(__a), _Base_key_compare(__comp)
│ │ │ -
1326 { }
│ │ │ -
1327#else
│ │ │ -
1328 _Rb_tree_impl(_Rb_tree_impl&&)
│ │ │ -
1329 noexcept( is_nothrow_move_constructible<_Base_key_compare>::value )
│ │ │ -
1330 = default;
│ │ │ -
1331
│ │ │ -
1332 explicit
│ │ │ -
1333 _Rb_tree_impl(_Node_allocator&& __a)
│ │ │ -
1334 : _Node_allocator(std::move(__a))
│ │ │ -
1335 { }
│ │ │ -
1336
│ │ │ -
1337 _Rb_tree_impl(_Rb_tree_impl&& __x, _Node_allocator&& __a)
│ │ │ -
1338 : _Node_allocator(std::move(__a)),
│ │ │ -
1339 _Base_key_compare(std::move(__x)),
│ │ │ -
1340 _Header_t(std::move(__x))
│ │ │ -
1341 { }
│ │ │ -
1342
│ │ │ -
1343 _Rb_tree_impl(const _Key_compare& __comp, _Node_allocator&& __a)
│ │ │ -
1344 : _Node_allocator(std::move(__a)), _Base_key_compare(__comp)
│ │ │ -
1345 { }
│ │ │ -
1346#endif
│ │ │ -
1347 };
│ │ │ -
1348
│ │ │ -
1349 _Rb_tree_impl<_Compare> _M_impl;
│ │ │ -
1350
│ │ │ -
1351 protected:
│ │ │ -
1352 _Base_ptr&
│ │ │ -
1353 _M_root() _GLIBCXX_NOEXCEPT
│ │ │ -
1354 { return this->_M_impl._M_header._M_parent; }
│ │ │ -
1355
│ │ │ -
1356 _Base_ptr
│ │ │ -
1357 _M_root() const _GLIBCXX_NOEXCEPT
│ │ │ -
1358 { return this->_M_impl._M_header._M_parent; }
│ │ │ -
1359
│ │ │ -
1360 _Base_ptr&
│ │ │ -
1361 _M_leftmost() _GLIBCXX_NOEXCEPT
│ │ │ -
1362 { return this->_M_impl._M_header._M_left; }
│ │ │ -
1363
│ │ │ -
1364 _Base_ptr
│ │ │ -
1365 _M_leftmost() const _GLIBCXX_NOEXCEPT
│ │ │ -
1366 { return this->_M_impl._M_header._M_left; }
│ │ │ +
1323#if !defined(__cpp_lib_barrier)
│ │ │ +
1324# if (__cplusplus >= 202002L) && (__cpp_aligned_new && __glibcxx_atomic_wait)
│ │ │ +
1325# define __glibcxx_barrier 201907L
│ │ │ +
1326# if defined(__glibcxx_want_all) || defined(__glibcxx_want_barrier)
│ │ │ +
1327# define __cpp_lib_barrier 201907L
│ │ │ +
1328# endif
│ │ │ +
1329# endif
│ │ │ +
1330#endif /* !defined(__cpp_lib_barrier) && defined(__glibcxx_want_barrier) */
│ │ │ +
1331#undef __glibcxx_want_barrier
│ │ │ +
1332
│ │ │ +
1333#if !defined(__cpp_lib_format)
│ │ │ +
1334# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED
│ │ │ +
1335# define __glibcxx_format 202311L
│ │ │ +
1336# if defined(__glibcxx_want_all) || defined(__glibcxx_want_format)
│ │ │ +
1337# define __cpp_lib_format 202311L
│ │ │ +
1338# endif
│ │ │ +
1339# elif (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
│ │ │ +
1340# define __glibcxx_format 202304L
│ │ │ +
1341# if defined(__glibcxx_want_all) || defined(__glibcxx_want_format)
│ │ │ +
1342# define __cpp_lib_format 202304L
│ │ │ +
1343# endif
│ │ │ +
1344# endif
│ │ │ +
1345#endif /* !defined(__cpp_lib_format) && defined(__glibcxx_want_format) */
│ │ │ +
1346#undef __glibcxx_want_format
│ │ │ +
1347
│ │ │ +
1348#if !defined(__cpp_lib_format_uchar)
│ │ │ +
1349# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
│ │ │ +
1350# define __glibcxx_format_uchar 202311L
│ │ │ +
1351# if defined(__glibcxx_want_all) || defined(__glibcxx_want_format_uchar)
│ │ │ +
1352# define __cpp_lib_format_uchar 202311L
│ │ │ +
1353# endif
│ │ │ +
1354# endif
│ │ │ +
1355#endif /* !defined(__cpp_lib_format_uchar) && defined(__glibcxx_want_format_uchar) */
│ │ │ +
1356#undef __glibcxx_want_format_uchar
│ │ │ +
1357
│ │ │ +
1358#if !defined(__cpp_lib_constexpr_complex)
│ │ │ +
1359# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
│ │ │ +
1360# define __glibcxx_constexpr_complex 201711L
│ │ │ +
1361# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_complex)
│ │ │ +
1362# define __cpp_lib_constexpr_complex 201711L
│ │ │ +
1363# endif
│ │ │ +
1364# endif
│ │ │ +
1365#endif /* !defined(__cpp_lib_constexpr_complex) && defined(__glibcxx_want_constexpr_complex) */
│ │ │ +
1366#undef __glibcxx_want_constexpr_complex
│ │ │
1367
│ │ │ -
1368 _Base_ptr&
│ │ │ -
1369 _M_rightmost() _GLIBCXX_NOEXCEPT
│ │ │ -
1370 { return this->_M_impl._M_header._M_right; }
│ │ │ -
1371
│ │ │ -
1372 _Base_ptr
│ │ │ -
1373 _M_rightmost() const _GLIBCXX_NOEXCEPT
│ │ │ -
1374 { return this->_M_impl._M_header._M_right; }
│ │ │ -
1375
│ │ │ -
1376 _Base_ptr
│ │ │ -
1377 _M_begin() const _GLIBCXX_NOEXCEPT
│ │ │ -
1378 { return this->_M_impl._M_header._M_parent; }
│ │ │ -
1379
│ │ │ -
1380 _Node_ptr
│ │ │ -
1381 _M_begin_node() const _GLIBCXX_NOEXCEPT
│ │ │ -
1382 {
│ │ │ -
1383 _Base_ptr __begin = this->_M_impl._M_header._M_parent;
│ │ │ -
1384 return __begin
│ │ │ -
1385 ? static_cast<_Node&>(*__begin)._M_node_ptr()
│ │ │ -
1386 : _Node_ptr();
│ │ │ -
1387 }
│ │ │ -
1388
│ │ │ -
1389 _Base_ptr
│ │ │ -
1390 _M_end() const _GLIBCXX_NOEXCEPT
│ │ │ -
1391 { return this->_M_impl._M_header._M_base_ptr(); }
│ │ │ -
1392
│ │ │ -
1393 static const _Key&
│ │ │ -
1394 _S_key(const _Node& __node)
│ │ │ -
1395 {
│ │ │ -
1396#if __cplusplus >= 201103L
│ │ │ -
1397 // If we're asking for the key we're presumably using the comparison
│ │ │ -
1398 // object, and so this is a good place to sanity check it.
│ │ │ -
1399 static_assert(__is_invocable<_Compare&, const _Key&, const _Key&>{},
│ │ │ -
1400 "comparison object must be invocable "
│ │ │ -
1401 "with two arguments of key type");
│ │ │ -
1402# if __cplusplus >= 201703L
│ │ │ -
1403 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1404 // 2542. Missing const requirements for associative containers
│ │ │ -
1405 if constexpr (__is_invocable<_Compare&, const _Key&, const _Key&>{})
│ │ │ -
1406 static_assert(
│ │ │ -
1407 is_invocable_v<const _Compare&, const _Key&, const _Key&>,
│ │ │ -
1408 "comparison object must be invocable as const");
│ │ │ -
1409# endif // C++17
│ │ │ -
1410#endif // C++11
│ │ │ -
1411
│ │ │ -
1412 return _KeyOfValue()(*__node._M_valptr());
│ │ │ -
1413 }
│ │ │ -
1414
│ │ │ -
1415 static const _Key&
│ │ │ -
1416 _S_key(_Base_ptr __x)
│ │ │ -
1417 { return _S_key(static_cast<const _Node&>(*__x)); }
│ │ │ -
1418
│ │ │ -
1419 static const _Key&
│ │ │ -
1420 _S_key(_Node_ptr __x)
│ │ │ -
1421 { return _S_key(*__x); }
│ │ │ +
1368#if !defined(__cpp_lib_constexpr_dynamic_alloc)
│ │ │ +
1369# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
│ │ │ +
1370# define __glibcxx_constexpr_dynamic_alloc 201907L
│ │ │ +
1371# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_dynamic_alloc)
│ │ │ +
1372# define __cpp_lib_constexpr_dynamic_alloc 201907L
│ │ │ +
1373# endif
│ │ │ +
1374# endif
│ │ │ +
1375#endif /* !defined(__cpp_lib_constexpr_dynamic_alloc) && defined(__glibcxx_want_constexpr_dynamic_alloc) */
│ │ │ +
1376#undef __glibcxx_want_constexpr_dynamic_alloc
│ │ │ +
1377
│ │ │ +
1378#if !defined(__cpp_lib_constexpr_string)
│ │ │ +
1379# if (__cplusplus >= 202002L) && _GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED && (defined(__glibcxx_is_constant_evaluated))
│ │ │ +
1380# define __glibcxx_constexpr_string 201907L
│ │ │ +
1381# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_string)
│ │ │ +
1382# define __cpp_lib_constexpr_string 201907L
│ │ │ +
1383# endif
│ │ │ +
1384# elif (__cplusplus >= 202002L) && !_GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED && (defined(__glibcxx_is_constant_evaluated))
│ │ │ +
1385# define __glibcxx_constexpr_string 201811L
│ │ │ +
1386# if defined(__gl TRUNCATED DUE TO SIZE LIMIT: 10485760 bytes