--- /srv/rebuilderd/tmp/rebuilderdjkkzIZ/inputs/libstdc++-14-doc_14.3.0-5_all.deb +++ /srv/rebuilderd/tmp/rebuilderdjkkzIZ/out/libstdc++-14-doc_14.3.0-5_all.deb ├── file list │ @@ -1,3 +1,3 @@ │ -rw-r--r-- 0 0 0 4 2025-08-10 09:43:37.000000 debian-binary │ --rw-r--r-- 0 0 0 178716 2025-08-10 09:43:37.000000 control.tar.xz │ --rw-r--r-- 0 0 0 10127064 2025-08-10 09:43:37.000000 data.tar.xz │ +-rw-r--r-- 0 0 0 178320 2025-08-10 09:43:37.000000 control.tar.xz │ +-rw-r--r-- 0 0 0 10161004 2025-08-10 09:43:37.000000 data.tar.xz ├── control.tar.xz │ ├── control.tar │ │ ├── ./control │ │ │ @@ -1,13 +1,13 @@ │ │ │ Package: libstdc++-14-doc │ │ │ Source: gcc-14 │ │ │ Version: 14.3.0-5 │ │ │ Architecture: all │ │ │ Maintainer: Debian GCC Maintainers │ │ │ -Installed-Size: 146431 │ │ │ +Installed-Size: 146432 │ │ │ Depends: gcc-14-base (>= 14) │ │ │ Conflicts: libstdc++-10-doc, libstdc++-11-doc, libstdc++-12-doc, libstdc++-13-doc, libstdc++-4.8-doc, libstdc++-4.9-doc, libstdc++-5-doc, libstdc++-6-doc, libstdc++-7-doc, libstdc++-8-doc, libstdc++-9-doc, libstdc++5-3.3-doc, libstdc++5-doc, libstdc++6-4.0-doc, libstdc++6-4.1-doc, libstdc++6-4.2-doc, libstdc++6-4.3-doc, libstdc++6-4.4-doc, libstdc++6-4.5-doc, libstdc++6-4.6-doc, libstdc++6-4.7-doc, libstdc++6-doc │ │ │ Section: doc │ │ │ Priority: optional │ │ │ Homepage: http://gcc.gnu.org/ │ │ │ Description: GNU Standard C++ Library v3 (documentation files) │ │ │ This package contains documentation files for the GNU stdc++ library. │ │ ├── ./md5sums │ │ │ ├── ./md5sums │ │ │ │┄ Files differ │ │ │ ├── line order │ │ │ │ @@ -451,79 +451,72 @@ │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00335_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00338.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00338_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00341.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00341.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00341_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00344.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00344.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00344_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00347.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00347_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00350.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00350.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00350_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00353.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00353_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00356.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00356.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00356_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00359.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00359_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00362.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00362_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00365.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00365.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00365_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00368.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00368_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00371.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00371.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00371_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00374.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00374.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00374_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00377.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00377.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00377_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00380.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00380_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00383.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00383.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00383_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00386.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00386.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00386_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00389.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00389_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00392.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00392_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00395.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00395.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00395_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00398.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00398.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00398_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00401.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00401_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00404.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00404.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00404_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00407.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00407.js │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00407_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00410.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00410.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00410_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00413.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00413.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00413_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00416.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00416.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00416_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00419.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00419.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00419_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00422.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00422.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00422_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00425.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00425.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00425_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00428.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00428.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00428_source.html │ │ │ │ @@ -536,309 +529,318 @@ │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00437.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00437.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00437_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00440.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00440.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00440_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00443.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00443.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00443_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00446.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00446.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00446_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00449.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00449.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00449_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00452.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00452.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00452_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00455.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00455.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00455_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00458.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00458.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00458_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00461.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00461_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00464.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00464.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00464_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00467.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00467_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00470.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00470_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00473.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00473_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00476.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00476_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00479.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00479_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00482.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00482_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00485.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00485.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00485_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00488.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00488.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00488_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00491.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00491.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00491_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00494.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00494.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00494_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00497.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00497.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00497_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00500.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00500.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00500_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00503.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00503.js │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00503_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00509.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00509.js │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00506.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00506.js │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00506_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00509_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00512.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00512.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00512_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00515.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00515.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00515_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00518.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00518_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00521.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00521.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00521_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00524.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00524_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00527.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00527_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00530.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00530.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00530_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00533.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00533_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00536.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00536_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00539.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00539_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00542.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00542.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00542_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00545.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00545.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00545_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00548.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00548.js │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00548_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00551.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00551.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00551_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00554.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00554.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00554_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00557.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00557.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00557_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00560.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00560.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00560_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00563.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00563.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00563_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00566.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00566.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00566_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00569.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00569.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00569_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00572.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00572.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00572_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00575.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00575.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00575_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00578.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00578_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00584.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00584_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00587.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00587_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00590.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00590_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00593.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00593.js │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00593_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00596.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00596.js │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00596_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00599.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00599_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00602.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00602_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00605.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00605.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00605_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00608.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00608.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00608_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00611.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00611_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00614.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00614_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00617.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00617.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00617_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00620.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00620.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00620_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00623.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00623.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00623_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00626.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00626.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00626_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00629.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00629.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00629_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00632.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00632.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00632_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00635.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00635.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00635_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00638.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00638.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00638_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00641.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00641.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00641_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00644.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00644.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00644_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00647.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00647.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00647_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00650.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00650_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00653.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00653.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00653_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00656.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00656.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00656_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00659.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00659.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00659_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00662.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00662.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00662_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00665.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00665.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00665_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00668.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00668.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00668_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00671.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00671_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00674.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00674_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00677.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00677_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00680.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00680.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00680_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00683.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00683.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00683_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00686.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00686.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00686_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00689.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00689.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00689_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00692.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00692.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00692_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00695.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00695.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00695_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00698.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00698.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00698_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00701.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00701.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00701_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00704.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00704.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00704_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00707.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00707.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00707_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00710.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00710.js │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00710_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00713.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00713.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00713_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00716.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00716.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00716_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00719.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00719.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00719_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00722.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00722.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00722_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00725.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00725.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00725_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00728.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00728.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00728_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00731.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00731.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00731_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00734.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00734.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00734_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00737.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00737.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00737_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00740.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00740.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00740_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00743.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00743.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00743_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00746.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00746.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00746_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00749.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00749.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00749_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00752.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00752.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00752_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00755.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00755_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00758.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00758_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00761.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00761_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00764.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00764.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00764_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00767.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00767_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00770.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00770_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00773.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00773.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00773_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00776.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00776.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00776_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00779.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00779.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00779_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00782.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00782.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00782_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00785.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00785.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00785_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00788.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00788_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00791.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00791_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00794.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00794.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00794_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00797.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00797.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00797_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00800.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00800_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00803.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00803_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00806.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00806.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00806_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00809.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00809.js │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00809_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00812.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00812_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00815.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00815.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00815_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00818.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00818.js │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00818_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00821.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00821_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00824.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00824.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00824_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00827.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00827_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00830.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00830_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00833.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00833_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00836.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00836_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00839.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00839_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00842.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00842_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00848.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00845.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00845_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00848_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00851.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00851_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00854.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00854_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00857.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00857.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00857_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00860.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00860_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00863.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00863_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00866.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00866_source.html │ │ │ │ @@ -847,30 +849,28 @@ │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00872.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00872_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00875.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00875_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00878.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00878_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00881.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00881.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00881_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00884.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00884_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00887.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00887_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00890.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00890_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00893.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00893.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00893_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00896.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00896_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00899.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00899.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00899_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00902.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00902.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00902_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00905.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00905.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00905_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00908.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00908_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00911.html │ │ │ │ @@ -885,57 +885,57 @@ │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00923.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00923.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00923_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00926.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00926.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00926_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00929.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00929.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00929_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00932.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00932.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00932_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00935.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00935.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00935_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00938.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00938.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00938_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00941.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00941_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00944.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00944.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00944_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00947.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00947.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00947_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00950.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00950.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00950_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00953.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00953.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00953_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00956.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00956.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00956_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00959.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00959.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00959_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00962.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00962.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00962_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00965.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00965.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00965_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00968.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00968.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00968_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00971.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00971.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00971_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00974.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00974.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00974_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00977.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00977.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00977_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00980.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00980_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00983.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00983_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00986.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00986_source.html │ │ │ │ @@ -954,48 +954,48 @@ │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01001.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01001.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01001_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01004.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01004.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01004_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01007.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01007.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01007_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01010.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01010.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01010_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01013.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01013.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01013_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01016.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01016.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01016_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01019.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01019.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01019_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01022.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01022.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01022_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01025.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01025.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01025_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01028.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01028.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01028_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01031.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01031.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01031_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01034.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01034.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01034_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01037.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01037.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01037_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01040.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01040.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01040_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01043.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01043.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01043_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01046.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01046.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01046_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01049.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01049.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01049_source.html │ │ │ │ @@ -1008,15 +1008,14 @@ │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01058.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01058.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01058_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01061.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01061.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01061_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01064.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01064.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01064_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01067.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01067.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01067_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01070.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01070.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01070_source.html │ │ │ │ @@ -1032,206 +1031,207 @@ │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01082.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01082.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01082_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01085.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01085.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01085_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01088.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01088.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01088_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01091.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01091.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01091_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01094.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01094.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01094_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01097.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01097.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01097_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01100.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01100.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01100_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01103.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01103.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01103_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01106.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01106.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01106_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01109.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01109.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01109_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01112.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01112.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01112_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01115.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01115.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01115_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01118.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01118.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01118_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01121_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01124_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01127.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01127_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01130_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01133_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01136_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01139_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01142_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01145_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01148_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01151_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01154_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01160.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01157_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01160_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01163.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01163_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01166.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01166_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01169.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01169_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01172.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01172.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01172_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01175.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01175.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01175_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01178.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01178_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01181.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01181.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01181_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01184.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01184_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01187.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01187.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01187_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01190.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01190.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01190_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01193.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01193_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01196.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01196.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01196_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01199.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01199.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01199_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01202.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01202.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01202_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01205.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01205.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01205_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01208.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01208.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01208_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01211.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01211_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01214.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01214_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01217.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01217.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01217_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01220.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01220.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01220_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01223.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01223.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01223_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01226.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01226.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01226_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01229.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01229.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01229_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01232.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01232_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01235.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01235.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01235_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01238.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01238.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01238_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01241.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01241.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01241_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01244.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01244.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01244_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01247.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01247_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01250.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01250.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01250_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01253.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01253.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01253_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01256.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01256.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01256_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01259.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01259_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01262.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01262.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01262_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01265.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01265.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01265_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01268.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01268.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01268_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01271.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01271.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01271_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01274.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01274_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01277.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01277_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01280.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01280.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01280_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01283.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01283.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01283_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01286.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01286.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01286_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01289.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01289_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01292.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01292.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01292_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01295.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01295.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01295_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01304.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01304.js │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01304_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01325.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01325.js │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01325_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01328.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01328.js │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01328_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01343.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01343_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01301.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01301.js │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01301_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01310.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01310.js │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01310_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01316.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01316_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01334.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01334.js │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01334_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01346.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01346_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01349.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01349.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01349_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01361.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01361.js │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01361_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01367.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01367_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01358.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01358_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01364.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01364.js │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01364_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01370.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01370.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01370_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01373.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01373.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01373_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01376.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01376_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01388.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01388_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01403.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01403_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01421.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01421.js │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01421_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01424.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01424_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01412.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01412.js │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01412_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01427.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01427_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01430.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01430.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01430_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01433.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01433.js │ │ │ │ @@ -1248,46 +1248,46 @@ │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01448.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01448.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01448_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01451.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01451.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01451_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01454.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01454.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01454_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01457.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01457.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01457_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01460.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01460.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01460_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01463.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01463_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01466.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01466.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01466_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01469.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01469.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01469_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01472.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01472.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01472_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01475.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01475.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01475_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01478.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01478.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01478_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01481.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01481.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01481_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01487.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01487.js │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01487_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01484.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01484.js │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01484_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01490.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01490.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01490_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01493.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01493.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01493_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01496.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01496.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01496_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01499.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01499.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01499_source.html │ │ │ │ @@ -1298,44 +1298,44 @@ │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01505_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01508.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01508_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01511.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01511.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01511_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01514.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01514.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01514_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01517.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01517.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01517_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01520.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01520_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01523.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01523_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01526.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01526_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01529.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01529.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01529_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01532.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01532.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01532_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01535.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01535.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01535_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01538.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01538.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01538_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01541.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01541.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01541_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01544.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01544.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01544_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01547.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01547_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01550.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01550.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01550_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01553.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01553_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01556.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01556_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01559.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01559_source.html ├── data.tar.xz │ ├── data.tar │ │ ├── file list │ │ │ @@ -193,28 +193,28 @@ │ │ │ -rw-r--r-- 0 root (0) root (0) 24047 2025-05-23 11:02:08.000000 ./usr/share/doc/gcc-14-base/libstdc++/manual/using_exceptions.html │ │ │ -rw-r--r-- 0 root (0) root (0) 38949 2025-05-23 11:02:08.000000 ./usr/share/doc/gcc-14-base/libstdc++/manual/using_headers.html │ │ │ -rw-r--r-- 0 root (0) root (0) 11068 2025-05-23 11:02:08.000000 ./usr/share/doc/gcc-14-base/libstdc++/manual/using_macros.html │ │ │ -rw-r--r-- 0 root (0) root (0) 6686 2025-05-23 11:02:08.000000 ./usr/share/doc/gcc-14-base/libstdc++/manual/using_namespaces.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5620 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/manual/utilities.html │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/ │ │ │ -rw-r--r-- 0 root (0) root (0) 2188 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/_formulas.tex.gz │ │ │ --rw-r--r-- 0 root (0) root (0) 2861 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/_formulas_dark.log │ │ │ +-rw-r--r-- 0 root (0) root (0) 2859 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/_formulas_dark.log │ │ │ -rw-r--r-- 0 root (0) root (0) 2203 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/_formulas_dark.tex.gz │ │ │ --rw-r--r-- 0 root (0) root (0) 2799 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00002.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16501 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00002_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3569 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00005.html │ │ │ --rw-r--r-- 0 root (0) root (0) 29884 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00005_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2791 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00002.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13906 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00002_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4127 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00005.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10021 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00005_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 2791 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00008.html │ │ │ -rw-r--r-- 0 root (0) root (0) 64582 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00008_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4119 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00011.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9059 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00011_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2791 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00014.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13906 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00014_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4127 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00017.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10021 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00017_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2799 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00011.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16501 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00011_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4119 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00014.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9059 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00014_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3569 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00017.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 29884 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00017_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 31307 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00020_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 21695 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00023.html │ │ │ -rw-r--r-- 0 root (0) root (0) 183 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00023.js │ │ │ -rw-r--r-- 0 root (0) root (0) 161978 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00023_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 26080 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00026.html │ │ │ -rw-r--r-- 0 root (0) root (0) 97 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00026.js │ │ │ -rw-r--r-- 0 root (0) root (0) 112811 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00026_source.html │ │ │ @@ -450,924 +450,924 @@ │ │ │ -rw-r--r-- 0 root (0) root (0) 12456 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00323_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 7617 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00326.html │ │ │ -rw-r--r-- 0 root (0) root (0) 36787 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00326_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4470 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00329.html │ │ │ -rw-r--r-- 0 root (0) root (0) 15324 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00329_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4969 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00332.html │ │ │ -rw-r--r-- 0 root (0) root (0) 15313 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00332_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5721 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00335.html │ │ │ --rw-r--r-- 0 root (0) root (0) 186 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00335.js │ │ │ --rw-r--r-- 0 root (0) root (0) 49351 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00335_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5084 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00338.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12015 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00338_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6748 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00341.html │ │ │ --rw-r--r-- 0 root (0) root (0) 272 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00341.js │ │ │ --rw-r--r-- 0 root (0) root (0) 53235 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00341_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6525 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00344.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9558 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00344_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3970 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00347.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16963 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00347_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7673 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00350.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14772 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00350_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3544 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00353.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11952 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00353_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7533 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00356.html │ │ │ --rw-r--r-- 0 root (0) root (0) 105 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00356.js │ │ │ --rw-r--r-- 0 root (0) root (0) 12985 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00356_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4794 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00359.html │ │ │ --rw-r--r-- 0 root (0) root (0) 202253 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00359_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 182528 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00362.html │ │ │ --rw-r--r-- 0 root (0) root (0) 96293 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00362_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3838 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00365.html │ │ │ --rw-r--r-- 0 root (0) root (0) 120630 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00365_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14228 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00368.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37863 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00368_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 127942 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00371.html │ │ │ --rw-r--r-- 0 root (0) root (0) 112429 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00371_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35679 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00374.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 75250 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00335.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3594 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00335.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 307158 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00335_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3838 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00338.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 120630 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00338_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14172 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00341.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 476 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00341.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 79608 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00341_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14874 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00344.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 738 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00344.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 73399 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00344_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5573 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00347.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 122528 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00347_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 30946 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00350.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6073 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00350.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 99218 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00350_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 18989 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00353.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 136572 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00353_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14228 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00356.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37863 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00356_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4028 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00362.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 46677 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00362_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 48404 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00365.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5907 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00365.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 276769 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00365_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7673 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00368.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14772 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00368_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 19366 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00371.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 476 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00371.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 155949 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00371_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 44833 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00374.html │ │ │ -rw-r--r-- 0 root (0) root (0) 177 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00374.js │ │ │ --rw-r--r-- 0 root (0) root (0) 436808 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00374_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 44833 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00377.html │ │ │ --rw-r--r-- 0 root (0) root (0) 177 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00377.js │ │ │ --rw-r--r-- 0 root (0) root (0) 509987 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00377_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4028 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00380.html │ │ │ --rw-r--r-- 0 root (0) root (0) 46677 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00380_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6029 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00383.html │ │ │ --rw-r--r-- 0 root (0) root (0) 170 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00383.js │ │ │ --rw-r--r-- 0 root (0) root (0) 25202 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00383_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5846 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00386.html │ │ │ --rw-r--r-- 0 root (0) root (0) 319 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00386.js │ │ │ --rw-r--r-- 0 root (0) root (0) 20289 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00386_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6928 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00389.html │ │ │ --rw-r--r-- 0 root (0) root (0) 34176 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00389_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12049 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00392.html │ │ │ --rw-r--r-- 0 root (0) root (0) 103842 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00392_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4379 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00395.html │ │ │ --rw-r--r-- 0 root (0) root (0) 56123 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00395_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15128 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00398.html │ │ │ --rw-r--r-- 0 root (0) root (0) 307 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00398.js │ │ │ --rw-r--r-- 0 root (0) root (0) 403463 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00398_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10006 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00401.html │ │ │ --rw-r--r-- 0 root (0) root (0) 393779 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00401_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11048 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00404.html │ │ │ --rw-r--r-- 0 root (0) root (0) 277 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00404.js │ │ │ --rw-r--r-- 0 root (0) root (0) 61499 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00404_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14172 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00407.html │ │ │ --rw-r--r-- 0 root (0) root (0) 476 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00407.js │ │ │ --rw-r--r-- 0 root (0) root (0) 79608 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00407_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17644 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00410.html │ │ │ --rw-r--r-- 0 root (0) root (0) 547 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00410.js │ │ │ --rw-r--r-- 0 root (0) root (0) 237937 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00410_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 19366 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00413.html │ │ │ --rw-r--r-- 0 root (0) root (0) 476 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00413.js │ │ │ --rw-r--r-- 0 root (0) root (0) 155949 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00413_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17779 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00416.html │ │ │ --rw-r--r-- 0 root (0) root (0) 547 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00416.js │ │ │ --rw-r--r-- 0 root (0) root (0) 226215 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00416_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 18391 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00419.html │ │ │ --rw-r--r-- 0 root (0) root (0) 547 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00419.js │ │ │ --rw-r--r-- 0 root (0) root (0) 259171 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00419_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13906 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00422.html │ │ │ --rw-r--r-- 0 root (0) root (0) 242 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00422.js │ │ │ --rw-r--r-- 0 root (0) root (0) 340203 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00422_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11741 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00425.html │ │ │ --rw-r--r-- 0 root (0) root (0) 612 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00425.js │ │ │ --rw-r--r-- 0 root (0) root (0) 418933 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00425_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11527 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00428.html │ │ │ --rw-r--r-- 0 root (0) root (0) 476 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00428.js │ │ │ --rw-r--r-- 0 root (0) root (0) 447664 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00428_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8837 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00431.html │ │ │ --rw-r--r-- 0 root (0) root (0) 85 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00431.js │ │ │ --rw-r--r-- 0 root (0) root (0) 283171 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00431_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6005 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00434.html │ │ │ --rw-r--r-- 0 root (0) root (0) 209 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00434.js │ │ │ --rw-r--r-- 0 root (0) root (0) 67496 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00434_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6830 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00437.html │ │ │ --rw-r--r-- 0 root (0) root (0) 251 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00437.js │ │ │ --rw-r--r-- 0 root (0) root (0) 46218 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00437_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10360 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00440.html │ │ │ --rw-r--r-- 0 root (0) root (0) 284 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00440.js │ │ │ --rw-r--r-- 0 root (0) root (0) 148641 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00440_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6720 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00443.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27536 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00443_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4803 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00446.html │ │ │ --rw-r--r-- 0 root (0) root (0) 64245 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00446_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 48404 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00449.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5907 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00449.js │ │ │ --rw-r--r-- 0 root (0) root (0) 276769 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00449_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4293 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00452.html │ │ │ --rw-r--r-- 0 root (0) root (0) 66764 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00452_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16169 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00455.html │ │ │ --rw-r--r-- 0 root (0) root (0) 485 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00455.js │ │ │ --rw-r--r-- 0 root (0) root (0) 364152 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00455_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 33659 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00458.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2024 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00458.js │ │ │ --rw-r--r-- 0 root (0) root (0) 144404 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00458_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4236 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00464.html │ │ │ --rw-r--r-- 0 root (0) root (0) 45211 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00464_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3029 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00467.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8478 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00467_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3839 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00470.html │ │ │ --rw-r--r-- 0 root (0) root (0) 93449 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00470_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4371 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00473.html │ │ │ --rw-r--r-- 0 root (0) root (0) 55998 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00473_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5564 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00476.html │ │ │ --rw-r--r-- 0 root (0) root (0) 95590 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00476_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4666 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00479.html │ │ │ --rw-r--r-- 0 root (0) root (0) 99623 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00479_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3843 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00482.html │ │ │ --rw-r--r-- 0 root (0) root (0) 43796 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00482_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8866 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00485.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1714 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00485.js │ │ │ --rw-r--r-- 0 root (0) root (0) 63570 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00485_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3835 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00488.html │ │ │ --rw-r--r-- 0 root (0) root (0) 89382 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00488_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4335 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00491.html │ │ │ --rw-r--r-- 0 root (0) root (0) 47732 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00491_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12798 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00494.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2872 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00494.js │ │ │ --rw-r--r-- 0 root (0) root (0) 41592 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00494_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 30946 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00497.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6073 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00497.js │ │ │ --rw-r--r-- 0 root (0) root (0) 99218 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00497_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5573 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00500.html │ │ │ --rw-r--r-- 0 root (0) root (0) 122528 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00500_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 53300 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00503.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2434 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00503.js │ │ │ --rw-r--r-- 0 root (0) root (0) 640653 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00503_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 42987 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00509.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3355 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00509.js │ │ │ --rw-r--r-- 0 root (0) root (0) 1296319 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00509_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7939 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00512.html │ │ │ --rw-r--r-- 0 root (0) root (0) 328 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00512.js │ │ │ --rw-r--r-- 0 root (0) root (0) 36054 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00512_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9196 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00515.html │ │ │ --rw-r--r-- 0 root (0) root (0) 614 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00515.js │ │ │ --rw-r--r-- 0 root (0) root (0) 49403 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00515_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3541 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00518.html │ │ │ --rw-r--r-- 0 root (0) root (0) 25492 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00518_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5981 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00521.html │ │ │ --rw-r--r-- 0 root (0) root (0) 93 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00521.js │ │ │ --rw-r--r-- 0 root (0) root (0) 93659 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00521_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5002 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00524.html │ │ │ --rw-r--r-- 0 root (0) root (0) 75466 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00524_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3044 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00530.html │ │ │ --rw-r--r-- 0 root (0) root (0) 36568 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00530_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7454 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00533.html │ │ │ --rw-r--r-- 0 root (0) root (0) 53475 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00533_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9654 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00536.html │ │ │ --rw-r--r-- 0 root (0) root (0) 115811 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00536_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4023 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00539.html │ │ │ --rw-r--r-- 0 root (0) root (0) 51116 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00539_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15760 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00542.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1207 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00542.js │ │ │ --rw-r--r-- 0 root (0) root (0) 44458 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00542_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4898 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00545.html │ │ │ --rw-r--r-- 0 root (0) root (0) 358547 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00545_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7532 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00548.html │ │ │ --rw-r--r-- 0 root (0) root (0) 312 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00548.js │ │ │ --rw-r--r-- 0 root (0) root (0) 411541 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00548_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7932 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00551.html │ │ │ --rw-r--r-- 0 root (0) root (0) 255481 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00551_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 28104 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00554.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1319 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00554.js │ │ │ --rw-r--r-- 0 root (0) root (0) 587179 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00554_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13340 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00557.html │ │ │ --rw-r--r-- 0 root (0) root (0) 128376 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00557_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8056 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00560.html │ │ │ --rw-r--r-- 0 root (0) root (0) 170 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00560.js │ │ │ --rw-r--r-- 0 root (0) root (0) 71387 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00560_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5136 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00563.html │ │ │ --rw-r--r-- 0 root (0) root (0) 141 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00563.js │ │ │ --rw-r--r-- 0 root (0) root (0) 171284 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00563_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5940 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00566.html │ │ │ --rw-r--r-- 0 root (0) root (0) 125856 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00566_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7664 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00569.html │ │ │ --rw-r--r-- 0 root (0) root (0) 162 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00569.js │ │ │ --rw-r--r-- 0 root (0) root (0) 236215 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00569_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 32824 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00572.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1993 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00572.js │ │ │ --rw-r--r-- 0 root (0) root (0) 235578 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00572_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4043 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00575.html │ │ │ --rw-r--r-- 0 root (0) root (0) 50545 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00575_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3580 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00578.html │ │ │ --rw-r--r-- 0 root (0) root (0) 339665 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00578_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4033 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00584.html │ │ │ --rw-r--r-- 0 root (0) root (0) 51558 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00584_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3990 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00587.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37993 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00587_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4803 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00590.html │ │ │ --rw-r--r-- 0 root (0) root (0) 204729 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00590_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7202 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00605.html │ │ │ --rw-r--r-- 0 root (0) root (0) 93 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00605.js │ │ │ --rw-r--r-- 0 root (0) root (0) 93382 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00605_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11442 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00608.html │ │ │ --rw-r--r-- 0 root (0) root (0) 565 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00608.js │ │ │ --rw-r--r-- 0 root (0) root (0) 307275 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00608_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5001 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00611.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13290 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00611_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 29291 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00614.html │ │ │ --rw-r--r-- 0 root (0) root (0) 232810 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00614_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5123 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00617.html │ │ │ --rw-r--r-- 0 root (0) root (0) 767127 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00617_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6136 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00620.html │ │ │ --rw-r--r-- 0 root (0) root (0) 556 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00620.js │ │ │ --rw-r--r-- 0 root (0) root (0) 155806 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00620_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 64852 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00623.html │ │ │ --rw-r--r-- 0 root (0) root (0) 335 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00623.js │ │ │ --rw-r--r-- 0 root (0) root (0) 718789 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00623_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 75250 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00626.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3594 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00626.js │ │ │ --rw-r--r-- 0 root (0) root (0) 307158 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00626_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5493 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00629.html │ │ │ --rw-r--r-- 0 root (0) root (0) 22086 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00629_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8241 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00632.html │ │ │ --rw-r--r-- 0 root (0) root (0) 167 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00632.js │ │ │ --rw-r--r-- 0 root (0) root (0) 182592 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00632_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 55208 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00635.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1629 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00635.js │ │ │ --rw-r--r-- 0 root (0) root (0) 820284 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00635_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4815 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00638.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37125 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00638_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5052 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00641.html │ │ │ --rw-r--r-- 0 root (0) root (0) 108720 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00641_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15190 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00644.html │ │ │ --rw-r--r-- 0 root (0) root (0) 72731 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00644_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17566 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00647.html │ │ │ --rw-r--r-- 0 root (0) root (0) 73507 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00647_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3499 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00650.html │ │ │ --rw-r--r-- 0 root (0) root (0) 62205 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00650_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3536 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00653.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21943 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00653_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 18319 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00656.html │ │ │ --rw-r--r-- 0 root (0) root (0) 423 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00656.js │ │ │ --rw-r--r-- 0 root (0) root (0) 51583 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00656_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11617 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00659.html │ │ │ --rw-r--r-- 0 root (0) root (0) 48623 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00659_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 36659 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00662_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 24090 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00665.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1102 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00665.js │ │ │ --rw-r--r-- 0 root (0) root (0) 240785 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00665_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4379 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00668.html │ │ │ --rw-r--r-- 0 root (0) root (0) 102 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00668.js │ │ │ --rw-r--r-- 0 root (0) root (0) 85552 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00668_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13827 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00671.html │ │ │ --rw-r--r-- 0 root (0) root (0) 73302 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00671_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 30720 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00674.html │ │ │ --rw-r--r-- 0 root (0) root (0) 175620 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00674_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 137380 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00680.html │ │ │ --rw-r--r-- 0 root (0) root (0) 341447 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00680_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4431 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00683.html │ │ │ --rw-r--r-- 0 root (0) root (0) 152509 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00683_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13059 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00686.html │ │ │ --rw-r--r-- 0 root (0) root (0) 934 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00686.js │ │ │ --rw-r--r-- 0 root (0) root (0) 193532 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00686_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7040 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00689.html │ │ │ --rw-r--r-- 0 root (0) root (0) 323 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00689.js │ │ │ --rw-r--r-- 0 root (0) root (0) 26486 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00689_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4088 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00692.html │ │ │ --rw-r--r-- 0 root (0) root (0) 102 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00692.js │ │ │ --rw-r--r-- 0 root (0) root (0) 25048 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00692_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 20905 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00695.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1165 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00695.js │ │ │ --rw-r--r-- 0 root (0) root (0) 269225 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00695_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 24568 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00698.html │ │ │ --rw-r--r-- 0 root (0) root (0) 942 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00698.js │ │ │ --rw-r--r-- 0 root (0) root (0) 95843 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00698_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14874 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00701.html │ │ │ --rw-r--r-- 0 root (0) root (0) 738 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00701.js │ │ │ --rw-r--r-- 0 root (0) root (0) 73399 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00701_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9417 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00704.html │ │ │ --rw-r--r-- 0 root (0) root (0) 103 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00704.js │ │ │ --rw-r--r-- 0 root (0) root (0) 54982 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00704_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14490 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00707.html │ │ │ --rw-r--r-- 0 root (0) root (0) 165 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00707.js │ │ │ --rw-r--r-- 0 root (0) root (0) 44403 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00707_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27170 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00713.html │ │ │ --rw-r--r-- 0 root (0) root (0) 310 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00713.js │ │ │ --rw-r--r-- 0 root (0) root (0) 276204 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00713_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11379 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00716.html │ │ │ --rw-r--r-- 0 root (0) root (0) 320 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00716.js │ │ │ --rw-r--r-- 0 root (0) root (0) 49626 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00716_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 131077 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00719.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2245 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00719.js │ │ │ --rw-r--r-- 0 root (0) root (0) 399869 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00719_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 188233 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00722.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10313 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00722.js │ │ │ --rw-r--r-- 0 root (0) root (0) 1011348 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00722_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3005 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00725.html │ │ │ --rw-r--r-- 0 root (0) root (0) 28377 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00725_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4935 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00728.html │ │ │ --rw-r--r-- 0 root (0) root (0) 85456 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00728_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 29695 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00731.html │ │ │ --rw-r--r-- 0 root (0) root (0) 163 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00731.js │ │ │ --rw-r--r-- 0 root (0) root (0) 147628 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00731_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3048 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00734.html │ │ │ --rw-r--r-- 0 root (0) root (0) 97408 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00734_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5679 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00737.html │ │ │ --rw-r--r-- 0 root (0) root (0) 392 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00737.js │ │ │ --rw-r--r-- 0 root (0) root (0) 38135 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00737_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3012 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00740.html │ │ │ --rw-r--r-- 0 root (0) root (0) 182638 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00740_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3031 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00743.html │ │ │ --rw-r--r-- 0 root (0) root (0) 113902 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00743_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 141721 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00746.html │ │ │ --rw-r--r-- 0 root (0) root (0) 661330 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00746_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 31603 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00749.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2238 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00749.js │ │ │ --rw-r--r-- 0 root (0) root (0) 80745 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00749_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9902 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00752.html │ │ │ --rw-r--r-- 0 root (0) root (0) 251 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00752.js │ │ │ --rw-r--r-- 0 root (0) root (0) 50481 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00752_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6988 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00755.html │ │ │ --rw-r--r-- 0 root (0) root (0) 47125 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00755_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 36133 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00758.html │ │ │ --rw-r--r-- 0 root (0) root (0) 58532 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00758_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2996 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00761.html │ │ │ --rw-r--r-- 0 root (0) root (0) 78024 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00761_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15716 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00764.html │ │ │ --rw-r--r-- 0 root (0) root (0) 622 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00764.js │ │ │ --rw-r--r-- 0 root (0) root (0) 48542 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00764_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3520 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00767.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16109 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00767_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3022 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00770.html │ │ │ --rw-r--r-- 0 root (0) root (0) 144070 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00770_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4769 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00773.html │ │ │ --rw-r--r-- 0 root (0) root (0) 155 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00773.js │ │ │ --rw-r--r-- 0 root (0) root (0) 177030 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00773_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12137 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00776.html │ │ │ --rw-r--r-- 0 root (0) root (0) 92 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00776.js │ │ │ --rw-r--r-- 0 root (0) root (0) 32310 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00776_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10367 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00779.html │ │ │ --rw-r--r-- 0 root (0) root (0) 77 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00779.js │ │ │ --rw-r--r-- 0 root (0) root (0) 55524 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00779_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14283 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00782.html │ │ │ --rw-r--r-- 0 root (0) root (0) 24001 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00782_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3539 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00785.html │ │ │ --rw-r--r-- 0 root (0) root (0) 48518 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00785_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14034 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00788_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5888 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00791.html │ │ │ --rw-r--r-- 0 root (0) root (0) 89574 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00791_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8095 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00794.html │ │ │ --rw-r--r-- 0 root (0) root (0) 263 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00794.js │ │ │ --rw-r--r-- 0 root (0) root (0) 170684 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00794_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11336 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00797.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15823 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00797_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 18989 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00800.html │ │ │ --rw-r--r-- 0 root (0) root (0) 136572 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00800_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3020 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00803.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8434 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00803_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14758 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00806.html │ │ │ --rw-r--r-- 0 root (0) root (0) 847 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00806.js │ │ │ --rw-r--r-- 0 root (0) root (0) 322466 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00806_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4299 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00812.html │ │ │ --rw-r--r-- 0 root (0) root (0) 53138 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00812_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5109 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00815.html │ │ │ --rw-r--r-- 0 root (0) root (0) 171 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00815.js │ │ │ --rw-r--r-- 0 root (0) root (0) 23307 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00815_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 136705 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00821_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 136699 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00824_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 43804 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00827_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 28165 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00830_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 349244 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00833.html │ │ │ --rw-r--r-- 0 root (0) root (0) 276272 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00833_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2859 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00836_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3640 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00839.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15799 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00839_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3656 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00842.html │ │ │ --rw-r--r-- 0 root (0) root (0) 29163 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00842_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4324 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00848.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21530 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00848_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7629 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00851.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21411 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00851_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4782 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00854.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11478 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00854_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4566 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00857.html │ │ │ --rw-r--r-- 0 root (0) root (0) 100 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00857.js │ │ │ --rw-r--r-- 0 root (0) root (0) 13383 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00857_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3629 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00860.html │ │ │ --rw-r--r-- 0 root (0) root (0) 26083 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00860_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3632 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00863.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35370 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00863_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3021 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00866.html │ │ │ --rw-r--r-- 0 root (0) root (0) 22003 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00866_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3033 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00869.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13296 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00869_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3021 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00872.html │ │ │ --rw-r--r-- 0 root (0) root (0) 53535 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00872_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6355 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00875.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27936 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00875_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3120 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00878.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7891 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00878_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13873 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00881.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11749 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00881_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6735 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00884.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8869 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00884_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6615 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00887.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17020 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00887_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3640 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00890.html │ │ │ --rw-r--r-- 0 root (0) root (0) 18935 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00890_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4117 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00893.html │ │ │ --rw-r--r-- 0 root (0) root (0) 64 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00893.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14705 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00893_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 509987 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00374_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11442 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00377.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 565 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00377.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 307275 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00377_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4033 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00380.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 51558 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00380_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4379 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00383.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 56123 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00383_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6830 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00386.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 251 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00386.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 46218 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00386_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4803 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00389.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 204729 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00389_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4431 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00392.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 152509 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00392_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7533 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00395.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 105 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00395.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 12985 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00395_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 33659 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00398.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2024 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00398.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 144404 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00398_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 137380 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00401.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 341447 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00401_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16169 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00404.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 485 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00404.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 364152 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00404_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4794 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00410.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 202253 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00410_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15190 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00413.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 72731 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00413_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11336 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00416.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15823 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00416_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4803 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00419.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 64245 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00419_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13827 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00422.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 73302 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00422_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15128 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00425.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 307 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00425.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 403463 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00425_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 42987 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00428.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3355 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00428.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 1296319 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00428_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8056 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00431.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 170 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00431.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 71387 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00431_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4088 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00434.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 102 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00434.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 25048 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00434_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15716 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00437.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 622 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00437.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 48542 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00437_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 55208 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00440.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1629 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00440.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 820284 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00440_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14758 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00443.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 847 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00443.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 322466 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00443_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11741 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00446.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 612 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00446.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 418933 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00446_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5493 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00449.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 22086 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00449_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17644 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00452.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 547 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00452.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 237937 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00452_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3541 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00455.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 25492 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00455_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4236 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00458.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 45211 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00458_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4898 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00461.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 358547 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00461_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8095 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00464.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 263 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00464.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 170684 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00464_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3835 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00467.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 89382 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00467_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 182528 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00470.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 96293 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00470_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7454 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00473.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 53475 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00473_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 127942 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00476.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 112429 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00476_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4666 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00482.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 99623 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00482_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5002 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00485.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 75466 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00485_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7202 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00488.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 93 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00488.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 93382 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00488_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10367 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00491.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 77 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00491.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 55524 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00491_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3520 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00494.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16109 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00494_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8866 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00497.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1714 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00497.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 63570 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00497_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8837 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00500.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 85 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00500.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 283171 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00500_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13059 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00506.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 934 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00506.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 193532 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00506_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14034 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00509_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5846 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00512.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 319 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00512.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 20289 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00512_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 20905 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00515.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1165 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00515.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 269225 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00515_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3031 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00521.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 113902 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00521_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3012 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00524.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 182638 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00524_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4293 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00527.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 66764 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00527_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 32824 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00530.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1993 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00530.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 235578 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00530_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 30720 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00533.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 175620 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00533_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3990 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00536.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37993 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00536_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6720 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00539.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27536 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00539_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 24568 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00542.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 942 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00542.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 95843 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00542_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27170 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00545.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 310 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00545.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 276204 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00545_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5109 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00551.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 171 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00551.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 23307 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00551_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3970 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00554.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16963 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00554_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35679 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00557.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 177 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00557.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 436808 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00557_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3020 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00560.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8434 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00560_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4371 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00563.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 55998 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00563_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4769 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00566.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 155 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00566.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 177030 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00566_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6988 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00569.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 47125 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00569_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 29291 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00572.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 232810 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00572_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5981 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00575.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 93 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00575.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 93659 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00575_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7932 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00590.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 255481 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00590_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5721 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00593.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 186 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00593.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 49351 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00593_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9417 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00596.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 103 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00596.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 54982 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00596_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10006 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00599.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 393779 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00599_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6928 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00602.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 34176 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00602_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4815 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00605.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37125 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00605_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9902 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00608.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 251 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00608.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 50481 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00608_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2996 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00611.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 78024 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00611_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 36133 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00614.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 58532 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00614_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5136 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00617.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 141 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00617.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 171284 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00617_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3022 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00620.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 144070 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00620_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4023 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00623.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 51116 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00623_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5564 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00626.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 95590 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00626_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8241 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00629.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 167 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00629.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 182592 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00629_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11527 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00632.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 476 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00632.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 447664 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00632_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14283 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00635.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 24001 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00635_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 18391 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00638.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 547 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00638.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 259171 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00638_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9196 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00641.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 614 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00641.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 49403 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00641_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7040 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00644.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 323 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00644.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 26486 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00644_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13906 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00647.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 242 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00647.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 340203 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00647_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5052 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00650.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 108720 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00650_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6136 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00653.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 556 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00653.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 155806 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00653_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3048 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00656.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 97408 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00656_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7532 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00659.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 312 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00659.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 411541 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00659_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 53300 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00662.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2434 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00662.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 640653 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00662_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4335 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00665.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 47732 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00665_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5084 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00668.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12015 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00668_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4043 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00671.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 50545 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00671_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5123 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00677.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 767127 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00677_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5679 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00680.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 392 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00680.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 38135 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00680_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 29695 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00683.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 163 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00683.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 147628 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00683_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11379 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00686.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 320 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00686.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 49626 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00686_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6029 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00689.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 170 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00689.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 25202 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00689_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3499 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00692.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 62205 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00692_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6748 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00695.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 272 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00695.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 53235 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00695_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4299 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00698.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 53138 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00698_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3029 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00701.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8478 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00701_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7939 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00704.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 328 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00704.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 36054 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00704_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 28104 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00707.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1319 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00707.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 587179 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00707_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14490 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00710.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 165 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00710.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 44403 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00710_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3044 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00713.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 36568 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00713_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5888 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00716.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 89574 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00716_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3843 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00719.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 43796 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00719_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5001 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00722.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13290 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00722_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 188233 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00725.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10313 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00725.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 1011348 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00725_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12798 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00728.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2872 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00728.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 41592 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00728_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4935 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00731.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 85456 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00731_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 131077 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00734.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2245 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00734.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 399869 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00734_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12137 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00737.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 92 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00737.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 32310 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00737_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 18319 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00740.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 423 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00740.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 51583 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00740_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11048 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00743.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 277 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00743.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 61499 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00743_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4379 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00746.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 102 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00746.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 85552 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00746_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3536 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00749.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21943 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00749_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9654 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00752.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 115811 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00752_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3544 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00755.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11952 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00755_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3005 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00758.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 28377 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00758_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12049 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00761.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 103842 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00761_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17779 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00764.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 547 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00764.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 226215 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00764_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 141721 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00767.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 661330 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00767_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3839 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00770.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 93449 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00770_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 36659 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00773_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7664 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00776.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 162 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00776.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 236215 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00776_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5940 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00779.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 125856 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00779_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 31603 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00782.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2238 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00782.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 80745 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00782_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10360 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00785.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 284 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00785.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 148641 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00785_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3539 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00788.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 48518 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00788_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17566 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00794.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 73507 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00794_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15760 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00797.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1207 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00797.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 44458 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00797_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13340 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00800.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 128376 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00800_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11617 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00803.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 48623 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00803_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6525 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00806.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9558 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00806_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6005 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00809.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 209 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00809.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 67496 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00809_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3580 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00812.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 339665 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00812_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 64852 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00815.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 335 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00815.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 718789 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00815_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 24090 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00818.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1102 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00818.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 240785 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00818_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3021 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00821.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 22003 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00821_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4117 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00824.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 64 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00824.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14705 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00824_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6355 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00827.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27936 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00827_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3120 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00830.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7891 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00830_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 28165 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00833_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4782 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00836.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11478 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00836_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3033 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00839.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13296 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00839_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 136705 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00842_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3021 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00845.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 53535 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00845_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 43804 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00848_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6735 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00851.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8869 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00851_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3640 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00857.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15799 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00857_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13873 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00860.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11749 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00860_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4324 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00863.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21530 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00863_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6615 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00866.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17020 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00866_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3629 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00869.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 26083 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00869_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7629 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00872.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21411 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00872_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3656 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00875.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 29163 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00875_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 349244 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00878.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 276272 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00878_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4566 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00881.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 100 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00881.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 13383 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00881_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3640 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00884.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 18935 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00884_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3632 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00887.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35370 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00887_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 136699 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00890_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2859 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00893_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4162 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00896.html │ │ │ -rw-r--r-- 0 root (0) root (0) 27344 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00896_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3036 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00899.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12461 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00899_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6270 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00902.html │ │ │ --rw-r--r-- 0 root (0) root (0) 166 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00902.js │ │ │ --rw-r--r-- 0 root (0) root (0) 35929 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00902_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4302 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00905.html │ │ │ --rw-r--r-- 0 root (0) root (0) 74 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00905.js │ │ │ --rw-r--r-- 0 root (0) root (0) 66496 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00905_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4302 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00899.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 74 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00899.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 66496 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00899_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3036 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00902.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12461 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00902_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6270 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00905.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 166 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00905.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 35929 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00905_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 11126 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00908.html │ │ │ -rw-r--r-- 0 root (0) root (0) 75701 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00908_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 11086 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00911.html │ │ │ -rw-r--r-- 0 root (0) root (0) 72461 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00911_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4136 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00914.html │ │ │ -rw-r--r-- 0 root (0) root (0) 31990 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00914_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14128 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00917.html │ │ │ --rw-r--r-- 0 root (0) root (0) 96 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00917.js │ │ │ --rw-r--r-- 0 root (0) root (0) 127028 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00917_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4917 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00920.html │ │ │ --rw-r--r-- 0 root (0) root (0) 19934 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00920_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4044 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00923.html │ │ │ --rw-r--r-- 0 root (0) root (0) 105 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00923.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34608 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00923_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4302 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00926.html │ │ │ --rw-r--r-- 0 root (0) root (0) 171 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00926.js │ │ │ --rw-r--r-- 0 root (0) root (0) 41308 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00926_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4829 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00929.html │ │ │ --rw-r--r-- 0 root (0) root (0) 33841 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00929_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5184 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00932.html │ │ │ --rw-r--r-- 0 root (0) root (0) 381 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00932.js │ │ │ --rw-r--r-- 0 root (0) root (0) 31340 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00932_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4877 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00935.html │ │ │ --rw-r--r-- 0 root (0) root (0) 19369 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00935_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8327 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00938.html │ │ │ --rw-r--r-- 0 root (0) root (0) 190 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00938.js │ │ │ --rw-r--r-- 0 root (0) root (0) 100628 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00938_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 30680 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00941.html │ │ │ --rw-r--r-- 0 root (0) root (0) 97232 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00941_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5184 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00917.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 381 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00917.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 31340 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00917_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8699 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00920.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 97331 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00920_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4041 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00923.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 138 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00923.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 28728 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00923_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14764 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00926.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 106 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00926.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 134074 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00926_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 68087 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00929.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1361 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00929.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 88865 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00929_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4829 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00932.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 33841 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00932_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8327 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00935.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 190 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00935.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 100628 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00935_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4302 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00938.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 171 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00938.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 41308 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00938_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4877 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00941.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 19369 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00941_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 18397 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00944.html │ │ │ -rw-r--r-- 0 root (0) root (0) 347 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00944.js │ │ │ -rw-r--r-- 0 root (0) root (0) 223515 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00944_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4041 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00947.html │ │ │ --rw-r--r-- 0 root (0) root (0) 138 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00947.js │ │ │ --rw-r--r-- 0 root (0) root (0) 28728 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00947_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4954 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00950.html │ │ │ --rw-r--r-- 0 root (0) root (0) 241 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00950.js │ │ │ --rw-r--r-- 0 root (0) root (0) 67070 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00950_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14223 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00953.html │ │ │ --rw-r--r-- 0 root (0) root (0) 101 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00953.js │ │ │ --rw-r--r-- 0 root (0) root (0) 125681 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00953_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14764 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00956.html │ │ │ --rw-r--r-- 0 root (0) root (0) 106 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00956.js │ │ │ --rw-r--r-- 0 root (0) root (0) 134074 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00956_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14669 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00959.html │ │ │ --rw-r--r-- 0 root (0) root (0) 101 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00959.js │ │ │ --rw-r--r-- 0 root (0) root (0) 156110 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00959_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 68087 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00962.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1361 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00962.js │ │ │ --rw-r--r-- 0 root (0) root (0) 88865 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00962_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21830 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00965.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1318 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00965.js │ │ │ --rw-r--r-- 0 root (0) root (0) 63444 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00965_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 25461 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00968.html │ │ │ --rw-r--r-- 0 root (0) root (0) 196 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00968.js │ │ │ --rw-r--r-- 0 root (0) root (0) 81785 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00968_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8699 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00971.html │ │ │ --rw-r--r-- 0 root (0) root (0) 97331 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00971_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37586 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00974.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27381 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00974_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10640 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00977.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13102 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00977_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10640 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00947.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13102 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00947_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14128 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00950.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 96 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00950.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 127028 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00950_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 25461 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00953.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 196 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00953.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 81785 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00953_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4044 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00956.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 105 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00956.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34608 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00956_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4917 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00959.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 19934 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00959_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4954 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00962.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 241 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00962.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 67070 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00962_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 30680 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00965.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 97232 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00965_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37586 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00968.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27381 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00968_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14223 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00971.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 101 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00971.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 125681 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00971_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21830 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00974.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1318 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00974.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 63444 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00974_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14669 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00977.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 101 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00977.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 156110 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00977_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5298 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00980.html │ │ │ -rw-r--r-- 0 root (0) root (0) 14654 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00980_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 50444 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00983.html │ │ │ -rw-r--r-- 0 root (0) root (0) 374809 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00983_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 14274 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00986.html │ │ │ -rw-r--r-- 0 root (0) root (0) 135249 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00986_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6663 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00989.html │ │ │ --rw-r--r-- 0 root (0) root (0) 203 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00989.js │ │ │ --rw-r--r-- 0 root (0) root (0) 58187 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00989_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5135 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00992.html │ │ │ --rw-r--r-- 0 root (0) root (0) 194 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00992.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34463 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00992_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10552 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00995.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3298 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00995.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34833 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00995_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8894 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00998.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1255 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00998.js │ │ │ --rw-r--r-- 0 root (0) root (0) 44167 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00998_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9694 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01001.html │ │ │ --rw-r--r-- 0 root (0) root (0) 590 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01001.js │ │ │ --rw-r--r-- 0 root (0) root (0) 48961 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01001_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8442 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01004.html │ │ │ --rw-r--r-- 0 root (0) root (0) 172 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01004.js │ │ │ --rw-r--r-- 0 root (0) root (0) 91723 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01004_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8298 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01007.html │ │ │ --rw-r--r-- 0 root (0) root (0) 79321 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01007_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5109 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01010.html │ │ │ --rw-r--r-- 0 root (0) root (0) 181 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01010.js │ │ │ --rw-r--r-- 0 root (0) root (0) 32010 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01010_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9518 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01013.html │ │ │ --rw-r--r-- 0 root (0) root (0) 836 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01013.js │ │ │ --rw-r--r-- 0 root (0) root (0) 114861 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01013_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4035 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01016.html │ │ │ --rw-r--r-- 0 root (0) root (0) 82 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01016.js │ │ │ --rw-r--r-- 0 root (0) root (0) 26180 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01016_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6308 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01019.html │ │ │ --rw-r--r-- 0 root (0) root (0) 286 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01019.js │ │ │ --rw-r--r-- 0 root (0) root (0) 36292 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01019_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5379 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01022.html │ │ │ --rw-r--r-- 0 root (0) root (0) 193 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01022.js │ │ │ --rw-r--r-- 0 root (0) root (0) 35924 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01022_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7300 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01025.html │ │ │ --rw-r--r-- 0 root (0) root (0) 366 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01025.js │ │ │ --rw-r--r-- 0 root (0) root (0) 79607 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01025_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6163 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01028.html │ │ │ --rw-r--r-- 0 root (0) root (0) 299 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01028.js │ │ │ --rw-r--r-- 0 root (0) root (0) 44128 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01028_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3005 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01031.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10443 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01031_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4629 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01034.html │ │ │ --rw-r--r-- 0 root (0) root (0) 119 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01034.js │ │ │ --rw-r--r-- 0 root (0) root (0) 26868 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01034_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4696 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01037.html │ │ │ --rw-r--r-- 0 root (0) root (0) 132 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01037.js │ │ │ --rw-r--r-- 0 root (0) root (0) 22961 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01037_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4638 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01040.html │ │ │ --rw-r--r-- 0 root (0) root (0) 125 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01040.js │ │ │ --rw-r--r-- 0 root (0) root (0) 22831 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01040_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 38827 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01043.html │ │ │ --rw-r--r-- 0 root (0) root (0) 40828 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01043_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7825 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01046.html │ │ │ --rw-r--r-- 0 root (0) root (0) 790 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01046.js │ │ │ --rw-r--r-- 0 root (0) root (0) 98377 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01046_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37409 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01049.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2542 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01049.js │ │ │ --rw-r--r-- 0 root (0) root (0) 355303 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01049_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7825 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01052.html │ │ │ --rw-r--r-- 0 root (0) root (0) 371 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01052.js │ │ │ --rw-r--r-- 0 root (0) root (0) 104271 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01052_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7951 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01055.html │ │ │ --rw-r--r-- 0 root (0) root (0) 455 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01055.js │ │ │ --rw-r--r-- 0 root (0) root (0) 48661 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01055_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8183 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01058.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1311 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01058.js │ │ │ --rw-r--r-- 0 root (0) root (0) 175080 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01058_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5960 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01061.html │ │ │ --rw-r--r-- 0 root (0) root (0) 258 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01061.js │ │ │ --rw-r--r-- 0 root (0) root (0) 32975 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01061_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4420 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01064.html │ │ │ --rw-r--r-- 0 root (0) root (0) 248 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01064.js │ │ │ --rw-r--r-- 0 root (0) root (0) 37044 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01064_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9675 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01067.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1564 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01067.js │ │ │ --rw-r--r-- 0 root (0) root (0) 79303 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01067_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4899 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01070.html │ │ │ --rw-r--r-- 0 root (0) root (0) 116 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01070.js │ │ │ --rw-r--r-- 0 root (0) root (0) 24126 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01070_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5283 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01073.html │ │ │ --rw-r--r-- 0 root (0) root (0) 399 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01073.js │ │ │ --rw-r--r-- 0 root (0) root (0) 43145 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01073_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7090 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01076.html │ │ │ --rw-r--r-- 0 root (0) root (0) 344 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01076.js │ │ │ --rw-r--r-- 0 root (0) root (0) 71376 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01076_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14310 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01079.html │ │ │ --rw-r--r-- 0 root (0) root (0) 849 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01079.js │ │ │ --rw-r--r-- 0 root (0) root (0) 19523 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01079_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14310 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00989.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 849 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00989.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 19523 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00989_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9694 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00992.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 590 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00992.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 48961 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00992_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5379 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00995.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 193 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00995.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 35924 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00995_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4638 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00998.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 125 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00998.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 22831 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00998_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 183964 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01001.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 165 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01001.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 426769 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01001_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10552 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01004.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3298 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01004.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34833 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01004_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9518 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01007.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 836 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01007.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 114861 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01007_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8298 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01010.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 79321 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01010_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4899 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01013.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 116 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01013.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 24126 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01013_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8183 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01016.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1311 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01016.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 175080 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01016_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10842 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01019.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 575 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01019.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 15208 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01019_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 38827 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01022.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 40828 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01022_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 47208 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01025.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 93933 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01025_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13968 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01028.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1422 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01028.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 88333 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01028_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9675 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01031.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1564 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01031.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 79303 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01031_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7825 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01034.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 790 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01034.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 98377 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01034_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5135 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01037.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 194 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01037.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34463 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01037_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4370 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01040.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 94 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01040.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14471 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01040_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8894 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01043.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1255 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01043.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 44167 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01043_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5109 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01046.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 181 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01046.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 32010 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01046_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6308 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01049.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 286 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01049.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 36292 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01049_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5960 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01052.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 258 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01052.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 32975 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01052_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4035 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01055.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 82 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01055.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 26180 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01055_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8442 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01058.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 172 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01058.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 91723 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01058_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6663 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01061.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 203 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01061.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 58187 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01061_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3005 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01064.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10443 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01064_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4420 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01067.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 248 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01067.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 37044 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01067_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7300 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01070.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 366 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01070.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 79607 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01070_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4696 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01073.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 132 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01073.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 22961 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01073_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7951 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01076.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 455 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01076.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 48661 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01076_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7974 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01079.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 436 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01079.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 96089 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01079_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5271 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01082.html │ │ │ -rw-r--r-- 0 root (0) root (0) 186 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01082.js │ │ │ -rw-r--r-- 0 root (0) root (0) 18657 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01082_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10842 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01085.html │ │ │ --rw-r--r-- 0 root (0) root (0) 575 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01085.js │ │ │ --rw-r--r-- 0 root (0) root (0) 15208 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01085_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4370 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01088.html │ │ │ --rw-r--r-- 0 root (0) root (0) 94 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01088.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14471 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01088_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3048 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01091.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9659 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01091_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13968 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01094.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1422 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01094.js │ │ │ --rw-r--r-- 0 root (0) root (0) 88333 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01094_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7974 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01097.html │ │ │ --rw-r--r-- 0 root (0) root (0) 436 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01097.js │ │ │ --rw-r--r-- 0 root (0) root (0) 96089 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01097_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 47208 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01100.html │ │ │ --rw-r--r-- 0 root (0) root (0) 93933 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01100_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 183964 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01103.html │ │ │ --rw-r--r-- 0 root (0) root (0) 165 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01103.js │ │ │ --rw-r--r-- 0 root (0) root (0) 426769 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01103_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6477 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01106.html │ │ │ --rw-r--r-- 0 root (0) root (0) 94 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01106.js │ │ │ --rw-r--r-- 0 root (0) root (0) 49646 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01106_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5030 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01109.html │ │ │ --rw-r--r-- 0 root (0) root (0) 44161 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01109_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6163 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01085.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 299 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01085.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 44128 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01085_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3048 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01088.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9659 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01088_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4629 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01091.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 119 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01091.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 26868 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01091_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5283 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01094.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 399 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01094.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 43145 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01094_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7825 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01097.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 371 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01097.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 104271 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01097_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7090 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01100.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 344 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01100.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 71376 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01100_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37409 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01103.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2542 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01103.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 355303 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01103_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5030 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01106.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 44161 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01106_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6477 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01109.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 94 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01109.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 49646 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01109_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 19204 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01112.html │ │ │ -rw-r--r-- 0 root (0) root (0) 71 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01112.js │ │ │ -rw-r--r-- 0 root (0) root (0) 39145 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01112_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 15580 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01115.html │ │ │ -rw-r--r-- 0 root (0) root (0) 799 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01115.js │ │ │ -rw-r--r-- 0 root (0) root (0) 151454 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01115_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 284529 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01118.html │ │ │ -rw-r--r-- 0 root (0) root (0) 286 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01118.js │ │ │ -rw-r--r-- 0 root (0) root (0) 66277 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01118_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 364537 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01121_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 936342 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01124_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 300760 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01127_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 141285 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01130_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27318 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01133_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 87636 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01136_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 257217 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01139_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 336150 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01142_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 57719 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01145_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 68554 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01148_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 486897 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01151_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 940601 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01154_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3083 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01160.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13153 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01160_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 940601 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01124_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3083 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01127.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13153 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01127_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 364537 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01130_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 300760 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01133_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 141285 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01136_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 68554 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01139_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 87636 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01142_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 936342 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01145_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27318 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01148_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 336150 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01151_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 486897 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01154_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 257217 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01157_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 57719 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01160_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 30885 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01163.html │ │ │ -rw-r--r-- 0 root (0) root (0) 76123 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01163_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4661 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01166.html │ │ │ -rw-r--r-- 0 root (0) root (0) 14307 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01166_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3544 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01169.html │ │ │ --rw-r--r-- 0 root (0) root (0) 32155 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01169_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12430 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01172.html │ │ │ --rw-r--r-- 0 root (0) root (0) 547 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01172.js │ │ │ --rw-r--r-- 0 root (0) root (0) 136656 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01172_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37476 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01175.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2420 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01175.js │ │ │ --rw-r--r-- 0 root (0) root (0) 583312 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01175_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10335 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01178.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17257 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01178_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16493 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01181.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1207 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01181.js │ │ │ --rw-r--r-- 0 root (0) root (0) 170908 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01181_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5179 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01184.html │ │ │ --rw-r--r-- 0 root (0) root (0) 23943 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01184_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4006 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01187.html │ │ │ --rw-r--r-- 0 root (0) root (0) 59302 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01187_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3981 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01190.html │ │ │ --rw-r--r-- 0 root (0) root (0) 34311 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01190_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3556 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01193.html │ │ │ --rw-r--r-- 0 root (0) root (0) 85327 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01193_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7965 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01196.html │ │ │ --rw-r--r-- 0 root (0) root (0) 253113 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01196_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4081 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01199.html │ │ │ --rw-r--r-- 0 root (0) root (0) 103 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01199.js │ │ │ --rw-r--r-- 0 root (0) root (0) 115437 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01199_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5179 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01202.html │ │ │ --rw-r--r-- 0 root (0) root (0) 77 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01202.js │ │ │ --rw-r--r-- 0 root (0) root (0) 51708 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01202_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6361 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01205.html │ │ │ --rw-r--r-- 0 root (0) root (0) 184 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01205.js │ │ │ --rw-r--r-- 0 root (0) root (0) 38010 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01205_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8661 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01208.html │ │ │ --rw-r--r-- 0 root (0) root (0) 429 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01208.js │ │ │ --rw-r--r-- 0 root (0) root (0) 126964 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01208_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4028 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01211.html │ │ │ --rw-r--r-- 0 root (0) root (0) 38255 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01211_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5147 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01214.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37137 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01214_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3962 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01217.html │ │ │ --rw-r--r-- 0 root (0) root (0) 85 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01217.js │ │ │ --rw-r--r-- 0 root (0) root (0) 15460 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01217_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3982 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01220.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35109 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01220_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6071 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01223.html │ │ │ --rw-r--r-- 0 root (0) root (0) 235 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01223.js │ │ │ --rw-r--r-- 0 root (0) root (0) 96192 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01223_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11741 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01226.html │ │ │ --rw-r--r-- 0 root (0) root (0) 783 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01226.js │ │ │ --rw-r--r-- 0 root (0) root (0) 184887 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01226_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 65951 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01229.html │ │ │ --rw-r--r-- 0 root (0) root (0) 98 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01229.js │ │ │ --rw-r--r-- 0 root (0) root (0) 85609 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01229_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5295 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01232.html │ │ │ --rw-r--r-- 0 root (0) root (0) 43253 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01232_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 28724 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01235.html │ │ │ --rw-r--r-- 0 root (0) root (0) 517 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01235.js │ │ │ --rw-r--r-- 0 root (0) root (0) 107128 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01235_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6307 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01238.html │ │ │ --rw-r--r-- 0 root (0) root (0) 73 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01238.js │ │ │ --rw-r--r-- 0 root (0) root (0) 47658 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01238_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10335 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01169.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17257 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01169_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3982 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01172.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35109 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01172_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6307 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01175.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 73 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01175.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 47658 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01175_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4028 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01178.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 38255 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01178_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37476 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01181.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2420 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01181.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 583312 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01181_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3544 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01184.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 32155 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01184_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6071 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01187.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 235 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01187.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 96192 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01187_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5179 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01190.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 77 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01190.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 51708 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01190_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3467 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01193.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 23152 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01193_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11741 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01196.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 783 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01196.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 184887 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01196_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6361 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01199.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 184 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01199.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 38010 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01199_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 65951 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01202.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 98 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01202.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 85609 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01202_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5147 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01205.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37137 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01205_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3962 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01208.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 85 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01208.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 15460 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01208_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3981 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01211.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 34311 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01211_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9307 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01214.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21266 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01214_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16493 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01217.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1207 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01217.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 170908 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01217_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4081 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01220.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 103 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01220.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 115437 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01220_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8661 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01223.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 429 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01223.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 126964 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01223_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3556 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01226.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 85327 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01226_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5179 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01229.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 23943 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01229_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4006 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01232.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 59302 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01232_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7965 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01235.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 253113 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01235_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 28724 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01238.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 517 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01238.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 107128 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01238_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 9215 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01241.html │ │ │ -rw-r--r-- 0 root (0) root (0) 254 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01241.js │ │ │ -rw-r--r-- 0 root (0) root (0) 23602 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01241_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9307 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01244.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21266 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01244_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3467 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01247.html │ │ │ --rw-r--r-- 0 root (0) root (0) 23152 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01247_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11430 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01250.html │ │ │ --rw-r--r-- 0 root (0) root (0) 382 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01250.js │ │ │ --rw-r--r-- 0 root (0) root (0) 75992 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01250_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7474 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01253.html │ │ │ --rw-r--r-- 0 root (0) root (0) 137 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01253.js │ │ │ --rw-r--r-- 0 root (0) root (0) 31698 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01253_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16200 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01256.html │ │ │ --rw-r--r-- 0 root (0) root (0) 116 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01256.js │ │ │ --rw-r--r-- 0 root (0) root (0) 92000 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01256_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4070 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01259.html │ │ │ --rw-r--r-- 0 root (0) root (0) 31833 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01259_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4408 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01262.html │ │ │ --rw-r--r-- 0 root (0) root (0) 185 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01262.js │ │ │ --rw-r--r-- 0 root (0) root (0) 32559 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01262_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27114 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01265.html │ │ │ --rw-r--r-- 0 root (0) root (0) 887 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01265.js │ │ │ --rw-r--r-- 0 root (0) root (0) 126105 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01265_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6803 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01268.html │ │ │ --rw-r--r-- 0 root (0) root (0) 19647 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01268_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10190 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01271.html │ │ │ --rw-r--r-- 0 root (0) root (0) 173563 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01271_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7937 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01274.html │ │ │ --rw-r--r-- 0 root (0) root (0) 28283 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01274_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12430 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01244.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 547 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01244.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 136656 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01244_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5295 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01247.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 43253 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01247_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10190 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01250.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 173563 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01250_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4408 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01253.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 185 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01253.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 32559 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01253_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27114 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01256.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 887 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01256.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 126105 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01256_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6803 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01259.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 19647 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01259_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4070 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01262.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 31833 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01262_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11430 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01265.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 382 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01265.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 75992 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01265_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16200 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01268.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 116 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01268.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 92000 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01268_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7474 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01271.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 137 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01271.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 31698 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01271_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3131 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01274.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 54619 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01274_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 7664 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01277.html │ │ │ -rw-r--r-- 0 root (0) root (0) 41705 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01277_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3126 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01280.html │ │ │ --rw-r--r-- 0 root (0) root (0) 31158 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01280_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9726 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01283.html │ │ │ --rw-r--r-- 0 root (0) root (0) 660 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01283.js │ │ │ --rw-r--r-- 0 root (0) root (0) 40270 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01283_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8375 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01286.html │ │ │ --rw-r--r-- 0 root (0) root (0) 549 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01286.js │ │ │ --rw-r--r-- 0 root (0) root (0) 31274 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01286_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3131 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01289.html │ │ │ --rw-r--r-- 0 root (0) root (0) 54619 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01289_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 23221 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01292.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1823 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01292.js │ │ │ --rw-r--r-- 0 root (0) root (0) 80485 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01292_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4165 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01295.html │ │ │ --rw-r--r-- 0 root (0) root (0) 98 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01295.js │ │ │ --rw-r--r-- 0 root (0) root (0) 17088 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01295_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4280 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01304.html │ │ │ --rw-r--r-- 0 root (0) root (0) 89 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01304.js │ │ │ --rw-r--r-- 0 root (0) root (0) 39195 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01304_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4608 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01325.html │ │ │ --rw-r--r-- 0 root (0) root (0) 199 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01325.js │ │ │ --rw-r--r-- 0 root (0) root (0) 17471 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01325_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4934 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01328.html │ │ │ --rw-r--r-- 0 root (0) root (0) 308 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01328.js │ │ │ --rw-r--r-- 0 root (0) root (0) 18255 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01328_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11063 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01343.html │ │ │ --rw-r--r-- 0 root (0) root (0) 57839 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01343_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4165 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01280.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 98 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01280.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 17088 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01280_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 23221 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01283.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1823 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01283.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 80485 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01283_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3126 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01286.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 31158 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01286_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7937 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01289.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 28283 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01289_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9726 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01292.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 660 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01292.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 40270 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01292_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8375 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01295.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 549 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01295.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 31274 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01295_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4608 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01301.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 199 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01301.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 17471 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01301_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4280 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01310.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 89 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01310.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 39195 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01310_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11063 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01316.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 57839 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01316_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4934 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01334.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 308 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01334.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 18255 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01334_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 6647 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01346.html │ │ │ -rw-r--r-- 0 root (0) root (0) 23865 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01346_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 10689 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01349.html │ │ │ -rw-r--r-- 0 root (0) root (0) 117 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01349.js │ │ │ -rw-r--r-- 0 root (0) root (0) 39097 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01349_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9312 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01361.html │ │ │ --rw-r--r-- 0 root (0) root (0) 384 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01361.js │ │ │ --rw-r--r-- 0 root (0) root (0) 57562 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01361_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10651 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01367.html │ │ │ --rw-r--r-- 0 root (0) root (0) 73950 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01367_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4329 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01370.html │ │ │ --rw-r--r-- 0 root (0) root (0) 112 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01370.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14465 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01370_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4624 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01373.html │ │ │ --rw-r--r-- 0 root (0) root (0) 211 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01373.js │ │ │ --rw-r--r-- 0 root (0) root (0) 24143 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01373_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3274 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01376.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12902 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01376_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3287 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01403.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16040 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01403_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4367 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01421.html │ │ │ --rw-r--r-- 0 root (0) root (0) 98 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01421.js │ │ │ --rw-r--r-- 0 root (0) root (0) 16489 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01421_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3276 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01424.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16367 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01424_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11866 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01427.html │ │ │ --rw-r--r-- 0 root (0) root (0) 113754 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01427_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4632 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01430.html │ │ │ --rw-r--r-- 0 root (0) root (0) 199 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01430.js │ │ │ --rw-r--r-- 0 root (0) root (0) 21568 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01430_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4249 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01433.html │ │ │ --rw-r--r-- 0 root (0) root (0) 94 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01433.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14863 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01433_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10651 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01358.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 73950 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01358_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9312 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01364.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 384 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01364.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 57562 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01364_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4624 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01370.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 211 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01370.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 24143 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01370_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4329 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01373.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 112 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01373.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14465 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01373_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3287 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01376.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16040 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01376_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3274 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01388.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12902 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01388_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11866 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01403.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 113754 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01403_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4367 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01412.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 98 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01412.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 16489 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01412_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3276 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01427.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16367 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01427_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4249 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01430.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 94 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01430.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14863 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01430_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4632 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01433.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 199 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01433.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 21568 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01433_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3293 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01436.html │ │ │ -rw-r--r-- 0 root (0) root (0) 15071 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01436_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11890 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01439.html │ │ │ --rw-r--r-- 0 root (0) root (0) 117015 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01439_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3348 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01442.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10402 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01442_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4270 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01445.html │ │ │ --rw-r--r-- 0 root (0) root (0) 85 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01445.js │ │ │ --rw-r--r-- 0 root (0) root (0) 18425 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01445_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4279 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01448.html │ │ │ --rw-r--r-- 0 root (0) root (0) 83 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01448.js │ │ │ --rw-r--r-- 0 root (0) root (0) 15315 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01448_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4273 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01451.html │ │ │ --rw-r--r-- 0 root (0) root (0) 86 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01451.js │ │ │ --rw-r--r-- 0 root (0) root (0) 17613 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01451_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4244 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01454.html │ │ │ --rw-r--r-- 0 root (0) root (0) 80 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01454.js │ │ │ --rw-r--r-- 0 root (0) root (0) 16044 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01454_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9652 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01457.html │ │ │ --rw-r--r-- 0 root (0) root (0) 390 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01457.js │ │ │ --rw-r--r-- 0 root (0) root (0) 52527 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01457_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14217 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01460.html │ │ │ --rw-r--r-- 0 root (0) root (0) 466 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01460.js │ │ │ --rw-r--r-- 0 root (0) root (0) 56318 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01460_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3260 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01463.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11260 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01463_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4256 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01466.html │ │ │ --rw-r--r-- 0 root (0) root (0) 92 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01466.js │ │ │ --rw-r--r-- 0 root (0) root (0) 12813 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01466_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4317 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01469.html │ │ │ --rw-r--r-- 0 root (0) root (0) 105 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01469.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14615 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01469_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3348 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01439.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10402 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01439_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11890 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01442.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 117015 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01442_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4244 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01445.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 80 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01445.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 16044 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01445_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14217 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01448.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 466 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01448.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 56318 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01448_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4317 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01451.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 105 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01451.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14615 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01451_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3248 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01454.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11244 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01454_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3292 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01457.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11908 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01457_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4256 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01460.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 92 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01460.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 12813 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01460_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3296 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01463.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11921 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01463_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3260 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01466.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11260 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01466_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4273 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01469.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 86 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01469.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 17613 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01469_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4322 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01472.html │ │ │ -rw-r--r-- 0 root (0) root (0) 106 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01472.js │ │ │ -rw-r--r-- 0 root (0) root (0) 18876 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01472_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3248 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01475.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11244 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01475_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3292 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01478.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11908 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01478_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3296 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01481.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11921 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01481_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6779 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01487.html │ │ │ --rw-r--r-- 0 root (0) root (0) 142 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01487.js │ │ │ --rw-r--r-- 0 root (0) root (0) 50895 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01487_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9650 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01490.html │ │ │ --rw-r--r-- 0 root (0) root (0) 120 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01490.js │ │ │ --rw-r--r-- 0 root (0) root (0) 59795 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01490_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3791 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01493.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12231 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01493_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4279 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01475.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 83 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01475.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 15315 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01475_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9652 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01478.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 390 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01478.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 52527 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01478_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4270 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01481.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 85 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01481.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 18425 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01481_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6779 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01484.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 142 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01484.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 50895 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01484_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3791 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01490.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12231 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01490_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9650 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01493.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 120 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01493.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 59795 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01493_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4302 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01496.html │ │ │ -rw-r--r-- 0 root (0) root (0) 85 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01496.js │ │ │ -rw-r--r-- 0 root (0) root (0) 18684 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01496_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4645 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01499.html │ │ │ -rw-r--r-- 0 root (0) root (0) 189 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01499.js │ │ │ -rw-r--r-- 0 root (0) root (0) 17654 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01499_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 10173 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01502.html │ │ │ -rw-r--r-- 0 root (0) root (0) 155 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01502.js │ │ │ -rw-r--r-- 0 root (0) root (0) 91191 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01502_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 9133 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01505.html │ │ │ -rw-r--r-- 0 root (0) root (0) 34406 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01505_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3239 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01508.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11592 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01508_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3234 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01508.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37521 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01508_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 6775 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01511.html │ │ │ -rw-r--r-- 0 root (0) root (0) 118 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01511.js │ │ │ -rw-r--r-- 0 root (0) root (0) 35373 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01511_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3234 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01514.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37521 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01514_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16993 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01517.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1411 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01517.js │ │ │ --rw-r--r-- 0 root (0) root (0) 221251 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01517_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16993 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01514.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1411 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01514.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 221251 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01514_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3239 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01517.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11592 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01517_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 11089 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01520.html │ │ │ -rw-r--r-- 0 root (0) root (0) 96802 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01520_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3258 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01523.html │ │ │ -rw-r--r-- 0 root (0) root (0) 68829 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01523_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 10927 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01526.html │ │ │ -rw-r--r-- 0 root (0) root (0) 42817 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01526_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4227 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01529.html │ │ │ --rw-r--r-- 0 root (0) root (0) 88 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01529.js │ │ │ --rw-r--r-- 0 root (0) root (0) 39398 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01529_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7707 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01532.html │ │ │ --rw-r--r-- 0 root (0) root (0) 32820 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01532_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4271 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01535.html │ │ │ --rw-r--r-- 0 root (0) root (0) 83 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01535.js │ │ │ --rw-r--r-- 0 root (0) root (0) 18309 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01535_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4295 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01538.html │ │ │ --rw-r--r-- 0 root (0) root (0) 86 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01538.js │ │ │ --rw-r--r-- 0 root (0) root (0) 35066 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01538_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4292 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01541.html │ │ │ --rw-r--r-- 0 root (0) root (0) 85 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01541.js │ │ │ --rw-r--r-- 0 root (0) root (0) 32564 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01541_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3304 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01544.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35221 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01544_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3289 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01547.html │ │ │ --rw-r--r-- 0 root (0) root (0) 29873 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01547_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4432 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01550.html │ │ │ --rw-r--r-- 0 root (0) root (0) 128 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01550.js │ │ │ --rw-r--r-- 0 root (0) root (0) 17868 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01550_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7707 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01529.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 32820 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01529_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4227 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01532.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 88 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01532.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 39398 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01532_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4292 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01535.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 85 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01535.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 32564 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01535_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4271 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01538.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 83 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01538.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 18309 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01538_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4295 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01541.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 86 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01541.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 35066 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01541_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4432 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01544.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 128 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01544.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 17868 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01544_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3304 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01547.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35221 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01547_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3289 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01550.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 29873 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01550_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3317 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01553.html │ │ │ -rw-r--r-- 0 root (0) root (0) 45541 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01553_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3313 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01556.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15861 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01556_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3365 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01559.html │ │ │ --rw-r--r-- 0 root (0) root (0) 32941 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01559_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10969 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01562.html │ │ │ --rw-r--r-- 0 root (0) root (0) 47674 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01562_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3239 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01565.html │ │ │ --rw-r--r-- 0 root (0) root (0) 39985 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01565_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3365 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01556.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 32941 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01556_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3313 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01559.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15861 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01559_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3239 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01562.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 39985 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01562_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10969 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01565.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 47674 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01565_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 13096 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01568.html │ │ │ -rw-r--r-- 0 root (0) root (0) 55743 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01568_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4346 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01571.html │ │ │ -rw-r--r-- 0 root (0) root (0) 130 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01571.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13526 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01571_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6666 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01580.html │ │ │ --rw-r--r-- 0 root (0) root (0) 126 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01580.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34618 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01580_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4341 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01580.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 129 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01580.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14778 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01580_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3353 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01583.html │ │ │ -rw-r--r-- 0 root (0) root (0) 17083 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01583_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4341 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01586.html │ │ │ --rw-r--r-- 0 root (0) root (0) 129 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01586.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14778 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01586_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6666 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01586.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 126 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01586.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34618 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01586_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4299 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01589.html │ │ │ -rw-r--r-- 0 root (0) root (0) 90 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01589.js │ │ │ -rw-r--r-- 0 root (0) root (0) 17921 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01589_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3310 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01592.html │ │ │ -rw-r--r-- 0 root (0) root (0) 25596 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01592_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3414 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01595.html │ │ │ -rw-r--r-- 0 root (0) root (0) 23563 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01595_source.html │ │ │ @@ -8001,60 +8001,60 @@ │ │ │ -rw-r--r-- 0 root (0) root (0) 153 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/nav_f.png │ │ │ -rw-r--r-- 0 root (0) root (0) 169 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/nav_fd.png │ │ │ -rw-r--r-- 0 root (0) root (0) 95 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/nav_g.png │ │ │ -rw-r--r-- 0 root (0) root (0) 98 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/nav_h.png │ │ │ -rw-r--r-- 0 root (0) root (0) 114 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/nav_hd.png │ │ │ -rw-r--r-- 0 root (0) root (0) 2167 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtree.css │ │ │ -rw-r--r-- 0 root (0) root (0) 15935 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtree.js │ │ │ --rw-r--r-- 0 root (0) root (0) 5115 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreedata.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 5041 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreedata.js │ │ │ -rw-r--r-- 0 root (0) root (0) 10328 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex0.js │ │ │ --rw-r--r-- 0 root (0) root (0) 10057 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex1.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 11805 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex1.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15646 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex10.js │ │ │ -rw-r--r-- 0 root (0) root (0) 16539 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex11.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13575 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex12.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15162 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex13.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14202 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex14.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15061 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex15.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15178 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex16.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15173 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex17.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15127 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex18.js │ │ │ -rw-r--r-- 0 root (0) root (0) 12620 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex19.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14269 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex2.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 10735 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex2.js │ │ │ -rw-r--r-- 0 root (0) root (0) 11705 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex20.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13730 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex21.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15430 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex22.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13617 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex23.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15000 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex24.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14971 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex25.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14689 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex26.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15210 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex27.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13238 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex28.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13768 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex29.js │ │ │ --rw-r--r-- 0 root (0) root (0) 10524 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex3.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 12310 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex3.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14572 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex30.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14890 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex31.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15240 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex32.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14782 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex33.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14335 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex34.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14709 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex35.js │ │ │ -rw-r--r-- 0 root (0) root (0) 12547 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex36.js │ │ │ -rw-r--r-- 0 root (0) root (0) 12514 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex37.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14023 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex38.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13498 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex39.js │ │ │ --rw-r--r-- 0 root (0) root (0) 12629 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex4.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 12563 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex4.js │ │ │ -rw-r--r-- 0 root (0) root (0) 12596 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex40.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14136 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex41.js │ │ │ -rw-r--r-- 0 root (0) root (0) 11906 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex42.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13470 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex43.js │ │ │ -rw-r--r-- 0 root (0) root (0) 10221 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex44.js │ │ │ -rw-r--r-- 0 root (0) root (0) 8824 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex45.js │ │ │ -rw-r--r-- 0 root (0) root (0) 9359 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex46.js │ │ │ -rw-r--r-- 0 root (0) root (0) 1197 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex47.js │ │ │ --rw-r--r-- 0 root (0) root (0) 10051 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex5.js │ │ │ --rw-r--r-- 0 root (0) root (0) 12467 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex6.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 10111 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex5.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 12473 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex6.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15020 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex7.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14613 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex8.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13800 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex9.js │ │ │ -rw-r--r-- 0 root (0) root (0) 123 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/open.png │ │ │ -rw-r--r-- 0 root (0) root (0) 2935 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/pages.html │ │ │ -rw-r--r-- 0 root (0) root (0) 696 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/plus.svg │ │ │ -rw-r--r-- 0 root (0) root (0) 696 2025-08-10 09:43:37.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/plusd.svg │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/_formulas_dark.log │ │ │ @@ -1,8 +1,8 @@ │ │ │ -This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2025/dev/Debian) (preloaded format=latex 2025.8.10) 10 AUG 2025 18:31 │ │ │ +This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2025/dev/Debian) (preloaded format=latex 2025.9.7) 7 SEP 2025 02:47 │ │ │ entering extended mode │ │ │ restricted \write18 enabled. │ │ │ %&-line parsing enabled. │ │ │ **_formulas_dark │ │ │ (./_formulas_dark.tex │ │ │ LaTeX2e <2024-11-01> patch level 2 │ │ │ L3 programming layer <2025-01-18> │ │ │ @@ -65,14 +65,14 @@ │ │ │ l.6 \color │ │ │ {white}^^M │ │ │ *** (cannot \read from terminal in nonstop modes) │ │ │ │ │ │ │ │ │ Here is how much of TeX's memory you used: │ │ │ 779 strings out of 475179 │ │ │ - 11324 string characters out of 5766565 │ │ │ + 11324 string characters out of 5766566 │ │ │ 392061 words of memory out of 5000000 │ │ │ 23836 multiletter control sequences out of 15000+600000 │ │ │ 558837 words of font info for 36 fonts, out of 8000000 for 9000 │ │ │ 14 hyphenation exceptions out of 8191 │ │ │ 72i,0n,79p,229b,36s stack positions out of 10000i,1000n,20000p,200000b,200000s │ │ │ No pages of output. │ │ ├── ./usr/share/doc/gcc-14-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-14-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-2024 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2007-2024 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,77 @@ │ │ │
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
│ │ │ -
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
│ │ │ -
87
│ │ │ -
88#endif // _GLIBCXX_STDLIB_H
│ │ │ -
89#endif // __cplusplus
│ │ │ -
_Tp abs(const complex< _Tp > &)
Return magnitude of z.
Definition complex:896
│ │ │ - │ │ │ - │ │ │ +
29#ifndef _GLIBCXX_FENV_H
│ │ │ +
30#define _GLIBCXX_FENV_H 1
│ │ │ +
31
│ │ │ +
32#pragma GCC system_header
│ │ │ +
33
│ │ │ +
34#include <bits/c++config.h>
│ │ │ +
35#if _GLIBCXX_HAVE_FENV_H
│ │ │ +
36# include_next <fenv.h>
│ │ │ +
37#endif
│ │ │ +
38
│ │ │ +
39#if __cplusplus >= 201103L
│ │ │ +
40
│ │ │ +
41#if _GLIBCXX_USE_C99_FENV
│ │ │ +
42
│ │ │ +
43#undef feclearexcept
│ │ │ +
44#undef fegetexceptflag
│ │ │ +
45#undef feraiseexcept
│ │ │ +
46#undef fesetexceptflag
│ │ │ +
47#undef fetestexcept
│ │ │ +
48#undef fegetround
│ │ │ +
49#undef fesetround
│ │ │ +
50#undef fegetenv
│ │ │ +
51#undef feholdexcept
│ │ │ +
52#undef fesetenv
│ │ │ +
53#undef feupdateenv
│ │ │ +
54
│ │ │ +
55namespace std
│ │ │ +
56{
│ │ │ +
57 // types
│ │ │ +
58 using ::fenv_t;
│ │ │ +
59 using ::fexcept_t;
│ │ │ +
60
│ │ │ +
61 // functions
│ │ │ +
62 using ::feclearexcept;
│ │ │ +
63 using ::fegetexceptflag;
│ │ │ +
64 using ::feraiseexcept;
│ │ │ +
65 using ::fesetexceptflag;
│ │ │ +
66 using ::fetestexcept;
│ │ │ +
67
│ │ │ +
68 using ::fegetround;
│ │ │ +
69 using ::fesetround;
│ │ │ +
70
│ │ │ +
71 using ::fegetenv;
│ │ │ +
72 using ::feholdexcept;
│ │ │ +
73 using ::fesetenv;
│ │ │ +
74 using ::feupdateenv;
│ │ │ +
75} // namespace
│ │ │ +
76
│ │ │ +
77#endif // _GLIBCXX_USE_C99_FENV
│ │ │ +
78
│ │ │ +
79#endif // C++11
│ │ │ +
80
│ │ │ +
81#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-2024 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2007-2024 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,69 @@ │ │ │ │ 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 │ │ │ │ -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 │ │ │ │ -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_:_8_9_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 │ │ │ │ -_c_s_t_d_l_i_b │ │ │ │ - * _s_t_d_l_i_b_._h │ │ │ │ +29#ifndef _GLIBCXX_FENV_H │ │ │ │ +30#define _GLIBCXX_FENV_H 1 │ │ │ │ +31 │ │ │ │ +32#pragma GCC system_header │ │ │ │ +33 │ │ │ │ +34#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ +35#if _GLIBCXX_HAVE_FENV_H │ │ │ │ +36# include_next │ │ │ │ +37#endif │ │ │ │ +38 │ │ │ │ +39#if __cplusplus >= 201103L │ │ │ │ +40 │ │ │ │ +41#if _GLIBCXX_USE_C99_FENV │ │ │ │ +42 │ │ │ │ +43#undef feclearexcept │ │ │ │ +44#undef fegetexceptflag │ │ │ │ +45#undef feraiseexcept │ │ │ │ +46#undef fesetexceptflag │ │ │ │ +47#undef fetestexcept │ │ │ │ +48#undef fegetround │ │ │ │ +49#undef fesetround │ │ │ │ +50#undef fegetenv │ │ │ │ +51#undef feholdexcept │ │ │ │ +52#undef fesetenv │ │ │ │ +53#undef feupdateenv │ │ │ │ +54 │ │ │ │ +55namespace _s_t_d │ │ │ │ +56{ │ │ │ │ +57 // types │ │ │ │ +58 using ::fenv_t; │ │ │ │ +59 using ::fexcept_t; │ │ │ │ +60 │ │ │ │ +61 // functions │ │ │ │ +62 using ::feclearexcept; │ │ │ │ +63 using ::fegetexceptflag; │ │ │ │ +64 using ::feraiseexcept; │ │ │ │ +65 using ::fesetexceptflag; │ │ │ │ +66 using ::fetestexcept; │ │ │ │ +67 │ │ │ │ +68 using ::fegetround; │ │ │ │ +69 using ::fesetround; │ │ │ │ +70 │ │ │ │ +71 using ::fegetenv; │ │ │ │ +72 using ::feholdexcept; │ │ │ │ +73 using ::fesetenv; │ │ │ │ +74 using ::feupdateenv; │ │ │ │ +75} // namespace │ │ │ │ +76 │ │ │ │ +77#endif // _GLIBCXX_USE_C99_FENV │ │ │ │ +78 │ │ │ │ +79#endif // C++11 │ │ │ │ +80 │ │ │ │ +81#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-14-base/libstdc++/user/a00005.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stdatomic.h File Reference │ │ │ +libstdc++: complex.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -47,44 +47,50 @@ │ │ │ $(document).ready(function(){initNavTree('a00005.html',''); initResizable(); }); │ │ │ /* @license-end */ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ Macros
│ │ │ -
stdatomic.h File Reference
│ │ │ +
complex.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ +Macros

#define _GLIBCXX_COMPLEX_H
 
│ │ │

Detailed Description

│ │ │

This is a Standard C++ Library header.

│ │ │ │ │ │ -

Definition in file stdatomic.h.

│ │ │ +

Definition in file complex.h.

│ │ │

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ __glibcxx_want_stdatomic_h

│ │ │ + │ │ │ +

◆ _GLIBCXX_COMPLEX_H

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ - │ │ │ + │ │ │ │ │ │
#define __glibcxx_want_stdatomic_h#define _GLIBCXX_COMPLEX_H
│ │ │
│ │ │ │ │ │ -

Definition at line 32 of file stdatomic.h.

│ │ │ +

Definition at line 46 of file complex.h.

│ │ │ │ │ │
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,16 @@ │ │ │ │ libstdc++ │ │ │ │ _M_a_c_r_o_s │ │ │ │ -stdatomic.h File Reference │ │ │ │ +complex.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ +MMaaccrrooss │ │ │ │ +#define  ___G_L_I_B_C_X_X___C_O_M_P_L_E_X___H │ │ │ │ +  │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is a Standard C++ Library header. │ │ │ │ -Definition in file _s_t_d_a_t_o_m_i_c_._h. │ │ │ │ +Definition in file _c_o_m_p_l_e_x_._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 │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__CCOOMMPPLLEEXX__HH ********** │ │ │ │ +#define _GLIBCXX_COMPLEX_H │ │ │ │ +Definition at line _4_6 of file _c_o_m_p_l_e_x_._h. │ │ │ │ + * _c_o_m_p_l_e_x_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00005_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stdatomic.h Source File │ │ │ +libstdc++: complex.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,20 +45,20 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
stdatomic.h
│ │ │ +
complex.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) 2007-2024 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,44 @@ │ │ │
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 complex.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>
│ │ │ +
29#include <bits/c++config.h>
│ │ │ +
30
│ │ │ +
31#if __cplusplus >= 201103L
│ │ │ +
32# include <ccomplex>
│ │ │ +
33#endif
│ │ │
34
│ │ │ -
35#ifdef __cpp_lib_stdatomic_h // C++ >= 23
│ │ │ -
36#include <atomic>
│ │ │ -
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 __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:65
│ │ │ -
atomic<bool>
Definition atomic:68
│ │ │ -
Explicit specialization for char.
Definition atomic:713
│ │ │ -
Explicit specialization for signed char.
Definition atomic:736
│ │ │ -
Explicit specialization for unsigned char.
Definition atomic:759
│ │ │ -
Explicit specialization for short.
Definition atomic:782
│ │ │ -
Explicit specialization for unsigned short.
Definition atomic:805
│ │ │ -
Explicit specialization for int.
Definition atomic:828
│ │ │ -
Explicit specialization for unsigned int.
Definition atomic:851
│ │ │ -
Explicit specialization for long.
Definition atomic:874
│ │ │ -
Explicit specialization for unsigned long.
Definition atomic:897
│ │ │ -
Explicit specialization for long long.
Definition atomic:920
│ │ │ -
Explicit specialization for unsigned long long.
Definition atomic:943
│ │ │ -
Explicit specialization for wchar_t.
Definition atomic:966
│ │ │ -
Explicit specialization for char16_t.
Definition atomic:1015
│ │ │ -
Explicit specialization for char32_t.
Definition atomic:1039
│ │ │ -
atomic_flag
│ │ │ - │ │ │ +
35#if __cplusplus >= 201103L && defined(__STRICT_ANSI__)
│ │ │ +
36// For strict modes do not include the C library's <complex.h>, see PR 82417.
│ │ │ +
37#elif _GLIBCXX_HAVE_COMPLEX_H
│ │ │ +
38# include_next <complex.h>
│ │ │ +
39# ifdef _GLIBCXX_COMPLEX
│ │ │ +
40// See PR56111, keep the macro in C++03 if possible.
│ │ │ +
41# undef complex
│ │ │ +
42# endif
│ │ │ +
43#endif
│ │ │ +
44
│ │ │ +
45#ifndef _GLIBCXX_COMPLEX_H
│ │ │ +
46#define _GLIBCXX_COMPLEX_H 1
│ │ │ +
47
│ │ │ +
48#endif
│ │ │ + │ │ │ + │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -stdatomic.h │ │ │ │ +complex.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// C compatibility header -*- C++ -*- │ │ │ │ +1// -*- C++ -*- compatibility header. │ │ │ │ 2 │ │ │ │ -3// Copyright The GNU Toolchain Authors. │ │ │ │ +3// Copyright (C) 2007-2024 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,35 @@ │ │ │ │ 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 complex.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> │ │ │ │ +29#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ +30 │ │ │ │ +31#if __cplusplus >= 201103L │ │ │ │ +32# include <_c_c_o_m_p_l_e_x> │ │ │ │ +33#endif │ │ │ │ 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 │ │ │ │ -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 __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_5 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c_<_ _b_o_o_l_ _> │ │ │ │ -atomic │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_6_8 │ │ │ │ -_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_3 │ │ │ │ -_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_3_6 │ │ │ │ -_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_5_9 │ │ │ │ -_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_2 │ │ │ │ -_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_0_5 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c_<_ _i_n_t_ _> │ │ │ │ -Explicit specialization for int. │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_8_2_8 │ │ │ │ -_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_1 │ │ │ │ -_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_4 │ │ │ │ -_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_:_8_9_7 │ │ │ │ -_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_0 │ │ │ │ -_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_3 │ │ │ │ -_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_6_6 │ │ │ │ -_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_1_5 │ │ │ │ -_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_3_9 │ │ │ │ -_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_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 │ │ │ │ - * _s_t_d_a_t_o_m_i_c_._h │ │ │ │ +35#if __cplusplus >= 201103L && defined(__STRICT_ANSI__) │ │ │ │ +36// For strict modes do not include the C library's , see PR 82417. │ │ │ │ +37#elif _GLIBCXX_HAVE_COMPLEX_H │ │ │ │ +38# include_next │ │ │ │ +39# ifdef _GLIBCXX_COMPLEX │ │ │ │ +40// See PR56111, keep the macro in C++03 if possible. │ │ │ │ +41# undef complex │ │ │ │ +42# endif │ │ │ │ +43#endif │ │ │ │ +44 │ │ │ │ +45#ifndef _GLIBCXX_COMPLEX_H │ │ │ │ +46#define _GLIBCXX_COMPLEX_H 1 │ │ │ │ +47 │ │ │ │ +48#endif │ │ │ │ +_c_+_+_c_o_n_f_i_g_._h │ │ │ │ +_c_c_o_m_p_l_e_x │ │ │ │ + * _c_o_m_p_l_e_x_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00008_source.html │ │ │ @@ -247,78 +247,78 @@ │ │ │
complex< _Tp > exp(const complex< _Tp > &)
Return complex base e exponential of z.
Definition complex:1063
│ │ │
complex< _Tp > cosh(const complex< _Tp > &)
Return complex hyperbolic cosine of z.
Definition complex:1037
│ │ │
complex< _Tp > tanh(const complex< _Tp > &)
Return complex hyperbolic tangent of z.
Definition complex:1254
│ │ │
complex< _Tp > pow(const complex< _Tp > &, int)
Return x to the y'th power.
Definition complex:1285
│ │ │
complex< _Tp > sinh(const complex< _Tp > &)
Return complex hyperbolic sine of z.
Definition complex:1155
│ │ │
complex< _Tp > cos(const complex< _Tp > &)
Return complex cosine of z.
Definition complex:1007
│ │ │
complex< _Tp > sqrt(const complex< _Tp > &)
Return complex square root of z.
Definition complex:1199
│ │ │ -
__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
│ │ │ - │ │ │ +
__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,16 +1,8 @@ │ │ │ │ libstdc++ │ │ │ │ -_M_a_c_r_o_s │ │ │ │ -tgmath.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_. │ │ │ │ -MMaaccrrooss │ │ │ │ -#define  ___G_L_I_B_C_X_X___T_G_M_A_T_H___H │ │ │ │ -  │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is a Standard C++ Library header. │ │ │ │ -Definition in file _t_g_m_a_t_h_._h. │ │ │ │ -********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? __GGLLIIBBCCXXXX__TTGGMMAATTHH__HH ********** │ │ │ │ -#define _GLIBCXX_TGMATH_H │ │ │ │ -Definition at line _4_0 of file _t_g_m_a_t_h_._h. │ │ │ │ - * _t_g_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-14-base/libstdc++/user/a00011_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: tgmath.h Source File │ │ │ +libstdc++: stdlib.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,20 +45,20 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
tgmath.h
│ │ │ +
stdlib.h
│ │ │
│ │ │
│ │ │ Go to the documentation of this file.
1// -*- C++ -*- compatibility header.
│ │ │
2
│ │ │ -
3// Copyright (C) 2007-2024 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2002-2024 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,38 +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 tgmath.h
│ │ │ +
25/** @file stdlib.h
│ │ │
26 * This is a Standard C++ Library header.
│ │ │
27 */
│ │ │
28
│ │ │ -
29#include <bits/c++config.h>
│ │ │ -
30
│ │ │ -
31#if __cplusplus >= 201103L
│ │ │ -
32# include <ctgmath>
│ │ │ -
33#else
│ │ │ -
34# if _GLIBCXX_HAVE_TGMATH_H
│ │ │ -
35# include_next <tgmath.h>
│ │ │ -
36# endif
│ │ │ -
37#endif
│ │ │ -
38
│ │ │ -
39#ifndef _GLIBCXX_TGMATH_H
│ │ │ -
40#define _GLIBCXX_TGMATH_H 1
│ │ │ -
41
│ │ │ -
42#endif
│ │ │ - │ │ │ - │ │ │ +
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
│ │ │ +
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
│ │ │ +
87
│ │ │ +
88#endif // _GLIBCXX_STDLIB_H
│ │ │ +
89#endif // __cplusplus
│ │ │ +
_Tp abs(const complex< _Tp > &)
Return magnitude of z.
Definition complex:896
│ │ │ + │ │ │ + │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -tgmath.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) 2007-2024 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2002-2024 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,29 +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 tgmath.h │ │ │ │ +25/** @file stdlib.h │ │ │ │ 26 * This is a Standard C++ Library header. │ │ │ │ 27 */ │ │ │ │ 28 │ │ │ │ -29#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ -30 │ │ │ │ -31#if __cplusplus >= 201103L │ │ │ │ -32# include <_c_t_g_m_a_t_h> │ │ │ │ -33#else │ │ │ │ -34# if _GLIBCXX_HAVE_TGMATH_H │ │ │ │ -35# include_next │ │ │ │ -36# endif │ │ │ │ -37#endif │ │ │ │ -38 │ │ │ │ -39#ifndef _GLIBCXX_TGMATH_H │ │ │ │ -40#define _GLIBCXX_TGMATH_H 1 │ │ │ │ -41 │ │ │ │ -42#endif │ │ │ │ -_c_+_+_c_o_n_f_i_g_._h │ │ │ │ -_c_t_g_m_a_t_h │ │ │ │ - * _t_g_m_a_t_h_._h │ │ │ │ +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 │ │ │ │ +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 │ │ │ │ +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_:_8_9_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 │ │ │ │ +_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-14-base/libstdc++/user/a00014.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: fenv.h File Reference │ │ │ +libstdc++: tgmath.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,27 +45,52 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
fenv.h File Reference
│ │ │ +
│ │ │ +Macros
│ │ │ +
tgmath.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ +Macros

#define _GLIBCXX_TGMATH_H
 
│ │ │

Detailed Description

│ │ │

This is a Standard C++ Library header.

│ │ │ │ │ │ -

Definition in file fenv.h.

│ │ │ -
│ │ │ +

Definition in file tgmath.h.

│ │ │ +

Macro Definition Documentation

│ │ │ + │ │ │ +

◆ _GLIBCXX_TGMATH_H

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define _GLIBCXX_TGMATH_H
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 40 of file tgmath.h.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,8 +1,16 @@ │ │ │ │ libstdc++ │ │ │ │ -fenv.h File Reference │ │ │ │ +_M_a_c_r_o_s │ │ │ │ +tgmath.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ +MMaaccrrooss │ │ │ │ +#define  ___G_L_I_B_C_X_X___T_G_M_A_T_H___H │ │ │ │ +  │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is a Standard C++ Library header. │ │ │ │ -Definition in file _f_e_n_v_._h. │ │ │ │ - * _f_e_n_v_._h │ │ │ │ +Definition in file _t_g_m_a_t_h_._h. │ │ │ │ +********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__TTGGMMAATTHH__HH ********** │ │ │ │ +#define _GLIBCXX_TGMATH_H │ │ │ │ +Definition at line _4_0 of file _t_g_m_a_t_h_._h. │ │ │ │ + * _t_g_m_a_t_h_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00014_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: fenv.h Source File │ │ │ +libstdc++: tgmath.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
fenv.h
│ │ │ +
tgmath.h
│ │ │
│ │ │
│ │ │ Go to the documentation of this file.
1// -*- C++ -*- compatibility header.
│ │ │
2
│ │ │
3// Copyright (C) 2007-2024 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │ @@ -72,77 +72,38 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file fenv.h
│ │ │ +
25/** @file tgmath.h
│ │ │
26 * This is a Standard C++ Library header.
│ │ │
27 */
│ │ │
28
│ │ │ -
29#ifndef _GLIBCXX_FENV_H
│ │ │ -
30#define _GLIBCXX_FENV_H 1
│ │ │ -
31
│ │ │ -
32#pragma GCC system_header
│ │ │ -
33
│ │ │ -
34#include <bits/c++config.h>
│ │ │ -
35#if _GLIBCXX_HAVE_FENV_H
│ │ │ -
36# include_next <fenv.h>
│ │ │ +
29#include <bits/c++config.h>
│ │ │ +
30
│ │ │ +
31#if __cplusplus >= 201103L
│ │ │ +
32# include <ctgmath>
│ │ │ +
33#else
│ │ │ +
34# if _GLIBCXX_HAVE_TGMATH_H
│ │ │ +
35# include_next <tgmath.h>
│ │ │ +
36# endif
│ │ │
37#endif
│ │ │
38
│ │ │ -
39#if __cplusplus >= 201103L
│ │ │ -
40
│ │ │ -
41#if _GLIBCXX_USE_C99_FENV
│ │ │ -
42
│ │ │ -
43#undef feclearexcept
│ │ │ -
44#undef fegetexceptflag
│ │ │ -
45#undef feraiseexcept
│ │ │ -
46#undef fesetexceptflag
│ │ │ -
47#undef fetestexcept
│ │ │ -
48#undef fegetround
│ │ │ -
49#undef fesetround
│ │ │ -
50#undef fegetenv
│ │ │ -
51#undef feholdexcept
│ │ │ -
52#undef fesetenv
│ │ │ -
53#undef feupdateenv
│ │ │ -
54
│ │ │ -
55namespace std
│ │ │ -
56{
│ │ │ -
57 // types
│ │ │ -
58 using ::fenv_t;
│ │ │ -
59 using ::fexcept_t;
│ │ │ -
60
│ │ │ -
61 // functions
│ │ │ -
62 using ::feclearexcept;
│ │ │ -
63 using ::fegetexceptflag;
│ │ │ -
64 using ::feraiseexcept;
│ │ │ -
65 using ::fesetexceptflag;
│ │ │ -
66 using ::fetestexcept;
│ │ │ -
67
│ │ │ -
68 using ::fegetround;
│ │ │ -
69 using ::fesetround;
│ │ │ -
70
│ │ │ -
71 using ::fegetenv;
│ │ │ -
72 using ::feholdexcept;
│ │ │ -
73 using ::fesetenv;
│ │ │ -
74 using ::feupdateenv;
│ │ │ -
75} // namespace
│ │ │ -
76
│ │ │ -
77#endif // _GLIBCXX_USE_C99_FENV
│ │ │ -
78
│ │ │ -
79#endif // C++11
│ │ │ -
80
│ │ │ -
81#endif // _GLIBCXX_FENV_H
│ │ │ - │ │ │ -
ISO C++ entities toplevel namespace is std.
│ │ │ +
39#ifndef _GLIBCXX_TGMATH_H
│ │ │ +
40#define _GLIBCXX_TGMATH_H 1
│ │ │ +
41
│ │ │ +
42#endif
│ │ │ + │ │ │ + │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,9 +1,9 @@ │ │ │ │ libstdc++ │ │ │ │ -fenv.h │ │ │ │ +tgmath.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) 2007-2024 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,69 +21,29 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file fenv.h │ │ │ │ +25/** @file tgmath.h │ │ │ │ 26 * This is a Standard C++ Library header. │ │ │ │ 27 */ │ │ │ │ 28 │ │ │ │ -29#ifndef _GLIBCXX_FENV_H │ │ │ │ -30#define _GLIBCXX_FENV_H 1 │ │ │ │ -31 │ │ │ │ -32#pragma GCC system_header │ │ │ │ -33 │ │ │ │ -34#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ -35#if _GLIBCXX_HAVE_FENV_H │ │ │ │ -36# include_next │ │ │ │ +29#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ +30 │ │ │ │ +31#if __cplusplus >= 201103L │ │ │ │ +32# include <_c_t_g_m_a_t_h> │ │ │ │ +33#else │ │ │ │ +34# if _GLIBCXX_HAVE_TGMATH_H │ │ │ │ +35# include_next │ │ │ │ +36# endif │ │ │ │ 37#endif │ │ │ │ 38 │ │ │ │ -39#if __cplusplus >= 201103L │ │ │ │ -40 │ │ │ │ -41#if _GLIBCXX_USE_C99_FENV │ │ │ │ -42 │ │ │ │ -43#undef feclearexcept │ │ │ │ -44#undef fegetexceptflag │ │ │ │ -45#undef feraiseexcept │ │ │ │ -46#undef fesetexceptflag │ │ │ │ -47#undef fetestexcept │ │ │ │ -48#undef fegetround │ │ │ │ -49#undef fesetround │ │ │ │ -50#undef fegetenv │ │ │ │ -51#undef feholdexcept │ │ │ │ -52#undef fesetenv │ │ │ │ -53#undef feupdateenv │ │ │ │ -54 │ │ │ │ -55namespace _s_t_d │ │ │ │ -56{ │ │ │ │ -57 // types │ │ │ │ -58 using ::fenv_t; │ │ │ │ -59 using ::fexcept_t; │ │ │ │ -60 │ │ │ │ -61 // functions │ │ │ │ -62 using ::feclearexcept; │ │ │ │ -63 using ::fegetexceptflag; │ │ │ │ -64 using ::feraiseexcept; │ │ │ │ -65 using ::fesetexceptflag; │ │ │ │ -66 using ::fetestexcept; │ │ │ │ -67 │ │ │ │ -68 using ::fegetround; │ │ │ │ -69 using ::fesetround; │ │ │ │ -70 │ │ │ │ -71 using ::fegetenv; │ │ │ │ -72 using ::feholdexcept; │ │ │ │ -73 using ::fesetenv; │ │ │ │ -74 using ::feupdateenv; │ │ │ │ -75} // namespace │ │ │ │ -76 │ │ │ │ -77#endif // _GLIBCXX_USE_C99_FENV │ │ │ │ -78 │ │ │ │ -79#endif // C++11 │ │ │ │ -80 │ │ │ │ -81#endif // _GLIBCXX_FENV_H │ │ │ │ +39#ifndef _GLIBCXX_TGMATH_H │ │ │ │ +40#define _GLIBCXX_TGMATH_H 1 │ │ │ │ +41 │ │ │ │ +42#endif │ │ │ │ _c_+_+_c_o_n_f_i_g_._h │ │ │ │ -_s_t_d │ │ │ │ -ISO C++ entities toplevel namespace is std. │ │ │ │ - * _f_e_n_v_._h │ │ │ │ +_c_t_g_m_a_t_h │ │ │ │ + * _t_g_m_a_t_h_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00017.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: complex.h File Reference │ │ │ +libstdc++: stdatomic.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -47,50 +47,44 @@ │ │ │ $(document).ready(function(){initNavTree('a00017.html',''); initResizable(); }); │ │ │ /* @license-end */ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ Macros
│ │ │ -
complex.h File Reference
│ │ │ +
stdatomic.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ -Macros

#define _GLIBCXX_COMPLEX_H
 
│ │ │

Detailed Description

│ │ │

This is a Standard C++ Library header.

│ │ │ │ │ │ -

Definition in file complex.h.

│ │ │ +

Definition in file stdatomic.h.

│ │ │

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ _GLIBCXX_COMPLEX_H

│ │ │ + │ │ │ +

◆ __glibcxx_want_stdatomic_h

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ - │ │ │ + │ │ │ │ │ │
#define _GLIBCXX_COMPLEX_H#define __glibcxx_want_stdatomic_h
│ │ │
│ │ │ │ │ │ -

Definition at line 46 of file complex.h.

│ │ │ +

Definition at line 32 of file stdatomic.h.

│ │ │ │ │ │
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,16 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ _M_a_c_r_o_s │ │ │ │ -complex.h File Reference │ │ │ │ +stdatomic.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -MMaaccrrooss │ │ │ │ -#define  ___G_L_I_B_C_X_X___C_O_M_P_L_E_X___H │ │ │ │ -  │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is a Standard C++ Library header. │ │ │ │ -Definition in file _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__CCOOMMPPLLEEXX__HH ********** │ │ │ │ -#define _GLIBCXX_COMPLEX_H │ │ │ │ -Definition at line _4_6 of file _c_o_m_p_l_e_x_._h. │ │ │ │ - * _c_o_m_p_l_e_x_._h │ │ │ │ +********** _?◆_? ____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-14-base/libstdc++/user/a00017_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-2024 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,44 +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#include <bits/c++config.h>
│ │ │ -
30
│ │ │ -
31#if __cplusplus >= 201103L
│ │ │ -
32# include <ccomplex>
│ │ │ -
33#endif
│ │ │ +
29#ifndef _GLIBCXX_STDATOMIC_H
│ │ │ +
30#define _GLIBCXX_STDATOMIC_H
│ │ │ +
31
│ │ │ +
32#define __glibcxx_want_stdatomic_h
│ │ │ +
33#include <bits/version.h>
│ │ │
34
│ │ │ -
35#if __cplusplus >= 201103L && defined(__STRICT_ANSI__)
│ │ │ -
36// For strict modes do not include the C library's <complex.h>, see PR 82417.
│ │ │ -
37#elif _GLIBCXX_HAVE_COMPLEX_H
│ │ │ -
38# include_next <complex.h>
│ │ │ -
39# ifdef _GLIBCXX_COMPLEX
│ │ │ -
40// See PR56111, keep the macro in C++03 if possible.
│ │ │ -
41# undef complex
│ │ │ -
42# endif
│ │ │ -
43#endif
│ │ │ -
44
│ │ │ -
45#ifndef _GLIBCXX_COMPLEX_H
│ │ │ -
46#define _GLIBCXX_COMPLEX_H 1
│ │ │ -
47
│ │ │ -
48#endif
│ │ │ - │ │ │ - │ │ │ +
35#ifdef __cpp_lib_stdatomic_h // C++ >= 23
│ │ │ +
36#include <atomic>
│ │ │ +
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 __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:65
│ │ │ +
atomic<bool>
Definition atomic:68
│ │ │ +
Explicit specialization for char.
Definition atomic:713
│ │ │ +
Explicit specialization for signed char.
Definition atomic:736
│ │ │ +
Explicit specialization for unsigned char.
Definition atomic:759
│ │ │ +
Explicit specialization for short.
Definition atomic:782
│ │ │ +
Explicit specialization for unsigned short.
Definition atomic:805
│ │ │ +
Explicit specialization for int.
Definition atomic:828
│ │ │ +
Explicit specialization for unsigned int.
Definition atomic:851
│ │ │ +
Explicit specialization for long.
Definition atomic:874
│ │ │ +
Explicit specialization for unsigned long.
Definition atomic:897
│ │ │ +
Explicit specialization for long long.
Definition atomic:920
│ │ │ +
Explicit specialization for unsigned long long.
Definition atomic:943
│ │ │ +
Explicit specialization for wchar_t.
Definition atomic:966
│ │ │ +
Explicit specialization for char16_t.
Definition atomic:1015
│ │ │ +
Explicit specialization for char32_t.
Definition atomic:1039
│ │ │ +
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-2024 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,35 +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#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ -30 │ │ │ │ -31#if __cplusplus >= 201103L │ │ │ │ -32# include <_c_c_o_m_p_l_e_x> │ │ │ │ -33#endif │ │ │ │ +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#if __cplusplus >= 201103L && defined(__STRICT_ANSI__) │ │ │ │ -36// For strict modes do not include the C library's , see PR 82417. │ │ │ │ -37#elif _GLIBCXX_HAVE_COMPLEX_H │ │ │ │ -38# include_next │ │ │ │ -39# ifdef _GLIBCXX_COMPLEX │ │ │ │ -40// See PR56111, keep the macro in C++03 if possible. │ │ │ │ -41# undef complex │ │ │ │ -42# endif │ │ │ │ -43#endif │ │ │ │ -44 │ │ │ │ -45#ifndef _GLIBCXX_COMPLEX_H │ │ │ │ -46#define _GLIBCXX_COMPLEX_H 1 │ │ │ │ -47 │ │ │ │ -48#endif │ │ │ │ -_c_+_+_c_o_n_f_i_g_._h │ │ │ │ -_c_c_o_m_p_l_e_x │ │ │ │ - * _c_o_m_p_l_e_x_._h │ │ │ │ +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 │ │ │ │ +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 __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_5 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c_<_ _b_o_o_l_ _> │ │ │ │ +atomic │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_6_8 │ │ │ │ +_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_3 │ │ │ │ +_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_3_6 │ │ │ │ +_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_5_9 │ │ │ │ +_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_2 │ │ │ │ +_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_0_5 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c_<_ _i_n_t_ _> │ │ │ │ +Explicit specialization for int. │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_8_2_8 │ │ │ │ +_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_1 │ │ │ │ +_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_4 │ │ │ │ +_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_:_8_9_7 │ │ │ │ +_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_0 │ │ │ │ +_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_3 │ │ │ │ +_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_6_6 │ │ │ │ +_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_1_5 │ │ │ │ +_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_3_9 │ │ │ │ +_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_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 │ │ │ │ + * _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-14-base/libstdc++/user/a00026_source.html │ │ │ @@ -96,18 +96,18 @@ │ │ │
42#define _CXXABI_H 1
│ │ │
43
│ │ │
44#pragma GCC system_header
│ │ │
45
│ │ │
46#pragma GCC visibility push(default)
│ │ │
47
│ │ │
48#include <stddef.h>
│ │ │ -
49#include <bits/c++config.h>
│ │ │ -
50#include <bits/cxxabi_tweaks.h>
│ │ │ -
51#include <bits/cxxabi_forced.h>
│ │ │ - │ │ │ +
49#include <bits/c++config.h>
│ │ │ +
50#include <bits/cxxabi_tweaks.h>
│ │ │ +
51#include <bits/cxxabi_forced.h>
│ │ │ + │ │ │
53
│ │ │
54#ifdef __cplusplus
│ │ │
55namespace __cxxabiv1
│ │ │
56{
│ │ │
57 extern "C"
│ │ │
58 {
│ │ │
59#endif
│ │ │ @@ -764,23 +764,23 @@ │ │ │
710}
│ │ │
711#endif // __cplusplus
│ │ │
712
│ │ │
713#pragma GCC visibility pop
│ │ │
714
│ │ │
715#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:92
│ │ │ -
Base class for all library exceptions.
Definition exception.h:60
│ │ │ +
Base class for all library exceptions.
Definition exception.h:60
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── 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_2 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_0 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_6 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_5 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-14-base/libstdc++/user/a00362_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-2024 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2008-2024 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,554 +72,271 @@ │ │ │
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
│ │ │ +
30#ifndef _GLIBCXX_UNIQUE_LOCK_H
│ │ │ +
31#define _GLIBCXX_UNIQUE_LOCK_H 1
│ │ │ +
32
│ │ │ +
33#pragma GCC system_header
│ │ │
34
│ │ │ -
35#pragma GCC system_header
│ │ │ -
36
│ │ │ -
37namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
38{
│ │ │ -
39_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
40
│ │ │ -
41namespace __detail
│ │ │ -
42{
│ │ │ -
43 //
│ │ │ -
44 // gslice_array closure.
│ │ │ -
45 //
│ │ │ -
46 template<class _Dom>
│ │ │ -
47 class _GBase
│ │ │ -
48 {
│ │ │ -
49 public:
│ │ │ -
50 typedef typename _Dom::value_type value_type;
│ │ │ -
51
│ │ │ -
52 _GBase (const _Dom& __e, const valarray<size_t>& __i)
│ │ │ -
53 : _M_expr (__e), _M_index(__i) {}
│ │ │ -
54
│ │ │ -
55 value_type
│ │ │ -
56 operator[] (size_t __i) const
│ │ │ -
57 { return _M_expr[_M_index[__i]]; }
│ │ │ -
58
│ │ │ -
59 size_t
│ │ │ -
60 size () const
│ │ │ -
61 { return _M_index.size(); }
│ │ │ -
62
│ │ │ -
63 private:
│ │ │ -
64 typename _ValArrayRef<_Dom>::__type _M_expr;
│ │ │ -
65 const valarray<size_t>& _M_index;
│ │ │ -
66 };
│ │ │ -
67
│ │ │ -
68 template<typename _Tp>
│ │ │ -
69 class _GBase<_Array<_Tp> >
│ │ │ -
70 {
│ │ │ -
71 public:
│ │ │ -
72 typedef _Tp value_type;
│ │ │ -
73
│ │ │ -
74 _GBase (_Array<_Tp> __a, const valarray<size_t>& __i)
│ │ │ -
75 : _M_array (__a), _M_index(__i) {}
│ │ │ -
76
│ │ │ -
77 value_type
│ │ │ -
78 operator[] (size_t __i) const
│ │ │ -
79 { return _M_array._M_data[_M_index[__i]]; }
│ │ │ -
80
│ │ │ -
81 size_t
│ │ │ -
82 size () const
│ │ │ -
83 { return _M_index.size(); }
│ │ │ -
84
│ │ │ -
85 private:
│ │ │ -
86 const _Array<_Tp> _M_array;
│ │ │ -
87 const valarray<size_t>& _M_index;
│ │ │ -
88 };
│ │ │ -
89
│ │ │ -
90 template<class _Dom>
│ │ │ -
91 struct _GClos<_Expr, _Dom>
│ │ │ -
92 : _GBase<_Dom>
│ │ │ -
93 {
│ │ │ -
94 typedef _GBase<_Dom> _Base;
│ │ │ -
95 typedef typename _Base::value_type value_type;
│ │ │ -
96
│ │ │ -
97 _GClos (const _Dom& __e, const valarray<size_t>& __i)
│ │ │ -
98 : _Base (__e, __i) {}
│ │ │ -
99 };
│ │ │ +
35#if __cplusplus < 201103L
│ │ │ +
36# include <bits/c++0x_warning.h>
│ │ │ +
37#else
│ │ │ +
38
│ │ │ +
39#include <bits/chrono.h>
│ │ │ +
40#include <bits/error_constants.h> // for std::errc
│ │ │ +
41#include <bits/move.h> // for std::swap
│ │ │ +
42#include <bits/std_mutex.h> // for std::defer_lock_t
│ │ │ +
43
│ │ │ +
44namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
45{
│ │ │ +
46_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
47
│ │ │ +
48 /** @brief A movable scoped lock type.
│ │ │ +
49 *
│ │ │ +
50 * A unique_lock controls mutex ownership within a scope. Ownership of the
│ │ │ +
51 * mutex can be delayed until after construction and can be transferred
│ │ │ +
52 * to another unique_lock by move construction or move assignment. If a
│ │ │ +
53 * mutex lock is owned when the destructor runs ownership will be released.
│ │ │ +
54 *
│ │ │ +
55 * @headerfile mutex
│ │ │ +
56 * @ingroup mutexes
│ │ │ +
57 * @since C++11
│ │ │ +
58 */
│ │ │ +
59 template<typename _Mutex>
│ │ │ +
│ │ │ + │ │ │ +
61 {
│ │ │ +
62 public:
│ │ │ +
63 typedef _Mutex mutex_type;
│ │ │ +
64
│ │ │ +
65 unique_lock() noexcept
│ │ │ +
66 : _M_device(0), _M_owns(false)
│ │ │ +
67 { }
│ │ │ +
68
│ │ │ + │ │ │ +
70 explicit unique_lock(mutex_type& __m)
│ │ │ +
71 : _M_device(std::__addressof(__m)), _M_owns(false)
│ │ │ +
72 {
│ │ │ +
73 lock();
│ │ │ +
74 _M_owns = true;
│ │ │ +
75 }
│ │ │ +
76
│ │ │ +
77 unique_lock(mutex_type& __m, defer_lock_t) noexcept
│ │ │ +
78 : _M_device(std::__addressof(__m)), _M_owns(false)
│ │ │ +
79 { }
│ │ │ +
80
│ │ │ + │ │ │ +
82 unique_lock(mutex_type& __m, try_to_lock_t)
│ │ │ +
83 : _M_device(std::__addressof(__m)), _M_owns(_M_device->try_lock())
│ │ │ +
84 { }
│ │ │ +
85
│ │ │ + │ │ │ +
87 unique_lock(mutex_type& __m, adopt_lock_t) noexcept
│ │ │ +
88 : _M_device(std::__addressof(__m)), _M_owns(true)
│ │ │ +
89 {
│ │ │ +
90 // XXX calling thread owns mutex
│ │ │ +
91 }
│ │ │ +
92
│ │ │ +
93 template<typename _Clock, typename _Duration>
│ │ │ + │ │ │ +
95 unique_lock(mutex_type& __m,
│ │ │ + │ │ │ +
97 : _M_device(std::__addressof(__m)),
│ │ │ +
98 _M_owns(_M_device->try_lock_until(__atime))
│ │ │ +
99 { }
│ │ │
100
│ │ │ -
101 template<typename _Tp>
│ │ │ -
102 struct _GClos<_ValArray, _Tp>
│ │ │ -
103 : _GBase<_Array<_Tp> >
│ │ │ -
104 {
│ │ │ -
105 typedef _GBase<_Array<_Tp> > _Base;
│ │ │ -
106 typedef typename _Base::value_type value_type;
│ │ │ -
107
│ │ │ -
108 _GClos (_Array<_Tp> __a, const valarray<size_t>& __i)
│ │ │ -
109 : _Base (__a, __i) {}
│ │ │ -
110 };
│ │ │ -
111
│ │ │ -
112 //
│ │ │ -
113 // indirect_array closure
│ │ │ -
114 //
│ │ │ -
115 template<class _Dom>
│ │ │ -
116 class _IBase
│ │ │ -
117 {
│ │ │ -
118 public:
│ │ │ -
119 typedef typename _Dom::value_type value_type;
│ │ │ -
120
│ │ │ -
121 _IBase (const _Dom& __e, const valarray<size_t>& __i)
│ │ │ -
122 : _M_expr (__e), _M_index (__i) {}
│ │ │ -
123
│ │ │ -
124 value_type
│ │ │ -
125 operator[] (size_t __i) const
│ │ │ -
126 { return _M_expr[_M_index[__i]]; }
│ │ │ -
127
│ │ │ -
128 size_t
│ │ │ -
129 size() const
│ │ │ -
130 { return _M_index.size(); }
│ │ │ +
101 template<typename _Rep, typename _Period>
│ │ │ +
102 [[__nodiscard__]]
│ │ │ +
103 unique_lock(mutex_type& __m,
│ │ │ + │ │ │ +
105 : _M_device(std::__addressof(__m)),
│ │ │ +
106 _M_owns(_M_device->try_lock_for(__rtime))
│ │ │ +
107 { }
│ │ │ +
108
│ │ │ + │ │ │ +
110 {
│ │ │ +
111 if (_M_owns)
│ │ │ +
112 unlock();
│ │ │ +
113 }
│ │ │ +
114
│ │ │ +
115 unique_lock(const unique_lock&) = delete;
│ │ │ +
116 unique_lock& operator=(const unique_lock&) = delete;
│ │ │ +
117
│ │ │ +
118 unique_lock(unique_lock&& __u) noexcept
│ │ │ +
119 : _M_device(__u._M_device), _M_owns(__u._M_owns)
│ │ │ +
120 {
│ │ │ +
121 __u._M_device = 0;
│ │ │ +
122 __u._M_owns = false;
│ │ │ +
123 }
│ │ │ +
124
│ │ │ +
125 unique_lock& operator=(unique_lock&& __u) noexcept
│ │ │ +
126 {
│ │ │ +
127 if(_M_owns)
│ │ │ +
128 unlock();
│ │ │ +
129
│ │ │ +
130 unique_lock(std::move(__u)).swap(*this);
│ │ │
131
│ │ │ -
132 private:
│ │ │ -
133 typename _ValArrayRef<_Dom>::__type _M_expr;
│ │ │ -
134 const valarray<size_t>& _M_index;
│ │ │ -
135 };
│ │ │ -
136
│ │ │ -
137 template<class _Dom>
│ │ │ -
138 struct _IClos<_Expr, _Dom>
│ │ │ -
139 : _IBase<_Dom>
│ │ │ -
140 {
│ │ │ -
141 typedef _IBase<_Dom> _Base;
│ │ │ -
142 typedef typename _Base::value_type value_type;
│ │ │ -
143
│ │ │ -
144 _IClos (const _Dom& __e, const valarray<size_t>& __i)
│ │ │ -
145 : _Base (__e, __i) {}
│ │ │ -
146 };
│ │ │ -
147
│ │ │ -
148 template<typename _Tp>
│ │ │ -
149 struct _IClos<_ValArray, _Tp>
│ │ │ -
150 : _IBase<valarray<_Tp> >
│ │ │ -
151 {
│ │ │ -
152 typedef _IBase<valarray<_Tp> > _Base;
│ │ │ -
153 typedef _Tp value_type;
│ │ │ -
154
│ │ │ -
155 _IClos (const valarray<_Tp>& __a, const valarray<size_t>& __i)
│ │ │ -
156 : _Base (__a, __i) {}
│ │ │ -
157 };
│ │ │ -
158} // namespace __detail
│ │ │ -
159
│ │ │ -
160 //
│ │ │ -
161 // class _Expr
│ │ │ -
162 //
│ │ │ -
163 template<class _Clos, typename _Tp>
│ │ │ -
164 class _Expr
│ │ │ -
165 {
│ │ │ -
166 public:
│ │ │ -
167 typedef _Tp value_type;
│ │ │ -
168
│ │ │ -
169 _Expr(const _Clos&);
│ │ │ -
170
│ │ │ -
171 const _Clos& operator()() const;
│ │ │ -
172
│ │ │ -
173 value_type operator[](size_t) const;
│ │ │ -
174 valarray<value_type> operator[](slice) const;
│ │ │ -
175 valarray<value_type> operator[](const gslice&) const;
│ │ │ -
176 valarray<value_type> operator[](const valarray<bool>&) const;
│ │ │ -
177 valarray<value_type> operator[](const valarray<size_t>&) const;
│ │ │ -
178
│ │ │ -
179 _Expr<_UnClos<__unary_plus, std::_Expr, _Clos>, value_type>
│ │ │ -
180 operator+() const;
│ │ │ -
181
│ │ │ -
182 _Expr<_UnClos<__negate, std::_Expr, _Clos>, value_type>
│ │ │ -
183 operator-() const;
│ │ │ -
184
│ │ │ -
185 _Expr<_UnClos<__bitwise_not, std::_Expr, _Clos>, value_type>
│ │ │ -
186 operator~() const;
│ │ │ -
187
│ │ │ -
188 _Expr<_UnClos<__logical_not, std::_Expr, _Clos>, bool>
│ │ │ -
189 operator!() const;
│ │ │ -
190
│ │ │ -
191 size_t size() const;
│ │ │ -
192 value_type sum() const;
│ │ │ -
193
│ │ │ -
194 valarray<value_type> shift(int) const;
│ │ │ -
195 valarray<value_type> cshift(int) const;
│ │ │ -
196
│ │ │ -
197 value_type min() const;
│ │ │ -
198 value_type max() const;
│ │ │ -
199
│ │ │ -
200 valarray<value_type> apply(value_type (*)(const value_type&)) const;
│ │ │ -
201 valarray<value_type> apply(value_type (*)(value_type)) const;
│ │ │ -
202
│ │ │ -
203 private:
│ │ │ -
204 const _Clos _M_closure;
│ │ │ -
205 };
│ │ │ -
206
│ │ │ -
207 template<class _Clos, typename _Tp>
│ │ │ -
208 inline
│ │ │ -
209 _Expr<_Clos, _Tp>::_Expr(const _Clos& __c) : _M_closure(__c) {}
│ │ │ +
132 __u._M_device = 0;
│ │ │ +
133 __u._M_owns = false;
│ │ │ +
134
│ │ │ +
135 return *this;
│ │ │ +
136 }
│ │ │ +
137
│ │ │ +
138 void
│ │ │ +
139 lock()
│ │ │ +
140 {
│ │ │ +
141 if (!_M_device)
│ │ │ +
142 __throw_system_error(int(errc::operation_not_permitted));
│ │ │ +
143 else if (_M_owns)
│ │ │ +
144 __throw_system_error(int(errc::resource_deadlock_would_occur));
│ │ │ +
145 else
│ │ │ +
146 {
│ │ │ +
147 _M_device->lock();
│ │ │ +
148 _M_owns = true;
│ │ │ +
149 }
│ │ │ +
150 }
│ │ │ +
151
│ │ │ +
152 _GLIBCXX_NODISCARD
│ │ │ +
153 bool
│ │ │ +
154 try_lock()
│ │ │ +
155 {
│ │ │ +
156 if (!_M_device)
│ │ │ +
157 __throw_system_error(int(errc::operation_not_permitted));
│ │ │ +
158 else if (_M_owns)
│ │ │ +
159 __throw_system_error(int(errc::resource_deadlock_would_occur));
│ │ │ +
160 else
│ │ │ +
161 {
│ │ │ +
162 _M_owns = _M_device->try_lock();
│ │ │ +
163 return _M_owns;
│ │ │ +
164 }
│ │ │ +
165 }
│ │ │ +
166
│ │ │ +
167 template<typename _Clock, typename _Duration>
│ │ │ +
168 _GLIBCXX_NODISCARD
│ │ │ +
169 bool
│ │ │ + │ │ │ +
171 {
│ │ │ +
172 if (!_M_device)
│ │ │ +
173 __throw_system_error(int(errc::operation_not_permitted));
│ │ │ +
174 else if (_M_owns)
│ │ │ +
175 __throw_system_error(int(errc::resource_deadlock_would_occur));
│ │ │ +
176 else
│ │ │ +
177 {
│ │ │ +
178 _M_owns = _M_device->try_lock_until(__atime);
│ │ │ +
179 return _M_owns;
│ │ │ +
180 }
│ │ │ +
181 }
│ │ │ +
182
│ │ │ +
183 template<typename _Rep, typename _Period>
│ │ │ +
184 _GLIBCXX_NODISCARD
│ │ │ +
185 bool
│ │ │ +
186 try_lock_for(const chrono::duration<_Rep, _Period>& __rtime)
│ │ │ +
187 {
│ │ │ +
188 if (!_M_device)
│ │ │ +
189 __throw_system_error(int(errc::operation_not_permitted));
│ │ │ +
190 else if (_M_owns)
│ │ │ +
191 __throw_system_error(int(errc::resource_deadlock_would_occur));
│ │ │ +
192 else
│ │ │ +
193 {
│ │ │ +
194 _M_owns = _M_device->try_lock_for(__rtime);
│ │ │ +
195 return _M_owns;
│ │ │ +
196 }
│ │ │ +
197 }
│ │ │ +
198
│ │ │ +
199 void
│ │ │ +
200 unlock()
│ │ │ +
201 {
│ │ │ +
202 if (!_M_owns)
│ │ │ +
203 __throw_system_error(int(errc::operation_not_permitted));
│ │ │ +
204 else if (_M_device)
│ │ │ +
205 {
│ │ │ +
206 _M_device->unlock();
│ │ │ +
207 _M_owns = false;
│ │ │ +
208 }
│ │ │ +
209 }
│ │ │
210
│ │ │ -
211 template<class _Clos, typename _Tp>
│ │ │ -
212 inline const _Clos&
│ │ │ -
213 _Expr<_Clos, _Tp>::operator()() const
│ │ │ -
214 { return _M_closure; }
│ │ │ -
215
│ │ │ -
216 template<class _Clos, typename _Tp>
│ │ │ -
217 inline _Tp
│ │ │ -
218 _Expr<_Clos, _Tp>::operator[](size_t __i) const
│ │ │ -
219 { return _M_closure[__i]; }
│ │ │ -
220
│ │ │ -
221 template<class _Clos, typename _Tp>
│ │ │ -
222 inline valarray<_Tp>
│ │ │ -
223 _Expr<_Clos, _Tp>::operator[](slice __s) const
│ │ │ -
224 {
│ │ │ -
225 valarray<_Tp> __v = valarray<_Tp>(*this)[__s];
│ │ │ -
226 return __v;
│ │ │ -
227 }
│ │ │ -
228
│ │ │ -
229 template<class _Clos, typename _Tp>
│ │ │ -
230 inline valarray<_Tp>
│ │ │ -
231 _Expr<_Clos, _Tp>::operator[](const gslice& __gs) const
│ │ │ -
232 {
│ │ │ -
233 valarray<_Tp> __v = valarray<_Tp>(*this)[__gs];
│ │ │ -
234 return __v;
│ │ │ -
235 }
│ │ │ -
236
│ │ │ -
237 template<class _Clos, typename _Tp>
│ │ │ -
238 inline valarray<_Tp>
│ │ │ -
239 _Expr<_Clos, _Tp>::operator[](const valarray<bool>& __m) const
│ │ │ -
240 {
│ │ │ -
241 valarray<_Tp> __v = valarray<_Tp>(*this)[__m];
│ │ │ -
242 return __v;
│ │ │ -
243 }
│ │ │ -
244
│ │ │ -
245 template<class _Clos, typename _Tp>
│ │ │ -
246 inline valarray<_Tp>
│ │ │ -
247 _Expr<_Clos, _Tp>::operator[](const valarray<size_t>& __i) const
│ │ │ -
248 {
│ │ │ -
249 valarray<_Tp> __v = valarray<_Tp>(*this)[__i];
│ │ │ -
250 return __v;
│ │ │ -
251 }
│ │ │ -
252
│ │ │ -
253 template<class _Clos, typename _Tp>
│ │ │ -
254 inline size_t
│ │ │ -
255 _Expr<_Clos, _Tp>::size() const
│ │ │ -
256 { return _M_closure.size(); }
│ │ │ -
257
│ │ │ -
258 template<class _Clos, typename _Tp>
│ │ │ -
259 inline valarray<_Tp>
│ │ │ -
260 _Expr<_Clos, _Tp>::shift(int __n) const
│ │ │ -
261 {
│ │ │ -
262 valarray<_Tp> __v = valarray<_Tp>(*this).shift(__n);
│ │ │ -
263 return __v;
│ │ │ -
264 }
│ │ │ -
265
│ │ │ -
266 template<class _Clos, typename _Tp>
│ │ │ -
267 inline valarray<_Tp>
│ │ │ -
268 _Expr<_Clos, _Tp>::cshift(int __n) const
│ │ │ -
269 {
│ │ │ -
270 valarray<_Tp> __v = valarray<_Tp>(*this).cshift(__n);
│ │ │ -
271 return __v;
│ │ │ -
272 }
│ │ │ -
273
│ │ │ -
274 template<class _Clos, typename _Tp>
│ │ │ -
275 inline valarray<_Tp>
│ │ │ -
276 _Expr<_Clos, _Tp>::apply(_Tp __f(const _Tp&)) const
│ │ │ -
277 {
│ │ │ -
278 valarray<_Tp> __v = valarray<_Tp>(*this).apply(__f);
│ │ │ -
279 return __v;
│ │ │ -
280 }
│ │ │ -
281
│ │ │ -
282 template<class _Clos, typename _Tp>
│ │ │ -
283 inline valarray<_Tp>
│ │ │ -
284 _Expr<_Clos, _Tp>::apply(_Tp __f(_Tp)) const
│ │ │ -
285 {
│ │ │ -
286 valarray<_Tp> __v = valarray<_Tp>(*this).apply(__f);
│ │ │ -
287 return __v;
│ │ │ -
288 }
│ │ │ -
289
│ │ │ -
290 // XXX: replace this with a more robust summation algorithm.
│ │ │ -
291 template<class _Clos, typename _Tp>
│ │ │ -
292 inline _Tp
│ │ │ -
293 _Expr<_Clos, _Tp>::sum() const
│ │ │ -
294 {
│ │ │ -
295 size_t __n = _M_closure.size();
│ │ │ -
296 if (__n == 0)
│ │ │ -
297 return _Tp();
│ │ │ -
298 else
│ │ │ -
299 {
│ │ │ -
300 _Tp __s = _M_closure[--__n];
│ │ │ -
301 while (__n != 0)
│ │ │ -
302 __s += _M_closure[--__n];
│ │ │ -
303 return __s;
│ │ │ -
304 }
│ │ │ -
305 }
│ │ │ -
306
│ │ │ -
307 template<class _Clos, typename _Tp>
│ │ │ -
308 inline _Tp
│ │ │ -
309 _Expr<_Clos, _Tp>::min() const
│ │ │ -
310 { return __valarray_min(_M_closure); }
│ │ │ -
311
│ │ │ -
312 template<class _Clos, typename _Tp>
│ │ │ -
313 inline _Tp
│ │ │ -
314 _Expr<_Clos, _Tp>::max() const
│ │ │ -
315 { return __valarray_max(_M_closure); }
│ │ │ -
316
│ │ │ -
317 template<class _Dom, typename _Tp>
│ │ │ -
318 inline _Expr<_UnClos<__logical_not, _Expr, _Dom>, bool>
│ │ │ -
319 _Expr<_Dom, _Tp>::operator!() const
│ │ │ -
320 {
│ │ │ -
321 typedef _UnClos<__logical_not, std::_Expr, _Dom> _Closure;
│ │ │ -
322 return _Expr<_Closure, bool>(_Closure(this->_M_closure));
│ │ │ -
323 }
│ │ │ -
324
│ │ │ -
325#define _DEFINE_EXPR_UNARY_OPERATOR(_Op, _Name) \
│ │ │ -
326 template<class _Dom, typename _Tp> \
│ │ │ -
327 inline _Expr<_UnClos<_Name, std::_Expr, _Dom>, _Tp> \
│ │ │ -
328 _Expr<_Dom, _Tp>::operator _Op() const \
│ │ │ -
329 { \
│ │ │ -
330 typedef _UnClos<_Name, std::_Expr, _Dom> _Closure; \
│ │ │ -
331 return _Expr<_Closure, _Tp>(_Closure(this->_M_closure)); \
│ │ │ -
332 }
│ │ │ -
333
│ │ │ -
334 _DEFINE_EXPR_UNARY_OPERATOR(+, struct std::__unary_plus)
│ │ │ -
335 _DEFINE_EXPR_UNARY_OPERATOR(-, struct std::__negate)
│ │ │ -
336 _DEFINE_EXPR_UNARY_OPERATOR(~, struct std::__bitwise_not)
│ │ │ -
337
│ │ │ -
338#undef _DEFINE_EXPR_UNARY_OPERATOR
│ │ │ -
339
│ │ │ -
340#define _DEFINE_EXPR_BINARY_OPERATOR(_Op, _Name) \
│ │ │ -
341 template<class _Dom1, class _Dom2> \
│ │ │ -
342 inline _Expr<_BinClos<_Name, _Expr, _Expr, _Dom1, _Dom2>, \
│ │ │ -
343 typename __fun<_Name, typename _Dom1::value_type>::result_type> \
│ │ │ -
344 operator _Op(const _Expr<_Dom1, typename _Dom1::value_type>& __v, \
│ │ │ -
345 const _Expr<_Dom2, typename _Dom2::value_type>& __w) \
│ │ │ -
346 { \
│ │ │ -
347 typedef typename _Dom1::value_type _Arg; \
│ │ │ -
348 typedef typename __fun<_Name, _Arg>::result_type _Value; \
│ │ │ -
349 typedef _BinClos<_Name, _Expr, _Expr, _Dom1, _Dom2> _Closure; \
│ │ │ -
350 return _Expr<_Closure, _Value>(_Closure(__v(), __w())); \
│ │ │ -
351 } \
│ │ │ -
352 \
│ │ │ -
353 template<class _Dom> \
│ │ │ -
354 inline _Expr<_BinClos<_Name, _Expr, _Constant, _Dom, \
│ │ │ -
355 typename _Dom::value_type>, \
│ │ │ -
356 typename __fun<_Name, typename _Dom::value_type>::result_type> \
│ │ │ -
357 operator _Op(const _Expr<_Dom, typename _Dom::value_type>& __v, \
│ │ │ -
358 const typename _Dom::value_type& __t) \
│ │ │ -
359 { \
│ │ │ -
360 typedef typename _Dom::value_type _Arg; \
│ │ │ -
361 typedef typename __fun<_Name, _Arg>::result_type _Value; \
│ │ │ -
362 typedef _BinClos<_Name, _Expr, _Constant, _Dom, _Arg> _Closure; \
│ │ │ -
363 return _Expr<_Closure, _Value>(_Closure(__v(), __t)); \
│ │ │ -
364 } \
│ │ │ -
365 \
│ │ │ -
366 template<class _Dom> \
│ │ │ -
367 inline _Expr<_BinClos<_Name, _Constant, _Expr, \
│ │ │ -
368 typename _Dom::value_type, _Dom>, \
│ │ │ -
369 typename __fun<_Name, typename _Dom::value_type>::result_type> \
│ │ │ -
370 operator _Op(const typename _Dom::value_type& __t, \
│ │ │ -
371 const _Expr<_Dom, typename _Dom::value_type>& __v) \
│ │ │ -
372 { \
│ │ │ -
373 typedef typename _Dom::value_type _Arg; \
│ │ │ -
374 typedef typename __fun<_Name, _Arg>::result_type _Value; \
│ │ │ -
375 typedef _BinClos<_Name, _Constant, _Expr, _Arg, _Dom> _Closure; \
│ │ │ -
376 return _Expr<_Closure, _Value>(_Closure(__t, __v())); \
│ │ │ -
377 } \
│ │ │ -
378 \
│ │ │ -
379 template<class _Dom> \
│ │ │ -
380 inline _Expr<_BinClos<_Name, _Expr, _ValArray, \
│ │ │ -
381 _Dom, typename _Dom::value_type>, \
│ │ │ -
382 typename __fun<_Name, typename _Dom::value_type>::result_type> \
│ │ │ -
383 operator _Op(const _Expr<_Dom,typename _Dom::value_type>& __e, \
│ │ │ -
384 const valarray<typename _Dom::value_type>& __v) \
│ │ │ -
385 { \
│ │ │ -
386 typedef typename _Dom::value_type _Arg; \
│ │ │ -
387 typedef typename __fun<_Name, _Arg>::result_type _Value; \
│ │ │ -
388 typedef _BinClos<_Name, _Expr, _ValArray, _Dom, _Arg> _Closure; \
│ │ │ -
389 return _Expr<_Closure, _Value>(_Closure(__e(), __v)); \
│ │ │ -
390 } \
│ │ │ -
391 \
│ │ │ -
392 template<class _Dom> \
│ │ │ -
393 inline _Expr<_BinClos<_Name, _ValArray, _Expr, \
│ │ │ -
394 typename _Dom::value_type, _Dom>, \
│ │ │ -
395 typename __fun<_Name, typename _Dom::value_type>::result_type> \
│ │ │ -
396 operator _Op(const valarray<typename _Dom::value_type>& __v, \
│ │ │ -
397 const _Expr<_Dom, typename _Dom::value_type>& __e) \
│ │ │ -
398 { \
│ │ │ -
399 typedef typename _Dom::value_type _Tp; \
│ │ │ -
400 typedef typename __fun<_Name, _Tp>::result_type _Value; \
│ │ │ -
401 typedef _BinClos<_Name, _ValArray, _Expr, _Tp, _Dom> _Closure; \
│ │ │ -
402 return _Expr<_Closure, _Value>(_Closure(__v, __e ())); \
│ │ │ -
403 }
│ │ │ -
404
│ │ │ -
405 _DEFINE_EXPR_BINARY_OPERATOR(+, struct std::__plus)
│ │ │ -
406 _DEFINE_EXPR_BINARY_OPERATOR(-, struct std::__minus)
│ │ │ -
407 _DEFINE_EXPR_BINARY_OPERATOR(*, struct std::__multiplies)
│ │ │ -
408 _DEFINE_EXPR_BINARY_OPERATOR(/, struct std::__divides)
│ │ │ -
409 _DEFINE_EXPR_BINARY_OPERATOR(%, struct std::__modulus)
│ │ │ -
410 _DEFINE_EXPR_BINARY_OPERATOR(^, struct std::__bitwise_xor)
│ │ │ -
411 _DEFINE_EXPR_BINARY_OPERATOR(&, struct std::__bitwise_and)
│ │ │ -
412 _DEFINE_EXPR_BINARY_OPERATOR(|, struct std::__bitwise_or)
│ │ │ -
413 _DEFINE_EXPR_BINARY_OPERATOR(<<, struct std::__shift_left)
│ │ │ -
414 _DEFINE_EXPR_BINARY_OPERATOR(>>, struct std::__shift_right)
│ │ │ -
415 _DEFINE_EXPR_BINARY_OPERATOR(&&, struct std::__logical_and)
│ │ │ -
416 _DEFINE_EXPR_BINARY_OPERATOR(||, struct std::__logical_or)
│ │ │ -
417 _DEFINE_EXPR_BINARY_OPERATOR(==, struct std::__equal_to)
│ │ │ -
418 _DEFINE_EXPR_BINARY_OPERATOR(!=, struct std::__not_equal_to)
│ │ │ -
419 _DEFINE_EXPR_BINARY_OPERATOR(<, struct std::__less)
│ │ │ -
420 _DEFINE_EXPR_BINARY_OPERATOR(>, struct std::__greater)
│ │ │ -
421 _DEFINE_EXPR_BINARY_OPERATOR(<=, struct std::__less_equal)
│ │ │ -
422 _DEFINE_EXPR_BINARY_OPERATOR(>=, struct std::__greater_equal)
│ │ │ -
423
│ │ │ -
424#undef _DEFINE_EXPR_BINARY_OPERATOR
│ │ │ -
425
│ │ │ -
426#define _DEFINE_EXPR_UNARY_FUNCTION(_Name, _UName) \
│ │ │ -
427 template<class _Dom> \
│ │ │ -
428 inline _Expr<_UnClos<_UName, _Expr, _Dom>, \
│ │ │ -
429 typename _Dom::value_type> \
│ │ │ -
430 _Name(const _Expr<_Dom, typename _Dom::value_type>& __e) \
│ │ │ -
431 { \
│ │ │ -
432 typedef typename _Dom::value_type _Tp; \
│ │ │ -
433 typedef _UnClos<_UName, _Expr, _Dom> _Closure; \
│ │ │ -
434 return _Expr<_Closure, _Tp>(_Closure(__e())); \
│ │ │ -
435 } \
│ │ │ -
436 \
│ │ │ -
437 template<typename _Tp> \
│ │ │ -
438 inline _Expr<_UnClos<_UName, _ValArray, _Tp>, _Tp> \
│ │ │ -
439 _Name(const valarray<_Tp>& __v) \
│ │ │ -
440 { \
│ │ │ -
441 typedef _UnClos<_UName, _ValArray, _Tp> _Closure; \
│ │ │ -
442 return _Expr<_Closure, _Tp>(_Closure(__v)); \
│ │ │ -
443 }
│ │ │ -
444
│ │ │ -
445 _DEFINE_EXPR_UNARY_FUNCTION(abs, struct std::_Abs)
│ │ │ -
446 _DEFINE_EXPR_UNARY_FUNCTION(cos, struct std::_Cos)
│ │ │ -
447 _DEFINE_EXPR_UNARY_FUNCTION(acos, struct std::_Acos)
│ │ │ -
448 _DEFINE_EXPR_UNARY_FUNCTION(cosh, struct std::_Cosh)
│ │ │ -
449 _DEFINE_EXPR_UNARY_FUNCTION(sin, struct std::_Sin)
│ │ │ -
450 _DEFINE_EXPR_UNARY_FUNCTION(asin, struct std::_Asin)
│ │ │ -
451 _DEFINE_EXPR_UNARY_FUNCTION(sinh, struct std::_Sinh)
│ │ │ -
452 _DEFINE_EXPR_UNARY_FUNCTION(tan, struct std::_Tan)
│ │ │ -
453 _DEFINE_EXPR_UNARY_FUNCTION(tanh, struct std::_Tanh)
│ │ │ -
454 _DEFINE_EXPR_UNARY_FUNCTION(atan, struct std::_Atan)
│ │ │ -
455 _DEFINE_EXPR_UNARY_FUNCTION(exp, struct std::_Exp)
│ │ │ -
456 _DEFINE_EXPR_UNARY_FUNCTION(log, struct std::_Log)
│ │ │ -
457 _DEFINE_EXPR_UNARY_FUNCTION(log10, struct std::_Log10)
│ │ │ -
458 _DEFINE_EXPR_UNARY_FUNCTION(sqrt, struct std::_Sqrt)
│ │ │ -
459
│ │ │ -
460#undef _DEFINE_EXPR_UNARY_FUNCTION
│ │ │ -
461
│ │ │ -
462#define _DEFINE_EXPR_BINARY_FUNCTION(_Fun, _UFun) \
│ │ │ -
463 template<class _Dom1, class _Dom2> \
│ │ │ -
464 inline _Expr<_BinClos<_UFun, _Expr, _Expr, _Dom1, _Dom2>, \
│ │ │ -
465 typename _Dom1::value_type> \
│ │ │ -
466 _Fun(const _Expr<_Dom1, typename _Dom1::value_type>& __e1, \
│ │ │ -
467 const _Expr<_Dom2, typename _Dom2::value_type>& __e2) \
│ │ │ -
468 { \
│ │ │ -
469 typedef typename _Dom1::value_type _Tp; \
│ │ │ -
470 typedef _BinClos<_UFun, _Expr, _Expr, _Dom1, _Dom2> _Closure; \
│ │ │ -
471 return _Expr<_Closure, _Tp>(_Closure(__e1(), __e2())); \
│ │ │ -
472 } \
│ │ │ -
473 \
│ │ │ -
474 template<class _Dom> \
│ │ │ -
475 inline _Expr<_BinClos<_UFun, _Expr, _ValArray, _Dom, \
│ │ │ -
476 typename _Dom::value_type>, \
│ │ │ -
477 typename _Dom::value_type> \
│ │ │ -
478 _Fun(const _Expr<_Dom, typename _Dom::value_type>& __e, \
│ │ │ -
479 const valarray<typename _Dom::value_type>& __v) \
│ │ │ -
480 { \
│ │ │ -
481 typedef typename _Dom::value_type _Tp; \
│ │ │ -
482 typedef _BinClos<_UFun, _Expr, _ValArray, _Dom, _Tp> _Closure; \
│ │ │ -
483 return _Expr<_Closure, _Tp>(_Closure(__e(), __v)); \
│ │ │ -
484 } \
│ │ │ -
485 \
│ │ │ -
486 template<class _Dom> \
│ │ │ -
487 inline _Expr<_BinClos<_UFun, _ValArray, _Expr, \
│ │ │ -
488 typename _Dom::value_type, _Dom>, \
│ │ │ -
489 typename _Dom::value_type> \
│ │ │ -
490 _Fun(const valarray<typename _Dom::valarray>& __v, \
│ │ │ -
491 const _Expr<_Dom, typename _Dom::value_type>& __e) \
│ │ │ -
492 { \
│ │ │ -
493 typedef typename _Dom::value_type _Tp; \
│ │ │ -
494 typedef _BinClos<_UFun, _ValArray, _Expr, _Tp, _Dom> _Closure; \
│ │ │ -
495 return _Expr<_Closure, _Tp>(_Closure(__v, __e())); \
│ │ │ -
496 } \
│ │ │ -
497 \
│ │ │ -
498 template<class _Dom> \
│ │ │ -
499 inline _Expr<_BinClos<_UFun, _Expr, _Constant, _Dom, \
│ │ │ -
500 typename _Dom::value_type>, \
│ │ │ -
501 typename _Dom::value_type> \
│ │ │ -
502 _Fun(const _Expr<_Dom, typename _Dom::value_type>& __e, \
│ │ │ -
503 const typename _Dom::value_type& __t) \
│ │ │ -
504 { \
│ │ │ -
505 typedef typename _Dom::value_type _Tp; \
│ │ │ -
506 typedef _BinClos<_UFun, _Expr, _Constant, _Dom, _Tp> _Closure; \
│ │ │ -
507 return _Expr<_Closure, _Tp>(_Closure(__e(), __t)); \
│ │ │ -
508 } \
│ │ │ -
509 \
│ │ │ -
510 template<class _Dom> \
│ │ │ -
511 inline _Expr<_BinClos<_UFun, _Constant, _Expr, \
│ │ │ -
512 typename _Dom::value_type, _Dom>, \
│ │ │ -
513 typename _Dom::value_type> \
│ │ │ -
514 _Fun(const typename _Dom::value_type& __t, \
│ │ │ -
515 const _Expr<_Dom, typename _Dom::value_type>& __e) \
│ │ │ -
516 { \
│ │ │ -
517 typedef typename _Dom::value_type _Tp; \
│ │ │ -
518 typedef _BinClos<_UFun, _Constant, _Expr, _Tp, _Dom> _Closure; \
│ │ │ -
519 return _Expr<_Closure, _Tp>(_Closure(__t, __e())); \
│ │ │ -
520 } \
│ │ │ -
521 \
│ │ │ -
522 template<typename _Tp> \
│ │ │ -
523 inline _Expr<_BinClos<_UFun, _ValArray, _ValArray, _Tp, _Tp>, _Tp> \
│ │ │ -
524 _Fun(const valarray<_Tp>& __v, const valarray<_Tp>& __w) \
│ │ │ -
525 { \
│ │ │ -
526 typedef _BinClos<_UFun, _ValArray, _ValArray, _Tp, _Tp> _Closure;\
│ │ │ -
527 return _Expr<_Closure, _Tp>(_Closure(__v, __w)); \
│ │ │ -
528 } \
│ │ │ -
529 \
│ │ │ -
530 template<typename _Tp> \
│ │ │ -
531 inline _Expr<_BinClos<_UFun, _ValArray, _Constant, _Tp, _Tp>, _Tp> \
│ │ │ -
532 _Fun(const valarray<_Tp>& __v, \
│ │ │ -
533 const typename valarray<_Tp>::value_type& __t) \
│ │ │ -
534 { \
│ │ │ -
535 typedef _BinClos<_UFun, _ValArray, _Constant, _Tp, _Tp> _Closure;\
│ │ │ -
536 return _Expr<_Closure, _Tp>(_Closure(__v, __t)); \
│ │ │ -
537 } \
│ │ │ -
538 \
│ │ │ -
539 template<typename _Tp> \
│ │ │ -
540 inline _Expr<_BinClos<_UFun, _Constant, _ValArray, _Tp, _Tp>, _Tp> \
│ │ │ -
541 _Fun(const typename valarray<_Tp>::value_type& __t, \
│ │ │ -
542 const valarray<_Tp>& __v) \
│ │ │ -
543 { \
│ │ │ -
544 typedef _BinClos<_UFun, _Constant, _ValArray, _Tp, _Tp> _Closure;\
│ │ │ -
545 return _Expr<_Closure, _Tp>(_Closure(__t, __v)); \
│ │ │ -
546 }
│ │ │ -
547
│ │ │ -
548_DEFINE_EXPR_BINARY_FUNCTION(atan2, struct std::_Atan2)
│ │ │ -
549_DEFINE_EXPR_BINARY_FUNCTION(pow, struct std::_Pow)
│ │ │ -
550
│ │ │ -
551#undef _DEFINE_EXPR_BINARY_FUNCTION
│ │ │ -
552
│ │ │ -
553_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
554} // namespace
│ │ │ -
555
│ │ │ -
556#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:370
│ │ │ -
constexpr complex< _Tp > operator+(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x plus y.
Definition complex:340
│ │ │ +
211 void
│ │ │ +
212 swap(unique_lock& __u) noexcept
│ │ │ +
213 {
│ │ │ +
214 std::swap(_M_device, __u._M_device);
│ │ │ +
215 std::swap(_M_owns, __u._M_owns);
│ │ │ +
216 }
│ │ │ +
217
│ │ │ +
218 mutex_type*
│ │ │ +
219 release() noexcept
│ │ │ +
220 {
│ │ │ +
221 mutex_type* __ret = _M_device;
│ │ │ +
222 _M_device = 0;
│ │ │ +
223 _M_owns = false;
│ │ │ +
224 return __ret;
│ │ │ +
225 }
│ │ │ +
226
│ │ │ +
227 _GLIBCXX_NODISCARD
│ │ │ +
228 bool
│ │ │ +
229 owns_lock() const noexcept
│ │ │ +
230 { return _M_owns; }
│ │ │ +
231
│ │ │ +
232 explicit operator bool() const noexcept
│ │ │ +
233 { return owns_lock(); }
│ │ │ +
234
│ │ │ +
235 _GLIBCXX_NODISCARD
│ │ │ +
236 mutex_type*
│ │ │ +
237 mutex() const noexcept
│ │ │ +
238 { return _M_device; }
│ │ │ +
239
│ │ │ +
240 private:
│ │ │ +
241 mutex_type* _M_device;
│ │ │ +
242 bool _M_owns;
│ │ │ +
243 };
│ │ │ +
│ │ │ +
244
│ │ │ +
245 /// Swap overload for unique_lock objects.
│ │ │ +
246 /// @relates unique_lock
│ │ │ +
247 template<typename _Mutex>
│ │ │ +
248 inline void
│ │ │ +
│ │ │ + │ │ │ +
250 { __x.swap(__y); }
│ │ │ +
│ │ │ +
251
│ │ │ +
252_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
253} // namespace
│ │ │ +
254
│ │ │ +
255#endif // C++11
│ │ │ +
256#endif // _GLIBCXX_UNIQUE_LOCK_H
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │ +
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:51
│ │ │
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:512
│ │ │ +
chrono::time_point represents a point in time as measured by a clock
Definition chrono.h:923
│ │ │ + │ │ │ +
Do not acquire ownership of the mutex.
Definition std_mutex.h:216
│ │ │ +
Try to acquire ownership of the mutex without blocking.
Definition std_mutex.h:219
│ │ │ +
Assume the calling thread has already obtained mutex ownership and manage it.
Definition std_mutex.h:223
│ │ │ +
A movable scoped lock type.
Definition unique_lock.h:61
│ │ │ +
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-2024 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2008-2024 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,559 +21,283 @@ │ │ │ │ 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 │ │ │ │ +30#ifndef _GLIBCXX_UNIQUE_LOCK_H │ │ │ │ +31#define _GLIBCXX_UNIQUE_LOCK_H 1 │ │ │ │ +32 │ │ │ │ +33#pragma GCC system_header │ │ │ │ 34 │ │ │ │ -35#pragma GCC system_header │ │ │ │ -36 │ │ │ │ -37namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -38{ │ │ │ │ -39_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -40 │ │ │ │ -41namespace __detail │ │ │ │ -42{ │ │ │ │ -43 // │ │ │ │ -44 // gslice_array closure. │ │ │ │ -45 // │ │ │ │ -46 template │ │ │ │ -47 class _GBase │ │ │ │ -48 { │ │ │ │ -49 public: │ │ │ │ -50 typedef typename _Dom::value_type value_type; │ │ │ │ -51 │ │ │ │ -52 _GBase (const _Dom& __e, const valarray& __i) │ │ │ │ -53 : _M_expr (__e), _M_index(__i) {} │ │ │ │ -54 │ │ │ │ -55 value_type │ │ │ │ -56 operator[] (size_t __i) const │ │ │ │ -57 { return _M_expr[_M_index[__i]]; } │ │ │ │ -58 │ │ │ │ -59 size_t │ │ │ │ -60 _s_i_z_e () const │ │ │ │ -61 { return _M_index.size(); } │ │ │ │ -62 │ │ │ │ -63 private: │ │ │ │ -64 typename _ValArrayRef<_Dom>::__type _M_expr; │ │ │ │ -65 const valarray& _M_index; │ │ │ │ -66 }; │ │ │ │ -67 │ │ │ │ -68 template │ │ │ │ -69 class _GBase<_Array<_Tp> > │ │ │ │ -70 { │ │ │ │ -71 public: │ │ │ │ -72 typedef _Tp value_type; │ │ │ │ -73 │ │ │ │ -74 _GBase (_Array<_Tp> __a, const valarray& __i) │ │ │ │ -75 : _M_array (__a), _M_index(__i) {} │ │ │ │ +35#if __cplusplus < 201103L │ │ │ │ +36# include <_b_i_t_s_/_c_+_+_0_x___w_a_r_n_i_n_g_._h> │ │ │ │ +37#else │ │ │ │ +38 │ │ │ │ +39#include <_b_i_t_s_/_c_h_r_o_n_o_._h> │ │ │ │ +40#include <_b_i_t_s_/_e_r_r_o_r___c_o_n_s_t_a_n_t_s_._h> // for std::errc │ │ │ │ +41#include <_b_i_t_s_/_m_o_v_e_._h> // for std::swap │ │ │ │ +42#include <_b_i_t_s_/_s_t_d___m_u_t_e_x_._h> // for std::defer_lock_t │ │ │ │ +43 │ │ │ │ +44namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +45{ │ │ │ │ +46_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +47 │ │ │ │ +48 /** @brief A movable scoped lock type. │ │ │ │ +49 * │ │ │ │ +50 * A unique_lock controls mutex ownership within a scope. Ownership of the │ │ │ │ +51 * mutex can be delayed until after construction and can be transferred │ │ │ │ +52 * to another unique_lock by move construction or move assignment. If a │ │ │ │ +53 * mutex lock is owned when the destructor runs ownership will be released. │ │ │ │ +54 * │ │ │ │ +55 * @headerfile mutex │ │ │ │ +56 * @ingroup mutexes │ │ │ │ +57 * @since C++11 │ │ │ │ +58 */ │ │ │ │ +59 template │ │ │ │ +_6_0 class _u_n_i_q_u_e___l_o_c_k │ │ │ │ +61 { │ │ │ │ +62 public: │ │ │ │ +63 typedef ___M_u_t_e_x mutex_type; │ │ │ │ +64 │ │ │ │ +65 _u_n_i_q_u_e___l_o_c_k() noexcept │ │ │ │ +66 : _M_device(0), _M_owns(false) │ │ │ │ +67 { } │ │ │ │ +68 │ │ │ │ +69 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +70 explicit _u_n_i_q_u_e___l_o_c_k(mutex_type& _____m) │ │ │ │ +71 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____m)), _M_owns(false) │ │ │ │ +72 { │ │ │ │ +73 lock(); │ │ │ │ +74 _M_owns = true; │ │ │ │ +75 } │ │ │ │ 76 │ │ │ │ -77 value_type │ │ │ │ -78 operator[] (size_t __i) const │ │ │ │ -79 { return _M_array._M_data[_M_index[__i]]; } │ │ │ │ +77 _u_n_i_q_u_e___l_o_c_k(mutex_type& _____m, _d_e_f_e_r___l_o_c_k___t) noexcept │ │ │ │ +78 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____m)), _M_owns(false) │ │ │ │ +79 { } │ │ │ │ 80 │ │ │ │ -81 size_t │ │ │ │ -82 _s_i_z_e () const │ │ │ │ -83 { return _M_index.size(); } │ │ │ │ -84 │ │ │ │ -85 private: │ │ │ │ -86 const _Array<_Tp> _M_array; │ │ │ │ -87 const valarray& _M_index; │ │ │ │ -88 }; │ │ │ │ -89 │ │ │ │ -90 template │ │ │ │ -91 struct _GClos<_Expr, _Dom> │ │ │ │ -92 : _GBase<_Dom> │ │ │ │ -93 { │ │ │ │ -94 typedef _GBase<_Dom> _Base; │ │ │ │ -95 typedef typename _Base::value_type value_type; │ │ │ │ -96 │ │ │ │ -97 _GClos (const _Dom& __e, const valarray& __i) │ │ │ │ -98 : _Base (__e, __i) {} │ │ │ │ -99 }; │ │ │ │ +81 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +82 _u_n_i_q_u_e___l_o_c_k(mutex_type& _____m, _t_r_y___t_o___l_o_c_k___t) │ │ │ │ +83 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____m)), _M_owns(_M_device->try_lock()) │ │ │ │ +84 { } │ │ │ │ +85 │ │ │ │ +86 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +87 _u_n_i_q_u_e___l_o_c_k(mutex_type& _____m, _a_d_o_p_t___l_o_c_k___t) noexcept │ │ │ │ +88 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____m)), _M_owns(true) │ │ │ │ +89 { │ │ │ │ +90 // XXX calling thread owns mutex │ │ │ │ +91 } │ │ │ │ +92 │ │ │ │ +93 template │ │ │ │ +94 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +95 _u_n_i_q_u_e___l_o_c_k(mutex_type& _____m, │ │ │ │ +96 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) │ │ │ │ +97 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____m)), │ │ │ │ +98 _M_owns(_M_device->try_lock_until(_____a_t_i_m_e)) │ │ │ │ +99 { } │ │ │ │ 100 │ │ │ │ -101 template │ │ │ │ -102 struct _GClos<_ValArray, _Tp> │ │ │ │ -103 : _GBase<_Array<_Tp> > │ │ │ │ -104 { │ │ │ │ -105 typedef _GBase<_Array<_Tp> > _Base; │ │ │ │ -106 typedef typename _Base::value_type value_type; │ │ │ │ -107 │ │ │ │ -108 _GClos (_Array<_Tp> __a, const valarray& __i) │ │ │ │ -109 : _Base (__a, __i) {} │ │ │ │ -110 }; │ │ │ │ -111 │ │ │ │ -112 // │ │ │ │ -113 // indirect_array closure │ │ │ │ -114 // │ │ │ │ -115 template │ │ │ │ -116 class _IBase │ │ │ │ -117 { │ │ │ │ -118 public: │ │ │ │ -119 typedef typename _Dom::value_type value_type; │ │ │ │ -120 │ │ │ │ -121 _IBase (const _Dom& __e, const valarray& __i) │ │ │ │ -122 : _M_expr (__e), _M_index (__i) {} │ │ │ │ -123 │ │ │ │ -124 value_type │ │ │ │ -125 operator[] (size_t __i) const │ │ │ │ -126 { return _M_expr[_M_index[__i]]; } │ │ │ │ -127 │ │ │ │ -128 size_t │ │ │ │ -129 _s_i_z_e() const │ │ │ │ -130 { return _M_index.size(); } │ │ │ │ +101 template │ │ │ │ +102 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +103 _u_n_i_q_u_e___l_o_c_k(mutex_type& _____m, │ │ │ │ +104 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) │ │ │ │ +105 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____m)), │ │ │ │ +106 _M_owns(_M_device->try_lock_for(_____r_t_i_m_e)) │ │ │ │ +107 { } │ │ │ │ +108 │ │ │ │ +109 _~_u_n_i_q_u_e___l_o_c_k() │ │ │ │ +110 { │ │ │ │ +111 if (_M_owns) │ │ │ │ +112 unlock(); │ │ │ │ +113 } │ │ │ │ +114 │ │ │ │ +115 _u_n_i_q_u_e___l_o_c_k(const _u_n_i_q_u_e___l_o_c_k&) = delete; │ │ │ │ +116 _u_n_i_q_u_e___l_o_c_k& operator=(const _u_n_i_q_u_e___l_o_c_k&) = delete; │ │ │ │ +117 │ │ │ │ +118 _u_n_i_q_u_e___l_o_c_k(_u_n_i_q_u_e___l_o_c_k&& _____u) noexcept │ │ │ │ +119 : _M_device(_____u._M_device), _M_owns(_____u._M_owns) │ │ │ │ +120 { │ │ │ │ +121 _____u._M_device = 0; │ │ │ │ +122 _____u._M_owns = false; │ │ │ │ +123 } │ │ │ │ +124 │ │ │ │ +125 _u_n_i_q_u_e___l_o_c_k& operator=(_u_n_i_q_u_e___l_o_c_k&& _____u) noexcept │ │ │ │ +126 { │ │ │ │ +127 if(_M_owns) │ │ │ │ +128 unlock(); │ │ │ │ +129 │ │ │ │ +130 _u_n_i_q_u_e___l_o_c_k(_s_t_d_:_:_m_o_v_e(_____u)).swap(*this); │ │ │ │ 131 │ │ │ │ -132 private: │ │ │ │ -133 typename _ValArrayRef<_Dom>::__type _M_expr; │ │ │ │ -134 const valarray& _M_index; │ │ │ │ -135 }; │ │ │ │ -136 │ │ │ │ -137 template │ │ │ │ -138 struct _IClos<_Expr, _Dom> │ │ │ │ -139 : _IBase<_Dom> │ │ │ │ +132 _____u._M_device = 0; │ │ │ │ +133 _____u._M_owns = false; │ │ │ │ +134 │ │ │ │ +135 return *this; │ │ │ │ +136 } │ │ │ │ +137 │ │ │ │ +138 void │ │ │ │ +139 lock() │ │ │ │ 140 { │ │ │ │ -141 typedef _IBase<_Dom> _Base; │ │ │ │ -142 typedef typename _Base::value_type value_type; │ │ │ │ -143 │ │ │ │ -144 _IClos (const _Dom& __e, const valarray& __i) │ │ │ │ -145 : _Base (__e, __i) {} │ │ │ │ -146 }; │ │ │ │ -147 │ │ │ │ -148 template │ │ │ │ -149 struct _IClos<_ValArray, _Tp> │ │ │ │ -150 : _IBase > │ │ │ │ -151 { │ │ │ │ -152 typedef _IBase > _Base; │ │ │ │ -153 typedef _Tp value_type; │ │ │ │ -154 │ │ │ │ -155 _IClos (const valarray<_Tp>& __a, const valarray& __i) │ │ │ │ -156 : _Base (__a, __i) {} │ │ │ │ -157 }; │ │ │ │ -158} // namespace __detail │ │ │ │ -159 │ │ │ │ -160 // │ │ │ │ -161 // class _Expr │ │ │ │ -162 // │ │ │ │ -163 template │ │ │ │ -164 class _Expr │ │ │ │ -165 { │ │ │ │ -166 public: │ │ │ │ -167 typedef _Tp value_type; │ │ │ │ -168 │ │ │ │ -169 _Expr(const _Clos&); │ │ │ │ -170 │ │ │ │ -171 const _Clos& operator()() const; │ │ │ │ -172 │ │ │ │ -173 value_type operator[](size_t) const; │ │ │ │ -174 valarray operator[](slice) const; │ │ │ │ -175 valarray operator[](const gslice&) const; │ │ │ │ -176 valarray operator[](const valarray&) const; │ │ │ │ -177 valarray operator[](const valarray&) const; │ │ │ │ -178 │ │ │ │ -179 _Expr<_UnClos<__unary_plus, std::_Expr, _Clos>, value_type> │ │ │ │ -180 _o_p_e_r_a_t_o_r_+() const; │ │ │ │ -181 │ │ │ │ -182 _Expr<_UnClos<__negate, std::_Expr, _Clos>, value_type> │ │ │ │ -183 _o_p_e_r_a_t_o_r_-() const; │ │ │ │ -184 │ │ │ │ -185 _Expr<_UnClos<__bitwise_not, std::_Expr, _Clos>, value_type> │ │ │ │ -186 operator~() const; │ │ │ │ -187 │ │ │ │ -188 _Expr<_UnClos<__logical_not, std::_Expr, _Clos>, bool> │ │ │ │ -189 operator!() const; │ │ │ │ -190 │ │ │ │ -191 size_t _s_i_z_e() const; │ │ │ │ -192 value_type sum() const; │ │ │ │ -193 │ │ │ │ -194 valarray shift(int) const; │ │ │ │ -195 valarray cshift(int) const; │ │ │ │ -196 │ │ │ │ -197 value_type min() const; │ │ │ │ -198 value_type max() const; │ │ │ │ -199 │ │ │ │ -200 valarray apply(value_type (*)(const value_type&)) const; │ │ │ │ -201 valarray apply(value_type (*)(value_type)) const; │ │ │ │ -202 │ │ │ │ -203 private: │ │ │ │ -204 const _Clos _M_closure; │ │ │ │ -205 }; │ │ │ │ -206 │ │ │ │ -207 template │ │ │ │ -208 inline │ │ │ │ -209 _Expr<_Clos, _Tp>::_Expr(const _Clos& __c) : _M_closure(__c) {} │ │ │ │ +141 if (!_M_device) │ │ │ │ +142 __throw_system_error(int(errc::operation_not_permitted)); │ │ │ │ +143 else if (_M_owns) │ │ │ │ +144 __throw_system_error(int(errc::resource_deadlock_would_occur)); │ │ │ │ +145 else │ │ │ │ +146 { │ │ │ │ +147 _M_device->lock(); │ │ │ │ +148 _M_owns = true; │ │ │ │ +149 } │ │ │ │ +150 } │ │ │ │ +151 │ │ │ │ +152 _GLIBCXX_NODISCARD │ │ │ │ +153 bool │ │ │ │ +154 try_lock() │ │ │ │ +155 { │ │ │ │ +156 if (!_M_device) │ │ │ │ +157 __throw_system_error(int(errc::operation_not_permitted)); │ │ │ │ +158 else if (_M_owns) │ │ │ │ +159 __throw_system_error(int(errc::resource_deadlock_would_occur)); │ │ │ │ +160 else │ │ │ │ +161 { │ │ │ │ +162 _M_owns = _M_device->try_lock(); │ │ │ │ +163 return _M_owns; │ │ │ │ +164 } │ │ │ │ +165 } │ │ │ │ +166 │ │ │ │ +167 template │ │ │ │ +168 _GLIBCXX_NODISCARD │ │ │ │ +169 bool │ │ │ │ +170 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) │ │ │ │ +171 { │ │ │ │ +172 if (!_M_device) │ │ │ │ +173 __throw_system_error(int(errc::operation_not_permitted)); │ │ │ │ +174 else if (_M_owns) │ │ │ │ +175 __throw_system_error(int(errc::resource_deadlock_would_occur)); │ │ │ │ +176 else │ │ │ │ +177 { │ │ │ │ +178 _M_owns = _M_device->try_lock_until(_____a_t_i_m_e); │ │ │ │ +179 return _M_owns; │ │ │ │ +180 } │ │ │ │ +181 } │ │ │ │ +182 │ │ │ │ +183 template │ │ │ │ +184 _GLIBCXX_NODISCARD │ │ │ │ +185 bool │ │ │ │ +186 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) │ │ │ │ +187 { │ │ │ │ +188 if (!_M_device) │ │ │ │ +189 __throw_system_error(int(errc::operation_not_permitted)); │ │ │ │ +190 else if (_M_owns) │ │ │ │ +191 __throw_system_error(int(errc::resource_deadlock_would_occur)); │ │ │ │ +192 else │ │ │ │ +193 { │ │ │ │ +194 _M_owns = _M_device->try_lock_for(_____r_t_i_m_e); │ │ │ │ +195 return _M_owns; │ │ │ │ +196 } │ │ │ │ +197 } │ │ │ │ +198 │ │ │ │ +199 void │ │ │ │ +200 unlock() │ │ │ │ +201 { │ │ │ │ +202 if (!_M_owns) │ │ │ │ +203 __throw_system_error(int(errc::operation_not_permitted)); │ │ │ │ +204 else if (_M_device) │ │ │ │ +205 { │ │ │ │ +206 _M_device->unlock(); │ │ │ │ +207 _M_owns = false; │ │ │ │ +208 } │ │ │ │ +209 } │ │ │ │ 210 │ │ │ │ -211 template │ │ │ │ -212 inline const _Clos& │ │ │ │ -213 _Expr<_Clos, _Tp>::operator()() const │ │ │ │ -214 { return _M_closure; } │ │ │ │ -215 │ │ │ │ -216 template │ │ │ │ -217 inline _Tp │ │ │ │ -218 _Expr<_Clos, _Tp>::operator[](size_t __i) const │ │ │ │ -219 { return _M_closure[__i]; } │ │ │ │ -220 │ │ │ │ -221 template │ │ │ │ -222 inline valarray<_Tp> │ │ │ │ -223 _Expr<_Clos, _Tp>::operator[](slice __s) const │ │ │ │ -224 { │ │ │ │ -225 valarray<_Tp> __v = valarray<_Tp>(*this)[__s]; │ │ │ │ -226 return __v; │ │ │ │ -227 } │ │ │ │ -228 │ │ │ │ -229 template │ │ │ │ -230 inline valarray<_Tp> │ │ │ │ -231 _Expr<_Clos, _Tp>::operator[](const gslice& __gs) const │ │ │ │ -232 { │ │ │ │ -233 valarray<_Tp> __v = valarray<_Tp>(*this)[__gs]; │ │ │ │ -234 return __v; │ │ │ │ -235 } │ │ │ │ -236 │ │ │ │ -237 template │ │ │ │ -238 inline valarray<_Tp> │ │ │ │ -239 _Expr<_Clos, _Tp>::operator[](const valarray& __m) const │ │ │ │ -240 { │ │ │ │ -241 valarray<_Tp> __v = valarray<_Tp>(*this)[__m]; │ │ │ │ -242 return __v; │ │ │ │ -243 } │ │ │ │ +211 void │ │ │ │ +212 swap(_u_n_i_q_u_e___l_o_c_k& _____u) noexcept │ │ │ │ +213 { │ │ │ │ +214 std::swap(_M_device, _____u._M_device); │ │ │ │ +215 std::swap(_M_owns, _____u._M_owns); │ │ │ │ +216 } │ │ │ │ +217 │ │ │ │ +218 mutex_type* │ │ │ │ +219 release() noexcept │ │ │ │ +220 { │ │ │ │ +221 mutex_type* _____r_e_t = _M_device; │ │ │ │ +222 _M_device = 0; │ │ │ │ +223 _M_owns = false; │ │ │ │ +224 return _____r_e_t; │ │ │ │ +225 } │ │ │ │ +226 │ │ │ │ +227 _GLIBCXX_NODISCARD │ │ │ │ +228 bool │ │ │ │ +229 owns_lock() const noexcept │ │ │ │ +230 { return _M_owns; } │ │ │ │ +231 │ │ │ │ +232 explicit operator bool() const noexcept │ │ │ │ +233 { return owns_lock(); } │ │ │ │ +234 │ │ │ │ +235 _GLIBCXX_NODISCARD │ │ │ │ +236 mutex_type* │ │ │ │ +237 _m_u_t_e_x() const noexcept │ │ │ │ +238 { return _M_device; } │ │ │ │ +239 │ │ │ │ +240 private: │ │ │ │ +241 mutex_type* _M_device; │ │ │ │ +242 bool _M_owns; │ │ │ │ +243 }; │ │ │ │ 244 │ │ │ │ -245 template │ │ │ │ -246 inline valarray<_Tp> │ │ │ │ -247 _Expr<_Clos, _Tp>::operator[](const valarray& __i) const │ │ │ │ -248 { │ │ │ │ -249 valarray<_Tp> __v = valarray<_Tp>(*this)[__i]; │ │ │ │ -250 return __v; │ │ │ │ -251 } │ │ │ │ -252 │ │ │ │ -253 template │ │ │ │ -254 inline size_t │ │ │ │ -255 _Expr<_Clos, _Tp>::size() const │ │ │ │ -256 { return _M_closure.size(); } │ │ │ │ -257 │ │ │ │ -258 template │ │ │ │ -259 inline valarray<_Tp> │ │ │ │ -260 _Expr<_Clos, _Tp>::shift(int __n) const │ │ │ │ -261 { │ │ │ │ -262 valarray<_Tp> __v = valarray<_Tp>(*this).shift(__n); │ │ │ │ -263 return __v; │ │ │ │ -264 } │ │ │ │ -265 │ │ │ │ -266 template │ │ │ │ -267 inline valarray<_Tp> │ │ │ │ -268 _Expr<_Clos, _Tp>::cshift(int __n) const │ │ │ │ -269 { │ │ │ │ -270 valarray<_Tp> __v = valarray<_Tp>(*this).cshift(__n); │ │ │ │ -271 return __v; │ │ │ │ -272 } │ │ │ │ -273 │ │ │ │ -274 template │ │ │ │ -275 inline valarray<_Tp> │ │ │ │ -276 _Expr<_Clos, _Tp>::apply(_Tp __f(const _Tp&)) const │ │ │ │ -277 { │ │ │ │ -278 valarray<_Tp> __v = valarray<_Tp>(*this).apply(__f); │ │ │ │ -279 return __v; │ │ │ │ -280 } │ │ │ │ -281 │ │ │ │ -282 template │ │ │ │ -283 inline valarray<_Tp> │ │ │ │ -284 _Expr<_Clos, _Tp>::apply(_Tp __f(_Tp)) const │ │ │ │ -285 { │ │ │ │ -286 valarray<_Tp> __v = valarray<_Tp>(*this).apply(__f); │ │ │ │ -287 return __v; │ │ │ │ -288 } │ │ │ │ -289 │ │ │ │ -290 // XXX: replace this with a more robust summation algorithm. │ │ │ │ -291 template │ │ │ │ -292 inline _Tp │ │ │ │ -293 _Expr<_Clos, _Tp>::sum() const │ │ │ │ -294 { │ │ │ │ -295 size_t __n = _M_closure.size(); │ │ │ │ -296 if (__n == 0) │ │ │ │ -297 return _Tp(); │ │ │ │ -298 else │ │ │ │ -299 { │ │ │ │ -300 _Tp __s = _M_closure[--__n]; │ │ │ │ -301 while (__n != 0) │ │ │ │ -302 __s += _M_closure[--__n]; │ │ │ │ -303 return __s; │ │ │ │ -304 } │ │ │ │ -305 } │ │ │ │ -306 │ │ │ │ -307 template │ │ │ │ -308 inline _Tp │ │ │ │ -309 _Expr<_Clos, _Tp>::min() const │ │ │ │ -310 { return __valarray_min(_M_closure); } │ │ │ │ -311 │ │ │ │ -312 template │ │ │ │ -313 inline _Tp │ │ │ │ -314 _Expr<_Clos, _Tp>::max() const │ │ │ │ -315 { return __valarray_max(_M_closure); } │ │ │ │ -316 │ │ │ │ -317 template │ │ │ │ -318 inline _Expr<_UnClos<__logical_not, _Expr, _Dom>, bool> │ │ │ │ -319 _Expr<_Dom, _Tp>::operator!() const │ │ │ │ -320 { │ │ │ │ -321 typedef _UnClos<__logical_not, std::_Expr, _Dom> _Closure; │ │ │ │ -322 return _Expr<_Closure, bool>(_Closure(this->_M_closure)); │ │ │ │ -323 } │ │ │ │ -324 │ │ │ │ -325#define _DEFINE_EXPR_UNARY_OPERATOR(_Op, _Name) \ │ │ │ │ -326 template \ │ │ │ │ -327 inline _Expr<_UnClos<_Name, std::_Expr, _Dom>, _Tp> \ │ │ │ │ -328 _Expr<_Dom, _Tp>::operator _Op() const \ │ │ │ │ -329 { \ │ │ │ │ -330 typedef _UnClos<_Name, std::_Expr, _Dom> _Closure; \ │ │ │ │ -331 return _Expr<_Closure, _Tp>(_Closure(this->_M_closure)); \ │ │ │ │ -332 } │ │ │ │ -333 │ │ │ │ -334 _DEFINE_EXPR_UNARY_OPERATOR(+, struct std::__unary_plus) │ │ │ │ -335 _DEFINE_EXPR_UNARY_OPERATOR(-, struct std::__negate) │ │ │ │ -336 _DEFINE_EXPR_UNARY_OPERATOR(~, struct std::__bitwise_not) │ │ │ │ -337 │ │ │ │ -338#undef _DEFINE_EXPR_UNARY_OPERATOR │ │ │ │ -339 │ │ │ │ -340#define _DEFINE_EXPR_BINARY_OPERATOR(_Op, _Name) \ │ │ │ │ -341 template \ │ │ │ │ -342 inline _Expr<_BinClos<_Name, _Expr, _Expr, _Dom1, _Dom2>, \ │ │ │ │ -343 typename __fun<_Name, typename _Dom1::value_type>::result_type> \ │ │ │ │ -344 operator _Op(const _Expr<_Dom1, typename _Dom1::value_type>& __v, \ │ │ │ │ -345 const _Expr<_Dom2, typename _Dom2::value_type>& __w) \ │ │ │ │ -346 { \ │ │ │ │ -347 typedef typename _Dom1::value_type _Arg; \ │ │ │ │ -348 typedef typename __fun<_Name, _Arg>::result_type _Value; \ │ │ │ │ -349 typedef _BinClos<_Name, _Expr, _Expr, _Dom1, _Dom2> _Closure; \ │ │ │ │ -350 return _Expr<_Closure, _Value>(_Closure(__v(), __w())); \ │ │ │ │ -351 } \ │ │ │ │ -352 \ │ │ │ │ -353 template \ │ │ │ │ -354 inline _Expr<_BinClos<_Name, _Expr, _Constant, _Dom, \ │ │ │ │ -355 typename _Dom::value_type>, \ │ │ │ │ -356 typename __fun<_Name, typename _Dom::value_type>::result_type> \ │ │ │ │ -357 operator _Op(const _Expr<_Dom, typename _Dom::value_type>& __v, \ │ │ │ │ -358 const typename _Dom::value_type& __t) \ │ │ │ │ -359 { \ │ │ │ │ -360 typedef typename _Dom::value_type _Arg; \ │ │ │ │ -361 typedef typename __fun<_Name, _Arg>::result_type _Value; \ │ │ │ │ -362 typedef _BinClos<_Name, _Expr, _Constant, _Dom, _Arg> _Closure; \ │ │ │ │ -363 return _Expr<_Closure, _Value>(_Closure(__v(), __t)); \ │ │ │ │ -364 } \ │ │ │ │ -365 \ │ │ │ │ -366 template \ │ │ │ │ -367 inline _Expr<_BinClos<_Name, _Constant, _Expr, \ │ │ │ │ -368 typename _Dom::value_type, _Dom>, \ │ │ │ │ -369 typename __fun<_Name, typename _Dom::value_type>::result_type> \ │ │ │ │ -370 operator _Op(const typename _Dom::value_type& __t, \ │ │ │ │ -371 const _Expr<_Dom, typename _Dom::value_type>& __v) \ │ │ │ │ -372 { \ │ │ │ │ -373 typedef typename _Dom::value_type _Arg; \ │ │ │ │ -374 typedef typename __fun<_Name, _Arg>::result_type _Value; \ │ │ │ │ -375 typedef _BinClos<_Name, _Constant, _Expr, _Arg, _Dom> _Closure; \ │ │ │ │ -376 return _Expr<_Closure, _Value>(_Closure(__t, __v())); \ │ │ │ │ -377 } \ │ │ │ │ -378 \ │ │ │ │ -379 template \ │ │ │ │ -380 inline _Expr<_BinClos<_Name, _Expr, _ValArray, \ │ │ │ │ -381 _Dom, typename _Dom::value_type>, \ │ │ │ │ -382 typename __fun<_Name, typename _Dom::value_type>::result_type> \ │ │ │ │ -383 operator _Op(const _Expr<_Dom,typename _Dom::value_type>& __e, \ │ │ │ │ -384 const valarray& __v) \ │ │ │ │ -385 { \ │ │ │ │ -386 typedef typename _Dom::value_type _Arg; \ │ │ │ │ -387 typedef typename __fun<_Name, _Arg>::result_type _Value; \ │ │ │ │ -388 typedef _BinClos<_Name, _Expr, _ValArray, _Dom, _Arg> _Closure; \ │ │ │ │ -389 return _Expr<_Closure, _Value>(_Closure(__e(), __v)); \ │ │ │ │ -390 } \ │ │ │ │ -391 \ │ │ │ │ -392 template \ │ │ │ │ -393 inline _Expr<_BinClos<_Name, _ValArray, _Expr, \ │ │ │ │ -394 typename _Dom::value_type, _Dom>, \ │ │ │ │ -395 typename __fun<_Name, typename _Dom::value_type>::result_type> \ │ │ │ │ -396 operator _Op(const valarray& __v, \ │ │ │ │ -397 const _Expr<_Dom, typename _Dom::value_type>& __e) \ │ │ │ │ -398 { \ │ │ │ │ -399 typedef typename _Dom::value_type _Tp; \ │ │ │ │ -400 typedef typename __fun<_Name, _Tp>::result_type _Value; \ │ │ │ │ -401 typedef _BinClos<_Name, _ValArray, _Expr, _Tp, _Dom> _Closure; \ │ │ │ │ -402 return _Expr<_Closure, _Value>(_Closure(__v, __e ())); \ │ │ │ │ -403 } │ │ │ │ -404 │ │ │ │ -405 _DEFINE_EXPR_BINARY_OPERATOR(+, struct std::__plus) │ │ │ │ -406 _DEFINE_EXPR_BINARY_OPERATOR(-, struct std::__minus) │ │ │ │ -407 _DEFINE_EXPR_BINARY_OPERATOR(*, struct std::__multiplies) │ │ │ │ -408 _DEFINE_EXPR_BINARY_OPERATOR(/, struct std::__divides) │ │ │ │ -409 _DEFINE_EXPR_BINARY_OPERATOR(%, struct std::__modulus) │ │ │ │ -410 _DEFINE_EXPR_BINARY_OPERATOR(^, struct std::__bitwise_xor) │ │ │ │ -411 _DEFINE_EXPR_BINARY_OPERATOR(&, struct std::__bitwise_and) │ │ │ │ -412 _DEFINE_EXPR_BINARY_OPERATOR(|, struct std::__bitwise_or) │ │ │ │ -413 _DEFINE_EXPR_BINARY_OPERATOR(<<, struct std::__shift_left) │ │ │ │ -414 _DEFINE_EXPR_BINARY_OPERATOR(>>, struct std::__shift_right) │ │ │ │ -415 _DEFINE_EXPR_BINARY_OPERATOR(&&, struct std::__logical_and) │ │ │ │ -416 _DEFINE_EXPR_BINARY_OPERATOR(||, struct std::__logical_or) │ │ │ │ -417 _DEFINE_EXPR_BINARY_OPERATOR(==, struct std::__equal_to) │ │ │ │ -418 _DEFINE_EXPR_BINARY_OPERATOR(!=, struct std::__not_equal_to) │ │ │ │ -419 _DEFINE_EXPR_BINARY_OPERATOR(<, struct std::__less) │ │ │ │ -420 _DEFINE_EXPR_BINARY_OPERATOR(>, struct std::__greater) │ │ │ │ -421 _DEFINE_EXPR_BINARY_OPERATOR(<=, struct std::__less_equal) │ │ │ │ -422 _DEFINE_EXPR_BINARY_OPERATOR(>=, struct std::__greater_equal) │ │ │ │ -423 │ │ │ │ -424#undef _DEFINE_EXPR_BINARY_OPERATOR │ │ │ │ -425 │ │ │ │ -426#define _DEFINE_EXPR_UNARY_FUNCTION(_Name, _UName) \ │ │ │ │ -427 template \ │ │ │ │ -428 inline _Expr<_UnClos<_UName, _Expr, _Dom>, \ │ │ │ │ -429 typename _Dom::value_type> \ │ │ │ │ -430 _Name(const _Expr<_Dom, typename _Dom::value_type>& __e) \ │ │ │ │ -431 { \ │ │ │ │ -432 typedef typename _Dom::value_type _Tp; \ │ │ │ │ -433 typedef _UnClos<_UName, _Expr, _Dom> _Closure; \ │ │ │ │ -434 return _Expr<_Closure, _Tp>(_Closure(__e())); \ │ │ │ │ -435 } \ │ │ │ │ -436 \ │ │ │ │ -437 template \ │ │ │ │ -438 inline _Expr<_UnClos<_UName, _ValArray, _Tp>, _Tp> \ │ │ │ │ -439 _Name(const valarray<_Tp>& __v) \ │ │ │ │ -440 { \ │ │ │ │ -441 typedef _UnClos<_UName, _ValArray, _Tp> _Closure; \ │ │ │ │ -442 return _Expr<_Closure, _Tp>(_Closure(__v)); \ │ │ │ │ -443 } │ │ │ │ -444 │ │ │ │ -445 _DEFINE_EXPR_UNARY_FUNCTION(abs, struct std::_Abs) │ │ │ │ -446 _DEFINE_EXPR_UNARY_FUNCTION(cos, struct std::_Cos) │ │ │ │ -447 _DEFINE_EXPR_UNARY_FUNCTION(acos, struct std::_Acos) │ │ │ │ -448 _DEFINE_EXPR_UNARY_FUNCTION(cosh, struct std::_Cosh) │ │ │ │ -449 _DEFINE_EXPR_UNARY_FUNCTION(sin, struct std::_Sin) │ │ │ │ -450 _DEFINE_EXPR_UNARY_FUNCTION(asin, struct std::_Asin) │ │ │ │ -451 _DEFINE_EXPR_UNARY_FUNCTION(sinh, struct std::_Sinh) │ │ │ │ -452 _DEFINE_EXPR_UNARY_FUNCTION(tan, struct std::_Tan) │ │ │ │ -453 _DEFINE_EXPR_UNARY_FUNCTION(tanh, struct std::_Tanh) │ │ │ │ -454 _DEFINE_EXPR_UNARY_FUNCTION(atan, struct std::_Atan) │ │ │ │ -455 _DEFINE_EXPR_UNARY_FUNCTION(exp, struct std::_Exp) │ │ │ │ -456 _DEFINE_EXPR_UNARY_FUNCTION(log, struct std::_Log) │ │ │ │ -457 _DEFINE_EXPR_UNARY_FUNCTION(log10, struct std::_Log10) │ │ │ │ -458 _DEFINE_EXPR_UNARY_FUNCTION(sqrt, struct std::_Sqrt) │ │ │ │ -459 │ │ │ │ -460#undef _DEFINE_EXPR_UNARY_FUNCTION │ │ │ │ -461 │ │ │ │ -462#define _DEFINE_EXPR_BINARY_FUNCTION(_Fun, _UFun) \ │ │ │ │ -463 template \ │ │ │ │ -464 inline _Expr<_BinClos<_UFun, _Expr, _Expr, _Dom1, _Dom2>, \ │ │ │ │ -465 typename _Dom1::value_type> \ │ │ │ │ -466 _Fun(const _Expr<_Dom1, typename _Dom1::value_type>& __e1, \ │ │ │ │ -467 const _Expr<_Dom2, typename _Dom2::value_type>& __e2) \ │ │ │ │ -468 { \ │ │ │ │ -469 typedef typename _Dom1::value_type _Tp; \ │ │ │ │ -470 typedef _BinClos<_UFun, _Expr, _Expr, _Dom1, _Dom2> _Closure; \ │ │ │ │ -471 return _Expr<_Closure, _Tp>(_Closure(__e1(), __e2())); \ │ │ │ │ -472 } \ │ │ │ │ -473 \ │ │ │ │ -474 template \ │ │ │ │ -475 inline _Expr<_BinClos<_UFun, _Expr, _ValArray, _Dom, \ │ │ │ │ -476 typename _Dom::value_type>, \ │ │ │ │ -477 typename _Dom::value_type> \ │ │ │ │ -478 _Fun(const _Expr<_Dom, typename _Dom::value_type>& __e, \ │ │ │ │ -479 const valarray& __v) \ │ │ │ │ -480 { \ │ │ │ │ -481 typedef typename _Dom::value_type _Tp; \ │ │ │ │ -482 typedef _BinClos<_UFun, _Expr, _ValArray, _Dom, _Tp> _Closure; \ │ │ │ │ -483 return _Expr<_Closure, _Tp>(_Closure(__e(), __v)); \ │ │ │ │ -484 } \ │ │ │ │ -485 \ │ │ │ │ -486 template \ │ │ │ │ -487 inline _Expr<_BinClos<_UFun, _ValArray, _Expr, \ │ │ │ │ -488 typename _Dom::value_type, _Dom>, \ │ │ │ │ -489 typename _Dom::value_type> \ │ │ │ │ -490 _Fun(const valarray& __v, \ │ │ │ │ -491 const _Expr<_Dom, typename _Dom::value_type>& __e) \ │ │ │ │ -492 { \ │ │ │ │ -493 typedef typename _Dom::value_type _Tp; \ │ │ │ │ -494 typedef _BinClos<_UFun, _ValArray, _Expr, _Tp, _Dom> _Closure; \ │ │ │ │ -495 return _Expr<_Closure, _Tp>(_Closure(__v, __e())); \ │ │ │ │ -496 } \ │ │ │ │ -497 \ │ │ │ │ -498 template \ │ │ │ │ -499 inline _Expr<_BinClos<_UFun, _Expr, _Constant, _Dom, \ │ │ │ │ -500 typename _Dom::value_type>, \ │ │ │ │ -501 typename _Dom::value_type> \ │ │ │ │ -502 _Fun(const _Expr<_Dom, typename _Dom::value_type>& __e, \ │ │ │ │ -503 const typename _Dom::value_type& __t) \ │ │ │ │ -504 { \ │ │ │ │ -505 typedef typename _Dom::value_type _Tp; \ │ │ │ │ -506 typedef _BinClos<_UFun, _Expr, _Constant, _Dom, _Tp> _Closure; \ │ │ │ │ -507 return _Expr<_Closure, _Tp>(_Closure(__e(), __t)); \ │ │ │ │ -508 } \ │ │ │ │ -509 \ │ │ │ │ -510 template \ │ │ │ │ -511 inline _Expr<_BinClos<_UFun, _Constant, _Expr, \ │ │ │ │ -512 typename _Dom::value_type, _Dom>, \ │ │ │ │ -513 typename _Dom::value_type> \ │ │ │ │ -514 _Fun(const typename _Dom::value_type& __t, \ │ │ │ │ -515 const _Expr<_Dom, typename _Dom::value_type>& __e) \ │ │ │ │ -516 { \ │ │ │ │ -517 typedef typename _Dom::value_type _Tp; \ │ │ │ │ -518 typedef _BinClos<_UFun, _Constant, _Expr, _Tp, _Dom> _Closure; \ │ │ │ │ -519 return _Expr<_Closure, _Tp>(_Closure(__t, __e())); \ │ │ │ │ -520 } \ │ │ │ │ -521 \ │ │ │ │ -522 template \ │ │ │ │ -523 inline _Expr<_BinClos<_UFun, _ValArray, _ValArray, _Tp, _Tp>, _Tp> \ │ │ │ │ -524 _Fun(const valarray<_Tp>& __v, const valarray<_Tp>& __w) \ │ │ │ │ -525 { \ │ │ │ │ -526 typedef _BinClos<_UFun, _ValArray, _ValArray, _Tp, _Tp> _Closure;\ │ │ │ │ -527 return _Expr<_Closure, _Tp>(_Closure(__v, __w)); \ │ │ │ │ -528 } \ │ │ │ │ -529 \ │ │ │ │ -530 template \ │ │ │ │ -531 inline _Expr<_BinClos<_UFun, _ValArray, _Constant, _Tp, _Tp>, _Tp> \ │ │ │ │ -532 _Fun(const valarray<_Tp>& __v, \ │ │ │ │ -533 const typename valarray<_Tp>::value_type& __t) \ │ │ │ │ -534 { \ │ │ │ │ -535 typedef _BinClos<_UFun, _ValArray, _Constant, _Tp, _Tp> _Closure;\ │ │ │ │ -536 return _Expr<_Closure, _Tp>(_Closure(__v, __t)); \ │ │ │ │ -537 } \ │ │ │ │ -538 \ │ │ │ │ -539 template \ │ │ │ │ -540 inline _Expr<_BinClos<_UFun, _Constant, _ValArray, _Tp, _Tp>, _Tp> \ │ │ │ │ -541 _Fun(const typename valarray<_Tp>::value_type& __t, \ │ │ │ │ -542 const valarray<_Tp>& __v) \ │ │ │ │ -543 { \ │ │ │ │ -544 typedef _BinClos<_UFun, _Constant, _ValArray, _Tp, _Tp> _Closure;\ │ │ │ │ -545 return _Expr<_Closure, _Tp>(_Closure(__t, __v)); \ │ │ │ │ -546 } │ │ │ │ -547 │ │ │ │ -548_DEFINE_EXPR_BINARY_FUNCTION(atan2, struct std::_Atan2) │ │ │ │ -549_DEFINE_EXPR_BINARY_FUNCTION(pow, struct std::_Pow) │ │ │ │ -550 │ │ │ │ -551#undef _DEFINE_EXPR_BINARY_FUNCTION │ │ │ │ -552 │ │ │ │ -553_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -554} // namespace │ │ │ │ -555 │ │ │ │ -556#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_:_3_7_0 │ │ │ │ -_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_4_0 │ │ │ │ +245 /// Swap overload for unique_lock objects. │ │ │ │ +246 /// @relates unique_lock │ │ │ │ +247 template │ │ │ │ +248 inline void │ │ │ │ +_2_4_9 _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 │ │ │ │ +250 { __x.swap(__y); } │ │ │ │ +251 │ │ │ │ +252_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +253} // namespace │ │ │ │ +254 │ │ │ │ +255#endif // C++11 │ │ │ │ +256#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_7 │ │ │ │ +_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_1 │ │ │ │ _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_6_2 │ │ │ │ +_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_2 │ │ │ │ +_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_3 │ │ │ │ +_s_t_d_:_:_m_u_t_e_x │ │ │ │ +DDeeffiinniittiioonn _s_t_d___m_u_t_e_x_._h_:_9_7 │ │ │ │ +_s_t_d_:_:_d_e_f_e_r___l_o_c_k___t │ │ │ │ +Do not acquire ownership of the mutex. │ │ │ │ +DDeeffiinniittiioonn _s_t_d___m_u_t_e_x_._h_:_2_1_6 │ │ │ │ +_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_1_9 │ │ │ │ +_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_3 │ │ │ │ +_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_1 │ │ │ │ +_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_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 │ │ │ │ - * _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-14-base/libstdc++/user/a00365.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('a00365.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-14-base/libstdc++/user/a00365_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-2024 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2006-2024 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,767 +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#pragma GCC system_header
│ │ │ -
36
│ │ │ -
37#include <bits/slice_array.h>
│ │ │ +
35#define __glibcxx_want_math_spec_funcs
│ │ │ +
36#define __glibcxx_want_math_special_functions
│ │ │ +
37#include <bits/version.h>
│ │ │
38
│ │ │ -
39namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
40{
│ │ │ -
41_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
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 //
│ │ │ -
44 // Implementing a loosened valarray return value is tricky.
│ │ │ -
45 // First we need to meet 26.3.1/3: we should not add more than
│ │ │ -
46 // two levels of template nesting. Therefore we resort to template
│ │ │ -
47 // template to "flatten" loosened return value types.
│ │ │ -
48 // At some point we use partial specialization to remove one level
│ │ │ -
49 // template nesting due to _Expr<>
│ │ │ -
50 //
│ │ │ -
51
│ │ │ -
52 // This class is NOT defined. It doesn't need to.
│ │ │ -
53 template<typename _Tp1, typename _Tp2> class _Constant;
│ │ │ -
54
│ │ │ -
55 // Implementations of unary functions applied to valarray<>s.
│ │ │ -
56 // I use hard-coded object functions here instead of a generic
│ │ │ -
57 // approach like pointers to function:
│ │ │ -
58 // 1) correctness: some functions take references, others values.
│ │ │ -
59 // we can't deduce the correct type afterwards.
│ │ │ -
60 // 2) efficiency -- object functions can be easily inlined
│ │ │ -
61 // 3) be Koenig-lookup-friendly
│ │ │ -
62
│ │ │ -
63 struct _Abs
│ │ │ -
64 {
│ │ │ -
65 template<typename _Tp>
│ │ │ -
66 _Tp operator()(const _Tp& __t) const
│ │ │ -
67 { return abs(__t); }
│ │ │ -
68 };
│ │ │ -
69
│ │ │ -
70 struct _Cos
│ │ │ -
71 {
│ │ │ -
72 template<typename _Tp>
│ │ │ -
73 _Tp operator()(const _Tp& __t) const
│ │ │ -
74 { return cos(__t); }
│ │ │ -
75 };
│ │ │ -
76
│ │ │ -
77 struct _Acos
│ │ │ -
78 {
│ │ │ -
79 template<typename _Tp>
│ │ │ -
80 _Tp operator()(const _Tp& __t) const
│ │ │ -
81 { return acos(__t); }
│ │ │ -
82 };
│ │ │ -
83
│ │ │ -
84 struct _Cosh
│ │ │ -
85 {
│ │ │ -
86 template<typename _Tp>
│ │ │ -
87 _Tp operator()(const _Tp& __t) const
│ │ │ -
88 { return cosh(__t); }
│ │ │ -
89 };
│ │ │ -
90
│ │ │ -
91 struct _Sin
│ │ │ -
92 {
│ │ │ -
93 template<typename _Tp>
│ │ │ -
94 _Tp operator()(const _Tp& __t) const
│ │ │ -
95 { return sin(__t); }
│ │ │ -
96 };
│ │ │ -
97
│ │ │ -
98 struct _Asin
│ │ │ -
99 {
│ │ │ -
100 template<typename _Tp>
│ │ │ -
101 _Tp operator()(const _Tp& __t) const
│ │ │ -
102 { return asin(__t); }
│ │ │ -
103 };
│ │ │ -
104
│ │ │ -
105 struct _Sinh
│ │ │ -
106 {
│ │ │ -
107 template<typename _Tp>
│ │ │ -
108 _Tp operator()(const _Tp& __t) const
│ │ │ -
109 { return sinh(__t); }
│ │ │ -
110 };
│ │ │ -
111
│ │ │ -
112 struct _Tan
│ │ │ -
113 {
│ │ │ -
114 template<typename _Tp>
│ │ │ -
115 _Tp operator()(const _Tp& __t) const
│ │ │ -
116 { return tan(__t); }
│ │ │ -
117 };
│ │ │ -
118
│ │ │ -
119 struct _Atan
│ │ │ -
120 {
│ │ │ -
121 template<typename _Tp>
│ │ │ -
122 _Tp operator()(const _Tp& __t) const
│ │ │ -
123 { return atan(__t); }
│ │ │ -
124 };
│ │ │ -
125
│ │ │ -
126 struct _Tanh
│ │ │ -
127 {
│ │ │ -
128 template<typename _Tp>
│ │ │ -
129 _Tp operator()(const _Tp& __t) const
│ │ │ -
130 { return tanh(__t); }
│ │ │ -
131 };
│ │ │ -
132
│ │ │ -
133 struct _Exp
│ │ │ -
134 {
│ │ │ -
135 template<typename _Tp>
│ │ │ -
136 _Tp operator()(const _Tp& __t) const
│ │ │ -
137 { return exp(__t); }
│ │ │ -
138 };
│ │ │ -
139
│ │ │ -
140 struct _Log
│ │ │ -
141 {
│ │ │ -
142 template<typename _Tp>
│ │ │ -
143 _Tp operator()(const _Tp& __t) const
│ │ │ -
144 { return log(__t); }
│ │ │ -
145 };
│ │ │ -
146
│ │ │ -
147 struct _Log10
│ │ │ -
148 {
│ │ │ -
149 template<typename _Tp>
│ │ │ -
150 _Tp operator()(const _Tp& __t) const
│ │ │ -
151 { return log10(__t); }
│ │ │ -
152 };
│ │ │ -
153
│ │ │ -
154 struct _Sqrt
│ │ │ -
155 {
│ │ │ -
156 template<typename _Tp>
│ │ │ -
157 _Tp operator()(const _Tp& __t) const
│ │ │ -
158 { return sqrt(__t); }
│ │ │ -
159 };
│ │ │ -
160
│ │ │ -
161 // In the past, we used to tailor operator applications semantics
│ │ │ -
162 // to the specialization of standard function objects (i.e. plus<>, etc.)
│ │ │ -
163 // That is incorrect. Therefore we provide our own surrogates.
│ │ │ -
164
│ │ │ -
165 struct __unary_plus
│ │ │ -
166 {
│ │ │ -
167 template<typename _Tp>
│ │ │ -
168 _Tp operator()(const _Tp& __t) const
│ │ │ -
169 { return +__t; }
│ │ │ -
170 };
│ │ │ -
171
│ │ │ -
172 struct __negate
│ │ │ -
173 {
│ │ │ -
174 template<typename _Tp>
│ │ │ -
175 _Tp operator()(const _Tp& __t) const
│ │ │ -
176 { return -__t; }
│ │ │ -
177 };
│ │ │ -
178
│ │ │ -
179 struct __bitwise_not
│ │ │ -
180 {
│ │ │ -
181 template<typename _Tp>
│ │ │ -
182 _Tp operator()(const _Tp& __t) const
│ │ │ -
183 { return ~__t; }
│ │ │ -
184 };
│ │ │ -
185
│ │ │ -
186 struct __plus
│ │ │ -
187 {
│ │ │ -
188 template<typename _Tp>
│ │ │ -
189 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ -
190 { return __x + __y; }
│ │ │ -
191 };
│ │ │ -
192
│ │ │ -
193 struct __minus
│ │ │ -
194 {
│ │ │ -
195 template<typename _Tp>
│ │ │ -
196 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ -
197 { return __x - __y; }
│ │ │ -
198 };
│ │ │ -
199
│ │ │ -
200 struct __multiplies
│ │ │ -
201 {
│ │ │ -
202 template<typename _Tp>
│ │ │ -
203 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ -
204 { return __x * __y; }
│ │ │ -
205 };
│ │ │ -
206
│ │ │ -
207 struct __divides
│ │ │ -
208 {
│ │ │ -
209 template<typename _Tp>
│ │ │ -
210 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ -
211 { return __x / __y; }
│ │ │ -
212 };
│ │ │ -
213
│ │ │ -
214 struct __modulus
│ │ │ -
215 {
│ │ │ -
216 template<typename _Tp>
│ │ │ -
217 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ -
218 { return __x % __y; }
│ │ │ -
219 };
│ │ │ -
220
│ │ │ -
221 struct __bitwise_xor
│ │ │ -
222 {
│ │ │ -
223 template<typename _Tp>
│ │ │ -
224 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ -
225 { return __x ^ __y; }
│ │ │ -
226 };
│ │ │ -
227
│ │ │ -
228 struct __bitwise_and
│ │ │ -
229 {
│ │ │ -
230 template<typename _Tp>
│ │ │ -
231 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ -
232 { return __x & __y; }
│ │ │ -
233 };
│ │ │ -
234
│ │ │ -
235 struct __bitwise_or
│ │ │ -
236 {
│ │ │ -
237 template<typename _Tp>
│ │ │ -
238 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ -
239 { return __x | __y; }
│ │ │ -
240 };
│ │ │ -
241
│ │ │ -
242 struct __shift_left
│ │ │ -
243 {
│ │ │ -
244 template<typename _Tp>
│ │ │ -
245 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ -
246 { return __x << __y; }
│ │ │ -
247 };
│ │ │ -
248
│ │ │ -
249 struct __shift_right
│ │ │ -
250 {
│ │ │ -
251 template<typename _Tp>
│ │ │ -
252 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ -
253 { return __x >> __y; }
│ │ │ -
254 };
│ │ │ +
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 // 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 struct __logical_and
│ │ │ -
257 {
│ │ │ -
258 template<typename _Tp>
│ │ │ -
259 bool operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ -
260 { return __x && __y; }
│ │ │ -
261 };
│ │ │ -
262
│ │ │ -
263 struct __logical_or
│ │ │ -
264 {
│ │ │ -
265 template<typename _Tp>
│ │ │ -
266 bool operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ -
267 { return __x || __y; }
│ │ │ -
268 };
│ │ │ -
269
│ │ │ -
270 struct __logical_not
│ │ │ -
271 {
│ │ │ -
272 template<typename _Tp>
│ │ │ -
273 bool operator()(const _Tp& __x) const
│ │ │ -
274 { return !__x; }
│ │ │ -
275 };
│ │ │ +
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 struct __equal_to
│ │ │ -
278 {
│ │ │ -
279 template<typename _Tp>
│ │ │ -
280 bool operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ -
281 { return __x == __y; }
│ │ │ -
282 };
│ │ │ -
283
│ │ │ -
284 struct __not_equal_to
│ │ │ -
285 {
│ │ │ -
286 template<typename _Tp>
│ │ │ -
287 bool operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ -
288 { return __x != __y; }
│ │ │ -
289 };
│ │ │ -
290
│ │ │ -
291 struct __less
│ │ │ -
292 {
│ │ │ -
293 template<typename _Tp>
│ │ │ -
294 bool operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ -
295 { return __x < __y; }
│ │ │ -
296 };
│ │ │ -
297
│ │ │ -
298 struct __greater
│ │ │ -
299 {
│ │ │ -
300 template<typename _Tp>
│ │ │ -
301 bool operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ -
302 { return __x > __y; }
│ │ │ -
303 };
│ │ │ -
304
│ │ │ -
305 struct __less_equal
│ │ │ -
306 {
│ │ │ -
307 template<typename _Tp>
│ │ │ -
308 bool operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ -
309 { return __x <= __y; }
│ │ │ -
310 };
│ │ │ -
311
│ │ │ -
312 struct __greater_equal
│ │ │ -
313 {
│ │ │ -
314 template<typename _Tp>
│ │ │ -
315 bool operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ -
316 { return __x >= __y; }
│ │ │ -
317 };
│ │ │ -
318
│ │ │ -
319 // The few binary functions we miss.
│ │ │ -
320 struct _Atan2
│ │ │ -
321 {
│ │ │ -
322 template<typename _Tp>
│ │ │ -
323 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ -
324 { return atan2(__x, __y); }
│ │ │ -
325 };
│ │ │ -
326
│ │ │ -
327 struct _Pow
│ │ │ -
328 {
│ │ │ -
329 template<typename _Tp>
│ │ │ -
330 _Tp operator()(const _Tp& __x, const _Tp& __y) const
│ │ │ -
331 { return pow(__x, __y); }
│ │ │ -
332 };
│ │ │ -
333
│ │ │ -
334 template<typename _Tp, bool _IsValidValarrayValue = !__is_abstract(_Tp)>
│ │ │ -
335 struct __fun_with_valarray
│ │ │ -
336 {
│ │ │ -
337 typedef _Tp result_type;
│ │ │ -
338 };
│ │ │ -
339
│ │ │ -
340 template<typename _Tp>
│ │ │ -
341 struct __fun_with_valarray<_Tp, false>
│ │ │ +
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 // No result type defined for invalid value types.
│ │ │ -
344 };
│ │ │ -
345
│ │ │ -
346 // We need these bits in order to recover the return type of
│ │ │ -
347 // some functions/operators now that we're no longer using
│ │ │ -
348 // function templates.
│ │ │ -
349 template<typename, typename _Tp>
│ │ │ -
350 struct __fun : __fun_with_valarray<_Tp>
│ │ │ -
351 {
│ │ │ -
352 };
│ │ │ -
353
│ │ │ -
354 // several specializations for relational operators.
│ │ │ -
355 template<typename _Tp>
│ │ │ -
356 struct __fun<__logical_not, _Tp>
│ │ │ -
357 {
│ │ │ -
358 typedef bool result_type;
│ │ │ -
359 };
│ │ │ -
360
│ │ │ -
361 template<typename _Tp>
│ │ │ -
362 struct __fun<__logical_and, _Tp>
│ │ │ -
363 {
│ │ │ -
364 typedef bool result_type;
│ │ │ -
365 };
│ │ │ -
366
│ │ │ -
367 template<typename _Tp>
│ │ │ -
368 struct __fun<__logical_or, _Tp>
│ │ │ -
369 {
│ │ │ -
370 typedef bool result_type;
│ │ │ -
371 };
│ │ │ -
372
│ │ │ -
373 template<typename _Tp>
│ │ │ -
374 struct __fun<__less, _Tp>
│ │ │ -
375 {
│ │ │ -
376 typedef bool result_type;
│ │ │ -
377 };
│ │ │ -
378
│ │ │ -
379 template<typename _Tp>
│ │ │ -
380 struct __fun<__greater, _Tp>
│ │ │ -
381 {
│ │ │ -
382 typedef bool result_type;
│ │ │ -
383 };
│ │ │ -
384
│ │ │ -
385 template<typename _Tp>
│ │ │ -
386 struct __fun<__less_equal, _Tp>
│ │ │ -
387 {
│ │ │ -
388 typedef bool result_type;
│ │ │ -
389 };
│ │ │ -
390
│ │ │ -
391 template<typename _Tp>
│ │ │ -
392 struct __fun<__greater_equal, _Tp>
│ │ │ -
393 {
│ │ │ -
394 typedef bool result_type;
│ │ │ -
395 };
│ │ │ -
396
│ │ │ -
397 template<typename _Tp>
│ │ │ -
398 struct __fun<__equal_to, _Tp>
│ │ │ -
399 {
│ │ │ -
400 typedef bool result_type;
│ │ │ -
401 };
│ │ │ -
402
│ │ │ -
403 template<typename _Tp>
│ │ │ -
404 struct __fun<__not_equal_to, _Tp>
│ │ │ -
405 {
│ │ │ -
406 typedef bool result_type;
│ │ │ -
407 };
│ │ │ -
408
│ │ │ -
409namespace __detail
│ │ │ -
410{
│ │ │ -
411 // Closure types already have reference semantics and are often short-lived,
│ │ │ -
412 // so store them by value to avoid (some cases of) dangling references to
│ │ │ -
413 // out-of-scope temporaries.
│ │ │ -
414 template<typename _Tp>
│ │ │ -
415 struct _ValArrayRef
│ │ │ -
416 { typedef const _Tp __type; };
│ │ │ -
417
│ │ │ -
418 // Use real references for std::valarray objects.
│ │ │ -
419 template<typename _Tp>
│ │ │ -
420 struct _ValArrayRef< valarray<_Tp> >
│ │ │ -
421 { typedef const valarray<_Tp>& __type; };
│ │ │ -
422
│ │ │ -
423 //
│ │ │ -
424 // Apply function taking a value/const reference closure
│ │ │ -
425 //
│ │ │ -
426
│ │ │ -
427 template<typename _Dom, typename _Arg>
│ │ │ -
428 class _FunBase
│ │ │ -
429 {
│ │ │ -
430 public:
│ │ │ -
431 typedef typename _Dom::value_type value_type;
│ │ │ -
432
│ │ │ -
433 _FunBase(const _Dom& __e, value_type __f(_Arg))
│ │ │ -
434 : _M_expr(__e), _M_func(__f) {}
│ │ │ -
435
│ │ │ -
436 value_type operator[](size_t __i) const
│ │ │ -
437 { return _M_func (_M_expr[__i]); }
│ │ │ -
438
│ │ │ -
439 size_t size() const { return _M_expr.size ();}
│ │ │ -
440
│ │ │ -
441 private:
│ │ │ -
442 typename _ValArrayRef<_Dom>::__type _M_expr;
│ │ │ -
443 value_type (*_M_func)(_Arg);
│ │ │ -
444 };
│ │ │ -
445
│ │ │ -
446 template<class _Dom>
│ │ │ -
447 struct _ValFunClos<_Expr,_Dom> : _FunBase<_Dom, typename _Dom::value_type>
│ │ │ -
448 {
│ │ │ -
449 typedef _FunBase<_Dom, typename _Dom::value_type> _Base;
│ │ │ -
450 typedef typename _Base::value_type value_type;
│ │ │ -
451 typedef value_type _Tp;
│ │ │ -
452
│ │ │ -
453 _ValFunClos(const _Dom& __e, _Tp __f(_Tp)) : _Base(__e, __f) {}
│ │ │ -
454 };
│ │ │ -
455
│ │ │ -
456 template<typename _Tp>
│ │ │ -
457 struct _ValFunClos<_ValArray,_Tp> : _FunBase<valarray<_Tp>, _Tp>
│ │ │ -
458 {
│ │ │ -
459 typedef _FunBase<valarray<_Tp>, _Tp> _Base;
│ │ │ -
460 typedef _Tp value_type;
│ │ │ -
461
│ │ │ -
462 _ValFunClos(const valarray<_Tp>& __v, _Tp __f(_Tp)) : _Base(__v, __f) {}
│ │ │ -
463 };
│ │ │ -
464
│ │ │ -
465 template<class _Dom>
│ │ │ -
466 struct _RefFunClos<_Expr, _Dom>
│ │ │ -
467 : _FunBase<_Dom, const typename _Dom::value_type&>
│ │ │ -
468 {
│ │ │ -
469 typedef _FunBase<_Dom, const typename _Dom::value_type&> _Base;
│ │ │ -
470 typedef typename _Base::value_type value_type;
│ │ │ -
471 typedef value_type _Tp;
│ │ │ -
472
│ │ │ -
473 _RefFunClos(const _Dom& __e, _Tp __f(const _Tp&))
│ │ │ -
474 : _Base(__e, __f) {}
│ │ │ -
475 };
│ │ │ -
476
│ │ │ -
477 template<typename _Tp>
│ │ │ -
478 struct _RefFunClos<_ValArray, _Tp>
│ │ │ -
479 : _FunBase<valarray<_Tp>, const _Tp&>
│ │ │ -
480 {
│ │ │ -
481 typedef _FunBase<valarray<_Tp>, const _Tp&> _Base;
│ │ │ -
482 typedef _Tp value_type;
│ │ │ -
483
│ │ │ -
484 _RefFunClos(const valarray<_Tp>& __v, _Tp __f(const _Tp&))
│ │ │ -
485 : _Base(__v, __f) {}
│ │ │ -
486 };
│ │ │ -
487
│ │ │ -
488 //
│ │ │ -
489 // Unary expression closure.
│ │ │ -
490 //
│ │ │ -
491
│ │ │ -
492 template<class _Oper, class _Arg>
│ │ │ -
493 class _UnBase
│ │ │ -
494 {
│ │ │ -
495 public:
│ │ │ -
496 typedef typename _Arg::value_type _Vt;
│ │ │ -
497 typedef typename __fun<_Oper, _Vt>::result_type value_type;
│ │ │ -
498
│ │ │ -
499 _UnBase(const _Arg& __e) : _M_expr(__e) {}
│ │ │ -
500
│ │ │ -
501 value_type operator[](size_t __i) const
│ │ │ -
502 { return _Oper()(_M_expr[__i]); }
│ │ │ -
503
│ │ │ -
504 size_t size() const { return _M_expr.size(); }
│ │ │ -
505
│ │ │ -
506 private:
│ │ │ -
507 typename _ValArrayRef<_Arg>::__type _M_expr;
│ │ │ -
508 };
│ │ │ -
509
│ │ │ -
510 template<class _Oper, class _Dom>
│ │ │ -
511 struct _UnClos<_Oper, _Expr, _Dom>
│ │ │ -
512 : _UnBase<_Oper, _Dom>
│ │ │ -
513 {
│ │ │ -
514 typedef _Dom _Arg;
│ │ │ -
515 typedef _UnBase<_Oper, _Dom> _Base;
│ │ │ -
516 typedef typename _Base::value_type value_type;
│ │ │ -
517
│ │ │ -
518 _UnClos(const _Arg& __e) : _Base(__e) {}
│ │ │ -
519 };
│ │ │ -
520
│ │ │ -
521 template<class _Oper, typename _Tp>
│ │ │ -
522 struct _UnClos<_Oper, _ValArray, _Tp>
│ │ │ -
523 : _UnBase<_Oper, valarray<_Tp> >
│ │ │ -
524 {
│ │ │ -
525 typedef valarray<_Tp> _Arg;
│ │ │ -
526 typedef _UnBase<_Oper, valarray<_Tp> > _Base;
│ │ │ -
527 typedef typename _Base::value_type value_type;
│ │ │ -
528
│ │ │ -
529 _UnClos(const _Arg& __e) : _Base(__e) {}
│ │ │ -
530 };
│ │ │ -
531
│ │ │ -
532
│ │ │ -
533 //
│ │ │ -
534 // Binary expression closure.
│ │ │ -
535 //
│ │ │ -
536
│ │ │ -
537 template<class _Oper, class _FirstArg, class _SecondArg>
│ │ │ -
538 class _BinBase
│ │ │ -
539 {
│ │ │ -
540 public:
│ │ │ -
541 typedef typename _FirstArg::value_type _Vt;
│ │ │ -
542 typedef typename __fun<_Oper, _Vt>::result_type value_type;
│ │ │ -
543
│ │ │ -
544 _BinBase(const _FirstArg& __e1, const _SecondArg& __e2)
│ │ │ -
545 : _M_expr1(__e1), _M_expr2(__e2) {}
│ │ │ -
546
│ │ │ -
547 value_type operator[](size_t __i) const
│ │ │ -
548 { return _Oper()(_M_expr1[__i], _M_expr2[__i]); }
│ │ │ -
549
│ │ │ -
550 size_t size() const { return _M_expr1.size(); }
│ │ │ -
551
│ │ │ -
552 private:
│ │ │ -
553 typename _ValArrayRef<_FirstArg>::__type _M_expr1;
│ │ │ -
554 typename _ValArrayRef<_SecondArg>::__type _M_expr2;
│ │ │ -
555 };
│ │ │ -
556
│ │ │ -
557
│ │ │ -
558 template<class _Oper, class _Clos>
│ │ │ -
559 class _BinBase2
│ │ │ -
560 {
│ │ │ -
561 public:
│ │ │ -
562 typedef typename _Clos::value_type _Vt;
│ │ │ -
563 typedef typename __fun<_Oper, _Vt>::result_type value_type;
│ │ │ -
564
│ │ │ -
565 _BinBase2(const _Clos& __e, const _Vt& __t)
│ │ │ -
566 : _M_expr1(__e), _M_expr2(__t) {}
│ │ │ -
567
│ │ │ -
568 value_type operator[](size_t __i) const
│ │ │ -
569 { return _Oper()(_M_expr1[__i], _M_expr2); }
│ │ │ -
570
│ │ │ -
571 size_t size() const { return _M_expr1.size(); }
│ │ │ -
572
│ │ │ -
573 private:
│ │ │ -
574 typename _ValArrayRef<_Clos>::__type _M_expr1;
│ │ │ -
575 _Vt _M_expr2;
│ │ │ -
576 };
│ │ │ -
577
│ │ │ -
578 template<class _Oper, class _Clos>
│ │ │ -
579 class _BinBase1
│ │ │ +
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 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 // 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 public:
│ │ │ -
582 typedef typename _Clos::value_type _Vt;
│ │ │ -
583 typedef typename __fun<_Oper, _Vt>::result_type value_type;
│ │ │ +
581 typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type;
│ │ │ +
582 return __detail::__cyl_bessel_j<__type>(__nu, __x);
│ │ │ +
583 }
│ │ │ +
│ │ │
584
│ │ │ -
585 _BinBase1(const _Vt& __t, const _Clos& __e)
│ │ │ -
586 : _M_expr1(__t), _M_expr2(__e) {}
│ │ │ -
587
│ │ │ -
588 value_type operator[](size_t __i) const
│ │ │ -
589 { return _Oper()(_M_expr1, _M_expr2[__i]); }
│ │ │ -
590
│ │ │ -
591 size_t size() const { return _M_expr2.size(); }
│ │ │ -
592
│ │ │ -
593 private:
│ │ │ -
594 _Vt _M_expr1;
│ │ │ -
595 typename _ValArrayRef<_Clos>::__type _M_expr2;
│ │ │ -
596 };
│ │ │ -
597
│ │ │ -
598 template<class _Oper, class _Dom1, class _Dom2>
│ │ │ -
599 struct _BinClos<_Oper, _Expr, _Expr, _Dom1, _Dom2>
│ │ │ -
600 : _BinBase<_Oper, _Dom1, _Dom2>
│ │ │ -
601 {
│ │ │ -
602 typedef _BinBase<_Oper, _Dom1, _Dom2> _Base;
│ │ │ -
603 typedef typename _Base::value_type value_type;
│ │ │ -
604
│ │ │ -
605 _BinClos(const _Dom1& __e1, const _Dom2& __e2) : _Base(__e1, __e2) {}
│ │ │ -
606 };
│ │ │ -
607
│ │ │ -
608 template<class _Oper, typename _Tp>
│ │ │ -
609 struct _BinClos<_Oper, _ValArray, _ValArray, _Tp, _Tp>
│ │ │ -
610 : _BinBase<_Oper, valarray<_Tp>, valarray<_Tp> >
│ │ │ -
611 {
│ │ │ -
612 typedef _BinBase<_Oper, valarray<_Tp>, valarray<_Tp> > _Base;
│ │ │ -
613 typedef typename _Base::value_type value_type;
│ │ │ -
614
│ │ │ -
615 _BinClos(const valarray<_Tp>& __v, const valarray<_Tp>& __w)
│ │ │ -
616 : _Base(__v, __w) {}
│ │ │ -
617 };
│ │ │ -
618
│ │ │ -
619 template<class _Oper, class _Dom>
│ │ │ -
620 struct _BinClos<_Oper, _Expr, _ValArray, _Dom, typename _Dom::value_type>
│ │ │ -
621 : _BinBase<_Oper, _Dom, valarray<typename _Dom::value_type> >
│ │ │ -
622 {
│ │ │ -
623 typedef typename _Dom::value_type _Tp;
│ │ │ -
624 typedef _BinBase<_Oper,_Dom,valarray<_Tp> > _Base;
│ │ │ -
625 typedef typename _Base::value_type value_type;
│ │ │ -
626
│ │ │ -
627 _BinClos(const _Dom& __e1, const valarray<_Tp>& __e2)
│ │ │ -
628 : _Base(__e1, __e2) {}
│ │ │ -
629 };
│ │ │ -
630
│ │ │ -
631 template<class _Oper, class _Dom>
│ │ │ -
632 struct _BinClos<_Oper, _ValArray, _Expr, typename _Dom::value_type, _Dom>
│ │ │ -
633 : _BinBase<_Oper, valarray<typename _Dom::value_type>,_Dom>
│ │ │ -
634 {
│ │ │ -
635 typedef typename _Dom::value_type _Tp;
│ │ │ -
636 typedef _BinBase<_Oper, valarray<_Tp>, _Dom> _Base;
│ │ │ -
637 typedef typename _Base::value_type value_type;
│ │ │ -
638
│ │ │ -
639 _BinClos(const valarray<_Tp>& __e1, const _Dom& __e2)
│ │ │ -
640 : _Base(__e1, __e2) {}
│ │ │ -
641 };
│ │ │ -
642
│ │ │ -
643 template<class _Oper, class _Dom>
│ │ │ -
644 struct _BinClos<_Oper, _Expr, _Constant, _Dom, typename _Dom::value_type>
│ │ │ -
645 : _BinBase2<_Oper, _Dom>
│ │ │ -
646 {
│ │ │ -
647 typedef typename _Dom::value_type _Tp;
│ │ │ -
648 typedef _BinBase2<_Oper,_Dom> _Base;
│ │ │ -
649 typedef typename _Base::value_type value_type;
│ │ │ -
650
│ │ │ -
651 _BinClos(const _Dom& __e1, const _Tp& __e2) : _Base(__e1, __e2) {}
│ │ │ -
652 };
│ │ │ -
653
│ │ │ -
654 template<class _Oper, class _Dom>
│ │ │ -
655 struct _BinClos<_Oper, _Constant, _Expr, typename _Dom::value_type, _Dom>
│ │ │ -
656 : _BinBase1<_Oper, _Dom>
│ │ │ -
657 {
│ │ │ -
658 typedef typename _Dom::value_type _Tp;
│ │ │ -
659 typedef _BinBase1<_Oper, _Dom> _Base;
│ │ │ -
660 typedef typename _Base::value_type value_type;
│ │ │ -
661
│ │ │ -
662 _BinClos(const _Tp& __e1, const _Dom& __e2) : _Base(__e1, __e2) {}
│ │ │ -
663 };
│ │ │ -
664
│ │ │ -
665 template<class _Oper, typename _Tp>
│ │ │ -
666 struct _BinClos<_Oper, _ValArray, _Constant, _Tp, _Tp>
│ │ │ -
667 : _BinBase2<_Oper, valarray<_Tp> >
│ │ │ -
668 {
│ │ │ -
669 typedef _BinBase2<_Oper,valarray<_Tp> > _Base;
│ │ │ -
670 typedef typename _Base::value_type value_type;
│ │ │ -
671
│ │ │ -
672 _BinClos(const valarray<_Tp>& __v, const _Tp& __t) : _Base(__v, __t) {}
│ │ │ -
673 };
│ │ │ -
674
│ │ │ -
675 template<class _Oper, typename _Tp>
│ │ │ -
676 struct _BinClos<_Oper, _Constant, _ValArray, _Tp, _Tp>
│ │ │ -
677 : _BinBase1<_Oper, valarray<_Tp> >
│ │ │ -
678 {
│ │ │ -
679 typedef _BinBase1<_Oper, valarray<_Tp> > _Base;
│ │ │ -
680 typedef typename _Base::value_type value_type;
│ │ │ -
681
│ │ │ -
682 _BinClos(const _Tp& __t, const valarray<_Tp>& __v) : _Base(__t, __v) {}
│ │ │ -
683 };
│ │ │ +
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 typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type;
│ │ │ +
682 return __detail::__cyl_neumann_n<__type>(__nu, __x);
│ │ │ +
683 }
│ │ │ +
│ │ │
684
│ │ │ -
685 //
│ │ │ -
686 // slice_array closure.
│ │ │ -
687 //
│ │ │ -
688 template<typename _Dom>
│ │ │ -
689 class _SBase
│ │ │ -
690 {
│ │ │ -
691 public:
│ │ │ -
692 typedef typename _Dom::value_type value_type;
│ │ │ -
693
│ │ │ -
694 _SBase (const _Dom& __e, const slice& __s)
│ │ │ -
695 : _M_expr (__e), _M_slice (__s) {}
│ │ │ -
696
│ │ │ -
697 value_type
│ │ │ -
698 operator[] (size_t __i) const
│ │ │ -
699 { return _M_expr[_M_slice.start () + __i * _M_slice.stride ()]; }
│ │ │ -
700
│ │ │ -
701 size_t
│ │ │ -
702 size() const
│ │ │ -
703 { return _M_slice.size (); }
│ │ │ -
704
│ │ │ -
705 private:
│ │ │ -
706 typename _ValArrayRef<_Dom>::__type _M_expr;
│ │ │ -
707 const slice& _M_slice;
│ │ │ -
708 };
│ │ │ -
709
│ │ │ -
710 template<typename _Tp>
│ │ │ -
711 class _SBase<_Array<_Tp> >
│ │ │ -
712 {
│ │ │ -
713 public:
│ │ │ -
714 typedef _Tp value_type;
│ │ │ -
715
│ │ │ -
716 _SBase (_Array<_Tp> __a, const slice& __s)
│ │ │ -
717 : _M_array (__a._M_data+__s.start()), _M_size (__s.size()),
│ │ │ -
718 _M_stride (__s.stride()) {}
│ │ │ -
719
│ │ │ -
720 value_type
│ │ │ -
721 operator[] (size_t __i) const
│ │ │ -
722 { return _M_array._M_data[__i * _M_stride]; }
│ │ │ -
723
│ │ │ -
724 size_t
│ │ │ -
725 size() const
│ │ │ -
726 { return _M_size; }
│ │ │ -
727
│ │ │ -
728 private:
│ │ │ -
729 const _Array<_Tp> _M_array;
│ │ │ -
730 const size_t _M_size;
│ │ │ -
731 const size_t _M_stride;
│ │ │ -
732 };
│ │ │ -
733
│ │ │ -
734 template<class _Dom>
│ │ │ -
735 struct _SClos<_Expr, _Dom>
│ │ │ -
736 : _SBase<_Dom>
│ │ │ -
737 {
│ │ │ -
738 typedef _SBase<_Dom> _Base;
│ │ │ -
739 typedef typename _Base::value_type value_type;
│ │ │ -
740
│ │ │ -
741 _SClos (const _Dom& __e, const slice& __s) : _Base (__e, __s) {}
│ │ │ -
742 };
│ │ │ -
743
│ │ │ -
744 template<typename _Tp>
│ │ │ -
745 struct _SClos<_ValArray, _Tp>
│ │ │ -
746 : _SBase<_Array<_Tp> >
│ │ │ -
747 {
│ │ │ -
748 typedef _SBase<_Array<_Tp> > _Base;
│ │ │ -
749 typedef _Tp value_type;
│ │ │ -
750
│ │ │ -
751 _SClos (_Array<_Tp> __a, const slice& __s) : _Base (__a, __s) {}
│ │ │ -
752 };
│ │ │ -
753} // namespace __detail
│ │ │ -
754
│ │ │ -
755_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
756} // namespace
│ │ │ -
757
│ │ │ -
758#endif /* _CPP_VALARRAY_BEFORE_H */
│ │ │ - │ │ │ -
complex< _Tp > log10(const complex< _Tp > &)
Return complex base 10 logarithm of z.
Definition complex:1095
│ │ │ -
complex< _Tp > sin(const complex< _Tp > &)
Return complex sine of z.
Definition complex:1125
│ │ │ -
complex< _Tp > log(const complex< _Tp > &)
Return complex natural logarithm of z.
Definition complex:1090
│ │ │ -
complex< _Tp > tan(const complex< _Tp > &)
Return complex tangent of z.
Definition complex:1226
│ │ │ -
_Tp abs(const complex< _Tp > &)
Return magnitude of z.
Definition complex:896
│ │ │ -
complex< _Tp > exp(const complex< _Tp > &)
Return complex base e exponential of z.
Definition complex:1063
│ │ │ -
complex< _Tp > cosh(const complex< _Tp > &)
Return complex hyperbolic cosine of z.
Definition complex:1037
│ │ │ -
complex< _Tp > tanh(const complex< _Tp > &)
Return complex hyperbolic tangent of z.
Definition complex:1254
│ │ │ -
complex< _Tp > pow(const complex< _Tp > &, int)
Return x to the y'th power.
Definition complex:1285
│ │ │ -
complex< _Tp > sinh(const complex< _Tp > &)
Return complex hyperbolic sine of z.
Definition complex:1155
│ │ │ -
complex< _Tp > cos(const complex< _Tp > &)
Return complex cosine of z.
Definition complex:1007
│ │ │ -
complex< _Tp > sqrt(const complex< _Tp > &)
Return complex square root of z.
Definition complex:1199
│ │ │ +
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-2024 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2006-2024 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,801 +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#pragma GCC system_header │ │ │ │ -36 │ │ │ │ -37#include <_b_i_t_s_/_s_l_i_c_e___a_r_r_a_y_._h> │ │ │ │ +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 │ │ │ │ -39namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -40{ │ │ │ │ -41_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +39#if __cplusplus <= 201403L && __STDCPP_WANT_MATH_SPEC_FUNCS__ == 0 │ │ │ │ +40# error include and define __STDCPP_WANT_MATH_SPEC_FUNCS__ │ │ │ │ +41#endif │ │ │ │ 42 │ │ │ │ -43 // │ │ │ │ -44 // Implementing a loosened valarray return value is tricky. │ │ │ │ -45 // First we need to meet 26.3.1/3: we should not add more than │ │ │ │ -46 // two levels of template nesting. Therefore we resort to template │ │ │ │ -47 // template to "flatten" loosened return value types. │ │ │ │ -48 // At some point we use partial specialization to remove one level │ │ │ │ -49 // template nesting due to _Expr<> │ │ │ │ -50 // │ │ │ │ -51 │ │ │ │ -52 // This class is NOT defined. It doesn't need to. │ │ │ │ -53 template class _Constant; │ │ │ │ -54 │ │ │ │ -55 // Implementations of unary functions applied to valarray<>s. │ │ │ │ -56 // I use hard-coded object functions here instead of a generic │ │ │ │ -57 // approach like pointers to function: │ │ │ │ -58 // 1) correctness: some functions take references, others values. │ │ │ │ -59 // we can't deduce the correct type afterwards. │ │ │ │ -60 // 2) efficiency -- object functions can be easily inlined │ │ │ │ -61 // 3) be Koenig-lookup-friendly │ │ │ │ +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 struct _Abs │ │ │ │ -64 { │ │ │ │ -65 template │ │ │ │ -66 _Tp operator()(const _Tp& __t) const │ │ │ │ -67 { return _a_b_s(__t); } │ │ │ │ -68 }; │ │ │ │ -69 │ │ │ │ -70 struct _Cos │ │ │ │ -71 { │ │ │ │ -72 template │ │ │ │ -73 _Tp operator()(const _Tp& __t) const │ │ │ │ -74 { return _c_o_s(__t); } │ │ │ │ -75 }; │ │ │ │ -76 │ │ │ │ -77 struct _Acos │ │ │ │ -78 { │ │ │ │ -79 template │ │ │ │ -80 _Tp operator()(const _Tp& __t) const │ │ │ │ -81 { return acos(__t); } │ │ │ │ -82 }; │ │ │ │ -83 │ │ │ │ -84 struct _Cosh │ │ │ │ -85 { │ │ │ │ -86 template │ │ │ │ -87 _Tp operator()(const _Tp& __t) const │ │ │ │ -88 { return _c_o_s_h(__t); } │ │ │ │ -89 }; │ │ │ │ -90 │ │ │ │ -91 struct _Sin │ │ │ │ -92 { │ │ │ │ -93 template │ │ │ │ -94 _Tp operator()(const _Tp& __t) const │ │ │ │ -95 { return _s_i_n(__t); } │ │ │ │ -96 }; │ │ │ │ -97 │ │ │ │ -98 struct _Asin │ │ │ │ -99 { │ │ │ │ -100 template │ │ │ │ -101 _Tp operator()(const _Tp& __t) const │ │ │ │ -102 { return asin(__t); } │ │ │ │ -103 }; │ │ │ │ -104 │ │ │ │ -105 struct _Sinh │ │ │ │ -106 { │ │ │ │ -107 template │ │ │ │ -108 _Tp operator()(const _Tp& __t) const │ │ │ │ -109 { return _s_i_n_h(__t); } │ │ │ │ -110 }; │ │ │ │ -111 │ │ │ │ -112 struct _Tan │ │ │ │ -113 { │ │ │ │ -114 template │ │ │ │ -115 _Tp operator()(const _Tp& __t) const │ │ │ │ -116 { return _t_a_n(__t); } │ │ │ │ -117 }; │ │ │ │ -118 │ │ │ │ -119 struct _Atan │ │ │ │ -120 { │ │ │ │ -121 template │ │ │ │ -122 _Tp operator()(const _Tp& __t) const │ │ │ │ -123 { return atan(__t); } │ │ │ │ -124 }; │ │ │ │ -125 │ │ │ │ -126 struct _Tanh │ │ │ │ -127 { │ │ │ │ -128 template │ │ │ │ -129 _Tp operator()(const _Tp& __t) const │ │ │ │ -130 { return _t_a_n_h(__t); } │ │ │ │ -131 }; │ │ │ │ -132 │ │ │ │ -133 struct _Exp │ │ │ │ -134 { │ │ │ │ -135 template │ │ │ │ -136 _Tp operator()(const _Tp& __t) const │ │ │ │ -137 { return _e_x_p(__t); } │ │ │ │ -138 }; │ │ │ │ -139 │ │ │ │ -140 struct _Log │ │ │ │ -141 { │ │ │ │ -142 template │ │ │ │ -143 _Tp operator()(const _Tp& __t) const │ │ │ │ -144 { return _l_o_g(__t); } │ │ │ │ -145 }; │ │ │ │ -146 │ │ │ │ -147 struct _Log10 │ │ │ │ -148 { │ │ │ │ -149 template │ │ │ │ -150 _Tp operator()(const _Tp& __t) const │ │ │ │ -151 { return _l_o_g_1_0(__t); } │ │ │ │ -152 }; │ │ │ │ -153 │ │ │ │ -154 struct _Sqrt │ │ │ │ -155 { │ │ │ │ -156 template │ │ │ │ -157 _Tp operator()(const _Tp& __t) const │ │ │ │ -158 { return _s_q_r_t(__t); } │ │ │ │ -159 }; │ │ │ │ -160 │ │ │ │ -161 // In the past, we used to tailor operator applications semantics │ │ │ │ -162 // to the specialization of standard function objects (i.e. plus<>, etc.) │ │ │ │ -163 // That is incorrect. Therefore we provide our own surrogates. │ │ │ │ -164 │ │ │ │ -165 struct __unary_plus │ │ │ │ -166 { │ │ │ │ -167 template │ │ │ │ -168 _Tp operator()(const _Tp& __t) const │ │ │ │ -169 { return +__t; } │ │ │ │ -170 }; │ │ │ │ -171 │ │ │ │ -172 struct __negate │ │ │ │ -173 { │ │ │ │ -174 template │ │ │ │ -175 _Tp operator()(const _Tp& __t) const │ │ │ │ -176 { return -__t; } │ │ │ │ -177 }; │ │ │ │ -178 │ │ │ │ -179 struct __bitwise_not │ │ │ │ -180 { │ │ │ │ -181 template │ │ │ │ -182 _Tp operator()(const _Tp& __t) const │ │ │ │ -183 { return ~__t; } │ │ │ │ -184 }; │ │ │ │ -185 │ │ │ │ -186 struct __plus │ │ │ │ -187 { │ │ │ │ -188 template │ │ │ │ -189 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ -190 { return __x + __y; } │ │ │ │ -191 }; │ │ │ │ -192 │ │ │ │ -193 struct __minus │ │ │ │ -194 { │ │ │ │ -195 template │ │ │ │ -196 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ -197 { return __x - __y; } │ │ │ │ -198 }; │ │ │ │ -199 │ │ │ │ -200 struct __multiplies │ │ │ │ -201 { │ │ │ │ -202 template │ │ │ │ -203 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ -204 { return __x * __y; } │ │ │ │ -205 }; │ │ │ │ +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 // 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 struct __divides │ │ │ │ -208 { │ │ │ │ -209 template │ │ │ │ -210 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ -211 { return __x / __y; } │ │ │ │ -212 }; │ │ │ │ -213 │ │ │ │ -214 struct __modulus │ │ │ │ -215 { │ │ │ │ -216 template │ │ │ │ -217 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ -218 { return __x % __y; } │ │ │ │ -219 }; │ │ │ │ -220 │ │ │ │ -221 struct __bitwise_xor │ │ │ │ -222 { │ │ │ │ -223 template │ │ │ │ -224 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ -225 { return __x ^ __y; } │ │ │ │ -226 }; │ │ │ │ -227 │ │ │ │ -228 struct __bitwise_and │ │ │ │ -229 { │ │ │ │ -230 template │ │ │ │ -231 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ -232 { return __x & __y; } │ │ │ │ -233 }; │ │ │ │ -234 │ │ │ │ -235 struct __bitwise_or │ │ │ │ -236 { │ │ │ │ -237 template │ │ │ │ -238 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ -239 { return __x | __y; } │ │ │ │ -240 }; │ │ │ │ -241 │ │ │ │ -242 struct __shift_left │ │ │ │ -243 { │ │ │ │ -244 template │ │ │ │ -245 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ -246 { return __x << __y; } │ │ │ │ -247 }; │ │ │ │ -248 │ │ │ │ -249 struct __shift_right │ │ │ │ -250 { │ │ │ │ -251 template │ │ │ │ -252 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ -253 { return __x >> __y; } │ │ │ │ -254 }; │ │ │ │ +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 struct __logical_and │ │ │ │ -257 { │ │ │ │ -258 template │ │ │ │ -259 bool operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ -260 { return __x && __y; } │ │ │ │ -261 }; │ │ │ │ -262 │ │ │ │ -263 struct __logical_or │ │ │ │ -264 { │ │ │ │ -265 template │ │ │ │ -266 bool operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ -267 { return __x || __y; } │ │ │ │ -268 }; │ │ │ │ -269 │ │ │ │ -270 struct __logical_not │ │ │ │ -271 { │ │ │ │ -272 template │ │ │ │ -273 bool operator()(const _Tp& __x) const │ │ │ │ -274 { return !__x; } │ │ │ │ -275 }; │ │ │ │ +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 │ │ │ │ +_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 struct __equal_to │ │ │ │ -278 { │ │ │ │ -279 template │ │ │ │ -280 bool operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ -281 { return __x == __y; } │ │ │ │ -282 }; │ │ │ │ -283 │ │ │ │ -284 struct __not_equal_to │ │ │ │ -285 { │ │ │ │ -286 template │ │ │ │ -287 bool operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ -288 { return __x != __y; } │ │ │ │ -289 }; │ │ │ │ -290 │ │ │ │ -291 struct __less │ │ │ │ -292 { │ │ │ │ -293 template │ │ │ │ -294 bool operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ -295 { return __x < __y; } │ │ │ │ -296 }; │ │ │ │ -297 │ │ │ │ -298 struct __greater │ │ │ │ -299 { │ │ │ │ -300 template │ │ │ │ -301 bool operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ -302 { return __x > __y; } │ │ │ │ -303 }; │ │ │ │ -304 │ │ │ │ -305 struct __less_equal │ │ │ │ -306 { │ │ │ │ -307 template │ │ │ │ -308 bool operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ -309 { return __x <= __y; } │ │ │ │ -310 }; │ │ │ │ -311 │ │ │ │ -312 struct __greater_equal │ │ │ │ -313 { │ │ │ │ -314 template │ │ │ │ -315 bool operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ -316 { return __x >= __y; } │ │ │ │ -317 }; │ │ │ │ -318 │ │ │ │ -319 // The few binary functions we miss. │ │ │ │ -320 struct _Atan2 │ │ │ │ -321 { │ │ │ │ -322 template │ │ │ │ -323 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ -324 { return atan2(__x, __y); } │ │ │ │ -325 }; │ │ │ │ -326 │ │ │ │ -327 struct _Pow │ │ │ │ -328 { │ │ │ │ -329 template │ │ │ │ -330 _Tp operator()(const _Tp& __x, const _Tp& __y) const │ │ │ │ -331 { return _p_o_w(__x, __y); } │ │ │ │ -332 }; │ │ │ │ -333 │ │ │ │ -334 template │ │ │ │ -335 struct __fun_with_valarray │ │ │ │ -336 { │ │ │ │ -337 typedef _Tp result_type; │ │ │ │ -338 }; │ │ │ │ -339 │ │ │ │ -340 template │ │ │ │ -341 struct __fun_with_valarray<_Tp, false> │ │ │ │ +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 // No result type defined for invalid value types. │ │ │ │ -344 }; │ │ │ │ -345 │ │ │ │ -346 // We need these bits in order to recover the return type of │ │ │ │ -347 // some functions/operators now that we're no longer using │ │ │ │ -348 // function templates. │ │ │ │ -349 template │ │ │ │ -350 struct __fun : __fun_with_valarray<_Tp> │ │ │ │ -351 { │ │ │ │ -352 }; │ │ │ │ -353 │ │ │ │ -354 // several specializations for relational operators. │ │ │ │ -355 template │ │ │ │ -356 struct __fun<__logical_not, _Tp> │ │ │ │ -357 { │ │ │ │ -358 typedef bool result_type; │ │ │ │ -359 }; │ │ │ │ -360 │ │ │ │ -361 template │ │ │ │ -362 struct __fun<__logical_and, _Tp> │ │ │ │ -363 { │ │ │ │ -364 typedef bool result_type; │ │ │ │ -365 }; │ │ │ │ -366 │ │ │ │ -367 template │ │ │ │ -368 struct __fun<__logical_or, _Tp> │ │ │ │ -369 { │ │ │ │ -370 typedef bool result_type; │ │ │ │ -371 }; │ │ │ │ -372 │ │ │ │ -373 template │ │ │ │ -374 struct __fun<__less, _Tp> │ │ │ │ -375 { │ │ │ │ -376 typedef bool result_type; │ │ │ │ -377 }; │ │ │ │ -378 │ │ │ │ -379 template │ │ │ │ -380 struct __fun<__greater, _Tp> │ │ │ │ -381 { │ │ │ │ -382 typedef bool result_type; │ │ │ │ -383 }; │ │ │ │ -384 │ │ │ │ -385 template │ │ │ │ -386 struct __fun<__less_equal, _Tp> │ │ │ │ -387 { │ │ │ │ -388 typedef bool result_type; │ │ │ │ -389 }; │ │ │ │ -390 │ │ │ │ -391 template │ │ │ │ -392 struct __fun<__greater_equal, _Tp> │ │ │ │ -393 { │ │ │ │ -394 typedef bool result_type; │ │ │ │ -395 }; │ │ │ │ +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 /** │ │ │ │ +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 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 template │ │ │ │ -398 struct __fun<__equal_to, _Tp> │ │ │ │ -399 { │ │ │ │ -400 typedef bool result_type; │ │ │ │ -401 }; │ │ │ │ -402 │ │ │ │ -403 template │ │ │ │ -404 struct __fun<__not_equal_to, _Tp> │ │ │ │ -405 { │ │ │ │ -406 typedef bool result_type; │ │ │ │ -407 }; │ │ │ │ -408 │ │ │ │ -409namespace __detail │ │ │ │ -410{ │ │ │ │ -411 // Closure types already have reference semantics and are often short- │ │ │ │ -lived, │ │ │ │ -412 // so store them by value to avoid (some cases of) dangling references to │ │ │ │ -413 // out-of-scope temporaries. │ │ │ │ -414 template │ │ │ │ -415 struct _ValArrayRef │ │ │ │ -416 { typedef const _Tp __type; }; │ │ │ │ -417 │ │ │ │ -418 // Use real references for std::valarray objects. │ │ │ │ -419 template │ │ │ │ -420 struct _ValArrayRef< valarray<_Tp> > │ │ │ │ -421 { typedef const valarray<_Tp>& __type; }; │ │ │ │ -422 │ │ │ │ -423 // │ │ │ │ -424 // Apply function taking a value/const reference closure │ │ │ │ -425 // │ │ │ │ -426 │ │ │ │ -427 template │ │ │ │ -428 class _FunBase │ │ │ │ -429 { │ │ │ │ -430 public: │ │ │ │ -431 typedef typename _Dom::value_type value_type; │ │ │ │ -432 │ │ │ │ -433 _FunBase(const _Dom& __e, value_type __f(_Arg)) │ │ │ │ -434 : _M_expr(__e), _M_func(__f) {} │ │ │ │ -435 │ │ │ │ -436 value_type operator[](size_t __i) const │ │ │ │ -437 { return _M_func (_M_expr[__i]); } │ │ │ │ -438 │ │ │ │ -439 size_t _s_i_z_e() const { return _M_expr.size ();} │ │ │ │ -440 │ │ │ │ -441 private: │ │ │ │ -442 typename _ValArrayRef<_Dom>::__type _M_expr; │ │ │ │ -443 value_type (*_M_func)(_Arg); │ │ │ │ -444 }; │ │ │ │ -445 │ │ │ │ -446 template │ │ │ │ -447 struct _ValFunClos<_Expr,_Dom> : _FunBase<_Dom, typename _Dom::value_type> │ │ │ │ -448 { │ │ │ │ -449 typedef _FunBase<_Dom, typename _Dom::value_type> _Base; │ │ │ │ -450 typedef typename _Base::value_type value_type; │ │ │ │ -451 typedef value_type _Tp; │ │ │ │ -452 │ │ │ │ -453 _ValFunClos(const _Dom& __e, _Tp __f(_Tp)) : _Base(__e, __f) {} │ │ │ │ -454 }; │ │ │ │ -455 │ │ │ │ -456 template │ │ │ │ -457 struct _ValFunClos<_ValArray,_Tp> : _FunBase, _Tp> │ │ │ │ -458 { │ │ │ │ -459 typedef _FunBase, _Tp> _Base; │ │ │ │ -460 typedef _Tp value_type; │ │ │ │ -461 │ │ │ │ -462 _ValFunClos(const valarray<_Tp>& __v, _Tp __f(_Tp)) : _Base(__v, __f) {} │ │ │ │ -463 }; │ │ │ │ -464 │ │ │ │ -465 template │ │ │ │ -466 struct _RefFunClos<_Expr, _Dom> │ │ │ │ -467 : _FunBase<_Dom, const typename _Dom::value_type&> │ │ │ │ -468 { │ │ │ │ -469 typedef _FunBase<_Dom, const typename _Dom::value_type&> _Base; │ │ │ │ -470 typedef typename _Base::value_type value_type; │ │ │ │ -471 typedef value_type _Tp; │ │ │ │ -472 │ │ │ │ -473 _RefFunClos(const _Dom& __e, _Tp __f(const _Tp&)) │ │ │ │ -474 : _Base(__e, __f) {} │ │ │ │ -475 }; │ │ │ │ -476 │ │ │ │ -477 template │ │ │ │ -478 struct _RefFunClos<_ValArray, _Tp> │ │ │ │ -479 : _FunBase, const _Tp&> │ │ │ │ -480 { │ │ │ │ -481 typedef _FunBase, const _Tp&> _Base; │ │ │ │ -482 typedef _Tp value_type; │ │ │ │ -483 │ │ │ │ -484 _RefFunClos(const valarray<_Tp>& __v, _Tp __f(const _Tp&)) │ │ │ │ -485 : _Base(__v, __f) {} │ │ │ │ -486 }; │ │ │ │ -487 │ │ │ │ -488 // │ │ │ │ -489 // Unary expression closure. │ │ │ │ -490 // │ │ │ │ -491 │ │ │ │ -492 template │ │ │ │ -493 class _UnBase │ │ │ │ -494 { │ │ │ │ -495 public: │ │ │ │ -496 typedef typename _Arg::value_type _Vt; │ │ │ │ -497 typedef typename __fun<_Oper, _Vt>::result_type value_type; │ │ │ │ -498 │ │ │ │ -499 _UnBase(const _Arg& __e) : _M_expr(__e) {} │ │ │ │ -500 │ │ │ │ -501 value_type operator[](size_t __i) const │ │ │ │ -502 { return _Oper()(_M_expr[__i]); } │ │ │ │ -503 │ │ │ │ -504 size_t _s_i_z_e() const { return _M_expr.size(); } │ │ │ │ -505 │ │ │ │ -506 private: │ │ │ │ -507 typename _ValArrayRef<_Arg>::__type _M_expr; │ │ │ │ -508 }; │ │ │ │ -509 │ │ │ │ -510 template │ │ │ │ -511 struct _UnClos<_Oper, _Expr, _Dom> │ │ │ │ -512 : _UnBase<_Oper, _Dom> │ │ │ │ -513 { │ │ │ │ -514 typedef _Dom _Arg; │ │ │ │ -515 typedef _UnBase<_Oper, _Dom> _Base; │ │ │ │ -516 typedef typename _Base::value_type value_type; │ │ │ │ -517 │ │ │ │ -518 _UnClos(const _Arg& __e) : _Base(__e) {} │ │ │ │ -519 }; │ │ │ │ -520 │ │ │ │ -521 template │ │ │ │ -522 struct _UnClos<_Oper, _ValArray, _Tp> │ │ │ │ -523 : _UnBase<_Oper, valarray<_Tp> > │ │ │ │ -524 { │ │ │ │ -525 typedef valarray<_Tp> _Arg; │ │ │ │ -526 typedef _UnBase<_Oper, valarray<_Tp> > _Base; │ │ │ │ -527 typedef typename _Base::value_type value_type; │ │ │ │ -528 │ │ │ │ -529 _UnClos(const _Arg& __e) : _Base(__e) {} │ │ │ │ -530 }; │ │ │ │ -531 │ │ │ │ -532 │ │ │ │ -533 // │ │ │ │ -534 // Binary expression closure. │ │ │ │ -535 // │ │ │ │ -536 │ │ │ │ -537 template │ │ │ │ -538 class _BinBase │ │ │ │ -539 { │ │ │ │ -540 public: │ │ │ │ -541 typedef typename _FirstArg::value_type _Vt; │ │ │ │ -542 typedef typename __fun<_Oper, _Vt>::result_type value_type; │ │ │ │ -543 │ │ │ │ -544 _BinBase(const _FirstArg& __e1, const _SecondArg& __e2) │ │ │ │ -545 : _M_expr1(__e1), _M_expr2(__e2) {} │ │ │ │ -546 │ │ │ │ -547 value_type operator[](size_t __i) const │ │ │ │ -548 { return _Oper()(_M_expr1[__i], _M_expr2[__i]); } │ │ │ │ -549 │ │ │ │ -550 size_t _s_i_z_e() const { return _M_expr1.size(); } │ │ │ │ -551 │ │ │ │ -552 private: │ │ │ │ -553 typename _ValArrayRef<_FirstArg>::__type _M_expr1; │ │ │ │ -554 typename _ValArrayRef<_SecondArg>::__type _M_expr2; │ │ │ │ -555 }; │ │ │ │ -556 │ │ │ │ -557 │ │ │ │ -558 template │ │ │ │ -559 class _BinBase2 │ │ │ │ -560 { │ │ │ │ -561 public: │ │ │ │ -562 typedef typename _Clos::value_type _Vt; │ │ │ │ -563 typedef typename __fun<_Oper, _Vt>::result_type value_type; │ │ │ │ -564 │ │ │ │ -565 _BinBase2(const _Clos& __e, const _Vt& __t) │ │ │ │ -566 : _M_expr1(__e), _M_expr2(__t) {} │ │ │ │ -567 │ │ │ │ -568 value_type operator[](size_t __i) const │ │ │ │ -569 { return _Oper()(_M_expr1[__i], _M_expr2); } │ │ │ │ -570 │ │ │ │ -571 size_t _s_i_z_e() const { return _M_expr1.size(); } │ │ │ │ -572 │ │ │ │ -573 private: │ │ │ │ -574 typename _ValArrayRef<_Clos>::__type _M_expr1; │ │ │ │ -575 _Vt _M_expr2; │ │ │ │ -576 }; │ │ │ │ -577 │ │ │ │ -578 template │ │ │ │ -579 class _BinBase1 │ │ │ │ +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 /** │ │ │ │ +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 // 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 public: │ │ │ │ -582 typedef typename _Clos::value_type _Vt; │ │ │ │ -583 typedef typename __fun<_Oper, _Vt>::result_type value_type; │ │ │ │ +581 typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type; │ │ │ │ +582 return __detail::__cyl_bessel_j<__type>(_____n_u, __x); │ │ │ │ +583 } │ │ │ │ 584 │ │ │ │ -585 _BinBase1(const _Vt& __t, const _Clos& __e) │ │ │ │ -586 : _M_expr1(__t), _M_expr2(__e) {} │ │ │ │ -587 │ │ │ │ -588 value_type operator[](size_t __i) const │ │ │ │ -589 { return _Oper()(_M_expr1, _M_expr2[__i]); } │ │ │ │ -590 │ │ │ │ -591 size_t _s_i_z_e() const { return _M_expr2.size(); } │ │ │ │ -592 │ │ │ │ -593 private: │ │ │ │ -594 _Vt _M_expr1; │ │ │ │ -595 typename _ValArrayRef<_Clos>::__type _M_expr2; │ │ │ │ -596 }; │ │ │ │ -597 │ │ │ │ -598 template │ │ │ │ -599 struct _BinClos<_Oper, _Expr, _Expr, _Dom1, _Dom2> │ │ │ │ -600 : _BinBase<_Oper, _Dom1, _Dom2> │ │ │ │ -601 { │ │ │ │ -602 typedef _BinBase<_Oper, _Dom1, _Dom2> _Base; │ │ │ │ -603 typedef typename _Base::value_type value_type; │ │ │ │ -604 │ │ │ │ -605 _BinClos(const _Dom1& __e1, const _Dom2& __e2) : _Base(__e1, __e2) {} │ │ │ │ -606 }; │ │ │ │ -607 │ │ │ │ -608 template │ │ │ │ -609 struct _BinClos<_Oper, _ValArray, _ValArray, _Tp, _Tp> │ │ │ │ -610 : _BinBase<_Oper, valarray<_Tp>, valarray<_Tp> > │ │ │ │ -611 { │ │ │ │ -612 typedef _BinBase<_Oper, valarray<_Tp>, valarray<_Tp> > _Base; │ │ │ │ -613 typedef typename _Base::value_type value_type; │ │ │ │ -614 │ │ │ │ -615 _BinClos(const valarray<_Tp>& __v, const valarray<_Tp>& __w) │ │ │ │ -616 : _Base(__v, __w) {} │ │ │ │ -617 }; │ │ │ │ -618 │ │ │ │ -619 template │ │ │ │ -620 struct _BinClos<_Oper, _Expr, _ValArray, _Dom, typename _Dom::value_type> │ │ │ │ -621 : _BinBase<_Oper, _Dom, valarray > │ │ │ │ -622 { │ │ │ │ -623 typedef typename _Dom::value_type _Tp; │ │ │ │ -624 typedef _BinBase<_Oper,_Dom,valarray<_Tp> > _Base; │ │ │ │ -625 typedef typename _Base::value_type value_type; │ │ │ │ -626 │ │ │ │ -627 _BinClos(const _Dom& __e1, const valarray<_Tp>& __e2) │ │ │ │ -628 : _Base(__e1, __e2) {} │ │ │ │ -629 }; │ │ │ │ -630 │ │ │ │ -631 template │ │ │ │ -632 struct _BinClos<_Oper, _ValArray, _Expr, typename _Dom::value_type, _Dom> │ │ │ │ -633 : _BinBase<_Oper, valarray,_Dom> │ │ │ │ -634 { │ │ │ │ -635 typedef typename _Dom::value_type _Tp; │ │ │ │ -636 typedef _BinBase<_Oper, valarray<_Tp>, _Dom> _Base; │ │ │ │ -637 typedef typename _Base::value_type value_type; │ │ │ │ +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 │ │ │ │ +_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 /** │ │ │ │ +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 _BinClos(const valarray<_Tp>& __e1, const _Dom& __e2) │ │ │ │ -640 : _Base(__e1, __e2) {} │ │ │ │ -641 }; │ │ │ │ -642 │ │ │ │ -643 template │ │ │ │ -644 struct _BinClos<_Oper, _Expr, _Constant, _Dom, typename _Dom::value_type> │ │ │ │ -645 : _BinBase2<_Oper, _Dom> │ │ │ │ -646 { │ │ │ │ -647 typedef typename _Dom::value_type _Tp; │ │ │ │ -648 typedef _BinBase2<_Oper,_Dom> _Base; │ │ │ │ -649 typedef typename _Base::value_type value_type; │ │ │ │ -650 │ │ │ │ -651 _BinClos(const _Dom& __e1, const _Tp& __e2) : _Base(__e1, __e2) {} │ │ │ │ -652 }; │ │ │ │ -653 │ │ │ │ -654 template │ │ │ │ -655 struct _BinClos<_Oper, _Constant, _Expr, typename _Dom::value_type, _Dom> │ │ │ │ -656 : _BinBase1<_Oper, _Dom> │ │ │ │ -657 { │ │ │ │ -658 typedef typename _Dom::value_type _Tp; │ │ │ │ -659 typedef _BinBase1<_Oper, _Dom> _Base; │ │ │ │ -660 typedef typename _Base::value_type value_type; │ │ │ │ -661 │ │ │ │ -662 _BinClos(const _Tp& __e1, const _Dom& __e2) : _Base(__e1, __e2) {} │ │ │ │ -663 }; │ │ │ │ -664 │ │ │ │ -665 template │ │ │ │ -666 struct _BinClos<_Oper, _ValArray, _Constant, _Tp, _Tp> │ │ │ │ -667 : _BinBase2<_Oper, valarray<_Tp> > │ │ │ │ -668 { │ │ │ │ -669 typedef _BinBase2<_Oper,valarray<_Tp> > _Base; │ │ │ │ -670 typedef typename _Base::value_type value_type; │ │ │ │ -671 │ │ │ │ -672 _BinClos(const valarray<_Tp>& __v, const _Tp& __t) : _Base(__v, __t) {} │ │ │ │ -673 }; │ │ │ │ -674 │ │ │ │ -675 template │ │ │ │ -676 struct _BinClos<_Oper, _Constant, _ValArray, _Tp, _Tp> │ │ │ │ -677 : _BinBase1<_Oper, valarray<_Tp> > │ │ │ │ -678 { │ │ │ │ -679 typedef _BinBase1<_Oper, valarray<_Tp> > _Base; │ │ │ │ -680 typedef typename _Base::value_type value_type; │ │ │ │ -681 │ │ │ │ -682 _BinClos(const _Tp& __t, const valarray<_Tp>& __v) : _Base(__t, __v) {} │ │ │ │ -683 }; │ │ │ │ +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 typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type; │ │ │ │ +682 return __detail::__cyl_neumann_n<__type>(_____n_u, __x); │ │ │ │ +683 } │ │ │ │ 684 │ │ │ │ -685 // │ │ │ │ -686 // slice_array closure. │ │ │ │ -687 // │ │ │ │ -688 template │ │ │ │ -689 class _SBase │ │ │ │ -690 { │ │ │ │ -691 public: │ │ │ │ -692 typedef typename _Dom::value_type value_type; │ │ │ │ -693 │ │ │ │ -694 _SBase (const _Dom& __e, const slice& __s) │ │ │ │ -695 : _M_expr (__e), _M_slice (__s) {} │ │ │ │ +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 │ │ │ │ +_6_9_4 _e_l_l_i_n_t___1_f(float _____k, float __phi) │ │ │ │ +695 { return __detail::__ellint_1(_____k, __phi); } │ │ │ │ 696 │ │ │ │ -697 value_type │ │ │ │ -698 operator[] (size_t __i) const │ │ │ │ -699 { return _M_expr[_M_slice.start () + __i * _M_slice.stride ()]; } │ │ │ │ -700 │ │ │ │ -701 size_t │ │ │ │ -702 _s_i_z_e() const │ │ │ │ -703 { return _M_slice.size (); } │ │ │ │ -704 │ │ │ │ -705 private: │ │ │ │ -706 typename _ValArrayRef<_Dom>::__type _M_expr; │ │ │ │ -707 const slice& _M_slice; │ │ │ │ -708 }; │ │ │ │ -709 │ │ │ │ -710 template │ │ │ │ -711 class _SBase<_Array<_Tp> > │ │ │ │ -712 { │ │ │ │ -713 public: │ │ │ │ -714 typedef _Tp value_type; │ │ │ │ -715 │ │ │ │ -716 _SBase (_Array<_Tp> __a, const slice& __s) │ │ │ │ -717 : _M_array (__a._M_data+__s.start()), _M_size (__s._s_i_z_e()), │ │ │ │ -718 _M_stride (__s.stride()) {} │ │ │ │ -719 │ │ │ │ -720 value_type │ │ │ │ -721 operator[] (size_t __i) const │ │ │ │ -722 { return _M_array._M_data[__i * _M_stride]; } │ │ │ │ -723 │ │ │ │ -724 size_t │ │ │ │ -725 _s_i_z_e() const │ │ │ │ -726 { return _M_size; } │ │ │ │ -727 │ │ │ │ -728 private: │ │ │ │ -729 const _Array<_Tp> _M_array; │ │ │ │ -730 const size_t _M_size; │ │ │ │ -731 const size_t _M_stride; │ │ │ │ -732 }; │ │ │ │ -733 │ │ │ │ -734 template │ │ │ │ -735 struct _SClos<_Expr, _Dom> │ │ │ │ -736 : _SBase<_Dom> │ │ │ │ -737 { │ │ │ │ -738 typedef _SBase<_Dom> _Base; │ │ │ │ -739 typedef typename _Base::value_type value_type; │ │ │ │ -740 │ │ │ │ -741 _SClos (const _Dom& __e, const slice& __s) : _Base (__e, __s) {} │ │ │ │ -742 }; │ │ │ │ -743 │ │ │ │ -744 template │ │ │ │ -745 struct _SClos<_ValArray, _Tp> │ │ │ │ -746 : _SBase<_Array<_Tp> > │ │ │ │ -747 { │ │ │ │ -748 typedef _SBase<_Array<_Tp> > _Base; │ │ │ │ -749 typedef _Tp value_type; │ │ │ │ -750 │ │ │ │ -751 _SClos (_Array<_Tp> __a, const slice& __s) : _Base (__a, __s) {} │ │ │ │ -752 }; │ │ │ │ -753} // namespace __detail │ │ │ │ +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 /** │ │ │ │ +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_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -756} // namespace │ │ │ │ -757 │ │ │ │ -758#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_0_9_5 │ │ │ │ -_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_2_5 │ │ │ │ -_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_0_9_0 │ │ │ │ -_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_2_6 │ │ │ │ -_s_t_d_:_:_a_b_s │ │ │ │ -_Tp abs(const complex< _Tp > &) │ │ │ │ -Return magnitude of z. │ │ │ │ -DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_8_9_6 │ │ │ │ -_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_0_6_3 │ │ │ │ -_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_0_3_7 │ │ │ │ -_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_2_5_4 │ │ │ │ -_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_2_8_5 │ │ │ │ -_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_1_5_5 │ │ │ │ -_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_0_7 │ │ │ │ -_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_1_9_9 │ │ │ │ +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_6_2 │ │ │ │ +_____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-14-base/libstdc++/user/a00368.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 42 of file cxxabi_init_exception.h.

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

◆ _GLIBCXX_HAVE_CDTOR_CALLABI

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

Definition at line 43 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_2 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_3 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-14-base/libstdc++/user/a00368_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: valarray_array.tcc Source File │ │ │ +libstdc++: cxxabi_init_exception.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,266 +45,105 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
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-2024 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2016-2024 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 }
│ │ │ -
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 */
│ │ │ +
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#pragma GCC system_header
│ │ │ +
35
│ │ │ +
36#pragma GCC visibility push(default)
│ │ │ +
37
│ │ │ +
38#include <stddef.h>
│ │ │ +
39#include <bits/c++config.h>
│ │ │ +
40
│ │ │ +
41#ifndef _GLIBCXX_CDTOR_CALLABI
│ │ │ +
42#define _GLIBCXX_CDTOR_CALLABI
│ │ │ +
43#define _GLIBCXX_HAVE_CDTOR_CALLABI 0
│ │ │ +
44#else
│ │ │ +
45#define _GLIBCXX_HAVE_CDTOR_CALLABI 1
│ │ │ +
46#endif
│ │ │ +
47
│ │ │ +
48#ifdef __cplusplus
│ │ │ +
49
│ │ │ +
50namespace std
│ │ │ +
51{
│ │ │ +
52 class type_info;
│ │ │ +
53}
│ │ │ +
54
│ │ │ +
55namespace __cxxabiv1
│ │ │ +
56{
│ │ │ +
57 struct __cxa_refcounted_exception;
│ │ │ +
58
│ │ │ +
59 extern "C"
│ │ │ +
60 {
│ │ │ +
61 // Allocate memory for the primary exception plus the thrown object.
│ │ │ +
62 void*
│ │ │ +
63 __cxa_allocate_exception(size_t) _GLIBCXX_NOTHROW;
│ │ │ +
64
│ │ │ +
65 void
│ │ │ +
66 __cxa_free_exception(void*) _GLIBCXX_NOTHROW;
│ │ │ +
67
│ │ │ +
68 // Initialize exception (this is a GNU extension)
│ │ │ +
69 __cxa_refcounted_exception*
│ │ │ +
70 __cxa_init_primary_exception(void *__object, std::type_info *__tinfo,
│ │ │ +
71 void (_GLIBCXX_CDTOR_CALLABI *__dest) (void *))
│ │ │ +
72 _GLIBCXX_NOTHROW;
│ │ │ +
73
│ │ │ +
74 }
│ │ │ +
75} // namespace __cxxabiv1
│ │ │ +
76
│ │ │ +
77#endif
│ │ │ +
78
│ │ │ +
79#pragma GCC visibility pop
│ │ │ +
80
│ │ │ +
81#endif // _CXXABI_INIT_EXCEPTION_H
│ │ │ + │ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ +
Part of RTTI.
Definition typeinfo:92
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,252 +1,93 @@ │ │ │ │ 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-2024 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2016-2024 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 } │ │ │ │ -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 */ │ │ │ │ +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#pragma GCC system_header │ │ │ │ +35 │ │ │ │ +36#pragma GCC visibility push(default) │ │ │ │ +37 │ │ │ │ +38#include │ │ │ │ +39#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ +40 │ │ │ │ +41#ifndef _GLIBCXX_CDTOR_CALLABI │ │ │ │ +42#define _GLIBCXX_CDTOR_CALLABI │ │ │ │ +43#define _GLIBCXX_HAVE_CDTOR_CALLABI 0 │ │ │ │ +44#else │ │ │ │ +45#define _GLIBCXX_HAVE_CDTOR_CALLABI 1 │ │ │ │ +46#endif │ │ │ │ +47 │ │ │ │ +48#ifdef __cplusplus │ │ │ │ +49 │ │ │ │ +50namespace _s_t_d │ │ │ │ +51{ │ │ │ │ +52 class type_info; │ │ │ │ +53} │ │ │ │ +54 │ │ │ │ +55namespace __cxxabiv1 │ │ │ │ +56{ │ │ │ │ +57 struct __cxa_refcounted_exception; │ │ │ │ +58 │ │ │ │ +59 extern "C" │ │ │ │ +60 { │ │ │ │ +61 // Allocate memory for the primary exception plus the thrown object. │ │ │ │ +62 void* │ │ │ │ +63 __cxa_allocate_exception(size_t) _GLIBCXX_NOTHROW; │ │ │ │ +64 │ │ │ │ +65 void │ │ │ │ +66 __cxa_free_exception(void*) _GLIBCXX_NOTHROW; │ │ │ │ +67 │ │ │ │ +68 // Initialize exception (this is a GNU extension) │ │ │ │ +69 __cxa_refcounted_exception* │ │ │ │ +70 __cxa_init_primary_exception(void *__object, _s_t_d_:_:_t_y_p_e___i_n_f_o *__tinfo, │ │ │ │ +71 void (_GLIBCXX_CDTOR_CALLABI *__dest) (void *)) │ │ │ │ +72 _GLIBCXX_NOTHROW; │ │ │ │ +73 │ │ │ │ +74 } │ │ │ │ +75} // namespace __cxxabiv1 │ │ │ │ +76 │ │ │ │ +77#endif │ │ │ │ +78 │ │ │ │ +79#pragma GCC visibility pop │ │ │ │ +80 │ │ │ │ +81#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_2 │ │ │ │ * _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-14-base/libstdc++/user/a00371.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('a00371.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 511 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 _5_1_1 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-14-base/libstdc++/user/a00371_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-2024 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2001-2024 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,679 +71,916 @@ │ │ │
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#pragma GCC system_header
│ │ │ -
36
│ │ │ -
37#include <bits/c++config.h>
│ │ │ - │ │ │ -
39#include <cstdlib>
│ │ │ -
40#include <new>
│ │ │ -
41
│ │ │ -
42namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
43{
│ │ │ -
44_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
45
│ │ │ -
46 //
│ │ │ -
47 // Helper functions on raw pointers
│ │ │ -
48 //
│ │ │ -
49
│ │ │ -
50 // We get memory the old fashioned way
│ │ │ -
51 template<typename _Tp>
│ │ │ -
52 _Tp*
│ │ │ -
53 __valarray_get_storage(size_t) __attribute__((__malloc__));
│ │ │ -
54
│ │ │ -
55 template<typename _Tp>
│ │ │ -
56 inline _Tp*
│ │ │ -
57 __valarray_get_storage(size_t __n)
│ │ │ -
58 { return static_cast<_Tp*>(operator new(__n * sizeof(_Tp))); }
│ │ │ -
59
│ │ │ -
60 // Return memory to the system
│ │ │ -
61 inline void
│ │ │ -
62 __valarray_release_memory(void* __p)
│ │ │ -
63 { operator delete(__p); }
│ │ │ +
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
│ │ │ -
65 // Turn a raw-memory into an array of _Tp filled with _Tp()
│ │ │ -
66 // This is required in 'valarray<T> v(n);'
│ │ │ -
67 template<typename _Tp, bool>
│ │ │ -
68 struct _Array_default_ctor
│ │ │ -
69 {
│ │ │ -
70 // Please note that this isn't exception safe. But
│ │ │ -
71 // valarrays aren't required to be exception safe.
│ │ │ -
72 inline static void
│ │ │ -
73 _S_do_it(_Tp* __b, _Tp* __e)
│ │ │ -
74 {
│ │ │ -
75 while (__b != __e)
│ │ │ -
76 new(__b++) _Tp();
│ │ │ -
77 }
│ │ │ -
78 };
│ │ │ -
79
│ │ │ -
80 template<typename _Tp>
│ │ │ -
81 struct _Array_default_ctor<_Tp, true>
│ │ │ -
82 {
│ │ │ -
83 // For fundamental types, it suffices to say 'memset()'
│ │ │ -
84 inline static void
│ │ │ -
85 _S_do_it(_Tp* __b, _Tp* __e)
│ │ │ -
86 { __builtin_memset(__b, 0, (__e - __b) * sizeof(_Tp)); }
│ │ │ -
87 };
│ │ │ -
88
│ │ │ -
89 template<typename _Tp>
│ │ │ -
90 inline void
│ │ │ -
91 __valarray_default_construct(_Tp* __b, _Tp* __e)
│ │ │ -
92 {
│ │ │ -
93 _Array_default_ctor<_Tp, __is_scalar<_Tp>::__value>::_S_do_it(__b, __e);
│ │ │ -
94 }
│ │ │ -
95
│ │ │ -
96 // Turn a raw-memory into an array of _Tp filled with __t
│ │ │ -
97 // This is the required in valarray<T> v(n, t). Also
│ │ │ -
98 // used in valarray<>::resize().
│ │ │ -
99 template<typename _Tp, bool>
│ │ │ -
100 struct _Array_init_ctor
│ │ │ -
101 {
│ │ │ -
102 // Please note that this isn't exception safe. But
│ │ │ -
103 // valarrays aren't required to be exception safe.
│ │ │ -
104 inline static void
│ │ │ -
105 _S_do_it(_Tp* __b, _Tp* __e, const _Tp __t)
│ │ │ -
106 {
│ │ │ -
107 while (__b != __e)
│ │ │ -
108 new(__b++) _Tp(__t);
│ │ │ -
109 }
│ │ │ -
110 };
│ │ │ -
111
│ │ │ -
112 template<typename _Tp>
│ │ │ -
113 struct _Array_init_ctor<_Tp, true>
│ │ │ -
114 {
│ │ │ -
115 inline static void
│ │ │ -
116 _S_do_it(_Tp* __b, _Tp* __e, const _Tp __t)
│ │ │ -
117 {
│ │ │ -
118 while (__b != __e)
│ │ │ -
119 *__b++ = __t;
│ │ │ -
120 }
│ │ │ -
121 };
│ │ │ +
65namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
66{
│ │ │ +
67_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
68
│ │ │ +
69 /**
│ │ │ +
70 * @brief A standard container giving FIFO behavior.
│ │ │ +
71 *
│ │ │ +
72 * @ingroup sequences
│ │ │ +
73 *
│ │ │ +
74 * @tparam _Tp Type of element.
│ │ │ +
75 * @tparam _Sequence Type of underlying sequence, defaults to deque<_Tp>.
│ │ │ +
76 *
│ │ │ +
77 * Meets many of the requirements of a
│ │ │ +
78 * <a href="tables.html#65">container</a>,
│ │ │ +
79 * but does not define anything to do with iterators. Very few of the
│ │ │ +
80 * other standard container interfaces are defined.
│ │ │ +
81 *
│ │ │ +
82 * This is not a true container, but an @e adaptor. It holds another
│ │ │ +
83 * container, and provides a wrapper interface to that container. The
│ │ │ +
84 * wrapper is what enforces strict first-in-first-out %queue behavior.
│ │ │ +
85 *
│ │ │ +
86 * The second template parameter defines the type of the underlying
│ │ │ +
87 * sequence/container. It defaults to std::deque, but it can be any type
│ │ │ +
88 * that supports @c front, @c back, @c push_back, and @c pop_front,
│ │ │ +
89 * such as std::list or an appropriate user-defined type.
│ │ │ +
90 *
│ │ │ +
91 * Members not found in @a normal containers are @c container_type,
│ │ │ +
92 * which is a typedef for the second Sequence parameter, and @c push and
│ │ │ +
93 * @c pop, which are standard %queue/FIFO operations.
│ │ │ +
94 */
│ │ │ +
95 template<typename _Tp, typename _Sequence = deque<_Tp> >
│ │ │ +
│ │ │ +
96 class queue
│ │ │ +
97 {
│ │ │ +
98#ifdef _GLIBCXX_CONCEPT_CHECKS
│ │ │ +
99 // concept requirements
│ │ │ +
100 typedef typename _Sequence::value_type _Sequence_value_type;
│ │ │ +
101# if __cplusplus < 201103L
│ │ │ +
102 __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
│ │ │ +
103# endif
│ │ │ +
104 __glibcxx_class_requires(_Sequence, _FrontInsertionSequenceConcept)
│ │ │ +
105 __glibcxx_class_requires(_Sequence, _BackInsertionSequenceConcept)
│ │ │ +
106 __glibcxx_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept)
│ │ │ +
107#endif
│ │ │ +
108
│ │ │ +
109 template<typename _Tp1, typename _Seq1>
│ │ │ +
110 friend bool
│ │ │ +
111 operator==(const queue<_Tp1, _Seq1>&, const queue<_Tp1, _Seq1>&);
│ │ │ +
112
│ │ │ +
113 template<typename _Tp1, typename _Seq1>
│ │ │ +
114 friend bool
│ │ │ +
115 operator<(const queue<_Tp1, _Seq1>&, const queue<_Tp1, _Seq1>&);
│ │ │ +
116
│ │ │ +
117#if __cpp_lib_three_way_comparison
│ │ │ +
118 template<typename _Tp1, three_way_comparable _Seq1>
│ │ │ + │ │ │ +
120 operator<=>(const queue<_Tp1, _Seq1>&, const queue<_Tp1, _Seq1>&);
│ │ │ +
121#endif
│ │ │
122
│ │ │ -
123 template<typename _Tp>
│ │ │ -
124 inline void
│ │ │ -
125 __valarray_fill_construct(_Tp* __b, _Tp* __e, const _Tp __t)
│ │ │ -
126 {
│ │ │ -
127 _Array_init_ctor<_Tp, __is_trivial(_Tp)>::_S_do_it(__b, __e, __t);
│ │ │ -
128 }
│ │ │ -
129
│ │ │ -
130 //
│ │ │ -
131 // copy-construct raw array [__o, *) from plain array [__b, __e)
│ │ │ -
132 // We can't just say 'memcpy()'
│ │ │ -
133 //
│ │ │ -
134 template<typename _Tp, bool>
│ │ │ -
135 struct _Array_copy_ctor
│ │ │ -
136 {
│ │ │ -
137 // Please note that this isn't exception safe. But
│ │ │ -
138 // valarrays aren't required to be exception safe.
│ │ │ -
139 inline static void
│ │ │ -
140 _S_do_it(const _Tp* __b, const _Tp* __e, _Tp* __restrict__ __o)
│ │ │ -
141 {
│ │ │ -
142 while (__b != __e)
│ │ │ -
143 new(__o++) _Tp(*__b++);
│ │ │ -
144 }
│ │ │ -
145 };
│ │ │ -
146
│ │ │ -
147 template<typename _Tp>
│ │ │ -
148 struct _Array_copy_ctor<_Tp, true>
│ │ │ -
149 {
│ │ │ -
150 inline static void
│ │ │ -
151 _S_do_it(const _Tp* __b, const _Tp* __e, _Tp* __restrict__ __o)
│ │ │ -
152 {
│ │ │ -
153 if (__b)
│ │ │ -
154 __builtin_memcpy(__o, __b, (__e - __b) * sizeof(_Tp));
│ │ │ -
155 }
│ │ │ -
156 };
│ │ │ -
157
│ │ │ -
158 template<typename _Tp>
│ │ │ -
159 inline void
│ │ │ -
160 __valarray_copy_construct(const _Tp* __b, const _Tp* __e,
│ │ │ -
161 _Tp* __restrict__ __o)
│ │ │ -
162 {
│ │ │ -
163 _Array_copy_ctor<_Tp, __is_trivial(_Tp)>::_S_do_it(__b, __e, __o);
│ │ │ -
164 }
│ │ │ -
165
│ │ │ -
166 // copy-construct raw array [__o, *) from strided array __a[<__n : __s>]
│ │ │ -
167 template<typename _Tp>
│ │ │ -
168 inline void
│ │ │ -
169 __valarray_copy_construct (const _Tp* __restrict__ __a, size_t __n,
│ │ │ -
170 size_t __s, _Tp* __restrict__ __o)
│ │ │ -
171 {
│ │ │ -
172 if (__is_trivial(_Tp))
│ │ │ -
173 while (__n--)
│ │ │ -
174 {
│ │ │ -
175 *__o++ = *__a;
│ │ │ -
176 __a += __s;
│ │ │ -
177 }
│ │ │ -
178 else
│ │ │ -
179 while (__n--)
│ │ │ -
180 {
│ │ │ -
181 new(__o++) _Tp(*__a);
│ │ │ -
182 __a += __s;
│ │ │ -
183 }
│ │ │ -
184 }
│ │ │ +
123#if __cplusplus >= 201103L
│ │ │ +
124 template<typename _Alloc>
│ │ │ +
125 using _Uses = typename
│ │ │ + │ │ │ +
127
│ │ │ +
128#if __cplusplus >= 201703L
│ │ │ +
129 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
130 // 2566. Requirements on the first template parameter of container
│ │ │ +
131 // adaptors
│ │ │ + │ │ │ +
133 "value_type must be the same as the underlying container");
│ │ │ +
134#endif // C++17
│ │ │ +
135#endif // C++11
│ │ │ +
136
│ │ │ +
137 public:
│ │ │ +
138 typedef typename _Sequence::value_type value_type;
│ │ │ +
139 typedef typename _Sequence::reference reference;
│ │ │ +
140 typedef typename _Sequence::const_reference const_reference;
│ │ │ +
141 typedef typename _Sequence::size_type size_type;
│ │ │ +
142 typedef _Sequence container_type;
│ │ │ +
143
│ │ │ +
144 protected:
│ │ │ +
145 /* Maintainers wondering why this isn't uglified as per style
│ │ │ +
146 * guidelines should note that this name is specified in the standard,
│ │ │ +
147 * C++98 [23.2.3.1].
│ │ │ +
148 * (Why? Presumably for the same reason that it's protected instead
│ │ │ +
149 * of private: to allow derivation. But none of the other
│ │ │ +
150 * containers allow for derivation. Odd.)
│ │ │ +
151 */
│ │ │ +
152 /// @c c is the underlying container.
│ │ │ +
153 _Sequence c;
│ │ │ +
154
│ │ │ +
155 public:
│ │ │ +
156 /**
│ │ │ +
157 * @brief Default constructor creates no elements.
│ │ │ +
158 */
│ │ │ +
159#if __cplusplus < 201103L
│ │ │ +
160 explicit
│ │ │ +
161 queue(const _Sequence& __c = _Sequence())
│ │ │ +
162 : c(__c) { }
│ │ │ +
163#else
│ │ │ +
164 template<typename _Seq = _Sequence, typename _Requires = typename
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
167 : c() { }
│ │ │ +
│ │ │ +
168
│ │ │ +
169 explicit
│ │ │ +
170 queue(const _Sequence& __c)
│ │ │ +
171 : c(__c) { }
│ │ │ +
172
│ │ │ +
173 explicit
│ │ │ +
174 queue(_Sequence&& __c)
│ │ │ +
175 : c(std::move(__c)) { }
│ │ │ +
176
│ │ │ +
177 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
178 explicit
│ │ │ +
179 queue(const _Alloc& __a)
│ │ │ +
180 : c(__a) { }
│ │ │ +
181
│ │ │ +
182 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
183 queue(const _Sequence& __c, const _Alloc& __a)
│ │ │ +
184 : c(__c, __a) { }
│ │ │
185
│ │ │ -
186 // copy-construct raw array [__o, *) from indexed array __a[__i[<__n>]]
│ │ │ -
187 template<typename _Tp>
│ │ │ -
188 inline void
│ │ │ -
189 __valarray_copy_construct (const _Tp* __restrict__ __a,
│ │ │ -
190 const size_t* __restrict__ __i,
│ │ │ -
191 _Tp* __restrict__ __o, size_t __n)
│ │ │ -
192 {
│ │ │ -
193 if (__is_trivial(_Tp))
│ │ │ -
194 while (__n--)
│ │ │ -
195 *__o++ = __a[*__i++];
│ │ │ -
196 else
│ │ │ -
197 while (__n--)
│ │ │ -
198 new (__o++) _Tp(__a[*__i++]);
│ │ │ -
199 }
│ │ │ -
200
│ │ │ -
201 // Do the necessary cleanup when we're done with arrays.
│ │ │ -
202 template<typename _Tp>
│ │ │ -
203 inline void
│ │ │ -
204 __valarray_destroy_elements(_Tp* __b, _Tp* __e)
│ │ │ -
205 {
│ │ │ -
206 if (!__is_trivial(_Tp))
│ │ │ -
207 while (__b != __e)
│ │ │ -
208 {
│ │ │ -
209 __b->~_Tp();
│ │ │ -
210 ++__b;
│ │ │ -
211 }
│ │ │ -
212 }
│ │ │ -
213
│ │ │ -
214 // Fill a plain array __a[<__n>] with __t
│ │ │ -
215 template<typename _Tp>
│ │ │ -
216 inline void
│ │ │ -
217 __valarray_fill(_Tp* __restrict__ __a, size_t __n, const _Tp& __t)
│ │ │ -
218 {
│ │ │ -
219 while (__n--)
│ │ │ -
220 *__a++ = __t;
│ │ │ -
221 }
│ │ │ -
222
│ │ │ -
223 // fill strided array __a[<__n-1 : __s>] with __t
│ │ │ -
224 template<typename _Tp>
│ │ │ -
225 inline void
│ │ │ -
226 __valarray_fill(_Tp* __restrict__ __a, size_t __n,
│ │ │ -
227 size_t __s, const _Tp& __t)
│ │ │ -
228 {
│ │ │ -
229 for (size_t __i = 0; __i < __n; ++__i, __a += __s)
│ │ │ -
230 *__a = __t;
│ │ │ -
231 }
│ │ │ -
232
│ │ │ -
233 // fill indirect array __a[__i[<__n>]] with __i
│ │ │ -
234 template<typename _Tp>
│ │ │ -
235 inline void
│ │ │ -
236 __valarray_fill(_Tp* __restrict__ __a, const size_t* __restrict__ __i,
│ │ │ -
237 size_t __n, const _Tp& __t)
│ │ │ -
238 {
│ │ │ -
239 for (size_t __j = 0; __j < __n; ++__j, ++__i)
│ │ │ -
240 __a[*__i] = __t;
│ │ │ -
241 }
│ │ │ -
242
│ │ │ -
243 // copy plain array __a[<__n>] in __b[<__n>]
│ │ │ -
244 // For non-fundamental types, it is wrong to say 'memcpy()'
│ │ │ -
245 template<typename _Tp, bool>
│ │ │ -
246 struct _Array_copier
│ │ │ -
247 {
│ │ │ -
248 inline static void
│ │ │ -
249 _S_do_it(const _Tp* __restrict__ __a, size_t __n, _Tp* __restrict__ __b)
│ │ │ -
250 {
│ │ │ -
251 while(__n--)
│ │ │ -
252 *__b++ = *__a++;
│ │ │ -
253 }
│ │ │ -
254 };
│ │ │ -
255
│ │ │ -
256 template<typename _Tp>
│ │ │ -
257 struct _Array_copier<_Tp, true>
│ │ │ -
258 {
│ │ │ -
259 inline static void
│ │ │ -
260 _S_do_it(const _Tp* __restrict__ __a, size_t __n, _Tp* __restrict__ __b)
│ │ │ -
261 {
│ │ │ -
262 if (__n != 0)
│ │ │ -
263 __builtin_memcpy(__b, __a, __n * sizeof (_Tp));
│ │ │ -
264 }
│ │ │ -
265 };
│ │ │ -
266
│ │ │ -
267 // Copy a plain array __a[<__n>] into a play array __b[<>]
│ │ │ -
268 template<typename _Tp>
│ │ │ -
269 inline void
│ │ │ -
270 __valarray_copy(const _Tp* __restrict__ __a, size_t __n,
│ │ │ -
271 _Tp* __restrict__ __b)
│ │ │ -
272 {
│ │ │ -
273 _Array_copier<_Tp, __is_trivial(_Tp)>::_S_do_it(__a, __n, __b);
│ │ │ -
274 }
│ │ │ -
275
│ │ │ -
276 // Copy strided array __a[<__n : __s>] in plain __b[<__n>]
│ │ │ -
277 template<typename _Tp>
│ │ │ -
278 inline void
│ │ │ -
279 __valarray_copy(const _Tp* __restrict__ __a, size_t __n, size_t __s,
│ │ │ -
280 _Tp* __restrict__ __b)
│ │ │ -
281 {
│ │ │ -
282 for (size_t __i = 0; __i < __n; ++__i, ++__b, __a += __s)
│ │ │ -
283 *__b = *__a;
│ │ │ -
284 }
│ │ │ +
186 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
187 queue(_Sequence&& __c, const _Alloc& __a)
│ │ │ +
188 : c(std::move(__c), __a) { }
│ │ │ +
189
│ │ │ +
190 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
191 queue(const queue& __q, const _Alloc& __a)
│ │ │ +
192 : c(__q.c, __a) { }
│ │ │ +
193
│ │ │ +
194 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
195 queue(queue&& __q, const _Alloc& __a)
│ │ │ +
196 : c(std::move(__q.c), __a) { }
│ │ │ +
197#endif
│ │ │ +
198
│ │ │ +
199#ifdef __glibcxx_adaptor_iterator_pair_constructor // C++ >= 23 && HOSTED
│ │ │ +
200 template<typename _InputIterator,
│ │ │ +
201 typename = _RequireInputIter<_InputIterator>>
│ │ │ +
202 queue(_InputIterator __first, _InputIterator __last)
│ │ │ +
203 : c(__first, __last) { }
│ │ │ +
204
│ │ │ +
205 template<typename _InputIterator, typename _Alloc,
│ │ │ +
206 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
207 typename = _Uses<_Alloc>>
│ │ │ +
208 queue(_InputIterator __first, _InputIterator __last, const _Alloc& __a)
│ │ │ +
209 : c(__first, __last, __a) { }
│ │ │ +
210#endif
│ │ │ +
211
│ │ │ +
212 /**
│ │ │ +
213 * Returns true if the %queue is empty.
│ │ │ +
214 */
│ │ │ +
215 _GLIBCXX_NODISCARD bool
│ │ │ +
│ │ │ +
216 empty() const
│ │ │ +
217 { return c.empty(); }
│ │ │ +
│ │ │ +
218
│ │ │ +
219 /** Returns the number of elements in the %queue. */
│ │ │ +
220 _GLIBCXX_NODISCARD
│ │ │ +
221 size_type
│ │ │ +
│ │ │ +
222 size() const
│ │ │ +
223 { return c.size(); }
│ │ │ +
│ │ │ +
224
│ │ │ +
225 /**
│ │ │ +
226 * Returns a read/write reference to the data at the first
│ │ │ +
227 * element of the %queue.
│ │ │ +
228 */
│ │ │ +
229 _GLIBCXX_NODISCARD
│ │ │ +
230 reference
│ │ │ +
│ │ │ + │ │ │ +
232 {
│ │ │ +
233 __glibcxx_requires_nonempty();
│ │ │ +
234 return c.front();
│ │ │ +
235 }
│ │ │ +
│ │ │ +
236
│ │ │ +
237 /**
│ │ │ +
238 * Returns a read-only (constant) reference to the data at the first
│ │ │ +
239 * element of the %queue.
│ │ │ +
240 */
│ │ │ +
241 _GLIBCXX_NODISCARD
│ │ │ +
242 const_reference
│ │ │ +
│ │ │ +
243 front() const
│ │ │ +
244 {
│ │ │ +
245 __glibcxx_requires_nonempty();
│ │ │ +
246 return c.front();
│ │ │ +
247 }
│ │ │ +
│ │ │ +
248
│ │ │ +
249 /**
│ │ │ +
250 * Returns a read/write reference to the data at the last
│ │ │ +
251 * element of the %queue.
│ │ │ +
252 */
│ │ │ +
253 _GLIBCXX_NODISCARD
│ │ │ +
254 reference
│ │ │ +
│ │ │ + │ │ │ +
256 {
│ │ │ +
257 __glibcxx_requires_nonempty();
│ │ │ +
258 return c.back();
│ │ │ +
259 }
│ │ │ +
│ │ │ +
260
│ │ │ +
261 /**
│ │ │ +
262 * Returns a read-only (constant) reference to the data at the last
│ │ │ +
263 * element of the %queue.
│ │ │ +
264 */
│ │ │ +
265 _GLIBCXX_NODISCARD
│ │ │ +
266 const_reference
│ │ │ +
│ │ │ +
267 back() const
│ │ │ +
268 {
│ │ │ +
269 __glibcxx_requires_nonempty();
│ │ │ +
270 return c.back();
│ │ │ +
271 }
│ │ │ +
│ │ │ +
272
│ │ │ +
273 /**
│ │ │ +
274 * @brief Add data to the end of the %queue.
│ │ │ +
275 * @param __x Data to be added.
│ │ │ +
276 *
│ │ │ +
277 * This is a typical %queue operation. The function creates an
│ │ │ +
278 * element at the end of the %queue and assigns the given data
│ │ │ +
279 * to it. The time complexity of the operation depends on the
│ │ │ +
280 * underlying sequence.
│ │ │ +
281 */
│ │ │ +
282 void
│ │ │ +
│ │ │ +
283 push(const value_type& __x)
│ │ │ +
284 { c.push_back(__x); }
│ │ │ +
│ │ │
285
│ │ │ -
286 // Copy a plain array __a[<__n>] into a strided array __b[<__n : __s>]
│ │ │ -
287 template<typename _Tp>
│ │ │ -
288 inline void
│ │ │ -
289 __valarray_copy(const _Tp* __restrict__ __a, _Tp* __restrict__ __b,
│ │ │ -
290 size_t __n, size_t __s)
│ │ │ -
291 {
│ │ │ -
292 for (size_t __i = 0; __i < __n; ++__i, ++__a, __b += __s)
│ │ │ -
293 *__b = *__a;
│ │ │ -
294 }
│ │ │ -
295
│ │ │ -
296 // Copy strided array __src[<__n : __s1>] into another
│ │ │ -
297 // strided array __dst[< : __s2>]. Their sizes must match.
│ │ │ -
298 template<typename _Tp>
│ │ │ -
299 inline void
│ │ │ -
300 __valarray_copy(const _Tp* __restrict__ __src, size_t __n, size_t __s1,
│ │ │ -
301 _Tp* __restrict__ __dst, size_t __s2)
│ │ │ -
302 {
│ │ │ -
303 for (size_t __i = 0; __i < __n; ++__i)
│ │ │ -
304 __dst[__i * __s2] = __src[__i * __s1];
│ │ │ -
305 }
│ │ │ -
306
│ │ │ -
307 // Copy an indexed array __a[__i[<__n>]] in plain array __b[<__n>]
│ │ │ -
308 template<typename _Tp>
│ │ │ -
309 inline void
│ │ │ -
310 __valarray_copy(const _Tp* __restrict__ __a,
│ │ │ -
311 const size_t* __restrict__ __i,
│ │ │ -
312 _Tp* __restrict__ __b, size_t __n)
│ │ │ -
313 {
│ │ │ -
314 for (size_t __j = 0; __j < __n; ++__j, ++__b, ++__i)
│ │ │ -
315 *__b = __a[*__i];
│ │ │ -
316 }
│ │ │ -
317
│ │ │ -
318 // Copy a plain array __a[<__n>] in an indexed array __b[__i[<__n>]]
│ │ │ -
319 template<typename _Tp>
│ │ │ -
320 inline void
│ │ │ -
321 __valarray_copy(const _Tp* __restrict__ __a, size_t __n,
│ │ │ -
322 _Tp* __restrict__ __b, const size_t* __restrict__ __i)
│ │ │ -
323 {
│ │ │ -
324 for (size_t __j = 0; __j < __n; ++__j, ++__a, ++__i)
│ │ │ -
325 __b[*__i] = *__a;
│ │ │ -
326 }
│ │ │ -
327
│ │ │ -
328 // Copy the __n first elements of an indexed array __src[<__i>] into
│ │ │ -
329 // another indexed array __dst[<__j>].
│ │ │ -
330 template<typename _Tp>
│ │ │ -
331 inline void
│ │ │ -
332 __valarray_copy(const _Tp* __restrict__ __src, size_t __n,
│ │ │ -
333 const size_t* __restrict__ __i,
│ │ │ -
334 _Tp* __restrict__ __dst, const size_t* __restrict__ __j)
│ │ │ -
335 {
│ │ │ -
336 for (size_t __k = 0; __k < __n; ++__k)
│ │ │ -
337 __dst[*__j++] = __src[*__i++];
│ │ │ -
338 }
│ │ │ -
339
│ │ │ -
340 //
│ │ │ -
341 // Compute the sum of elements in range [__f, __l) which must not be empty.
│ │ │ -
342 // This is a naive algorithm. It suffers from cancelling.
│ │ │ -
343 // In the future try to specialize for _Tp = float, double, long double
│ │ │ -
344 // using a more accurate algorithm.
│ │ │ -
345 //
│ │ │ -
346 template<typename _Tp>
│ │ │ -
347 inline _Tp
│ │ │ -
348 __valarray_sum(const _Tp* __f, const _Tp* __l)
│ │ │ -
349 {
│ │ │ -
350 _Tp __r = *__f++;
│ │ │ -
351 while (__f != __l)
│ │ │ -
352 __r += *__f++;
│ │ │ -
353 return __r;
│ │ │ -
354 }
│ │ │ -
355
│ │ │ -
356 // Compute the min/max of an array-expression
│ │ │ -
357 template<typename _Ta>
│ │ │ -
358 inline typename _Ta::value_type
│ │ │ -
359 __valarray_min(const _Ta& __a)
│ │ │ -
360 {
│ │ │ -
361 size_t __s = __a.size();
│ │ │ -
362 typedef typename _Ta::value_type _Value_type;
│ │ │ -
363 _Value_type __r = __s == 0 ? _Value_type() : __a[0];
│ │ │ -
364 for (size_t __i = 1; __i < __s; ++__i)
│ │ │ -
365 {
│ │ │ -
366 _Value_type __t = __a[__i];
│ │ │ -
367 if (__t < __r)
│ │ │ -
368 __r = __t;
│ │ │ -
369 }
│ │ │ -
370 return __r;
│ │ │ -
371 }
│ │ │ -
372
│ │ │ -
373 template<typename _Ta>
│ │ │ -
374 inline typename _Ta::value_type
│ │ │ -
375 __valarray_max(const _Ta& __a)
│ │ │ -
376 {
│ │ │ -
377 size_t __s = __a.size();
│ │ │ -
378 typedef typename _Ta::value_type _Value_type;
│ │ │ -
379 _Value_type __r = __s == 0 ? _Value_type() : __a[0];
│ │ │ -
380 for (size_t __i = 1; __i < __s; ++__i)
│ │ │ -
381 {
│ │ │ -
382 _Value_type __t = __a[__i];
│ │ │ -
383 if (__t > __r)
│ │ │ -
384 __r = __t;
│ │ │ -
385 }
│ │ │ -
386 return __r;
│ │ │ -
387 }
│ │ │ -
388
│ │ │ -
389 //
│ │ │ -
390 // Helper class _Array, first layer of valarray abstraction.
│ │ │ -
391 // All operations on valarray should be forwarded to this class
│ │ │ -
392 // whenever possible. -- gdr
│ │ │ -
393 //
│ │ │ -
394
│ │ │ -
395 template<typename _Tp>
│ │ │ -
396 struct _Array
│ │ │ -
397 {
│ │ │ -
398 explicit _Array(_Tp* const __restrict__);
│ │ │ -
399 explicit _Array(const valarray<_Tp>&);
│ │ │ -
400 _Array(const _Tp* __restrict__, size_t);
│ │ │ -
401
│ │ │ -
402 _Tp* begin() const;
│ │ │ -
403
│ │ │ -
404 _Tp* const __restrict__ _M_data;
│ │ │ -
405 };
│ │ │ -
406
│ │ │ -
407
│ │ │ -
408 // Copy-construct plain array __b[<__n>] from indexed array __a[__i[<__n>]]
│ │ │ -
409 template<typename _Tp>
│ │ │ -
410 inline void
│ │ │ -
411 __valarray_copy_construct(_Array<_Tp> __a, _Array<size_t> __i,
│ │ │ -
412 _Array<_Tp> __b, size_t __n)
│ │ │ -
413 { std::__valarray_copy_construct(__a._M_data, __i._M_data,
│ │ │ -
414 __b._M_data, __n); }
│ │ │ -
415
│ │ │ -
416 // Copy-construct plain array __b[<__n>] from strided array __a[<__n : __s>]
│ │ │ -
417 template<typename _Tp>
│ │ │ -
418 inline void
│ │ │ -
419 __valarray_copy_construct(_Array<_Tp> __a, size_t __n, size_t __s,
│ │ │ -
420 _Array<_Tp> __b)
│ │ │ -
421 { std::__valarray_copy_construct(__a._M_data, __n, __s, __b._M_data); }
│ │ │ -
422
│ │ │ -
423 template<typename _Tp>
│ │ │ -
424 inline void
│ │ │ -
425 __valarray_fill (_Array<_Tp> __a, size_t __n, const _Tp& __t)
│ │ │ -
426 { std::__valarray_fill(__a._M_data, __n, __t); }
│ │ │ +
286#if __cplusplus >= 201103L
│ │ │ +
287 void
│ │ │ +
288 push(value_type&& __x)
│ │ │ +
289 { c.push_back(std::move(__x)); }
│ │ │ +
290
│ │ │ +
291#if __cplusplus > 201402L
│ │ │ +
292 template<typename... _Args>
│ │ │ +
293 decltype(auto)
│ │ │ +
294 emplace(_Args&&... __args)
│ │ │ +
295 { return c.emplace_back(std::forward<_Args>(__args)...); }
│ │ │ +
296#else
│ │ │ +
297 template<typename... _Args>
│ │ │ +
298 void
│ │ │ +
299 emplace(_Args&&... __args)
│ │ │ +
300 { c.emplace_back(std::forward<_Args>(__args)...); }
│ │ │ +
301#endif
│ │ │ +
302#endif
│ │ │ +
303
│ │ │ +
304 /**
│ │ │ +
305 * @brief Removes first element.
│ │ │ +
306 *
│ │ │ +
307 * This is a typical %queue operation. It shrinks the %queue by one.
│ │ │ +
308 * The time complexity of the operation depends on the underlying
│ │ │ +
309 * sequence.
│ │ │ +
310 *
│ │ │ +
311 * Note that no data is returned, and if the first element's
│ │ │ +
312 * data is needed, it should be retrieved before pop() is
│ │ │ +
313 * called.
│ │ │ +
314 */
│ │ │ +
315 void
│ │ │ +
│ │ │ + │ │ │ +
317 {
│ │ │ +
318 __glibcxx_requires_nonempty();
│ │ │ +
319 c.pop_front();
│ │ │ +
320 }
│ │ │ +
│ │ │ +
321
│ │ │ +
322#if __cplusplus >= 201103L
│ │ │ +
323 void
│ │ │ +
324 swap(queue& __q)
│ │ │ +
325#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
│ │ │ + │ │ │ +
327#else
│ │ │ + │ │ │ +
329#endif
│ │ │ +
330 {
│ │ │ +
331 using std::swap;
│ │ │ +
332 swap(c, __q.c);
│ │ │ +
333 }
│ │ │ +
334#endif // __cplusplus >= 201103L
│ │ │ +
335 };
│ │ │ +
│ │ │ +
336
│ │ │ +
337#if __cpp_deduction_guides >= 201606
│ │ │ +
338 template<typename _Container,
│ │ │ +
339 typename = _RequireNotAllocator<_Container>>
│ │ │ +
340 queue(_Container) -> queue<typename _Container::value_type, _Container>;
│ │ │ +
341
│ │ │ +
342 template<typename _Container, typename _Allocator,
│ │ │ +
343 typename = _RequireNotAllocator<_Container>>
│ │ │ +
344 queue(_Container, _Allocator)
│ │ │ +
345 -> queue<typename _Container::value_type, _Container>;
│ │ │ +
346
│ │ │ +
347#ifdef __glibcxx_adaptor_iterator_pair_constructor
│ │ │ +
348 template<typename _InputIterator,
│ │ │ +
349 typename _ValT
│ │ │ +
350 = typename iterator_traits<_InputIterator>::value_type,
│ │ │ +
351 typename = _RequireInputIter<_InputIterator>>
│ │ │ +
352 queue(_InputIterator, _InputIterator) -> queue<_ValT>;
│ │ │ +
353
│ │ │ +
354 template<typename _InputIterator, typename _Allocator,
│ │ │ +
355 typename _ValT
│ │ │ +
356 = typename iterator_traits<_InputIterator>::value_type,
│ │ │ +
357 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
358 typename = _RequireAllocator<_Allocator>>
│ │ │ +
359 queue(_InputIterator, _InputIterator, _Allocator)
│ │ │ +
360 -> queue<_ValT, deque<_ValT, _Allocator>>;
│ │ │ +
361#endif
│ │ │ +
362#endif
│ │ │ +
363
│ │ │ +
364 /**
│ │ │ +
365 * @brief Queue equality comparison.
│ │ │ +
366 * @param __x A %queue.
│ │ │ +
367 * @param __y A %queue of the same type as @a __x.
│ │ │ +
368 * @return True iff the size and elements of the queues are equal.
│ │ │ +
369 *
│ │ │ +
370 * This is an equivalence relation. Complexity and semantics depend on the
│ │ │ +
371 * underlying sequence type, but the expected rules are: this relation is
│ │ │ +
372 * linear in the size of the sequences, and queues are considered equivalent
│ │ │ +
373 * if their sequences compare equal.
│ │ │ +
374 */
│ │ │ +
375 template<typename _Tp, typename _Seq>
│ │ │ +
376 _GLIBCXX_NODISCARD
│ │ │ +
377 inline bool
│ │ │ +
│ │ │ +
378 operator==(const queue<_Tp, _Seq>& __x, const queue<_Tp, _Seq>& __y)
│ │ │ +
379 { return __x.c == __y.c; }
│ │ │ +
│ │ │ +
380
│ │ │ +
381 /**
│ │ │ +
382 * @brief Queue ordering relation.
│ │ │ +
383 * @param __x A %queue.
│ │ │ +
384 * @param __y A %queue of the same type as @a x.
│ │ │ +
385 * @return True iff @a __x is lexicographically less than @a __y.
│ │ │ +
386 *
│ │ │ +
387 * This is an total ordering relation. Complexity and semantics
│ │ │ +
388 * depend on the underlying sequence type, but the expected rules
│ │ │ +
389 * are: this relation is linear in the size of the sequences, the
│ │ │ +
390 * elements must be comparable with @c <, and
│ │ │ +
391 * std::lexicographical_compare() is usually used to make the
│ │ │ +
392 * determination.
│ │ │ +
393 */
│ │ │ +
394 template<typename _Tp, typename _Seq>
│ │ │ +
395 _GLIBCXX_NODISCARD
│ │ │ +
│ │ │ +
396 inline bool
│ │ │ +
397 operator<(const queue<_Tp, _Seq>& __x, const queue<_Tp, _Seq>& __y)
│ │ │ +
398 { return __x.c < __y.c; }
│ │ │ +
│ │ │ +
399
│ │ │ +
400 /// Based on operator==
│ │ │ +
401 template<typename _Tp, typename _Seq>
│ │ │ +
402 _GLIBCXX_NODISCARD
│ │ │ +
403 inline bool
│ │ │ +
│ │ │ +
404 operator!=(const queue<_Tp, _Seq>& __x, const queue<_Tp, _Seq>& __y)
│ │ │ +
405 { return !(__x == __y); }
│ │ │ +
│ │ │ +
406
│ │ │ +
407 /// Based on operator<
│ │ │ +
408 template<typename _Tp, typename _Seq>
│ │ │ +
409 _GLIBCXX_NODISCARD
│ │ │ +
410 inline bool
│ │ │ +
│ │ │ +
411 operator>(const queue<_Tp, _Seq>& __x, const queue<_Tp, _Seq>& __y)
│ │ │ +
412 { return __y < __x; }
│ │ │ +
│ │ │ +
413
│ │ │ +
414 /// Based on operator<
│ │ │ +
415 template<typename _Tp, typename _Seq>
│ │ │ +
416 _GLIBCXX_NODISCARD
│ │ │ +
│ │ │ +
417 inline bool
│ │ │ +
418 operator<=(const queue<_Tp, _Seq>& __x, const queue<_Tp, _Seq>& __y)
│ │ │ +
419 { return !(__y < __x); }
│ │ │ +
│ │ │ +
420
│ │ │ +
421 /// Based on operator<
│ │ │ +
422 template<typename _Tp, typename _Seq>
│ │ │ +
423 _GLIBCXX_NODISCARD
│ │ │ +
424 inline bool
│ │ │ +
│ │ │ +
425 operator>=(const queue<_Tp, _Seq>& __x, const queue<_Tp, _Seq>& __y)
│ │ │ +
426 { return !(__x < __y); }
│ │ │ +
│ │ │
427
│ │ │ -
428 template<typename _Tp>
│ │ │ -
429 inline void
│ │ │ -
430 __valarray_fill(_Array<_Tp> __a, size_t __n, size_t __s, const _Tp& __t)
│ │ │ -
431 { std::__valarray_fill(__a._M_data, __n, __s, __t); }
│ │ │ -
432
│ │ │ -
433 template<typename _Tp>
│ │ │ -
434 inline void
│ │ │ -
435 __valarray_fill(_Array<_Tp> __a, _Array<size_t> __i,
│ │ │ -
436 size_t __n, const _Tp& __t)
│ │ │ -
437 { std::__valarray_fill(__a._M_data, __i._M_data, __n, __t); }
│ │ │ -
438
│ │ │ -
439 // Copy a plain array __a[<__n>] into a play array __b[<>]
│ │ │ -
440 template<typename _Tp>
│ │ │ -
441 inline void
│ │ │ -
442 __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b)
│ │ │ -
443 { std::__valarray_copy(__a._M_data, __n, __b._M_data); }
│ │ │ -
444
│ │ │ -
445 // Copy strided array __a[<__n : __s>] in plain __b[<__n>]
│ │ │ -
446 template<typename _Tp>
│ │ │ -
447 inline void
│ │ │ -
448 __valarray_copy(_Array<_Tp> __a, size_t __n, size_t __s, _Array<_Tp> __b)
│ │ │ -
449 { std::__valarray_copy(__a._M_data, __n, __s, __b._M_data); }
│ │ │ -
450
│ │ │ -
451 // Copy a plain array __a[<__n>] into a strided array __b[<__n : __s>]
│ │ │ -
452 template<typename _Tp>
│ │ │ -
453 inline void
│ │ │ -
454 __valarray_copy(_Array<_Tp> __a, _Array<_Tp> __b, size_t __n, size_t __s)
│ │ │ -
455 { __valarray_copy(__a._M_data, __b._M_data, __n, __s); }
│ │ │ -
456
│ │ │ -
457 // Copy strided array __src[<__n : __s1>] into another
│ │ │ -
458 // strided array __dst[< : __s2>]. Their sizes must match.
│ │ │ -
459 template<typename _Tp>
│ │ │ -
460 inline void
│ │ │ -
461 __valarray_copy(_Array<_Tp> __a, size_t __n, size_t __s1,
│ │ │ -
462 _Array<_Tp> __b, size_t __s2)
│ │ │ -
463 { std::__valarray_copy(__a._M_data, __n, __s1, __b._M_data, __s2); }
│ │ │ -
464
│ │ │ -
465 // Copy an indexed array __a[__i[<__n>]] in plain array __b[<__n>]
│ │ │ -
466 template<typename _Tp>
│ │ │ -
467 inline void
│ │ │ -
468 __valarray_copy(_Array<_Tp> __a, _Array<size_t> __i,
│ │ │ -
469 _Array<_Tp> __b, size_t __n)
│ │ │ -
470 { std::__valarray_copy(__a._M_data, __i._M_data, __b._M_data, __n); }
│ │ │ -
471
│ │ │ -
472 // Copy a plain array __a[<__n>] in an indexed array __b[__i[<__n>]]
│ │ │ -
473 template<typename _Tp>
│ │ │ -
474 inline void
│ │ │ -
475 __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b,
│ │ │ -
476 _Array<size_t> __i)
│ │ │ -
477 { std::__valarray_copy(__a._M_data, __n, __b._M_data, __i._M_data); }
│ │ │ -
478
│ │ │ -
479 // Copy the __n first elements of an indexed array __src[<__i>] into
│ │ │ -
480 // another indexed array __dst[<__j>].
│ │ │ -
481 template<typename _Tp>
│ │ │ -
482 inline void
│ │ │ -
483 __valarray_copy(_Array<_Tp> __src, size_t __n, _Array<size_t> __i,
│ │ │ -
484 _Array<_Tp> __dst, _Array<size_t> __j)
│ │ │ -
485 {
│ │ │ -
486 std::__valarray_copy(__src._M_data, __n, __i._M_data,
│ │ │ -
487 __dst._M_data, __j._M_data);
│ │ │ -
488 }
│ │ │ -
489
│ │ │ -
490 template<typename _Tp>
│ │ │ -
491 inline
│ │ │ -
492 _Array<_Tp>::_Array(_Tp* const __restrict__ __p)
│ │ │ -
493 : _M_data (__p) {}
│ │ │ -
494
│ │ │ -
495 template<typename _Tp>
│ │ │ -
496 inline
│ │ │ -
497 _Array<_Tp>::_Array(const valarray<_Tp>& __v)
│ │ │ -
498 : _M_data (__v._M_data) {}
│ │ │ -
499
│ │ │ -
500 template<typename _Tp>
│ │ │ -
501 inline
│ │ │ -
502 _Array<_Tp>::_Array(const _Tp* __restrict__ __b, size_t __s)
│ │ │ -
503 : _M_data(__valarray_get_storage<_Tp>(__s))
│ │ │ -
504 { std::__valarray_copy_construct(__b, __s, _M_data); }
│ │ │ -
505
│ │ │ -
506 template<typename _Tp>
│ │ │ -
507 inline _Tp*
│ │ │ -
508 _Array<_Tp>::begin () const
│ │ │ -
509 { return _M_data; }
│ │ │ +
428#if __cpp_lib_three_way_comparison
│ │ │ +
429 template<typename _Tp, three_way_comparable _Seq>
│ │ │ +
430 [[nodiscard]]
│ │ │ +
431 inline compare_three_way_result_t<_Seq>
│ │ │ +
432 operator<=>(const queue<_Tp, _Seq>& __x, const queue<_Tp, _Seq>& __y)
│ │ │ +
433 { return __x.c <=> __y.c; }
│ │ │ +
434#endif
│ │ │ +
435
│ │ │ +
436#if __cplusplus >= 201103L
│ │ │ +
437 template<typename _Tp, typename _Seq>
│ │ │ +
438 inline
│ │ │ +
439#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
│ │ │ +
440 // Constrained free swap overload, see p0185r1
│ │ │ +
441 typename enable_if<__is_swappable<_Seq>::value>::type
│ │ │ +
442#else
│ │ │ +
443 void
│ │ │ +
444#endif
│ │ │ +
445 swap(queue<_Tp, _Seq>& __x, queue<_Tp, _Seq>& __y)
│ │ │ +
446 noexcept(noexcept(__x.swap(__y)))
│ │ │ +
447 { __x.swap(__y); }
│ │ │ +
448
│ │ │ +
449 template<typename _Tp, typename _Seq, typename _Alloc>
│ │ │ +
450 struct uses_allocator<queue<_Tp, _Seq>, _Alloc>
│ │ │ +
451 : public uses_allocator<_Seq, _Alloc>::type { };
│ │ │ +
452#endif // __cplusplus >= 201103L
│ │ │ +
453
│ │ │ +
454 /**
│ │ │ +
455 * @brief A standard container automatically sorting its contents.
│ │ │ +
456 *
│ │ │ +
457 * @ingroup sequences
│ │ │ +
458 *
│ │ │ +
459 * @tparam _Tp Type of element.
│ │ │ +
460 * @tparam _Sequence Type of underlying sequence, defaults to vector<_Tp>.
│ │ │ +
461 * @tparam _Compare Comparison function object type, defaults to
│ │ │ +
462 * less<_Sequence::value_type>.
│ │ │ +
463 *
│ │ │ +
464 * This is not a true container, but an @e adaptor. It holds
│ │ │ +
465 * another container, and provides a wrapper interface to that
│ │ │ +
466 * container. The wrapper is what enforces priority-based sorting
│ │ │ +
467 * and %queue behavior. Very few of the standard container/sequence
│ │ │ +
468 * interface requirements are met (e.g., iterators).
│ │ │ +
469 *
│ │ │ +
470 * The second template parameter defines the type of the underlying
│ │ │ +
471 * sequence/container. It defaults to std::vector, but it can be
│ │ │ +
472 * any type that supports @c front(), @c push_back, @c pop_back,
│ │ │ +
473 * and random-access iterators, such as std::deque or an
│ │ │ +
474 * appropriate user-defined type.
│ │ │ +
475 *
│ │ │ +
476 * The third template parameter supplies the means of making
│ │ │ +
477 * priority comparisons. It defaults to @c less<value_type> but
│ │ │ +
478 * can be anything defining a strict weak ordering.
│ │ │ +
479 *
│ │ │ +
480 * Members not found in @a normal containers are @c container_type,
│ │ │ +
481 * which is a typedef for the second Sequence parameter, and @c
│ │ │ +
482 * push, @c pop, and @c top, which are standard %queue operations.
│ │ │ +
483 *
│ │ │ +
484 * @note No equality/comparison operators are provided for
│ │ │ +
485 * %priority_queue.
│ │ │ +
486 *
│ │ │ +
487 * @note Sorting of the elements takes place as they are added to,
│ │ │ +
488 * and removed from, the %priority_queue using the
│ │ │ +
489 * %priority_queue's member functions. If you access the elements
│ │ │ +
490 * by other means, and change their data such that the sorting
│ │ │ +
491 * order would be different, the %priority_queue will not re-sort
│ │ │ +
492 * the elements for you. (How could it know to do so?)
│ │ │ +
493 */
│ │ │ +
494 template<typename _Tp, typename _Sequence = vector<_Tp>,
│ │ │ +
495 typename _Compare = less<typename _Sequence::value_type> >
│ │ │ +
│ │ │ + │ │ │ +
497 {
│ │ │ +
498#ifdef _GLIBCXX_CONCEPT_CHECKS
│ │ │ +
499 // concept requirements
│ │ │ +
500 typedef typename _Sequence::value_type _Sequence_value_type;
│ │ │ +
501# if __cplusplus < 201103L
│ │ │ +
502 __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
│ │ │ +
503# endif
│ │ │ +
504 __glibcxx_class_requires(_Sequence, _SequenceConcept)
│ │ │ +
505 __glibcxx_class_requires(_Sequence, _RandomAccessContainerConcept)
│ │ │ +
506 __glibcxx_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept)
│ │ │ +
507 __glibcxx_class_requires4(_Compare, bool, _Tp, _Tp,
│ │ │ +
508 _BinaryFunctionConcept)
│ │ │ +
509#endif
│ │ │
510
│ │ │ -
511#define _DEFINE_ARRAY_FUNCTION(_Op, _Name) \
│ │ │ -
512 template<typename _Tp> \
│ │ │ -
513 inline void \
│ │ │ -
514 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, const _Tp& __t) \
│ │ │ -
515 { \
│ │ │ -
516 for (_Tp* __p = __a._M_data; __p < __a._M_data + __n; ++__p) \
│ │ │ -
517 *__p _Op##= __t; \
│ │ │ -
518 } \
│ │ │ -
519 \
│ │ │ -
520 template<typename _Tp> \
│ │ │ -
521 inline void \
│ │ │ -
522 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b) \
│ │ │ -
523 { \
│ │ │ -
524 _Tp* __p = __a._M_data; \
│ │ │ -
525 for (_Tp* __q = __b._M_data; __q < __b._M_data + __n; ++__p, ++__q) \
│ │ │ -
526 *__p _Op##= *__q; \
│ │ │ -
527 } \
│ │ │ -
528 \
│ │ │ -
529 template<typename _Tp, class _Dom> \
│ │ │ -
530 void \
│ │ │ -
531 _Array_augmented_##_Name(_Array<_Tp> __a, \
│ │ │ -
532 const _Expr<_Dom, _Tp>& __e, size_t __n) \
│ │ │ -
533 { \
│ │ │ -
534 _Tp* __p(__a._M_data); \
│ │ │ -
535 for (size_t __i = 0; __i < __n; ++__i, ++__p) \
│ │ │ -
536 *__p _Op##= __e[__i]; \
│ │ │ -
537 } \
│ │ │ -
538 \
│ │ │ -
539 template<typename _Tp> \
│ │ │ -
540 inline void \
│ │ │ -
541 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, size_t __s, \
│ │ │ -
542 _Array<_Tp> __b) \
│ │ │ -
543 { \
│ │ │ -
544 _Tp* __q(__b._M_data); \
│ │ │ -
545 for (_Tp* __p = __a._M_data; __p < __a._M_data + __s * __n; \
│ │ │ -
546 __p += __s, ++__q) \
│ │ │ -
547 *__p _Op##= *__q; \
│ │ │ -
548 } \
│ │ │ -
549 \
│ │ │ -
550 template<typename _Tp> \
│ │ │ -
551 inline void \
│ │ │ -
552 _Array_augmented_##_Name(_Array<_Tp> __a, _Array<_Tp> __b, \
│ │ │ -
553 size_t __n, size_t __s) \
│ │ │ -
554 { \
│ │ │ -
555 _Tp* __q(__b._M_data); \
│ │ │ -
556 for (_Tp* __p = __a._M_data; __p < __a._M_data + __n; \
│ │ │ -
557 ++__p, __q += __s) \
│ │ │ -
558 *__p _Op##= *__q; \
│ │ │ -
559 } \
│ │ │ -
560 \
│ │ │ -
561 template<typename _Tp, class _Dom> \
│ │ │ -
562 void \
│ │ │ -
563 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __s, \
│ │ │ -
564 const _Expr<_Dom, _Tp>& __e, size_t __n) \
│ │ │ -
565 { \
│ │ │ -
566 _Tp* __p(__a._M_data); \
│ │ │ -
567 for (size_t __i = 0; __i < __n; ++__i, __p += __s) \
│ │ │ -
568 *__p _Op##= __e[__i]; \
│ │ │ -
569 } \
│ │ │ -
570 \
│ │ │ -
571 template<typename _Tp> \
│ │ │ -
572 inline void \
│ │ │ -
573 _Array_augmented_##_Name(_Array<_Tp> __a, _Array<size_t> __i, \
│ │ │ -
574 _Array<_Tp> __b, size_t __n) \
│ │ │ -
575 { \
│ │ │ -
576 _Tp* __q(__b._M_data); \
│ │ │ -
577 for (size_t* __j = __i._M_data; __j < __i._M_data + __n; \
│ │ │ -
578 ++__j, ++__q) \
│ │ │ -
579 __a._M_data[*__j] _Op##= *__q; \
│ │ │ -
580 } \
│ │ │ -
581 \
│ │ │ -
582 template<typename _Tp> \
│ │ │ -
583 inline void \
│ │ │ -
584 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, \
│ │ │ -
585 _Array<_Tp> __b, _Array<size_t> __i) \
│ │ │ -
586 { \
│ │ │ -
587 _Tp* __p(__a._M_data); \
│ │ │ -
588 for (size_t* __j = __i._M_data; __j<__i._M_data + __n; \
│ │ │ -
589 ++__j, ++__p) \
│ │ │ -
590 *__p _Op##= __b._M_data[*__j]; \
│ │ │ -
591 } \
│ │ │ -
592 \
│ │ │ -
593 template<typename _Tp, class _Dom> \
│ │ │ -
594 void \
│ │ │ -
595 _Array_augmented_##_Name(_Array<_Tp> __a, _Array<size_t> __i, \
│ │ │ -
596 const _Expr<_Dom, _Tp>& __e, size_t __n) \
│ │ │ -
597 { \
│ │ │ -
598 size_t* __j(__i._M_data); \
│ │ │ -
599 for (size_t __k = 0; __k<__n; ++__k, ++__j) \
│ │ │ -
600 __a._M_data[*__j] _Op##= __e[__k]; \
│ │ │ -
601 } \
│ │ │ -
602 \
│ │ │ -
603 template<typename _Tp> \
│ │ │ -
604 void \
│ │ │ -
605 _Array_augmented_##_Name(_Array<_Tp> __a, _Array<bool> __m, \
│ │ │ -
606 _Array<_Tp> __b, size_t __n) \
│ │ │ -
607 { \
│ │ │ -
608 bool* __ok(__m._M_data); \
│ │ │ -
609 _Tp* __p(__a._M_data); \
│ │ │ -
610 for (_Tp* __q = __b._M_data; __q < __b._M_data + __n; \
│ │ │ -
611 ++__q, ++__ok, ++__p) \
│ │ │ -
612 { \
│ │ │ -
613 while (! *__ok) \
│ │ │ -
614 { \
│ │ │ -
615 ++__ok; \
│ │ │ -
616 ++__p; \
│ │ │ -
617 } \
│ │ │ -
618 *__p _Op##= *__q; \
│ │ │ -
619 } \
│ │ │ -
620 } \
│ │ │ -
621 \
│ │ │ -
622 template<typename _Tp> \
│ │ │ -
623 void \
│ │ │ -
624 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, \
│ │ │ -
625 _Array<_Tp> __b, _Array<bool> __m) \
│ │ │ -
626 { \
│ │ │ -
627 bool* __ok(__m._M_data); \
│ │ │ -
628 _Tp* __q(__b._M_data); \
│ │ │ -
629 for (_Tp* __p = __a._M_data; __p < __a._M_data + __n; \
│ │ │ -
630 ++__p, ++__ok, ++__q) \
│ │ │ -
631 { \
│ │ │ -
632 while (! *__ok) \
│ │ │ -
633 { \
│ │ │ -
634 ++__ok; \
│ │ │ -
635 ++__q; \
│ │ │ -
636 } \
│ │ │ -
637 *__p _Op##= *__q; \
│ │ │ -
638 } \
│ │ │ -
639 } \
│ │ │ -
640 \
│ │ │ -
641 template<typename _Tp, class _Dom> \
│ │ │ -
642 void \
│ │ │ -
643 _Array_augmented_##_Name(_Array<_Tp> __a, _Array<bool> __m, \
│ │ │ -
644 const _Expr<_Dom, _Tp>& __e, size_t __n) \
│ │ │ -
645 { \
│ │ │ -
646 bool* __ok(__m._M_data); \
│ │ │ -
647 _Tp* __p(__a._M_data); \
│ │ │ -
648 for (size_t __i = 0; __i < __n; ++__i, ++__ok, ++__p) \
│ │ │ -
649 { \
│ │ │ -
650 while (! *__ok) \
│ │ │ -
651 { \
│ │ │ -
652 ++__ok; \
│ │ │ -
653 ++__p; \
│ │ │ -
654 } \
│ │ │ -
655 *__p _Op##= __e[__i]; \
│ │ │ -
656 } \
│ │ │ -
657 }
│ │ │ -
658
│ │ │ -
659 _DEFINE_ARRAY_FUNCTION(+, __plus)
│ │ │ -
660 _DEFINE_ARRAY_FUNCTION(-, __minus)
│ │ │ -
661 _DEFINE_ARRAY_FUNCTION(*, __multiplies)
│ │ │ -
662 _DEFINE_ARRAY_FUNCTION(/, __divides)
│ │ │ -
663 _DEFINE_ARRAY_FUNCTION(%, __modulus)
│ │ │ -
664 _DEFINE_ARRAY_FUNCTION(^, __bitwise_xor)
│ │ │ -
665 _DEFINE_ARRAY_FUNCTION(|, __bitwise_or)
│ │ │ -
666 _DEFINE_ARRAY_FUNCTION(&, __bitwise_and)
│ │ │ -
667 _DEFINE_ARRAY_FUNCTION(<<, __shift_left)
│ │ │ -
668 _DEFINE_ARRAY_FUNCTION(>>, __shift_right)
│ │ │ -
669
│ │ │ -
670#undef _DEFINE_ARRAY_FUNCTION
│ │ │ -
671
│ │ │ -
672_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
673} // namespace
│ │ │ -
674
│ │ │ -
675# include <bits/valarray_array.tcc>
│ │ │ -
676
│ │ │ -
677#endif /* _ARRAY_H */
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
_Tp * begin(valarray< _Tp > &__va) noexcept
Return an iterator pointing to the first element of the valarray.
Definition valarray:1227
│ │ │ +
511#if __cplusplus >= 201103L
│ │ │ +
512 template<typename _Alloc>
│ │ │ +
513 using _Uses = typename
│ │ │ + │ │ │ +
515
│ │ │ +
516#if __cplusplus >= 201703L
│ │ │ +
517 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
518 // 2566. Requirements on the first template parameter of container
│ │ │ +
519 // adaptors
│ │ │ + │ │ │ +
521 "value_type must be the same as the underlying container");
│ │ │ +
522#endif // C++17
│ │ │ +
523#endif // C++11
│ │ │ +
524
│ │ │ +
525 public:
│ │ │ +
526 typedef typename _Sequence::value_type value_type;
│ │ │ +
527 typedef typename _Sequence::reference reference;
│ │ │ +
528 typedef typename _Sequence::const_reference const_reference;
│ │ │ +
529 typedef typename _Sequence::size_type size_type;
│ │ │ +
530 typedef _Sequence container_type;
│ │ │ +
531 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
532 // DR 2684. priority_queue lacking comparator typedef
│ │ │ +
533 typedef _Compare value_compare;
│ │ │ +
534
│ │ │ +
535 protected:
│ │ │ +
536 // See queue::c for notes on these names.
│ │ │ +
537 _Sequence c;
│ │ │ +
538 _Compare comp;
│ │ │ +
539
│ │ │ +
540 public:
│ │ │ +
541 /**
│ │ │ +
542 * @brief Default constructor creates no elements.
│ │ │ +
543 */
│ │ │ +
544#if __cplusplus < 201103L
│ │ │ +
545 explicit
│ │ │ +
546 priority_queue(const _Compare& __x = _Compare(),
│ │ │ +
547 const _Sequence& __s = _Sequence())
│ │ │ +
548 : c(__s), comp(__x)
│ │ │ +
549 { std::make_heap(c.begin(), c.end(), comp); }
│ │ │ +
550#else
│ │ │ +
551 template<typename _Seq = _Sequence, typename _Requires = typename
│ │ │ + │ │ │ +
553 is_default_constructible<_Seq>>::value>::type>
│ │ │ +
│ │ │ + │ │ │ +
555 : c(), comp() { }
│ │ │ +
│ │ │ +
556
│ │ │ +
557 explicit
│ │ │ +
558 priority_queue(const _Compare& __x, const _Sequence& __s)
│ │ │ +
559 : c(__s), comp(__x)
│ │ │ +
560 { std::make_heap(c.begin(), c.end(), comp); }
│ │ │ +
561
│ │ │ +
562 explicit
│ │ │ +
563 priority_queue(const _Compare& __x, _Sequence&& __s = _Sequence())
│ │ │ +
564 : c(std::move(__s)), comp(__x)
│ │ │ +
565 { std::make_heap(c.begin(), c.end(), comp); }
│ │ │ +
566
│ │ │ +
567 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
568 explicit
│ │ │ +
569 priority_queue(const _Alloc& __a)
│ │ │ +
570 : c(__a), comp() { }
│ │ │ +
571
│ │ │ +
572 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
573 priority_queue(const _Compare& __x, const _Alloc& __a)
│ │ │ +
574 : c(__a), comp(__x) { }
│ │ │ +
575
│ │ │ +
576 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
577 // 2537. Constructors [...] taking allocators should call make_heap
│ │ │ +
578 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
579 priority_queue(const _Compare& __x, const _Sequence& __c,
│ │ │ +
580 const _Alloc& __a)
│ │ │ +
581 : c(__c, __a), comp(__x)
│ │ │ +
582 { std::make_heap(c.begin(), c.end(), comp); }
│ │ │ +
583
│ │ │ +
584 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
585 priority_queue(const _Compare& __x, _Sequence&& __c, const _Alloc& __a)
│ │ │ +
586 : c(std::move(__c), __a), comp(__x)
│ │ │ +
587 { std::make_heap(c.begin(), c.end(), comp); }
│ │ │ +
588
│ │ │ +
589 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
590 priority_queue(const priority_queue& __q, const _Alloc& __a)
│ │ │ +
591 : c(__q.c, __a), comp(__q.comp) { }
│ │ │ +
592
│ │ │ +
593 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
594 priority_queue(priority_queue&& __q, const _Alloc& __a)
│ │ │ +
595 : c(std::move(__q.c), __a), comp(std::move(__q.comp)) { }
│ │ │ +
596#endif
│ │ │ +
597
│ │ │ +
598 /**
│ │ │ +
599 * @brief Builds a %queue from a range.
│ │ │ +
600 * @param __first An input iterator.
│ │ │ +
601 * @param __last An input iterator.
│ │ │ +
602 * @param __x A comparison functor describing a strict weak ordering.
│ │ │ +
603 * @param __s An initial sequence with which to start.
│ │ │ +
604 *
│ │ │ +
605 * Begins by copying @a __s, inserting a copy of the elements
│ │ │ +
606 * from @a [first,last) into the copy of @a __s, then ordering
│ │ │ +
607 * the copy according to @a __x.
│ │ │ +
608 *
│ │ │ +
609 * For more information on function objects, see the
│ │ │ +
610 * documentation on @link functors functor base
│ │ │ +
611 * classes@endlink.
│ │ │ +
612 */
│ │ │ +
613#if __cplusplus < 201103L
│ │ │ +
614 template<typename _InputIterator>
│ │ │ +
615 priority_queue(_InputIterator __first, _InputIterator __last,
│ │ │ +
616 const _Compare& __x = _Compare(),
│ │ │ +
617 const _Sequence& __s = _Sequence())
│ │ │ +
618 : c(__s), comp(__x)
│ │ │ +
619 {
│ │ │ +
620 __glibcxx_requires_valid_range(__first, __last);
│ │ │ +
621 c.insert(c.end(), __first, __last);
│ │ │ +
622 std::make_heap(c.begin(), c.end(), comp);
│ │ │ +
623 }
│ │ │ +
624#else
│ │ │ +
625 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
626 // 3529. priority_queue(first, last) should construct c with (first, last)
│ │ │ +
627 template<typename _InputIterator,
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
630 const _Compare& __x = _Compare())
│ │ │ +
631 : c(__first, __last), comp(__x)
│ │ │ +
632 { std::make_heap(c.begin(), c.end(), comp); }
│ │ │ +
│ │ │ +
633
│ │ │ +
634 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
635 // 3522. Missing requirement on InputIterator template parameter
│ │ │ +
636 template<typename _InputIterator,
│ │ │ + │ │ │ + │ │ │ +
639 const _Compare& __x, const _Sequence& __s)
│ │ │ +
640 : c(__s), comp(__x)
│ │ │ +
641 {
│ │ │ +
642 __glibcxx_requires_valid_range(__first, __last);
│ │ │ +
643 c.insert(c.end(), __first, __last);
│ │ │ +
644 std::make_heap(c.begin(), c.end(), comp);
│ │ │ +
645 }
│ │ │ +
646
│ │ │ +
647 template<typename _InputIterator,
│ │ │ + │ │ │ +
649 priority_queue(_InputIterator __first, _InputIterator __last,
│ │ │ +
650 const _Compare& __x, _Sequence&& __s)
│ │ │ +
651 : c(std::move(__s)), comp(__x)
│ │ │ +
652 {
│ │ │ +
653 __glibcxx_requires_valid_range(__first, __last);
│ │ │ +
654 c.insert(c.end(), __first, __last);
│ │ │ +
655 std::make_heap(c.begin(), c.end(), comp);
│ │ │ +
656 }
│ │ │ +
657
│ │ │ +
658 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
659 // 3506. Missing allocator-extended constructors for priority_queue
│ │ │ +
660 template<typename _InputIterator, typename _Alloc,
│ │ │ + │ │ │ +
662 typename _Requires = _Uses<_Alloc>>
│ │ │ +
663 priority_queue(_InputIterator __first, _InputIterator __last,
│ │ │ +
664 const _Alloc& __alloc)
│ │ │ +
665 : c(__first, __last, __alloc), comp()
│ │ │ +
666 { std::make_heap(c.begin(), c.end(), comp); }
│ │ │ +
667
│ │ │ +
668 template<typename _InputIterator, typename _Alloc,
│ │ │ + │ │ │ +
670 typename _Requires = _Uses<_Alloc>>
│ │ │ +
671 priority_queue(_InputIterator __first, _InputIterator __last,
│ │ │ +
672 const _Compare& __x, const _Alloc& __alloc)
│ │ │ +
673 : c(__first, __last, __alloc), comp(__x)
│ │ │ +
674 { std::make_heap(c.begin(), c.end(), comp); }
│ │ │ +
675
│ │ │ +
676 template<typename _InputIterator, typename _Alloc,
│ │ │ + │ │ │ +
678 typename _Requires = _Uses<_Alloc>>
│ │ │ +
679 priority_queue(_InputIterator __first, _InputIterator __last,
│ │ │ +
680 const _Compare& __x, const _Sequence& __s,
│ │ │ +
681 const _Alloc& __alloc)
│ │ │ +
682 : c(__s, __alloc), comp(__x)
│ │ │ +
683 {
│ │ │ +
684 __glibcxx_requires_valid_range(__first, __last);
│ │ │ +
685 c.insert(c.end(), __first, __last);
│ │ │ +
686 std::make_heap(c.begin(), c.end(), comp);
│ │ │ +
687 }
│ │ │ +
688
│ │ │ +
689 template<typename _InputIterator, typename _Alloc,
│ │ │ +
690 typename _Requires = _Uses<_Alloc>>
│ │ │ +
691 priority_queue(_InputIterator __first, _InputIterator __last,
│ │ │ +
692 const _Compare& __x, _Sequence&& __s,
│ │ │ +
693 const _Alloc& __alloc)
│ │ │ +
694 : c(std::move(__s), __alloc), 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#endif
│ │ │ +
701
│ │ │ +
702 /**
│ │ │ +
703 * Returns true if the %queue is empty.
│ │ │ +
704 */
│ │ │ +
705 _GLIBCXX_NODISCARD bool
│ │ │ +
│ │ │ +
706 empty() const
│ │ │ +
707 { return c.empty(); }
│ │ │ +
│ │ │ +
708
│ │ │ +
709 /** Returns the number of elements in the %queue. */
│ │ │ +
710 _GLIBCXX_NODISCARD
│ │ │ +
711 size_type
│ │ │ +
│ │ │ +
712 size() const
│ │ │ +
713 { return c.size(); }
│ │ │ +
│ │ │ +
714
│ │ │ +
715 /**
│ │ │ +
716 * Returns a read-only (constant) reference to the data at the first
│ │ │ +
717 * element of the %queue.
│ │ │ +
718 */
│ │ │ +
719 _GLIBCXX_NODISCARD
│ │ │ +
720 const_reference
│ │ │ +
│ │ │ +
721 top() const
│ │ │ +
722 {
│ │ │ +
723 __glibcxx_requires_nonempty();
│ │ │ +
724 return c.front();
│ │ │ +
725 }
│ │ │ +
│ │ │ +
726
│ │ │ +
727 /**
│ │ │ +
728 * @brief Add data to the %queue.
│ │ │ +
729 * @param __x Data to be added.
│ │ │ +
730 *
│ │ │ +
731 * This is a typical %queue operation.
│ │ │ +
732 * The time complexity of the operation depends on the underlying
│ │ │ +
733 * sequence.
│ │ │ +
734 */
│ │ │ +
735 void
│ │ │ +
│ │ │ +
736 push(const value_type& __x)
│ │ │ +
737 {
│ │ │ +
738 c.push_back(__x);
│ │ │ +
739 std::push_heap(c.begin(), c.end(), comp);
│ │ │ +
740 }
│ │ │ +
│ │ │ +
741
│ │ │ +
742#if __cplusplus >= 201103L
│ │ │ +
743 void
│ │ │ +
744 push(value_type&& __x)
│ │ │ +
745 {
│ │ │ +
746 c.push_back(std::move(__x));
│ │ │ +
747 std::push_heap(c.begin(), c.end(), comp);
│ │ │ +
748 }
│ │ │ +
749
│ │ │ +
750 template<typename... _Args>
│ │ │ +
751 void
│ │ │ +
752 emplace(_Args&&... __args)
│ │ │ +
753 {
│ │ │ +
754 c.emplace_back(std::forward<_Args>(__args)...);
│ │ │ +
755 std::push_heap(c.begin(), c.end(), comp);
│ │ │ +
756 }
│ │ │ +
757#endif
│ │ │ +
758
│ │ │ +
759 /**
│ │ │ +
760 * @brief Removes first element.
│ │ │ +
761 *
│ │ │ +
762 * This is a typical %queue operation. It shrinks the %queue
│ │ │ +
763 * by one. The time complexity of the operation depends on the
│ │ │ +
764 * underlying sequence.
│ │ │ +
765 *
│ │ │ +
766 * Note that no data is returned, and if the first element's
│ │ │ +
767 * data is needed, it should be retrieved before pop() is
│ │ │ +
768 * called.
│ │ │ +
769 */
│ │ │ +
770 void
│ │ │ +
│ │ │ + │ │ │ +
772 {
│ │ │ +
773 __glibcxx_requires_nonempty();
│ │ │ +
774 std::pop_heap(c.begin(), c.end(), comp);
│ │ │ +
775 c.pop_back();
│ │ │ +
776 }
│ │ │ +
│ │ │ +
777
│ │ │ +
778#if __cplusplus >= 201103L
│ │ │ +
779 void
│ │ │ +
780 swap(priority_queue& __pq)
│ │ │ +
781 noexcept(__and_<
│ │ │ +
782#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
│ │ │ + │ │ │ +
784#else
│ │ │ + │ │ │ +
786#endif
│ │ │ + │ │ │ +
788 >::value)
│ │ │ +
789 {
│ │ │ +
790 using std::swap;
│ │ │ +
791 swap(c, __pq.c);
│ │ │ +
792 swap(comp, __pq.comp);
│ │ │ +
793 }
│ │ │ +
794#endif // __cplusplus >= 201103L
│ │ │ +
795 };
│ │ │ +
│ │ │ +
796
│ │ │ +
797#if __cpp_deduction_guides >= 201606
│ │ │ +
798 template<typename _Compare, typename _Container,
│ │ │ +
799 typename = _RequireNotAllocator<_Compare>,
│ │ │ +
800 typename = _RequireNotAllocator<_Container>>
│ │ │ +
801 priority_queue(_Compare, _Container)
│ │ │ +
802 -> priority_queue<typename _Container::value_type, _Container, _Compare>;
│ │ │ +
803
│ │ │ +
804 template<typename _InputIterator, typename _ValT
│ │ │ +
805 = typename iterator_traits<_InputIterator>::value_type,
│ │ │ +
806 typename _Compare = less<_ValT>,
│ │ │ +
807 typename _Container = vector<_ValT>,
│ │ │ +
808 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
809 typename = _RequireNotAllocator<_Compare>,
│ │ │ +
810 typename = _RequireNotAllocator<_Container>>
│ │ │ +
811 priority_queue(_InputIterator, _InputIterator, _Compare = _Compare(),
│ │ │ +
812 _Container = _Container())
│ │ │ +
813 -> priority_queue<_ValT, _Container, _Compare>;
│ │ │ +
814
│ │ │ +
815 template<typename _Compare, typename _Container, typename _Allocator,
│ │ │ +
816 typename = _RequireNotAllocator<_Compare>,
│ │ │ +
817 typename = _RequireNotAllocator<_Container>>
│ │ │ +
818 priority_queue(_Compare, _Container, _Allocator)
│ │ │ +
819 -> priority_queue<typename _Container::value_type, _Container, _Compare>;
│ │ │ +
820#endif
│ │ │ +
821
│ │ │ +
822 // No equality/comparison operators are provided for priority_queue.
│ │ │ +
823
│ │ │ +
824#if __cplusplus >= 201103L
│ │ │ +
825 template<typename _Tp, typename _Sequence, typename _Compare>
│ │ │ +
826 inline
│ │ │ +
827#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
│ │ │ +
828 // Constrained free swap overload, see p0185r1
│ │ │ +
829 typename enable_if<__and_<__is_swappable<_Sequence>,
│ │ │ +
830 __is_swappable<_Compare>>::value>::type
│ │ │ +
831#else
│ │ │ +
832 void
│ │ │ +
833#endif
│ │ │ +
834 swap(priority_queue<_Tp, _Sequence, _Compare>& __x,
│ │ │ +
835 priority_queue<_Tp, _Sequence, _Compare>& __y)
│ │ │ +
836 noexcept(noexcept(__x.swap(__y)))
│ │ │ +
837 { __x.swap(__y); }
│ │ │ +
838
│ │ │ +
839 template<typename _Tp, typename _Sequence, typename _Compare,
│ │ │ +
840 typename _Alloc>
│ │ │ +
841 struct uses_allocator<priority_queue<_Tp, _Sequence, _Compare>, _Alloc>
│ │ │ +
842 : public uses_allocator<_Sequence, _Alloc>::type { };
│ │ │ +
843#endif // __cplusplus >= 201103L
│ │ │ +
844
│ │ │ +
845_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
846} // namespace
│ │ │ +
847
│ │ │ +
848#endif /* _STL_QUEUE_H */
│ │ │ + │ │ │ + │ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ - │ │ │ + │ │ │ +
A standard container giving FIFO behavior.
Definition stl_queue.h:97
│ │ │ +
void push(const value_type &__x)
Add data to the end of the queue.
Definition stl_queue.h:283
│ │ │ +
_Sequence c
c is the underlying container.
Definition stl_queue.h:153
│ │ │ +
size_type size() const
Definition stl_queue.h:222
│ │ │ +
reference front()
Definition stl_queue.h:231
│ │ │ +
const_reference back() const
Definition stl_queue.h:267
│ │ │ +
void pop()
Removes first element.
Definition stl_queue.h:316
│ │ │ +
queue()
Default constructor creates no elements.
Definition stl_queue.h:166
│ │ │ +
const_reference front() const
Definition stl_queue.h:243
│ │ │ +
bool empty() const
Definition stl_queue.h:216
│ │ │ +
reference back()
Definition stl_queue.h:255
│ │ │ +
A standard container automatically sorting its contents.
Definition stl_queue.h:497
│ │ │ +
size_type size() const
Definition stl_queue.h:712
│ │ │ +
bool empty() const
Definition stl_queue.h:706
│ │ │ +
void pop()
Removes first element.
Definition stl_queue.h:771
│ │ │ +
const_reference top() const
Definition stl_queue.h:721
│ │ │ +
priority_queue(_InputIterator __first, _InputIterator __last, const _Compare &__x=_Compare())
Builds a queue from a range.
Definition stl_queue.h:629
│ │ │ +
void push(const value_type &__x)
Add data to the queue.
Definition stl_queue.h:736
│ │ │ +
priority_queue()
Default constructor creates no elements.
Definition stl_queue.h:554
│ │ │ + │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── 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-2024 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2001-2024 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,675 +21,913 @@ │ │ │ │ 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#pragma GCC system_header │ │ │ │ -36 │ │ │ │ -37#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ -38#include <_b_i_t_s_/_c_p_p___t_y_p_e___t_r_a_i_t_s_._h> │ │ │ │ -39#include <_c_s_t_d_l_i_b> │ │ │ │ -40#include <_n_e_w> │ │ │ │ -41 │ │ │ │ -42namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -43{ │ │ │ │ -44_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -45 │ │ │ │ -46 // │ │ │ │ -47 // Helper functions on raw pointers │ │ │ │ -48 // │ │ │ │ -49 │ │ │ │ -50 // We get memory the old fashioned way │ │ │ │ -51 template │ │ │ │ -52 _Tp* │ │ │ │ -53 __valarray_get_storage(size_t) __attribute__((__malloc__)); │ │ │ │ -54 │ │ │ │ -55 template │ │ │ │ -56 inline _Tp* │ │ │ │ -57 __valarray_get_storage(size_t __n) │ │ │ │ -58 { return static_cast<_Tp*>(operator new(__n * sizeof(_Tp))); } │ │ │ │ -59 │ │ │ │ -60 // Return memory to the system │ │ │ │ -61 inline void │ │ │ │ -62 __valarray_release_memory(void* __p) │ │ │ │ -63 { operator delete(__p); } │ │ │ │ +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 │ │ │ │ -65 // Turn a raw-memory into an array of _Tp filled with _Tp() │ │ │ │ -66 // This is required in 'valarray v(n);' │ │ │ │ -67 template │ │ │ │ -68 struct _Array_default_ctor │ │ │ │ -69 { │ │ │ │ -70 // Please note that this isn't exception safe. But │ │ │ │ -71 // valarrays aren't required to be exception safe. │ │ │ │ -72 inline static void │ │ │ │ -73 _S_do_it(_Tp* __b, _Tp* __e) │ │ │ │ -74 { │ │ │ │ -75 while (__b != __e) │ │ │ │ -76 new(__b++) _Tp(); │ │ │ │ -77 } │ │ │ │ -78 }; │ │ │ │ -79 │ │ │ │ -80 template │ │ │ │ -81 struct _Array_default_ctor<_Tp, true> │ │ │ │ -82 { │ │ │ │ -83 // For fundamental types, it suffices to say 'memset()' │ │ │ │ -84 inline static void │ │ │ │ -85 _S_do_it(_Tp* __b, _Tp* __e) │ │ │ │ -86 { __builtin_memset(__b, 0, (__e - __b) * sizeof(_Tp)); } │ │ │ │ -87 }; │ │ │ │ -88 │ │ │ │ -89 template │ │ │ │ -90 inline void │ │ │ │ -91 __valarray_default_construct(_Tp* __b, _Tp* __e) │ │ │ │ -92 { │ │ │ │ -93 _Array_default_ctor<_Tp, __is_scalar<_Tp>::__value>::_S_do_it(__b, __e); │ │ │ │ -94 } │ │ │ │ -95 │ │ │ │ -96 // Turn a raw-memory into an array of _Tp filled with __t │ │ │ │ -97 // This is the required in valarray v(n, t). Also │ │ │ │ -98 // used in valarray<>::resize(). │ │ │ │ -99 template │ │ │ │ -100 struct _Array_init_ctor │ │ │ │ -101 { │ │ │ │ -102 // Please note that this isn't exception safe. But │ │ │ │ -103 // valarrays aren't required to be exception safe. │ │ │ │ -104 inline static void │ │ │ │ -105 _S_do_it(_Tp* __b, _Tp* __e, const _Tp __t) │ │ │ │ -106 { │ │ │ │ -107 while (__b != __e) │ │ │ │ -108 new(__b++) _Tp(__t); │ │ │ │ -109 } │ │ │ │ -110 }; │ │ │ │ -111 │ │ │ │ -112 template │ │ │ │ -113 struct _Array_init_ctor<_Tp, true> │ │ │ │ -114 { │ │ │ │ -115 inline static void │ │ │ │ -116 _S_do_it(_Tp* __b, _Tp* __e, const _Tp __t) │ │ │ │ -117 { │ │ │ │ -118 while (__b != __e) │ │ │ │ -119 *__b++ = __t; │ │ │ │ -120 } │ │ │ │ -121 }; │ │ │ │ +65namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +66{ │ │ │ │ +67_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +68 │ │ │ │ +69 /** │ │ │ │ +70 * @brief A standard container giving FIFO behavior. │ │ │ │ +71 * │ │ │ │ +72 * @ingroup sequences │ │ │ │ +73 * │ │ │ │ +74 * @tparam _Tp Type of element. │ │ │ │ +75 * @tparam _Sequence Type of underlying sequence, defaults to deque<_Tp>. │ │ │ │ +76 * │ │ │ │ +77 * Meets many of the requirements of a │ │ │ │ +78 * container, │ │ │ │ +79 * but does not define anything to do with iterators. Very few of the │ │ │ │ +80 * other standard container interfaces are defined. │ │ │ │ +81 * │ │ │ │ +82 * This is not a true container, but an @e adaptor. It holds another │ │ │ │ +83 * container, and provides a wrapper interface to that container. The │ │ │ │ +84 * wrapper is what enforces strict first-in-first-out %queue behavior. │ │ │ │ +85 * │ │ │ │ +86 * The second template parameter defines the type of the underlying │ │ │ │ +87 * sequence/container. It defaults to std::deque, but it can be any type │ │ │ │ +88 * that supports @c front, @c back, @c push_back, and @c pop_front, │ │ │ │ +89 * such as std::list or an appropriate user-defined type. │ │ │ │ +90 * │ │ │ │ +91 * Members not found in @a normal containers are @c container_type, │ │ │ │ +92 * which is a typedef for the second Sequence parameter, and @c push and │ │ │ │ +93 * @c pop, which are standard %queue/FIFO operations. │ │ │ │ +94 */ │ │ │ │ +95 template > │ │ │ │ +_9_6 class _q_u_e_u_e │ │ │ │ +97 { │ │ │ │ +98#ifdef _GLIBCXX_CONCEPT_CHECKS │ │ │ │ +99 // concept requirements │ │ │ │ +100 typedef typename _Sequence::value_type ___S_e_q_u_e_n_c_e___v_a_l_u_e___t_y_p_e; │ │ │ │ +101# if __cplusplus < 201103L │ │ │ │ +102 __glibcxx_class_requires(_Tp, _SGIAssignableConcept) │ │ │ │ +103# endif │ │ │ │ +104 __glibcxx_class_requires(_Sequence, _FrontInsertionSequenceConcept) │ │ │ │ +105 __glibcxx_class_requires(_Sequence, _BackInsertionSequenceConcept) │ │ │ │ +106 __glibcxx_class_requires2(_Tp, ___S_e_q_u_e_n_c_e___v_a_l_u_e___t_y_p_e, _SameTypeConcept) │ │ │ │ +107#endif │ │ │ │ +108 │ │ │ │ +109 template │ │ │ │ +110 friend bool │ │ │ │ +111 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_>&); │ │ │ │ +112 │ │ │ │ +113 template │ │ │ │ +114 friend bool │ │ │ │ +115 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_>&); │ │ │ │ +116 │ │ │ │ +117#if __cpp_lib_three_way_comparison │ │ │ │ +118 template │ │ │ │ +119 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_> │ │ │ │ +120 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_>&); │ │ │ │ +121#endif │ │ │ │ 122 │ │ │ │ -123 template │ │ │ │ -124 inline void │ │ │ │ -125 __valarray_fill_construct(_Tp* __b, _Tp* __e, const _Tp __t) │ │ │ │ -126 { │ │ │ │ -127 _Array_init_ctor<_Tp, __is_trivial(_Tp)>::_S_do_it(__b, __e, __t); │ │ │ │ -128 } │ │ │ │ -129 │ │ │ │ -130 // │ │ │ │ -131 // copy-construct raw array [__o, *) from plain array [__b, __e) │ │ │ │ -132 // We can't just say 'memcpy()' │ │ │ │ -133 // │ │ │ │ -134 template │ │ │ │ -135 struct _Array_copy_ctor │ │ │ │ -136 { │ │ │ │ -137 // Please note that this isn't exception safe. But │ │ │ │ -138 // valarrays aren't required to be exception safe. │ │ │ │ -139 inline static void │ │ │ │ -140 _S_do_it(const _Tp* __b, const _Tp* __e, _Tp* __restrict__ __o) │ │ │ │ -141 { │ │ │ │ -142 while (__b != __e) │ │ │ │ -143 new(__o++) _Tp(*__b++); │ │ │ │ -144 } │ │ │ │ -145 }; │ │ │ │ -146 │ │ │ │ -147 template │ │ │ │ -148 struct _Array_copy_ctor<_Tp, true> │ │ │ │ -149 { │ │ │ │ -150 inline static void │ │ │ │ -151 _S_do_it(const _Tp* __b, const _Tp* __e, _Tp* __restrict__ __o) │ │ │ │ -152 { │ │ │ │ -153 if (__b) │ │ │ │ -154 __builtin_memcpy(__o, __b, (__e - __b) * sizeof(_Tp)); │ │ │ │ -155 } │ │ │ │ -156 }; │ │ │ │ -157 │ │ │ │ -158 template │ │ │ │ -159 inline void │ │ │ │ -160 __valarray_copy_construct(const _Tp* __b, const _Tp* __e, │ │ │ │ -161 _Tp* __restrict__ __o) │ │ │ │ -162 { │ │ │ │ -163 _Array_copy_ctor<_Tp, __is_trivial(_Tp)>::_S_do_it(__b, __e, __o); │ │ │ │ -164 } │ │ │ │ -165 │ │ │ │ -166 // copy-construct raw array [__o, *) from strided array __a[<__n : __s>] │ │ │ │ -167 template │ │ │ │ -168 inline void │ │ │ │ -169 __valarray_copy_construct (const _Tp* __restrict__ __a, size_t __n, │ │ │ │ -170 size_t __s, _Tp* __restrict__ __o) │ │ │ │ -171 { │ │ │ │ -172 if (__is_trivial(_Tp)) │ │ │ │ -173 while (__n--) │ │ │ │ -174 { │ │ │ │ -175 *__o++ = *__a; │ │ │ │ -176 __a += __s; │ │ │ │ -177 } │ │ │ │ -178 else │ │ │ │ -179 while (__n--) │ │ │ │ -180 { │ │ │ │ -181 new(__o++) _Tp(*__a); │ │ │ │ -182 __a += __s; │ │ │ │ -183 } │ │ │ │ -184 } │ │ │ │ +123#if __cplusplus >= 201103L │ │ │ │ +124 template │ │ │ │ +125 using _Uses = typename │ │ │ │ +126 _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; │ │ │ │ +127 │ │ │ │ +128#if __cplusplus >= 201703L │ │ │ │ +129 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +130 // 2566. Requirements on the first template parameter of container │ │ │ │ +131 // adaptors │ │ │ │ +132 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, │ │ │ │ +133 "value_type must be the same as the underlying container"); │ │ │ │ +134#endif // C++17 │ │ │ │ +135#endif // C++11 │ │ │ │ +136 │ │ │ │ +137 public: │ │ │ │ +138 typedef typename _Sequence::value_type value_type; │ │ │ │ +139 typedef typename _Sequence::reference reference; │ │ │ │ +140 typedef typename _Sequence::const_reference const_reference; │ │ │ │ +141 typedef typename _Sequence::size_type size_type; │ │ │ │ +142 typedef _Sequence container_type; │ │ │ │ +143 │ │ │ │ +144 protected: │ │ │ │ +145 /* Maintainers wondering why this isn't uglified as per style │ │ │ │ +146 * guidelines should note that this name is specified in the standard, │ │ │ │ +147 * C++98 [23.2.3.1]. │ │ │ │ +148 * (Why? Presumably for the same reason that it's protected instead │ │ │ │ +149 * of private: to allow derivation. But none of the other │ │ │ │ +150 * containers allow for derivation. Odd.) │ │ │ │ +151 */ │ │ │ │ +152 /// @c c is the underlying container. │ │ │ │ +_1_5_3 _Sequence _c; │ │ │ │ +154 │ │ │ │ +155 public: │ │ │ │ +156 /** │ │ │ │ +157 * @brief Default constructor creates no elements. │ │ │ │ +158 */ │ │ │ │ +159#if __cplusplus < 201103L │ │ │ │ +160 explicit │ │ │ │ +161 _q_u_e_u_e(const _Sequence& __c = _Sequence()) │ │ │ │ +162 : _c(__c) { } │ │ │ │ +163#else │ │ │ │ +164 template_:_:_v_a_l_u_e>::type> │ │ │ │ +_1_6_6 _q_u_e_u_e() │ │ │ │ +167 : _c() { } │ │ │ │ +168 │ │ │ │ +169 explicit │ │ │ │ +170 _q_u_e_u_e(const _Sequence& __c) │ │ │ │ +171 : _c(__c) { } │ │ │ │ +172 │ │ │ │ +173 explicit │ │ │ │ +174 _q_u_e_u_e(_Sequence&& __c) │ │ │ │ +175 : _c(_s_t_d::_m_o_v_e(__c)) { } │ │ │ │ +176 │ │ │ │ +177 template> │ │ │ │ +178 explicit │ │ │ │ +179 _q_u_e_u_e(const _Alloc& __a) │ │ │ │ +180 : _c(__a) { } │ │ │ │ +181 │ │ │ │ +182 template> │ │ │ │ +183 _q_u_e_u_e(const _Sequence& __c, const _Alloc& __a) │ │ │ │ +184 : _c(__c, __a) { } │ │ │ │ 185 │ │ │ │ -186 // copy-construct raw array [__o, *) from indexed array __a[__i[<__n>]] │ │ │ │ -187 template │ │ │ │ -188 inline void │ │ │ │ -189 __valarray_copy_construct (const _Tp* __restrict__ __a, │ │ │ │ -190 const size_t* __restrict__ __i, │ │ │ │ -191 _Tp* __restrict__ __o, size_t __n) │ │ │ │ -192 { │ │ │ │ -193 if (__is_trivial(_Tp)) │ │ │ │ -194 while (__n--) │ │ │ │ -195 *__o++ = __a[*__i++]; │ │ │ │ -196 else │ │ │ │ -197 while (__n--) │ │ │ │ -198 new (__o++) _Tp(__a[*__i++]); │ │ │ │ -199 } │ │ │ │ -200 │ │ │ │ -201 // Do the necessary cleanup when we're done with arrays. │ │ │ │ -202 template │ │ │ │ -203 inline void │ │ │ │ -204 __valarray_destroy_elements(_Tp* __b, _Tp* __e) │ │ │ │ -205 { │ │ │ │ -206 if (!__is_trivial(_Tp)) │ │ │ │ -207 while (__b != __e) │ │ │ │ -208 { │ │ │ │ -209 __b->~_Tp(); │ │ │ │ -210 ++__b; │ │ │ │ -211 } │ │ │ │ -212 } │ │ │ │ -213 │ │ │ │ -214 // Fill a plain array __a[<__n>] with __t │ │ │ │ -215 template │ │ │ │ -216 inline void │ │ │ │ -217 __valarray_fill(_Tp* __restrict__ __a, size_t __n, const _Tp& __t) │ │ │ │ -218 { │ │ │ │ -219 while (__n--) │ │ │ │ -220 *__a++ = __t; │ │ │ │ -221 } │ │ │ │ -222 │ │ │ │ -223 // fill strided array __a[<__n-1 : __s>] with __t │ │ │ │ -224 template │ │ │ │ -225 inline void │ │ │ │ -226 __valarray_fill(_Tp* __restrict__ __a, size_t __n, │ │ │ │ -227 size_t __s, const _Tp& __t) │ │ │ │ -228 { │ │ │ │ -229 for (size_t __i = 0; __i < __n; ++__i, __a += __s) │ │ │ │ -230 *__a = __t; │ │ │ │ -231 } │ │ │ │ -232 │ │ │ │ -233 // fill indirect array __a[__i[<__n>]] with __i │ │ │ │ -234 template │ │ │ │ -235 inline void │ │ │ │ -236 __valarray_fill(_Tp* __restrict__ __a, const size_t* __restrict__ __i, │ │ │ │ -237 size_t __n, const _Tp& __t) │ │ │ │ -238 { │ │ │ │ -239 for (size_t __j = 0; __j < __n; ++__j, ++__i) │ │ │ │ -240 __a[*__i] = __t; │ │ │ │ -241 } │ │ │ │ -242 │ │ │ │ -243 // copy plain array __a[<__n>] in __b[<__n>] │ │ │ │ -244 // For non-fundamental types, it is wrong to say 'memcpy()' │ │ │ │ -245 template │ │ │ │ -246 struct _Array_copier │ │ │ │ -247 { │ │ │ │ -248 inline static void │ │ │ │ -249 _S_do_it(const _Tp* __restrict__ __a, size_t __n, _Tp* __restrict__ __b) │ │ │ │ -250 { │ │ │ │ -251 while(__n--) │ │ │ │ -252 *__b++ = *__a++; │ │ │ │ -253 } │ │ │ │ -254 }; │ │ │ │ -255 │ │ │ │ -256 template │ │ │ │ -257 struct _Array_copier<_Tp, true> │ │ │ │ -258 { │ │ │ │ -259 inline static void │ │ │ │ -260 _S_do_it(const _Tp* __restrict__ __a, size_t __n, _Tp* __restrict__ __b) │ │ │ │ -261 { │ │ │ │ -262 if (__n != 0) │ │ │ │ -263 __builtin_memcpy(__b, __a, __n * sizeof (_Tp)); │ │ │ │ -264 } │ │ │ │ -265 }; │ │ │ │ -266 │ │ │ │ -267 // Copy a plain array __a[<__n>] into a play array __b[<>] │ │ │ │ -268 template │ │ │ │ -269 inline void │ │ │ │ -270 __valarray_copy(const _Tp* __restrict__ __a, size_t __n, │ │ │ │ -271 _Tp* __restrict__ __b) │ │ │ │ -272 { │ │ │ │ -273 _Array_copier<_Tp, __is_trivial(_Tp)>::_S_do_it(__a, __n, __b); │ │ │ │ -274 } │ │ │ │ -275 │ │ │ │ -276 // Copy strided array __a[<__n : __s>] in plain __b[<__n>] │ │ │ │ -277 template │ │ │ │ -278 inline void │ │ │ │ -279 __valarray_copy(const _Tp* __restrict__ __a, size_t __n, size_t __s, │ │ │ │ -280 _Tp* __restrict__ __b) │ │ │ │ -281 { │ │ │ │ -282 for (size_t __i = 0; __i < __n; ++__i, ++__b, __a += __s) │ │ │ │ -283 *__b = *__a; │ │ │ │ -284 } │ │ │ │ +186 template> │ │ │ │ +187 _q_u_e_u_e(_Sequence&& __c, const _Alloc& __a) │ │ │ │ +188 : _c(_s_t_d::_m_o_v_e(__c), __a) { } │ │ │ │ +189 │ │ │ │ +190 template> │ │ │ │ +191 _q_u_e_u_e(const _q_u_e_u_e& __q, const _Alloc& __a) │ │ │ │ +192 : _c(__q._c, __a) { } │ │ │ │ +193 │ │ │ │ +194 template> │ │ │ │ +195 _q_u_e_u_e(_q_u_e_u_e&& __q, const _Alloc& __a) │ │ │ │ +196 : _c(_s_t_d::_m_o_v_e(__q._c), __a) { } │ │ │ │ +197#endif │ │ │ │ +198 │ │ │ │ +199#ifdef __glibcxx_adaptor_iterator_pair_constructor // C++ >= 23 && HOSTED │ │ │ │ +200 template> │ │ │ │ +202 _q_u_e_u_e(_InputIterator __first, _InputIterator __last) │ │ │ │ +203 : _c(__first, __last) { } │ │ │ │ +204 │ │ │ │ +205 template, │ │ │ │ +207 typename = _Uses<_Alloc>> │ │ │ │ +208 _q_u_e_u_e(_InputIterator __first, _InputIterator __last, const _Alloc& __a) │ │ │ │ +209 : _c(__first, __last, __a) { } │ │ │ │ +210#endif │ │ │ │ +211 │ │ │ │ +212 /** │ │ │ │ +213 * Returns true if the %queue is empty. │ │ │ │ +214 */ │ │ │ │ +215 _GLIBCXX_NODISCARD bool │ │ │ │ +_2_1_6 _e_m_p_t_y() const │ │ │ │ +217 { return _c.empty(); } │ │ │ │ +218 │ │ │ │ +219 /** Returns the number of elements in the %queue. */ │ │ │ │ +220 _GLIBCXX_NODISCARD │ │ │ │ +221 size_type │ │ │ │ +_2_2_2 _s_i_z_e() const │ │ │ │ +223 { return _c.size(); } │ │ │ │ +224 │ │ │ │ +225 /** │ │ │ │ +226 * Returns a read/write reference to the data at the first │ │ │ │ +227 * element of the %queue. │ │ │ │ +228 */ │ │ │ │ +229 _GLIBCXX_NODISCARD │ │ │ │ +230 reference │ │ │ │ +_2_3_1 _f_r_o_n_t() │ │ │ │ +232 { │ │ │ │ +233 __glibcxx_requires_nonempty(); │ │ │ │ +234 return _c.front(); │ │ │ │ +235 } │ │ │ │ +236 │ │ │ │ +237 /** │ │ │ │ +238 * Returns a read-only (constant) reference to the data at the first │ │ │ │ +239 * element of the %queue. │ │ │ │ +240 */ │ │ │ │ +241 _GLIBCXX_NODISCARD │ │ │ │ +242 const_reference │ │ │ │ +_2_4_3 _f_r_o_n_t() const │ │ │ │ +244 { │ │ │ │ +245 __glibcxx_requires_nonempty(); │ │ │ │ +246 return _c.front(); │ │ │ │ +247 } │ │ │ │ +248 │ │ │ │ +249 /** │ │ │ │ +250 * Returns a read/write reference to the data at the last │ │ │ │ +251 * element of the %queue. │ │ │ │ +252 */ │ │ │ │ +253 _GLIBCXX_NODISCARD │ │ │ │ +254 reference │ │ │ │ +_2_5_5 _b_a_c_k() │ │ │ │ +256 { │ │ │ │ +257 __glibcxx_requires_nonempty(); │ │ │ │ +258 return _c.back(); │ │ │ │ +259 } │ │ │ │ +260 │ │ │ │ +261 /** │ │ │ │ +262 * Returns a read-only (constant) reference to the data at the last │ │ │ │ +263 * element of the %queue. │ │ │ │ +264 */ │ │ │ │ +265 _GLIBCXX_NODISCARD │ │ │ │ +266 const_reference │ │ │ │ +_2_6_7 _b_a_c_k() const │ │ │ │ +268 { │ │ │ │ +269 __glibcxx_requires_nonempty(); │ │ │ │ +270 return _c.back(); │ │ │ │ +271 } │ │ │ │ +272 │ │ │ │ +273 /** │ │ │ │ +274 * @brief Add data to the end of the %queue. │ │ │ │ +275 * @param __x Data to be added. │ │ │ │ +276 * │ │ │ │ +277 * This is a typical %queue operation. The function creates an │ │ │ │ +278 * element at the end of the %queue and assigns the given data │ │ │ │ +279 * to it. The time complexity of the operation depends on the │ │ │ │ +280 * underlying sequence. │ │ │ │ +281 */ │ │ │ │ +282 void │ │ │ │ +_2_8_3 _p_u_s_h(const value_type& __x) │ │ │ │ +284 { _c.push_back(__x); } │ │ │ │ 285 │ │ │ │ -286 // Copy a plain array __a[<__n>] into a strided array __b[<__n : __s>] │ │ │ │ -287 template │ │ │ │ -288 inline void │ │ │ │ -289 __valarray_copy(const _Tp* __restrict__ __a, _Tp* __restrict__ __b, │ │ │ │ -290 size_t __n, size_t __s) │ │ │ │ -291 { │ │ │ │ -292 for (size_t __i = 0; __i < __n; ++__i, ++__a, __b += __s) │ │ │ │ -293 *__b = *__a; │ │ │ │ -294 } │ │ │ │ -295 │ │ │ │ -296 // Copy strided array __src[<__n : __s1>] into another │ │ │ │ -297 // strided array __dst[< : __s2>]. Their sizes must match. │ │ │ │ -298 template │ │ │ │ -299 inline void │ │ │ │ -300 __valarray_copy(const _Tp* __restrict__ __src, size_t __n, size_t __s1, │ │ │ │ -301 _Tp* __restrict__ __dst, size_t __s2) │ │ │ │ -302 { │ │ │ │ -303 for (size_t __i = 0; __i < __n; ++__i) │ │ │ │ -304 __dst[__i * __s2] = __src[__i * __s1]; │ │ │ │ -305 } │ │ │ │ -306 │ │ │ │ -307 // Copy an indexed array __a[__i[<__n>]] in plain array __b[<__n>] │ │ │ │ -308 template │ │ │ │ -309 inline void │ │ │ │ -310 __valarray_copy(const _Tp* __restrict__ __a, │ │ │ │ -311 const size_t* __restrict__ __i, │ │ │ │ -312 _Tp* __restrict__ __b, size_t __n) │ │ │ │ -313 { │ │ │ │ -314 for (size_t __j = 0; __j < __n; ++__j, ++__b, ++__i) │ │ │ │ -315 *__b = __a[*__i]; │ │ │ │ -316 } │ │ │ │ -317 │ │ │ │ -318 // Copy a plain array __a[<__n>] in an indexed array __b[__i[<__n>]] │ │ │ │ -319 template │ │ │ │ -320 inline void │ │ │ │ -321 __valarray_copy(const _Tp* __restrict__ __a, size_t __n, │ │ │ │ -322 _Tp* __restrict__ __b, const size_t* __restrict__ __i) │ │ │ │ -323 { │ │ │ │ -324 for (size_t __j = 0; __j < __n; ++__j, ++__a, ++__i) │ │ │ │ -325 __b[*__i] = *__a; │ │ │ │ -326 } │ │ │ │ -327 │ │ │ │ -328 // Copy the __n first elements of an indexed array __src[<__i>] into │ │ │ │ -329 // another indexed array __dst[<__j>]. │ │ │ │ -330 template │ │ │ │ -331 inline void │ │ │ │ -332 __valarray_copy(const _Tp* __restrict__ __src, size_t __n, │ │ │ │ -333 const size_t* __restrict__ __i, │ │ │ │ -334 _Tp* __restrict__ __dst, const size_t* __restrict__ __j) │ │ │ │ -335 { │ │ │ │ -336 for (size_t __k = 0; __k < __n; ++__k) │ │ │ │ -337 __dst[*__j++] = __src[*__i++]; │ │ │ │ -338 } │ │ │ │ -339 │ │ │ │ -340 // │ │ │ │ -341 // Compute the sum of elements in range [__f, __l) which must not be empty. │ │ │ │ -342 // This is a naive algorithm. It suffers from cancelling. │ │ │ │ -343 // In the future try to specialize for _Tp = float, double, long double │ │ │ │ -344 // using a more accurate algorithm. │ │ │ │ -345 // │ │ │ │ -346 template │ │ │ │ -347 inline _Tp │ │ │ │ -348 __valarray_sum(const _Tp* __f, const _Tp* __l) │ │ │ │ -349 { │ │ │ │ -350 _Tp __r = *__f++; │ │ │ │ -351 while (__f != __l) │ │ │ │ -352 __r += *__f++; │ │ │ │ -353 return __r; │ │ │ │ -354 } │ │ │ │ -355 │ │ │ │ -356 // Compute the min/max of an array-expression │ │ │ │ -357 template │ │ │ │ -358 inline typename _Ta::value_type │ │ │ │ -359 __valarray_min(const _Ta& __a) │ │ │ │ -360 { │ │ │ │ -361 size_t __s = __a.size(); │ │ │ │ -362 typedef typename _Ta::value_type _Value_type; │ │ │ │ -363 _Value_type __r = __s == 0 ? _Value_type() : __a[0]; │ │ │ │ -364 for (size_t __i = 1; __i < __s; ++__i) │ │ │ │ -365 { │ │ │ │ -366 _Value_type __t = __a[__i]; │ │ │ │ -367 if (__t < __r) │ │ │ │ -368 __r = __t; │ │ │ │ -369 } │ │ │ │ -370 return __r; │ │ │ │ -371 } │ │ │ │ -372 │ │ │ │ -373 template │ │ │ │ -374 inline typename _Ta::value_type │ │ │ │ -375 __valarray_max(const _Ta& __a) │ │ │ │ -376 { │ │ │ │ -377 size_t __s = __a.size(); │ │ │ │ -378 typedef typename _Ta::value_type _Value_type; │ │ │ │ -379 _Value_type __r = __s == 0 ? _Value_type() : __a[0]; │ │ │ │ -380 for (size_t __i = 1; __i < __s; ++__i) │ │ │ │ -381 { │ │ │ │ -382 _Value_type __t = __a[__i]; │ │ │ │ -383 if (__t > __r) │ │ │ │ -384 __r = __t; │ │ │ │ -385 } │ │ │ │ -386 return __r; │ │ │ │ -387 } │ │ │ │ -388 │ │ │ │ -389 // │ │ │ │ -390 // Helper class _Array, first layer of valarray abstraction. │ │ │ │ -391 // All operations on valarray should be forwarded to this class │ │ │ │ -392 // whenever possible. -- gdr │ │ │ │ -393 // │ │ │ │ -394 │ │ │ │ -395 template │ │ │ │ -396 struct _Array │ │ │ │ -397 { │ │ │ │ -398 explicit _Array(_Tp* const __restrict__); │ │ │ │ -399 explicit _Array(const valarray<_Tp>&); │ │ │ │ -400 _Array(const _Tp* __restrict__, size_t); │ │ │ │ -401 │ │ │ │ -402 _Tp* _b_e_g_i_n() const; │ │ │ │ -403 │ │ │ │ -404 _Tp* const __restrict__ _M_data; │ │ │ │ -405 }; │ │ │ │ +286#if __cplusplus >= 201103L │ │ │ │ +287 void │ │ │ │ +288 _p_u_s_h(value_type&& __x) │ │ │ │ +289 { _c.push_back(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ +290 │ │ │ │ +291#if __cplusplus > 201402L │ │ │ │ +292 template │ │ │ │ +293 decltype(auto) │ │ │ │ +294 emplace(_Args&&... __args) │ │ │ │ +295 { return _c.emplace_back(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ +296#else │ │ │ │ +297 template │ │ │ │ +298 void │ │ │ │ +299 emplace(_Args&&... __args) │ │ │ │ +300 { _c.emplace_back(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ +301#endif │ │ │ │ +302#endif │ │ │ │ +303 │ │ │ │ +304 /** │ │ │ │ +305 * @brief Removes first element. │ │ │ │ +306 * │ │ │ │ +307 * This is a typical %queue operation. It shrinks the %queue by one. │ │ │ │ +308 * The time complexity of the operation depends on the underlying │ │ │ │ +309 * sequence. │ │ │ │ +310 * │ │ │ │ +311 * Note that no data is returned, and if the first element's │ │ │ │ +312 * data is needed, it should be retrieved before pop() is │ │ │ │ +313 * called. │ │ │ │ +314 */ │ │ │ │ +315 void │ │ │ │ +_3_1_6 _p_o_p() │ │ │ │ +317 { │ │ │ │ +318 __glibcxx_requires_nonempty(); │ │ │ │ +319 _c.pop_front(); │ │ │ │ +320 } │ │ │ │ +321 │ │ │ │ +322#if __cplusplus >= 201103L │ │ │ │ +323 void │ │ │ │ +324 swap(_q_u_e_u_e& __q) │ │ │ │ +325#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 │ │ │ │ +326 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) │ │ │ │ +327#else │ │ │ │ +328 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) │ │ │ │ +329#endif │ │ │ │ +330 { │ │ │ │ +331 using std::swap; │ │ │ │ +332 swap(_c, __q._c); │ │ │ │ +333 } │ │ │ │ +334#endif // __cplusplus >= 201103L │ │ │ │ +335 }; │ │ │ │ +336 │ │ │ │ +337#if __cpp_deduction_guides >= 201606 │ │ │ │ +338 template> │ │ │ │ +340 queue(_Container) -> queue; │ │ │ │ +341 │ │ │ │ +342 template> │ │ │ │ +344 queue(_Container, _Allocator) │ │ │ │ +345 -> queue; │ │ │ │ +346 │ │ │ │ +347#ifdef __glibcxx_adaptor_iterator_pair_constructor │ │ │ │ +348 template::value_type, │ │ │ │ +351 typename = _RequireInputIter<_InputIterator>> │ │ │ │ +352 queue(_InputIterator, _InputIterator) -> queue<_ValT>; │ │ │ │ +353 │ │ │ │ +354 template::value_type, │ │ │ │ +357 typename = _RequireInputIter<_InputIterator>, │ │ │ │ +358 typename = _RequireAllocator<_Allocator>> │ │ │ │ +359 queue(_InputIterator, _InputIterator, _Allocator) │ │ │ │ +360 -> queue<_ValT, deque<_ValT, _Allocator>>; │ │ │ │ +361#endif │ │ │ │ +362#endif │ │ │ │ +363 │ │ │ │ +364 /** │ │ │ │ +365 * @brief Queue equality comparison. │ │ │ │ +366 * @param __x A %queue. │ │ │ │ +367 * @param __y A %queue of the same type as @a __x. │ │ │ │ +368 * @return True iff the size and elements of the queues are equal. │ │ │ │ +369 * │ │ │ │ +370 * This is an equivalence relation. Complexity and semantics depend on the │ │ │ │ +371 * underlying sequence type, but the expected rules are: this relation is │ │ │ │ +372 * linear in the size of the sequences, and queues are considered equivalent │ │ │ │ +373 * if their sequences compare equal. │ │ │ │ +374 */ │ │ │ │ +375 template │ │ │ │ +376 _GLIBCXX_NODISCARD │ │ │ │ +377 inline bool │ │ │ │ +_3_7_8 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) │ │ │ │ +379 { return __x.c == __y.c; } │ │ │ │ +380 │ │ │ │ +381 /** │ │ │ │ +382 * @brief Queue ordering relation. │ │ │ │ +383 * @param __x A %queue. │ │ │ │ +384 * @param __y A %queue of the same type as @a x. │ │ │ │ +385 * @return True iff @a __x is lexicographically less than @a __y. │ │ │ │ +386 * │ │ │ │ +387 * This is an total ordering relation. Complexity and semantics │ │ │ │ +388 * depend on the underlying sequence type, but the expected rules │ │ │ │ +389 * are: this relation is linear in the size of the sequences, the │ │ │ │ +390 * elements must be comparable with @c <, and │ │ │ │ +391 * std::lexicographical_compare() is usually used to make the │ │ │ │ +392 * determination. │ │ │ │ +393 */ │ │ │ │ +394 template │ │ │ │ +395 _GLIBCXX_NODISCARD │ │ │ │ +_3_9_6 inline bool │ │ │ │ +397 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) │ │ │ │ +398 { return __x.c < __y.c; } │ │ │ │ +399 │ │ │ │ +400 /// Based on operator== │ │ │ │ +401 template │ │ │ │ +402 _GLIBCXX_NODISCARD │ │ │ │ +403 inline bool │ │ │ │ +_4_0_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) │ │ │ │ +405 { return !(__x == __y); } │ │ │ │ 406 │ │ │ │ -407 │ │ │ │ -408 // Copy-construct plain array __b[<__n>] from indexed array __a[__i[<__n>]] │ │ │ │ -409 template │ │ │ │ -410 inline void │ │ │ │ -411 __valarray_copy_construct(_Array<_Tp> __a, _Array __i, │ │ │ │ -412 _Array<_Tp> __b, size_t __n) │ │ │ │ -413 { std::__valarray_copy_construct(__a._M_data, __i._M_data, │ │ │ │ -414 __b._M_data, __n); } │ │ │ │ -415 │ │ │ │ -416 // Copy-construct plain array __b[<__n>] from strided array __a[<__n : │ │ │ │ -__s>] │ │ │ │ -417 template │ │ │ │ -418 inline void │ │ │ │ -419 __valarray_copy_construct(_Array<_Tp> __a, size_t __n, size_t __s, │ │ │ │ -420 _Array<_Tp> __b) │ │ │ │ -421 { std::__valarray_copy_construct(__a._M_data, __n, __s, __b._M_data); } │ │ │ │ -422 │ │ │ │ -423 template │ │ │ │ -424 inline void │ │ │ │ -425 __valarray_fill (_Array<_Tp> __a, size_t __n, const _Tp& __t) │ │ │ │ -426 { std::__valarray_fill(__a._M_data, __n, __t); } │ │ │ │ +407 /// Based on operator< │ │ │ │ +408 template │ │ │ │ +409 _GLIBCXX_NODISCARD │ │ │ │ +410 inline bool │ │ │ │ +_4_1_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) │ │ │ │ +412 { return __y < __x; } │ │ │ │ +413 │ │ │ │ +414 /// Based on operator< │ │ │ │ +415 template │ │ │ │ +416 _GLIBCXX_NODISCARD │ │ │ │ +_4_1_7 inline bool │ │ │ │ +418 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) │ │ │ │ +419 { return !(__y < __x); } │ │ │ │ +420 │ │ │ │ +421 /// Based on operator< │ │ │ │ +422 template │ │ │ │ +423 _GLIBCXX_NODISCARD │ │ │ │ +424 inline bool │ │ │ │ +_4_2_5 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) │ │ │ │ +426 { return !(__x < __y); } │ │ │ │ 427 │ │ │ │ -428 template │ │ │ │ -429 inline void │ │ │ │ -430 __valarray_fill(_Array<_Tp> __a, size_t __n, size_t __s, const _Tp& __t) │ │ │ │ -431 { std::__valarray_fill(__a._M_data, __n, __s, __t); } │ │ │ │ -432 │ │ │ │ -433 template │ │ │ │ -434 inline void │ │ │ │ -435 __valarray_fill(_Array<_Tp> __a, _Array __i, │ │ │ │ -436 size_t __n, const _Tp& __t) │ │ │ │ -437 { std::__valarray_fill(__a._M_data, __i._M_data, __n, __t); } │ │ │ │ -438 │ │ │ │ -439 // Copy a plain array __a[<__n>] into a play array __b[<>] │ │ │ │ -440 template │ │ │ │ -441 inline void │ │ │ │ -442 __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b) │ │ │ │ -443 { std::__valarray_copy(__a._M_data, __n, __b._M_data); } │ │ │ │ -444 │ │ │ │ -445 // Copy strided array __a[<__n : __s>] in plain __b[<__n>] │ │ │ │ -446 template │ │ │ │ -447 inline void │ │ │ │ -448 __valarray_copy(_Array<_Tp> __a, size_t __n, size_t __s, _Array<_Tp> __b) │ │ │ │ -449 { std::__valarray_copy(__a._M_data, __n, __s, __b._M_data); } │ │ │ │ -450 │ │ │ │ -451 // Copy a plain array __a[<__n>] into a strided array __b[<__n : __s>] │ │ │ │ -452 template │ │ │ │ -453 inline void │ │ │ │ -454 __valarray_copy(_Array<_Tp> __a, _Array<_Tp> __b, size_t __n, size_t __s) │ │ │ │ -455 { __valarray_copy(__a._M_data, __b._M_data, __n, __s); } │ │ │ │ -456 │ │ │ │ -457 // Copy strided array __src[<__n : __s1>] into another │ │ │ │ -458 // strided array __dst[< : __s2>]. Their sizes must match. │ │ │ │ -459 template │ │ │ │ -460 inline void │ │ │ │ -461 __valarray_copy(_Array<_Tp> __a, size_t __n, size_t __s1, │ │ │ │ -462 _Array<_Tp> __b, size_t __s2) │ │ │ │ -463 { std::__valarray_copy(__a._M_data, __n, __s1, __b._M_data, __s2); } │ │ │ │ -464 │ │ │ │ -465 // Copy an indexed array __a[__i[<__n>]] in plain array __b[<__n>] │ │ │ │ -466 template │ │ │ │ -467 inline void │ │ │ │ -468 __valarray_copy(_Array<_Tp> __a, _Array __i, │ │ │ │ -469 _Array<_Tp> __b, size_t __n) │ │ │ │ -470 { std::__valarray_copy(__a._M_data, __i._M_data, __b._M_data, __n); } │ │ │ │ -471 │ │ │ │ -472 // Copy a plain array __a[<__n>] in an indexed array __b[__i[<__n>]] │ │ │ │ -473 template │ │ │ │ -474 inline void │ │ │ │ -475 __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b, │ │ │ │ -476 _Array __i) │ │ │ │ -477 { std::__valarray_copy(__a._M_data, __n, __b._M_data, __i._M_data); } │ │ │ │ -478 │ │ │ │ -479 // Copy the __n first elements of an indexed array __src[<__i>] into │ │ │ │ -480 // another indexed array __dst[<__j>]. │ │ │ │ -481 template │ │ │ │ -482 inline void │ │ │ │ -483 __valarray_copy(_Array<_Tp> __src, size_t __n, _Array __i, │ │ │ │ -484 _Array<_Tp> __dst, _Array __j) │ │ │ │ -485 { │ │ │ │ -486 std::__valarray_copy(__src._M_data, __n, __i._M_data, │ │ │ │ -487 __dst._M_data, __j._M_data); │ │ │ │ -488 } │ │ │ │ -489 │ │ │ │ -490 template │ │ │ │ -491 inline │ │ │ │ -492 _Array<_Tp>::_Array(_Tp* const __restrict__ __p) │ │ │ │ -493 : _M_data (__p) {} │ │ │ │ -494 │ │ │ │ -495 template │ │ │ │ -496 inline │ │ │ │ -497 _Array<_Tp>::_Array(const valarray<_Tp>& __v) │ │ │ │ -498 : _M_data (__v._M_data) {} │ │ │ │ -499 │ │ │ │ -500 template │ │ │ │ -501 inline │ │ │ │ -502 _Array<_Tp>::_Array(const _Tp* __restrict__ __b, size_t __s) │ │ │ │ -503 : _M_data(__valarray_get_storage<_Tp>(__s)) │ │ │ │ -504 { std::__valarray_copy_construct(__b, __s, _M_data); } │ │ │ │ -505 │ │ │ │ -506 template │ │ │ │ -507 inline _Tp* │ │ │ │ -508 _Array<_Tp>::begin () const │ │ │ │ -509 { return _M_data; } │ │ │ │ +428#if __cpp_lib_three_way_comparison │ │ │ │ +429 template │ │ │ │ +430 [[nodiscard]] │ │ │ │ +431 inline compare_three_way_result_t<_Seq> │ │ │ │ +432 operator<=>(const queue<_Tp, _Seq>& __x, const queue<_Tp, _Seq>& __y) │ │ │ │ +433 { return __x.c <=> __y.c; } │ │ │ │ +434#endif │ │ │ │ +435 │ │ │ │ +436#if __cplusplus >= 201103L │ │ │ │ +437 template │ │ │ │ +438 inline │ │ │ │ +439#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 │ │ │ │ +440 // Constrained free swap overload, see p0185r1 │ │ │ │ +441 typename enable_if<__is_swappable<_Seq>::value>::type │ │ │ │ +442#else │ │ │ │ +443 void │ │ │ │ +444#endif │ │ │ │ +445 swap(queue<_Tp, _Seq>& __x, queue<_Tp, _Seq>& __y) │ │ │ │ +446 noexcept(noexcept(__x.swap(__y))) │ │ │ │ +447 { __x.swap(__y); } │ │ │ │ +448 │ │ │ │ +449 template │ │ │ │ +450 struct uses_allocator, _Alloc> │ │ │ │ +451 : public uses_allocator<_Seq, _Alloc>::type { }; │ │ │ │ +452#endif // __cplusplus >= 201103L │ │ │ │ +453 │ │ │ │ +454 /** │ │ │ │ +455 * @brief A standard container automatically sorting its contents. │ │ │ │ +456 * │ │ │ │ +457 * @ingroup sequences │ │ │ │ +458 * │ │ │ │ +459 * @tparam _Tp Type of element. │ │ │ │ +460 * @tparam _Sequence Type of underlying sequence, defaults to vector<_Tp>. │ │ │ │ +461 * @tparam _Compare Comparison function object type, defaults to │ │ │ │ +462 * less<_Sequence::value_type>. │ │ │ │ +463 * │ │ │ │ +464 * This is not a true container, but an @e adaptor. It holds │ │ │ │ +465 * another container, and provides a wrapper interface to that │ │ │ │ +466 * container. The wrapper is what enforces priority-based sorting │ │ │ │ +467 * and %queue behavior. Very few of the standard container/sequence │ │ │ │ +468 * interface requirements are met (e.g., iterators). │ │ │ │ +469 * │ │ │ │ +470 * The second template parameter defines the type of the underlying │ │ │ │ +471 * sequence/container. It defaults to std::vector, but it can be │ │ │ │ +472 * any type that supports @c front(), @c push_back, @c pop_back, │ │ │ │ +473 * and random-access iterators, such as std::deque or an │ │ │ │ +474 * appropriate user-defined type. │ │ │ │ +475 * │ │ │ │ +476 * The third template parameter supplies the means of making │ │ │ │ +477 * priority comparisons. It defaults to @c less but │ │ │ │ +478 * can be anything defining a strict weak ordering. │ │ │ │ +479 * │ │ │ │ +480 * Members not found in @a normal containers are @c container_type, │ │ │ │ +481 * which is a typedef for the second Sequence parameter, and @c │ │ │ │ +482 * push, @c pop, and @c top, which are standard %queue operations. │ │ │ │ +483 * │ │ │ │ +484 * @note No equality/comparison operators are provided for │ │ │ │ +485 * %priority_queue. │ │ │ │ +486 * │ │ │ │ +487 * @note Sorting of the elements takes place as they are added to, │ │ │ │ +488 * and removed from, the %priority_queue using the │ │ │ │ +489 * %priority_queue's member functions. If you access the elements │ │ │ │ +490 * by other means, and change their data such that the sorting │ │ │ │ +491 * order would be different, the %priority_queue will not re-sort │ │ │ │ +492 * the elements for you. (How could it know to do so?) │ │ │ │ +493 */ │ │ │ │ +494 template, │ │ │ │ +495 typename _Compare = less > │ │ │ │ +_4_9_6 class _p_r_i_o_r_i_t_y___q_u_e_u_e │ │ │ │ +497 { │ │ │ │ +498#ifdef _GLIBCXX_CONCEPT_CHECKS │ │ │ │ +499 // concept requirements │ │ │ │ +500 typedef typename _Sequence::value_type ___S_e_q_u_e_n_c_e___v_a_l_u_e___t_y_p_e; │ │ │ │ +501# if __cplusplus < 201103L │ │ │ │ +502 __glibcxx_class_requires(_Tp, _SGIAssignableConcept) │ │ │ │ +503# endif │ │ │ │ +504 __glibcxx_class_requires(_Sequence, _SequenceConcept) │ │ │ │ +505 __glibcxx_class_requires(_Sequence, _RandomAccessContainerConcept) │ │ │ │ +506 __glibcxx_class_requires2(_Tp, ___S_e_q_u_e_n_c_e___v_a_l_u_e___t_y_p_e, _SameTypeConcept) │ │ │ │ +507 __glibcxx_class_requires4(_Compare, bool, _Tp, _Tp, │ │ │ │ +508 _BinaryFunctionConcept) │ │ │ │ +509#endif │ │ │ │ 510 │ │ │ │ -511#define _DEFINE_ARRAY_FUNCTION(_Op, _Name) \ │ │ │ │ -512 template \ │ │ │ │ -513 inline void \ │ │ │ │ -514 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, const _Tp& __t) \ │ │ │ │ -515 { \ │ │ │ │ -516 for (_Tp* __p = __a._M_data; __p < __a._M_data + __n; ++__p) \ │ │ │ │ -517 *__p _Op##= __t; \ │ │ │ │ -518 } \ │ │ │ │ -519 \ │ │ │ │ -520 template \ │ │ │ │ -521 inline void \ │ │ │ │ -522 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b) \ │ │ │ │ -523 { \ │ │ │ │ -524 _Tp* __p = __a._M_data; \ │ │ │ │ -525 for (_Tp* __q = __b._M_data; __q < __b._M_data + __n; ++__p, ++__q) \ │ │ │ │ -526 *__p _Op##= *__q; \ │ │ │ │ -527 } \ │ │ │ │ -528 \ │ │ │ │ -529 template \ │ │ │ │ -530 void \ │ │ │ │ -531 _Array_augmented_##_Name(_Array<_Tp> __a, \ │ │ │ │ -532 const _Expr<_Dom, _Tp>& __e, size_t __n) \ │ │ │ │ -533 { \ │ │ │ │ -534 _Tp* __p(__a._M_data); \ │ │ │ │ -535 for (size_t __i = 0; __i < __n; ++__i, ++__p) \ │ │ │ │ -536 *__p _Op##= __e[__i]; \ │ │ │ │ -537 } \ │ │ │ │ -538 \ │ │ │ │ -539 template \ │ │ │ │ -540 inline void \ │ │ │ │ -541 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, size_t __s, \ │ │ │ │ -542 _Array<_Tp> __b) \ │ │ │ │ -543 { \ │ │ │ │ -544 _Tp* __q(__b._M_data); \ │ │ │ │ -545 for (_Tp* __p = __a._M_data; __p < __a._M_data + __s * __n; \ │ │ │ │ -546 __p += __s, ++__q) \ │ │ │ │ -547 *__p _Op##= *__q; \ │ │ │ │ -548 } \ │ │ │ │ -549 \ │ │ │ │ -550 template \ │ │ │ │ -551 inline void \ │ │ │ │ -552 _Array_augmented_##_Name(_Array<_Tp> __a, _Array<_Tp> __b, \ │ │ │ │ -553 size_t __n, size_t __s) \ │ │ │ │ -554 { \ │ │ │ │ -555 _Tp* __q(__b._M_data); \ │ │ │ │ -556 for (_Tp* __p = __a._M_data; __p < __a._M_data + __n; \ │ │ │ │ -557 ++__p, __q += __s) \ │ │ │ │ -558 *__p _Op##= *__q; \ │ │ │ │ -559 } \ │ │ │ │ -560 \ │ │ │ │ -561 template \ │ │ │ │ -562 void \ │ │ │ │ -563 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __s, \ │ │ │ │ -564 const _Expr<_Dom, _Tp>& __e, size_t __n) \ │ │ │ │ -565 { \ │ │ │ │ -566 _Tp* __p(__a._M_data); \ │ │ │ │ -567 for (size_t __i = 0; __i < __n; ++__i, __p += __s) \ │ │ │ │ -568 *__p _Op##= __e[__i]; \ │ │ │ │ -569 } \ │ │ │ │ -570 \ │ │ │ │ -571 template \ │ │ │ │ -572 inline void \ │ │ │ │ -573 _Array_augmented_##_Name(_Array<_Tp> __a, _Array __i, \ │ │ │ │ -574 _Array<_Tp> __b, size_t __n) \ │ │ │ │ -575 { \ │ │ │ │ -576 _Tp* __q(__b._M_data); \ │ │ │ │ -577 for (size_t* __j = __i._M_data; __j < __i._M_data + __n; \ │ │ │ │ -578 ++__j, ++__q) \ │ │ │ │ -579 __a._M_data[*__j] _Op##= *__q; \ │ │ │ │ -580 } \ │ │ │ │ -581 \ │ │ │ │ -582 template \ │ │ │ │ -583 inline void \ │ │ │ │ -584 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, \ │ │ │ │ -585 _Array<_Tp> __b, _Array __i) \ │ │ │ │ -586 { \ │ │ │ │ -587 _Tp* __p(__a._M_data); \ │ │ │ │ -588 for (size_t* __j = __i._M_data; __j<__i._M_data + __n; \ │ │ │ │ -589 ++__j, ++__p) \ │ │ │ │ -590 *__p _Op##= __b._M_data[*__j]; \ │ │ │ │ -591 } \ │ │ │ │ -592 \ │ │ │ │ -593 template \ │ │ │ │ -594 void \ │ │ │ │ -595 _Array_augmented_##_Name(_Array<_Tp> __a, _Array __i, \ │ │ │ │ -596 const _Expr<_Dom, _Tp>& __e, size_t __n) \ │ │ │ │ -597 { \ │ │ │ │ -598 size_t* __j(__i._M_data); \ │ │ │ │ -599 for (size_t __k = 0; __k<__n; ++__k, ++__j) \ │ │ │ │ -600 __a._M_data[*__j] _Op##= __e[__k]; \ │ │ │ │ -601 } \ │ │ │ │ -602 \ │ │ │ │ -603 template \ │ │ │ │ -604 void \ │ │ │ │ -605 _Array_augmented_##_Name(_Array<_Tp> __a, _Array __m, \ │ │ │ │ -606 _Array<_Tp> __b, size_t __n) \ │ │ │ │ -607 { \ │ │ │ │ -608 bool* __ok(__m._M_data); \ │ │ │ │ -609 _Tp* __p(__a._M_data); \ │ │ │ │ -610 for (_Tp* __q = __b._M_data; __q < __b._M_data + __n; \ │ │ │ │ -611 ++__q, ++__ok, ++__p) \ │ │ │ │ -612 { \ │ │ │ │ -613 while (! *__ok) \ │ │ │ │ -614 { \ │ │ │ │ -615 ++__ok; \ │ │ │ │ -616 ++__p; \ │ │ │ │ -617 } \ │ │ │ │ -618 *__p _Op##= *__q; \ │ │ │ │ -619 } \ │ │ │ │ -620 } \ │ │ │ │ -621 \ │ │ │ │ -622 template \ │ │ │ │ -623 void \ │ │ │ │ -624 _Array_augmented_##_Name(_Array<_Tp> __a, size_t __n, \ │ │ │ │ -625 _Array<_Tp> __b, _Array __m) \ │ │ │ │ -626 { \ │ │ │ │ -627 bool* __ok(__m._M_data); \ │ │ │ │ -628 _Tp* __q(__b._M_data); \ │ │ │ │ -629 for (_Tp* __p = __a._M_data; __p < __a._M_data + __n; \ │ │ │ │ -630 ++__p, ++__ok, ++__q) \ │ │ │ │ -631 { \ │ │ │ │ -632 while (! *__ok) \ │ │ │ │ -633 { \ │ │ │ │ -634 ++__ok; \ │ │ │ │ -635 ++__q; \ │ │ │ │ -636 } \ │ │ │ │ -637 *__p _Op##= *__q; \ │ │ │ │ -638 } \ │ │ │ │ -639 } \ │ │ │ │ -640 \ │ │ │ │ -641 template \ │ │ │ │ -642 void \ │ │ │ │ -643 _Array_augmented_##_Name(_Array<_Tp> __a, _Array __m, \ │ │ │ │ -644 const _Expr<_Dom, _Tp>& __e, size_t __n) \ │ │ │ │ -645 { \ │ │ │ │ -646 bool* __ok(__m._M_data); \ │ │ │ │ -647 _Tp* __p(__a._M_data); \ │ │ │ │ -648 for (size_t __i = 0; __i < __n; ++__i, ++__ok, ++__p) \ │ │ │ │ -649 { \ │ │ │ │ -650 while (! *__ok) \ │ │ │ │ -651 { \ │ │ │ │ -652 ++__ok; \ │ │ │ │ -653 ++__p; \ │ │ │ │ -654 } \ │ │ │ │ -655 *__p _Op##= __e[__i]; \ │ │ │ │ -656 } \ │ │ │ │ -657 } │ │ │ │ -658 │ │ │ │ -659 _DEFINE_ARRAY_FUNCTION(+, __plus) │ │ │ │ -660 _DEFINE_ARRAY_FUNCTION(-, __minus) │ │ │ │ -661 _DEFINE_ARRAY_FUNCTION(*, __multiplies) │ │ │ │ -662 _DEFINE_ARRAY_FUNCTION(/, __divides) │ │ │ │ -663 _DEFINE_ARRAY_FUNCTION(%, __modulus) │ │ │ │ -664 _DEFINE_ARRAY_FUNCTION(^, __bitwise_xor) │ │ │ │ -665 _DEFINE_ARRAY_FUNCTION(|, __bitwise_or) │ │ │ │ -666 _DEFINE_ARRAY_FUNCTION(&, __bitwise_and) │ │ │ │ -667 _DEFINE_ARRAY_FUNCTION(<<, __shift_left) │ │ │ │ -668 _DEFINE_ARRAY_FUNCTION(>>, __shift_right) │ │ │ │ -669 │ │ │ │ -670#undef _DEFINE_ARRAY_FUNCTION │ │ │ │ -671 │ │ │ │ -672_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -673} // namespace │ │ │ │ -674 │ │ │ │ -675# include <_b_i_t_s_/_v_a_l_a_r_r_a_y___a_r_r_a_y_._t_c_c> │ │ │ │ -676 │ │ │ │ -677#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_7 │ │ │ │ +511#if __cplusplus >= 201103L │ │ │ │ +512 template │ │ │ │ +513 using _Uses = typename │ │ │ │ +514 _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; │ │ │ │ +515 │ │ │ │ +516#if __cplusplus >= 201703L │ │ │ │ +517 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +518 // 2566. Requirements on the first template parameter of container │ │ │ │ +519 // adaptors │ │ │ │ +520 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, │ │ │ │ +521 "value_type must be the same as the underlying container"); │ │ │ │ +522#endif // C++17 │ │ │ │ +523#endif // C++11 │ │ │ │ +524 │ │ │ │ +525 public: │ │ │ │ +526 typedef typename _Sequence::value_type value_type; │ │ │ │ +527 typedef typename _Sequence::reference reference; │ │ │ │ +528 typedef typename _Sequence::const_reference const_reference; │ │ │ │ +529 typedef typename _Sequence::size_type size_type; │ │ │ │ +530 typedef _Sequence container_type; │ │ │ │ +531 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +532 // DR 2684. priority_queue lacking comparator typedef │ │ │ │ +533 typedef _Compare value_compare; │ │ │ │ +534 │ │ │ │ +535 protected: │ │ │ │ +536 // See queue::c for notes on these names. │ │ │ │ +537 _Sequence c; │ │ │ │ +538 _Compare comp; │ │ │ │ +539 │ │ │ │ +540 public: │ │ │ │ +541 /** │ │ │ │ +542 * @brief Default constructor creates no elements. │ │ │ │ +543 */ │ │ │ │ +544#if __cplusplus < 201103L │ │ │ │ +545 explicit │ │ │ │ +546 _p_r_i_o_r_i_t_y___q_u_e_u_e(const _Compare& __x = _Compare(), │ │ │ │ +547 const _Sequence& _____s = _Sequence()) │ │ │ │ +548 : c(_____s), comp(__x) │ │ │ │ +549 { std::make_heap(c.begin(), c.end(), comp); } │ │ │ │ +550#else │ │ │ │ +551 template, │ │ │ │ +553 _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> │ │ │ │ +_5_5_4 _p_r_i_o_r_i_t_y___q_u_e_u_e() │ │ │ │ +555 : c(), comp() { } │ │ │ │ +556 │ │ │ │ +557 explicit │ │ │ │ +558 _p_r_i_o_r_i_t_y___q_u_e_u_e(const _Compare& __x, const _Sequence& _____s) │ │ │ │ +559 : c(_____s), comp(__x) │ │ │ │ +560 { std::make_heap(c.begin(), c.end(), comp); } │ │ │ │ +561 │ │ │ │ +562 explicit │ │ │ │ +563 _p_r_i_o_r_i_t_y___q_u_e_u_e(const _Compare& __x, _Sequence&& __s = _Sequence()) │ │ │ │ +564 : c(_s_t_d::_m_o_v_e(__s)), comp(__x) │ │ │ │ +565 { std::make_heap(c.begin(), c.end(), comp); } │ │ │ │ +566 │ │ │ │ +567 template> │ │ │ │ +568 explicit │ │ │ │ +569 _p_r_i_o_r_i_t_y___q_u_e_u_e(const _Alloc& __a) │ │ │ │ +570 : c(__a), comp() { } │ │ │ │ +571 │ │ │ │ +572 template> │ │ │ │ +573 _p_r_i_o_r_i_t_y___q_u_e_u_e(const _Compare& __x, const _Alloc& __a) │ │ │ │ +574 : c(__a), comp(__x) { } │ │ │ │ +575 │ │ │ │ +576 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +577 // 2537. Constructors [...] taking allocators should call make_heap │ │ │ │ +578 template> │ │ │ │ +579 _p_r_i_o_r_i_t_y___q_u_e_u_e(const _Compare& __x, const _Sequence& __c, │ │ │ │ +580 const _Alloc& __a) │ │ │ │ +581 : c(__c, __a), comp(__x) │ │ │ │ +582 { std::make_heap(c.begin(), c.end(), comp); } │ │ │ │ +583 │ │ │ │ +584 template> │ │ │ │ +585 _p_r_i_o_r_i_t_y___q_u_e_u_e(const _Compare& __x, _Sequence&& __c, const _Alloc& __a) │ │ │ │ +586 : c(_s_t_d::_m_o_v_e(__c), __a), comp(__x) │ │ │ │ +587 { std::make_heap(c.begin(), c.end(), comp); } │ │ │ │ +588 │ │ │ │ +589 template> │ │ │ │ +590 _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) │ │ │ │ +591 : c(__q.c, __a), comp(__q.comp) { } │ │ │ │ +592 │ │ │ │ +593 template> │ │ │ │ +594 _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) │ │ │ │ +595 : c(_s_t_d::_m_o_v_e(__q.c), __a), comp(_s_t_d::_m_o_v_e(__q.comp)) { } │ │ │ │ +596#endif │ │ │ │ +597 │ │ │ │ +598 /** │ │ │ │ +599 * @brief Builds a %queue from a range. │ │ │ │ +600 * @param __first An input iterator. │ │ │ │ +601 * @param __last An input iterator. │ │ │ │ +602 * @param __x A comparison functor describing a strict weak ordering. │ │ │ │ +603 * @param __s An initial sequence with which to start. │ │ │ │ +604 * │ │ │ │ +605 * Begins by copying @a __s, inserting a copy of the elements │ │ │ │ +606 * from @a [first,last) into the copy of @a __s, then ordering │ │ │ │ +607 * the copy according to @a __x. │ │ │ │ +608 * │ │ │ │ +609 * For more information on function objects, see the │ │ │ │ +610 * documentation on @link functors functor base │ │ │ │ +611 * classes@endlink. │ │ │ │ +612 */ │ │ │ │ +613#if __cplusplus < 201103L │ │ │ │ +614 template │ │ │ │ +615 _p_r_i_o_r_i_t_y___q_u_e_u_e(_InputIterator __first, _InputIterator __last, │ │ │ │ +616 const _Compare& __x = _Compare(), │ │ │ │ +617 const _Sequence& __s = _Sequence()) │ │ │ │ +618 : c(__s), comp(__x) │ │ │ │ +619 { │ │ │ │ +620 __glibcxx_requires_valid_range(__first, __last); │ │ │ │ +621 c.insert(c.end(), __first, __last); │ │ │ │ +622 std::make_heap(c.begin(), c.end(), comp); │ │ │ │ +623 } │ │ │ │ +624#else │ │ │ │ +625 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +626 // 3529. priority_queue(first, last) should construct c with (first, last) │ │ │ │ +627 template> │ │ │ │ +_6_2_9 _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, │ │ │ │ +630 const _Compare& __x = _Compare()) │ │ │ │ +631 : c(__first, __last), comp(__x) │ │ │ │ +632 { std::make_heap(c.begin(), c.end(), comp); } │ │ │ │ +633 │ │ │ │ +634 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +635 // 3522. Missing requirement on InputIterator template parameter │ │ │ │ +636 template> │ │ │ │ +638 _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, │ │ │ │ +639 const _Compare& __x, const _Sequence& _____s) │ │ │ │ +640 : c(_____s), comp(__x) │ │ │ │ +641 { │ │ │ │ +642 __glibcxx_requires_valid_range(__first, __last); │ │ │ │ +643 c.insert(c.end(), __first, __last); │ │ │ │ +644 std::make_heap(c.begin(), c.end(), comp); │ │ │ │ +645 } │ │ │ │ +646 │ │ │ │ +647 template> │ │ │ │ +649 _p_r_i_o_r_i_t_y___q_u_e_u_e(_InputIterator __first, _InputIterator __last, │ │ │ │ +650 const _Compare& __x, _Sequence&& __s) │ │ │ │ +651 : c(_s_t_d::_m_o_v_e(__s)), comp(__x) │ │ │ │ +652 { │ │ │ │ +653 __glibcxx_requires_valid_range(__first, __last); │ │ │ │ +654 c.insert(c.end(), __first, __last); │ │ │ │ +655 std::make_heap(c.begin(), c.end(), comp); │ │ │ │ +656 } │ │ │ │ +657 │ │ │ │ +658 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +659 // 3506. Missing allocator-extended constructors for priority_queue │ │ │ │ +660 template, │ │ │ │ +662 typename _Requires = _Uses<_Alloc>> │ │ │ │ +663 _p_r_i_o_r_i_t_y___q_u_e_u_e(_InputIterator __first, _InputIterator __last, │ │ │ │ +664 const _Alloc& __alloc) │ │ │ │ +665 : c(__first, __last, __alloc), comp() │ │ │ │ +666 { std::make_heap(c.begin(), c.end(), comp); } │ │ │ │ +667 │ │ │ │ +668 template, │ │ │ │ +670 typename _Requires = _Uses<_Alloc>> │ │ │ │ +671 _p_r_i_o_r_i_t_y___q_u_e_u_e(_InputIterator __first, _InputIterator __last, │ │ │ │ +672 const _Compare& __x, const _Alloc& __alloc) │ │ │ │ +673 : c(__first, __last, __alloc), comp(__x) │ │ │ │ +674 { std::make_heap(c.begin(), c.end(), comp); } │ │ │ │ +675 │ │ │ │ +676 template, │ │ │ │ +678 typename _Requires = _Uses<_Alloc>> │ │ │ │ +679 _p_r_i_o_r_i_t_y___q_u_e_u_e(_InputIterator __first, _InputIterator __last, │ │ │ │ +680 const _Compare& __x, const _Sequence& __s, │ │ │ │ +681 const _Alloc& __alloc) │ │ │ │ +682 : c(__s, __alloc), comp(__x) │ │ │ │ +683 { │ │ │ │ +684 __glibcxx_requires_valid_range(__first, __last); │ │ │ │ +685 c.insert(c.end(), __first, __last); │ │ │ │ +686 std::make_heap(c.begin(), c.end(), comp); │ │ │ │ +687 } │ │ │ │ +688 │ │ │ │ +689 template> │ │ │ │ +691 _p_r_i_o_r_i_t_y___q_u_e_u_e(_InputIterator __first, _InputIterator __last, │ │ │ │ +692 const _Compare& __x, _Sequence&& __s, │ │ │ │ +693 const _Alloc& __alloc) │ │ │ │ +694 : c(_s_t_d::_m_o_v_e(__s), __alloc), 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#endif │ │ │ │ +701 │ │ │ │ +702 /** │ │ │ │ +703 * Returns true if the %queue is empty. │ │ │ │ +704 */ │ │ │ │ +705 _GLIBCXX_NODISCARD bool │ │ │ │ +_7_0_6 _e_m_p_t_y() const │ │ │ │ +707 { return c.empty(); } │ │ │ │ +708 │ │ │ │ +709 /** Returns the number of elements in the %queue. */ │ │ │ │ +710 _GLIBCXX_NODISCARD │ │ │ │ +711 size_type │ │ │ │ +_7_1_2 _s_i_z_e() const │ │ │ │ +713 { return c.size(); } │ │ │ │ +714 │ │ │ │ +715 /** │ │ │ │ +716 * Returns a read-only (constant) reference to the data at the first │ │ │ │ +717 * element of the %queue. │ │ │ │ +718 */ │ │ │ │ +719 _GLIBCXX_NODISCARD │ │ │ │ +720 const_reference │ │ │ │ +_7_2_1 _t_o_p() const │ │ │ │ +722 { │ │ │ │ +723 __glibcxx_requires_nonempty(); │ │ │ │ +724 return c.front(); │ │ │ │ +725 } │ │ │ │ +726 │ │ │ │ +727 /** │ │ │ │ +728 * @brief Add data to the %queue. │ │ │ │ +729 * @param __x Data to be added. │ │ │ │ +730 * │ │ │ │ +731 * This is a typical %queue operation. │ │ │ │ +732 * The time complexity of the operation depends on the underlying │ │ │ │ +733 * sequence. │ │ │ │ +734 */ │ │ │ │ +735 void │ │ │ │ +_7_3_6 _p_u_s_h(const value_type& __x) │ │ │ │ +737 { │ │ │ │ +738 c.push_back(__x); │ │ │ │ +739 std::push_heap(c.begin(), c.end(), comp); │ │ │ │ +740 } │ │ │ │ +741 │ │ │ │ +742#if __cplusplus >= 201103L │ │ │ │ +743 void │ │ │ │ +744 _p_u_s_h(value_type&& __x) │ │ │ │ +745 { │ │ │ │ +746 c.push_back(_s_t_d_:_:_m_o_v_e(__x)); │ │ │ │ +747 std::push_heap(c.begin(), c.end(), comp); │ │ │ │ +748 } │ │ │ │ +749 │ │ │ │ +750 template │ │ │ │ +751 void │ │ │ │ +752 emplace(_Args&&... __args) │ │ │ │ +753 { │ │ │ │ +754 c.emplace_back(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ +755 std::push_heap(c.begin(), c.end(), comp); │ │ │ │ +756 } │ │ │ │ +757#endif │ │ │ │ +758 │ │ │ │ +759 /** │ │ │ │ +760 * @brief Removes first element. │ │ │ │ +761 * │ │ │ │ +762 * This is a typical %queue operation. It shrinks the %queue │ │ │ │ +763 * by one. The time complexity of the operation depends on the │ │ │ │ +764 * underlying sequence. │ │ │ │ +765 * │ │ │ │ +766 * Note that no data is returned, and if the first element's │ │ │ │ +767 * data is needed, it should be retrieved before pop() is │ │ │ │ +768 * called. │ │ │ │ +769 */ │ │ │ │ +770 void │ │ │ │ +_7_7_1 _p_o_p() │ │ │ │ +772 { │ │ │ │ +773 __glibcxx_requires_nonempty(); │ │ │ │ +774 std::pop_heap(c.begin(), c.end(), comp); │ │ │ │ +775 c.pop_back(); │ │ │ │ +776 } │ │ │ │ +777 │ │ │ │ +778#if __cplusplus >= 201103L │ │ │ │ +779 void │ │ │ │ +780 swap(_p_r_i_o_r_i_t_y___q_u_e_u_e& _____p_q) │ │ │ │ +781 noexcept(__and_< │ │ │ │ +782#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 │ │ │ │ +783 _____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_>, │ │ │ │ +784#else │ │ │ │ +785 _____i_s___n_o_t_h_r_o_w___s_w_a_p_p_a_b_l_e_<___T_p_>, │ │ │ │ +786#endif │ │ │ │ +787 _____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_> │ │ │ │ +788 >::value) │ │ │ │ +789 { │ │ │ │ +790 using std::swap; │ │ │ │ +791 swap(c, _____p_q.c); │ │ │ │ +792 swap(comp, _____p_q.comp); │ │ │ │ +793 } │ │ │ │ +794#endif // __cplusplus >= 201103L │ │ │ │ +795 }; │ │ │ │ +796 │ │ │ │ +797#if __cpp_deduction_guides >= 201606 │ │ │ │ +798 template, │ │ │ │ +800 typename = _RequireNotAllocator<_Container>> │ │ │ │ +801 priority_queue(_Compare, _Container) │ │ │ │ +802 -> priority_queue; │ │ │ │ +803 │ │ │ │ +804 template::value_type, │ │ │ │ +806 typename _Compare = less<_ValT>, │ │ │ │ +807 typename _Container = vector<_ValT>, │ │ │ │ +808 typename = _RequireInputIter<_InputIterator>, │ │ │ │ +809 typename = _RequireNotAllocator<_Compare>, │ │ │ │ +810 typename = _RequireNotAllocator<_Container>> │ │ │ │ +811 priority_queue(_InputIterator, _InputIterator, _Compare = _Compare(), │ │ │ │ +812 _Container = _Container()) │ │ │ │ +813 -> priority_queue<_ValT, _Container, _Compare>; │ │ │ │ +814 │ │ │ │ +815 template, │ │ │ │ +817 typename = _RequireNotAllocator<_Container>> │ │ │ │ +818 priority_queue(_Compare, _Container, _Allocator) │ │ │ │ +819 -> priority_queue; │ │ │ │ +820#endif │ │ │ │ +821 │ │ │ │ +822 // No equality/comparison operators are provided for priority_queue. │ │ │ │ +823 │ │ │ │ +824#if __cplusplus >= 201103L │ │ │ │ +825 template │ │ │ │ +826 inline │ │ │ │ +827#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 │ │ │ │ +828 // Constrained free swap overload, see p0185r1 │ │ │ │ +829 typename enable_if<__and_<__is_swappable<_Sequence>, │ │ │ │ +830 __is_swappable<_Compare>>::value>::type │ │ │ │ +831#else │ │ │ │ +832 void │ │ │ │ +833#endif │ │ │ │ +834 swap(priority_queue<_Tp, _Sequence, _Compare>& __x, │ │ │ │ +835 priority_queue<_Tp, _Sequence, _Compare>& __y) │ │ │ │ +836 noexcept(noexcept(__x.swap(__y))) │ │ │ │ +837 { __x.swap(__y); } │ │ │ │ +838 │ │ │ │ +839 template │ │ │ │ +841 struct uses_allocator, _Alloc> │ │ │ │ +842 : public uses_allocator<_Sequence, _Alloc>::type { }; │ │ │ │ +843#endif // __cplusplus >= 201103L │ │ │ │ +844 │ │ │ │ +845_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +846} // namespace │ │ │ │ +847 │ │ │ │ +848#endif /* _STL_QUEUE_H */ │ │ │ │ +_c_o_n_c_e_p_t___c_h_e_c_k_._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_7 │ │ │ │ _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_4_8_2 │ │ │ │ +_s_t_d_:_:_q_u_e_u_e │ │ │ │ +A standard container giving FIFO behavior. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___q_u_e_u_e_._h_:_9_7 │ │ │ │ +_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_:_2_8_3 │ │ │ │ +_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_5_3 │ │ │ │ +_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_2_2 │ │ │ │ +_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_3_1 │ │ │ │ +_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_6_7 │ │ │ │ +_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_1_6 │ │ │ │ +_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_6_6 │ │ │ │ +_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_4_3 │ │ │ │ +_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_1_6 │ │ │ │ +_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_5_5 │ │ │ │ +_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_:_4_9_7 │ │ │ │ +_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_:_7_1_2 │ │ │ │ +_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_:_7_0_6 │ │ │ │ +_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_:_7_7_1 │ │ │ │ +_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_:_7_2_1 │ │ │ │ +_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_:_6_2_9 │ │ │ │ +_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_:_7_3_6 │ │ │ │ +_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_:_5_5_4 │ │ │ │ +_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-14-base/libstdc++/user/a00374.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-14-base/libstdc++/user/a00374.js │ │ │ ├── js-beautify {} │ │ │ │ @@ -1,4 +1,4 @@ │ │ │ │ var a00374 = [ │ │ │ │ - ["__umset_traits", "a00374.html#a82ea41b760d4cfe35fb4ce095415a24a", null], │ │ │ │ - ["__uset_traits", "a00374.html#a39fcc5869a652c651d6911a64a020e21", null] │ │ │ │ + ["__umap_traits", "a00374.html#a84b02064179c0ef21d0189a7bf15803b", null], │ │ │ │ + ["__ummap_traits", "a00374.html#a1a55f2ace43a0a61a859367d227d245f", null] │ │ │ │ ]; │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00374_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-2024 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,2303 +72,2673 @@ │ │ │
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
│ │ │
38namespace std _GLIBCXX_VISIBILITY(default)
│ │ │
39{
│ │ │
40_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │
41_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
│ │ │
42
│ │ │ -
43 /// Base types for unordered_set.
│ │ │ +
43 /// Base types for unordered_map.
│ │ │
44 template<bool _Cache>
│ │ │ -
45 using __uset_traits = __detail::_Hashtable_traits<_Cache, true, true>;
│ │ │ +
45 using __umap_traits = __detail::_Hashtable_traits<_Cache, false, true>;
│ │ │
46
│ │ │ -
47 template<typename _Value,
│ │ │ -
48 typename _Hash = hash<_Value>,
│ │ │ - │ │ │ -
50 typename _Alloc = std::allocator<_Value>,
│ │ │ - │ │ │ -
52 using __uset_hashtable = _Hashtable<_Value, _Value, _Alloc,
│ │ │ -
53 __detail::_Identity, _Pred, _Hash,
│ │ │ -
54 __detail::_Mod_range_hashing,
│ │ │ -
55 __detail::_Default_ranged_hash,
│ │ │ -
56 __detail::_Prime_rehash_policy, _Tr>;
│ │ │ -
57
│ │ │ -
58 /// Base types for unordered_multiset.
│ │ │ -
59 template<bool _Cache>
│ │ │ -
60 using __umset_traits = __detail::_Hashtable_traits<_Cache, true, false>;
│ │ │ -
61
│ │ │ -
62 template<typename _Value,
│ │ │ -
63 typename _Hash = hash<_Value>,
│ │ │ - │ │ │ -
65 typename _Alloc = std::allocator<_Value>,
│ │ │ - │ │ │ -
67 using __umset_hashtable = _Hashtable<_Value, _Value, _Alloc,
│ │ │ -
68 __detail::_Identity,
│ │ │ -
69 _Pred, _Hash,
│ │ │ -
70 __detail::_Mod_range_hashing,
│ │ │ -
71 __detail::_Default_ranged_hash,
│ │ │ -
72 __detail::_Prime_rehash_policy, _Tr>;
│ │ │ -
73
│ │ │ -
74 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ - │ │ │ -
76
│ │ │ -
77 /**
│ │ │ -
78 * @brief A standard container composed of unique keys (containing
│ │ │ -
79 * at most one of each key value) in which the elements' keys are
│ │ │ -
80 * the elements themselves.
│ │ │ -
81 *
│ │ │ -
82 * @ingroup unordered_associative_containers
│ │ │ -
83 * @headerfile unordered_set
│ │ │ -
84 * @since C++11
│ │ │ -
85 *
│ │ │ -
86 * @tparam _Value Type of key objects.
│ │ │ -
87 * @tparam _Hash Hashing function object type, defaults to hash<_Value>.
│ │ │ -
88
│ │ │ -
89 * @tparam _Pred Predicate function object type, defaults to
│ │ │ -
90 * equal_to<_Value>.
│ │ │ -
91 *
│ │ │ -
92 * @tparam _Alloc Allocator type, defaults to allocator<_Key>.
│ │ │ -
93 *
│ │ │ -
94 * Meets the requirements of a <a href="tables.html#65">container</a>, and
│ │ │ -
95 * <a href="tables.html#xx">unordered associative container</a>
│ │ │ +
47 template<typename _Key,
│ │ │ +
48 typename _Tp,
│ │ │ +
49 typename _Hash = hash<_Key>,
│ │ │ +
50 typename _Pred = std::equal_to<_Key>,
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
54 _Alloc, __detail::_Select1st,
│ │ │ +
55 _Pred, _Hash,
│ │ │ +
56 __detail::_Mod_range_hashing,
│ │ │ +
57 __detail::_Default_ranged_hash,
│ │ │ +
58 __detail::_Prime_rehash_policy, _Tr>;
│ │ │ +
59
│ │ │ +
60 /// Base types for unordered_multimap.
│ │ │ +
61 template<bool _Cache>
│ │ │ +
62 using __ummap_traits = __detail::_Hashtable_traits<_Cache, false, false>;
│ │ │ +
63
│ │ │ +
64 template<typename _Key,
│ │ │ +
65 typename _Tp,
│ │ │ +
66 typename _Hash = hash<_Key>,
│ │ │ +
67 typename _Pred = std::equal_to<_Key>,
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
71 _Alloc, __detail::_Select1st,
│ │ │ +
72 _Pred, _Hash,
│ │ │ +
73 __detail::_Mod_range_hashing,
│ │ │ +
74 __detail::_Default_ranged_hash,
│ │ │ +
75 __detail::_Prime_rehash_policy, _Tr>;
│ │ │ +
76
│ │ │ +
77 template<class _Key, class _Tp, 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) that associates values of another type
│ │ │ +
83 * with the keys.
│ │ │ +
84 *
│ │ │ +
85 * @ingroup unordered_associative_containers
│ │ │ +
86 * @headerfile unordered_map
│ │ │ +
87 * @since C++11
│ │ │ +
88 *
│ │ │ +
89 * @tparam _Key Type of key objects.
│ │ │ +
90 * @tparam _Tp Type of mapped objects.
│ │ │ +
91 * @tparam _Hash Hashing function object type, defaults to hash<_Value>.
│ │ │ +
92 * @tparam _Pred Predicate function object type, defaults
│ │ │ +
93 * to equal_to<_Value>.
│ │ │ +
94 * @tparam _Alloc Allocator type, defaults to
│ │ │ +
95 * std::allocator<std::pair<const _Key, _Tp>>.
│ │ │
96 *
│ │ │ -
97 * Base is _Hashtable, dispatched at compile time via template
│ │ │ -
98 * alias __uset_hashtable.
│ │ │ -
99 */
│ │ │ -
100 template<typename _Value,
│ │ │ -
101 typename _Hash = hash<_Value>,
│ │ │ -
102 typename _Pred = equal_to<_Value>,
│ │ │ -
103 typename _Alloc = allocator<_Value>>
│ │ │ -
│ │ │ - │ │ │ -
105 {
│ │ │ - │ │ │ -
107 _Hashtable _M_h;
│ │ │ -
108
│ │ │ -
109 public:
│ │ │ -
110 // typedefs:
│ │ │ -
111 ///@{
│ │ │ -
112 /// Public typedefs.
│ │ │ -
113 typedef typename _Hashtable::key_type key_type;
│ │ │ -
114 typedef typename _Hashtable::value_type value_type;
│ │ │ -
115 typedef typename _Hashtable::hasher hasher;
│ │ │ -
116 typedef typename _Hashtable::key_equal key_equal;
│ │ │ -
117 typedef typename _Hashtable::allocator_type allocator_type;
│ │ │ -
118 ///@}
│ │ │ -
119
│ │ │ -
120 ///@{
│ │ │ -
121 /// Iterator-related typedefs.
│ │ │ -
122 typedef typename _Hashtable::pointer pointer;
│ │ │ -
123 typedef typename _Hashtable::const_pointer const_pointer;
│ │ │ -
124 typedef typename _Hashtable::reference reference;
│ │ │ -
125 typedef typename _Hashtable::const_reference const_reference;
│ │ │ -
126 typedef typename _Hashtable::iterator iterator;
│ │ │ -
127 typedef typename _Hashtable::const_iterator const_iterator;
│ │ │ -
128 typedef typename _Hashtable::local_iterator local_iterator;
│ │ │ -
129 typedef typename _Hashtable::const_local_iterator const_local_iterator;
│ │ │ -
130 typedef typename _Hashtable::size_type size_type;
│ │ │ -
131 typedef typename _Hashtable::difference_type difference_type;
│ │ │ -
132 ///@}
│ │ │ -
133
│ │ │ -
134#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
135 using node_type = typename _Hashtable::node_type;
│ │ │ -
136 using insert_return_type = typename _Hashtable::insert_return_type;
│ │ │ -
137#endif
│ │ │ -
138
│ │ │ -
139 // construct/destroy/copy
│ │ │ -
140
│ │ │ -
141 /// Default constructor.
│ │ │ -
142 unordered_set() = default;
│ │ │ -
143
│ │ │ -
144 /**
│ │ │ -
145 * @brief Default constructor creates no elements.
│ │ │ -
146 * @param __n Minimal initial number of buckets.
│ │ │ -
147 * @param __hf A hash functor.
│ │ │ -
148 * @param __eql A key equality functor.
│ │ │ -
149 * @param __a An allocator object.
│ │ │ -
150 */
│ │ │ -
151 explicit
│ │ │ -
│ │ │ - │ │ │ -
153 const hasher& __hf = hasher(),
│ │ │ -
154 const key_equal& __eql = key_equal(),
│ │ │ -
155 const allocator_type& __a = allocator_type())
│ │ │ -
156 : _M_h(__n, __hf, __eql, __a)
│ │ │ -
157 { }
│ │ │ -
│ │ │ -
158
│ │ │ -
159 /**
│ │ │ -
160 * @brief Builds an %unordered_set from a range.
│ │ │ -
161 * @param __first An input iterator.
│ │ │ -
162 * @param __last An input iterator.
│ │ │ -
163 * @param __n Minimal initial number of buckets.
│ │ │ -
164 * @param __hf A hash functor.
│ │ │ -
165 * @param __eql A key equality functor.
│ │ │ -
166 * @param __a An allocator object.
│ │ │ -
167 *
│ │ │ -
168 * Create an %unordered_set consisting of copies of the elements from
│ │ │ -
169 * [__first,__last). This is linear in N (where N is
│ │ │ -
170 * distance(__first,__last)).
│ │ │ -
171 */
│ │ │ -
172 template<typename _InputIterator>
│ │ │ -
│ │ │ - │ │ │ -
174 size_type __n = 0,
│ │ │ -
175 const hasher& __hf = hasher(),
│ │ │ -
176 const key_equal& __eql = key_equal(),
│ │ │ -
177 const allocator_type& __a = allocator_type())
│ │ │ -
178 : _M_h(__first, __last, __n, __hf, __eql, __a)
│ │ │ -
179 { }
│ │ │ -
│ │ │ -
180
│ │ │ -
181 /// Copy constructor.
│ │ │ -
182 unordered_set(const unordered_set&) = default;
│ │ │ -
183
│ │ │ -
184 /// Move constructor.
│ │ │ - │ │ │ +
97 * Meets the requirements of a <a href="tables.html#65">container</a>, and
│ │ │ +
98 * <a href="tables.html#xx">unordered associative container</a>
│ │ │ +
99 *
│ │ │ +
100 * The resulting value type of the container is std::pair<const _Key, _Tp>.
│ │ │ +
101 *
│ │ │ +
102 * Base is _Hashtable, dispatched at compile time via template
│ │ │ +
103 * alias __umap_hashtable.
│ │ │ +
104 */
│ │ │ +
105 template<typename _Key, typename _Tp,
│ │ │ +
106 typename _Hash = hash<_Key>,
│ │ │ +
107 typename _Pred = equal_to<_Key>,
│ │ │ +
108 typename _Alloc = allocator<std::pair<const _Key, _Tp>>>
│ │ │ +
│ │ │ + │ │ │ +
110 {
│ │ │ + │ │ │ +
112 _Hashtable _M_h;
│ │ │ +
113
│ │ │ +
114 public:
│ │ │ +
115 // typedefs:
│ │ │ +
116 ///@{
│ │ │ +
117 /// Public typedefs.
│ │ │ +
118 typedef typename _Hashtable::key_type key_type;
│ │ │ +
119 typedef typename _Hashtable::value_type value_type;
│ │ │ +
120 typedef typename _Hashtable::mapped_type mapped_type;
│ │ │ +
121 typedef typename _Hashtable::hasher hasher;
│ │ │ +
122 typedef typename _Hashtable::key_equal key_equal;
│ │ │ +
123 typedef typename _Hashtable::allocator_type allocator_type;
│ │ │ +
124 ///@}
│ │ │ +
125
│ │ │ +
126 ///@{
│ │ │ +
127 /// Iterator-related typedefs.
│ │ │ +
128 typedef typename _Hashtable::pointer pointer;
│ │ │ +
129 typedef typename _Hashtable::const_pointer const_pointer;
│ │ │ +
130 typedef typename _Hashtable::reference reference;
│ │ │ +
131 typedef typename _Hashtable::const_reference const_reference;
│ │ │ +
132 typedef typename _Hashtable::iterator iterator;
│ │ │ +
133 typedef typename _Hashtable::const_iterator const_iterator;
│ │ │ +
134 typedef typename _Hashtable::local_iterator local_iterator;
│ │ │ +
135 typedef typename _Hashtable::const_local_iterator const_local_iterator;
│ │ │ +
136 typedef typename _Hashtable::size_type size_type;
│ │ │ +
137 typedef typename _Hashtable::difference_type difference_type;
│ │ │ +
138 ///@}
│ │ │ +
139
│ │ │ +
140#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ +
141 using node_type = typename _Hashtable::node_type;
│ │ │ +
142 using insert_return_type = typename _Hashtable::insert_return_type;
│ │ │ +
143#endif
│ │ │ +
144
│ │ │ +
145 //construct/destroy/copy
│ │ │ +
146
│ │ │ +
147 /// Default constructor.
│ │ │ +
148 unordered_map() = default;
│ │ │ +
149
│ │ │ +
150 /**
│ │ │ +
151 * @brief Default constructor creates no elements.
│ │ │ +
152 * @param __n Minimal initial number of buckets.
│ │ │ +
153 * @param __hf A hash functor.
│ │ │ +
154 * @param __eql A key equality functor.
│ │ │ +
155 * @param __a An allocator object.
│ │ │ +
156 */
│ │ │ +
157 explicit
│ │ │ +
│ │ │ + │ │ │ +
159 const hasher& __hf = hasher(),
│ │ │ +
160 const key_equal& __eql = key_equal(),
│ │ │ +
161 const allocator_type& __a = allocator_type())
│ │ │ +
162 : _M_h(__n, __hf, __eql, __a)
│ │ │ +
163 { }
│ │ │ +
│ │ │ +
164
│ │ │ +
165 /**
│ │ │ +
166 * @brief Builds an %unordered_map from a range.
│ │ │ +
167 * @param __first An input iterator.
│ │ │ +
168 * @param __last An input iterator.
│ │ │ +
169 * @param __n Minimal initial number of buckets.
│ │ │ +
170 * @param __hf A hash functor.
│ │ │ +
171 * @param __eql A key equality functor.
│ │ │ +
172 * @param __a An allocator object.
│ │ │ +
173 *
│ │ │ +
174 * Create an %unordered_map consisting of copies of the elements from
│ │ │ +
175 * [__first,__last). This is linear in N (where N is
│ │ │ +
176 * distance(__first,__last)).
│ │ │ +
177 */
│ │ │ +
178 template<typename _InputIterator>
│ │ │ +
│ │ │ + │ │ │ +
180 size_type __n = 0,
│ │ │ +
181 const hasher& __hf = hasher(),
│ │ │ +
182 const key_equal& __eql = key_equal(),
│ │ │ +
183 const allocator_type& __a = allocator_type())
│ │ │ +
184 : _M_h(__first, __last, __n, __hf, __eql, __a)
│ │ │ +
185 { }
│ │ │ +
│ │ │
186
│ │ │ -
187 /**
│ │ │ -
188 * @brief Creates an %unordered_set with no elements.
│ │ │ -
189 * @param __a An allocator object.
│ │ │ -
190 */
│ │ │ -
191 explicit
│ │ │ -
│ │ │ - │ │ │ -
193 : _M_h(__a)
│ │ │ -
194 { }
│ │ │ -
│ │ │ -
195
│ │ │ -
196 /*
│ │ │ -
197 * @brief Copy constructor with allocator argument.
│ │ │ -
198 * @param __uset Input %unordered_set to copy.
│ │ │ -
199 * @param __a An allocator object.
│ │ │ -
200 */
│ │ │ - │ │ │ -
202 const allocator_type& __a)
│ │ │ -
203 : _M_h(__uset._M_h, __a)
│ │ │ -
204 { }
│ │ │ -
205
│ │ │ -
206 /*
│ │ │ -
207 * @brief Move constructor with allocator argument.
│ │ │ -
208 * @param __uset Input %unordered_set to move.
│ │ │ -
209 * @param __a An allocator object.
│ │ │ -
210 */
│ │ │ - │ │ │ -
212 const allocator_type& __a)
│ │ │ -
213 noexcept( noexcept(_Hashtable(std::move(__uset._M_h), __a)) )
│ │ │ -
214 : _M_h(std::move(__uset._M_h), __a)
│ │ │ -
215 { }
│ │ │ -
216
│ │ │ -
217 /**
│ │ │ -
218 * @brief Builds an %unordered_set from an initializer_list.
│ │ │ -
219 * @param __l An initializer_list.
│ │ │ -
220 * @param __n Minimal initial number of buckets.
│ │ │ -
221 * @param __hf A hash functor.
│ │ │ -
222 * @param __eql A key equality functor.
│ │ │ -
223 * @param __a An allocator object.
│ │ │ -
224 *
│ │ │ -
225 * Create an %unordered_set consisting of copies of the elements in the
│ │ │ -
226 * list. This is linear in N (where N is @a __l.size()).
│ │ │ -
227 */
│ │ │ -
│ │ │ - │ │ │ -
229 size_type __n = 0,
│ │ │ -
230 const hasher& __hf = hasher(),
│ │ │ -
231 const key_equal& __eql = key_equal(),
│ │ │ -
232 const allocator_type& __a = allocator_type())
│ │ │ -
233 : _M_h(__l, __n, __hf, __eql, __a)
│ │ │ -
234 { }
│ │ │ -
│ │ │ -
235
│ │ │ -
236 unordered_set(size_type __n, const allocator_type& __a)
│ │ │ -
237 : unordered_set(__n, hasher(), key_equal(), __a)
│ │ │ -
238 { }
│ │ │ -
239
│ │ │ -
240 unordered_set(size_type __n, const hasher& __hf,
│ │ │ -
241 const allocator_type& __a)
│ │ │ -
242 : unordered_set(__n, __hf, key_equal(), __a)
│ │ │ -
243 { }
│ │ │ -
244
│ │ │ -
245 template<typename _InputIterator>
│ │ │ -
246 unordered_set(_InputIterator __first, _InputIterator __last,
│ │ │ -
247 size_type __n,
│ │ │ -
248 const allocator_type& __a)
│ │ │ -
249 : unordered_set(__first, __last, __n, hasher(), key_equal(), __a)
│ │ │ -
250 { }
│ │ │ -
251
│ │ │ -
252 template<typename _InputIterator>
│ │ │ -
253 unordered_set(_InputIterator __first, _InputIterator __last,
│ │ │ -
254 size_type __n, const hasher& __hf,
│ │ │ -
255 const allocator_type& __a)
│ │ │ -
256 : unordered_set(__first, __last, __n, __hf, key_equal(), __a)
│ │ │ -
257 { }
│ │ │ -
258
│ │ │ -
259 unordered_set(initializer_list<value_type> __l,
│ │ │ -
260 size_type __n,
│ │ │ -
261 const allocator_type& __a)
│ │ │ -
262 : unordered_set(__l, __n, hasher(), key_equal(), __a)
│ │ │ -
263 { }
│ │ │ +
187 /// Copy constructor.
│ │ │ +
188 unordered_map(const unordered_map&) = default;
│ │ │ +
189
│ │ │ +
190 /// Move constructor.
│ │ │ + │ │ │ +
192
│ │ │ +
193 /**
│ │ │ +
194 * @brief Creates an %unordered_map with no elements.
│ │ │ +
195 * @param __a An allocator object.
│ │ │ +
196 */
│ │ │ +
197 explicit
│ │ │ +
│ │ │ + │ │ │ +
199 : _M_h(__a)
│ │ │ +
200 { }
│ │ │ +
│ │ │ +
201
│ │ │ +
202 /*
│ │ │ +
203 * @brief Copy constructor with allocator argument.
│ │ │ +
204 * @param __uset Input %unordered_map to copy.
│ │ │ +
205 * @param __a An allocator object.
│ │ │ +
206 */
│ │ │ + │ │ │ +
208 const allocator_type& __a)
│ │ │ +
209 : _M_h(__umap._M_h, __a)
│ │ │ +
210 { }
│ │ │ +
211
│ │ │ +
212 /*
│ │ │ +
213 * @brief Move constructor with allocator argument.
│ │ │ +
214 * @param __uset Input %unordered_map to move.
│ │ │ +
215 * @param __a An allocator object.
│ │ │ +
216 */
│ │ │ + │ │ │ +
218 const allocator_type& __a)
│ │ │ +
219 noexcept( noexcept(_Hashtable(std::move(__umap._M_h), __a)) )
│ │ │ +
220 : _M_h(std::move(__umap._M_h), __a)
│ │ │ +
221 { }
│ │ │ +
222
│ │ │ +
223 /**
│ │ │ +
224 * @brief Builds an %unordered_map from an initializer_list.
│ │ │ +
225 * @param __l An initializer_list.
│ │ │ +
226 * @param __n Minimal initial number of buckets.
│ │ │ +
227 * @param __hf A hash functor.
│ │ │ +
228 * @param __eql A key equality functor.
│ │ │ +
229 * @param __a An allocator object.
│ │ │ +
230 *
│ │ │ +
231 * Create an %unordered_map consisting of copies of the elements in the
│ │ │ +
232 * list. This is linear in N (where N is @a __l.size()).
│ │ │ +
233 */
│ │ │ +
│ │ │ + │ │ │ +
235 size_type __n = 0,
│ │ │ +
236 const hasher& __hf = hasher(),
│ │ │ +
237 const key_equal& __eql = key_equal(),
│ │ │ +
238 const allocator_type& __a = allocator_type())
│ │ │ +
239 : _M_h(__l, __n, __hf, __eql, __a)
│ │ │ +
240 { }
│ │ │ +
│ │ │ +
241
│ │ │ +
242 unordered_map(size_type __n, const allocator_type& __a)
│ │ │ +
243 : unordered_map(__n, hasher(), key_equal(), __a)
│ │ │ +
244 { }
│ │ │ +
245
│ │ │ +
246 unordered_map(size_type __n, const hasher& __hf,
│ │ │ +
247 const allocator_type& __a)
│ │ │ +
248 : unordered_map(__n, __hf, key_equal(), __a)
│ │ │ +
249 { }
│ │ │ +
250
│ │ │ +
251 template<typename _InputIterator>
│ │ │ +
252 unordered_map(_InputIterator __first, _InputIterator __last,
│ │ │ +
253 size_type __n,
│ │ │ +
254 const allocator_type& __a)
│ │ │ +
255 : unordered_map(__first, __last, __n, hasher(), key_equal(), __a)
│ │ │ +
256 { }
│ │ │ +
257
│ │ │ +
258 template<typename _InputIterator>
│ │ │ +
259 unordered_map(_InputIterator __first, _InputIterator __last,
│ │ │ +
260 size_type __n, const hasher& __hf,
│ │ │ +
261 const allocator_type& __a)
│ │ │ +
262 : unordered_map(__first, __last, __n, __hf, key_equal(), __a)
│ │ │ +
263 { }
│ │ │
264
│ │ │ -
265 unordered_set(initializer_list<value_type> __l,
│ │ │ -
266 size_type __n, const hasher& __hf,
│ │ │ -
267 const allocator_type& __a)
│ │ │ -
268 : unordered_set(__l, __n, __hf, key_equal(), __a)
│ │ │ +
265 unordered_map(initializer_list<value_type> __l,
│ │ │ +
266 size_type __n,
│ │ │ +
267 const allocator_type& __a)
│ │ │ +
268 : unordered_map(__l, __n, hasher(), key_equal(), __a)
│ │ │
269 { }
│ │ │ -
270
│ │ │ -
271 /// Copy assignment operator.
│ │ │ - │ │ │ -
273 operator=(const unordered_set&) = default;
│ │ │ -
274
│ │ │ -
275 /// Move assignment operator.
│ │ │ - │ │ │ - │ │ │ -
278
│ │ │ -
279 /**
│ │ │ -
280 * @brief %Unordered_set list assignment operator.
│ │ │ -
281 * @param __l An initializer_list.
│ │ │ -
282 *
│ │ │ -
283 * This function fills an %unordered_set with copies of the elements in
│ │ │ -
284 * the initializer list @a __l.
│ │ │ -
285 *
│ │ │ -
286 * Note that the assignment completely changes the %unordered_set and
│ │ │ -
287 * that the resulting %unordered_set's size is the same as the number
│ │ │ -
288 * of elements assigned.
│ │ │ -
289 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
292 {
│ │ │ -
293 _M_h = __l;
│ │ │ -
294 return *this;
│ │ │ -
295 }
│ │ │ -
│ │ │ -
296
│ │ │ -
297 /// Returns the allocator object used by the %unordered_set.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
300 { return _M_h.get_allocator(); }
│ │ │ -
│ │ │ -
301
│ │ │ -
302 // size and capacity:
│ │ │ -
303
│ │ │ -
304 /// Returns true if the %unordered_set is empty.
│ │ │ -
305 _GLIBCXX_NODISCARD bool
│ │ │ -
│ │ │ -
306 empty() const noexcept
│ │ │ -
307 { return _M_h.empty(); }
│ │ │ -
│ │ │ -
308
│ │ │ -
309 /// Returns the size of the %unordered_set.
│ │ │ - │ │ │ -
│ │ │ -
311 size() const noexcept
│ │ │ -
312 { return _M_h.size(); }
│ │ │ -
│ │ │ -
313
│ │ │ -
314 /// Returns the maximum size of the %unordered_set.
│ │ │ - │ │ │ -
│ │ │ -
316 max_size() const noexcept
│ │ │ -
317 { return _M_h.max_size(); }
│ │ │ -
│ │ │ -
318
│ │ │ -
319 // iterators.
│ │ │ -
320
│ │ │ -
321 ///@{
│ │ │ -
322 /**
│ │ │ -
323 * Returns a read-only (constant) iterator that points to the first
│ │ │ -
324 * element in the %unordered_set.
│ │ │ -
325 */
│ │ │ - │ │ │ -
│ │ │ -
327 begin() noexcept
│ │ │ -
328 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
329
│ │ │ - │ │ │ -
│ │ │ -
331 begin() const noexcept
│ │ │ -
332 { return _M_h.begin(); }
│ │ │ +
270
│ │ │ +
271 unordered_map(initializer_list<value_type> __l,
│ │ │ +
272 size_type __n, const hasher& __hf,
│ │ │ +
273 const allocator_type& __a)
│ │ │ +
274 : unordered_map(__l, __n, __hf, key_equal(), __a)
│ │ │ +
275 { }
│ │ │ +
276
│ │ │ +
277 /// Copy assignment operator.
│ │ │ + │ │ │ +
279 operator=(const unordered_map&) = default;
│ │ │ +
280
│ │ │ +
281 /// Move assignment operator.
│ │ │ + │ │ │ + │ │ │ +
284
│ │ │ +
285 /**
│ │ │ +
286 * @brief %Unordered_map list assignment operator.
│ │ │ +
287 * @param __l An initializer_list.
│ │ │ +
288 *
│ │ │ +
289 * This function fills an %unordered_map with copies of the elements in
│ │ │ +
290 * the initializer list @a __l.
│ │ │ +
291 *
│ │ │ +
292 * Note that the assignment completely changes the %unordered_map and
│ │ │ +
293 * that the resulting %unordered_map's size is the same as the number
│ │ │ +
294 * of elements assigned.
│ │ │ +
295 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
298 {
│ │ │ +
299 _M_h = __l;
│ │ │ +
300 return *this;
│ │ │ +
301 }
│ │ │ +
│ │ │ +
302
│ │ │ +
303 /// Returns the allocator object used by the %unordered_map.
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
306 { return _M_h.get_allocator(); }
│ │ │ +
│ │ │ +
307
│ │ │ +
308 // size and capacity:
│ │ │ +
309
│ │ │ +
310 /// Returns true if the %unordered_map is empty.
│ │ │ +
311 _GLIBCXX_NODISCARD bool
│ │ │ +
│ │ │ +
312 empty() const noexcept
│ │ │ +
313 { return _M_h.empty(); }
│ │ │ +
│ │ │ +
314
│ │ │ +
315 /// Returns the size of the %unordered_map.
│ │ │ + │ │ │ +
│ │ │ +
317 size() const noexcept
│ │ │ +
318 { return _M_h.size(); }
│ │ │ +
│ │ │ +
319
│ │ │ +
320 /// Returns the maximum size of the %unordered_map.
│ │ │ + │ │ │ +
│ │ │ +
322 max_size() const noexcept
│ │ │ +
323 { return _M_h.max_size(); }
│ │ │ +
│ │ │ +
324
│ │ │ +
325 // iterators.
│ │ │ +
326
│ │ │ +
327 /**
│ │ │ +
328 * Returns a read/write iterator that points to the first element in the
│ │ │ +
329 * %unordered_map.
│ │ │ +
330 */
│ │ │ + │ │ │ +
│ │ │ +
332 begin() noexcept
│ │ │ +
333 { return _M_h.begin(); }
│ │ │
│ │ │ -
333 ///@}
│ │ │ -
334
│ │ │ +
334
│ │ │
335 ///@{
│ │ │
336 /**
│ │ │ -
337 * Returns a read-only (constant) iterator that points one past the last
│ │ │ -
338 * element in the %unordered_set.
│ │ │ +
337 * Returns a read-only (constant) iterator that points to the first
│ │ │ +
338 * element in the %unordered_map.
│ │ │
339 */
│ │ │ - │ │ │ + │ │ │
│ │ │ -
341 end() noexcept
│ │ │ -
342 { return _M_h.end(); }
│ │ │ +
341 begin() const noexcept
│ │ │ +
342 { return _M_h.begin(); }
│ │ │
│ │ │
343
│ │ │ - │ │ │ + │ │ │
│ │ │ -
345 end() const noexcept
│ │ │ -
346 { return _M_h.end(); }
│ │ │ +
345 cbegin() const noexcept
│ │ │ +
346 { return _M_h.begin(); }
│ │ │
│ │ │
347 ///@}
│ │ │
348
│ │ │
349 /**
│ │ │ -
350 * Returns a read-only (constant) iterator that points to the first
│ │ │ -
351 * element in the %unordered_set.
│ │ │ +
350 * Returns a read/write iterator that points one past the last element in
│ │ │ +
351 * the %unordered_map.
│ │ │
352 */
│ │ │ - │ │ │ + │ │ │
│ │ │ -
354 cbegin() const noexcept
│ │ │ -
355 { return _M_h.begin(); }
│ │ │ +
354 end() noexcept
│ │ │ +
355 { return _M_h.end(); }
│ │ │
│ │ │
356
│ │ │ -
357 /**
│ │ │ -
358 * Returns a read-only (constant) iterator that points one past the last
│ │ │ -
359 * element in the %unordered_set.
│ │ │ -
360 */
│ │ │ - │ │ │ -
│ │ │ -
362 cend() const noexcept
│ │ │ -
363 { return _M_h.end(); }
│ │ │ -
│ │ │ -
364
│ │ │ -
365 // modifiers.
│ │ │ -
366
│ │ │ -
367 /**
│ │ │ -
368 * @brief Attempts to build and insert an element into the
│ │ │ -
369 * %unordered_set.
│ │ │ -
370 * @param __args Arguments used to generate an element.
│ │ │ -
371 * @return A pair, of which the first element is an iterator that points
│ │ │ -
372 * to the possibly inserted element, and the second is a bool
│ │ │ -
373 * that is true if the element was actually inserted.
│ │ │ -
374 *
│ │ │ -
375 * This function attempts to build and insert an element into the
│ │ │ -
376 * %unordered_set. An %unordered_set relies on unique keys and thus an
│ │ │ -
377 * element is only inserted if it is not already present in the
│ │ │ -
378 * %unordered_set.
│ │ │ -
379 *
│ │ │ -
380 * Insertion requires amortized constant time.
│ │ │ -
381 */
│ │ │ -
382 template<typename... _Args>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
385 { return _M_h.emplace(std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
386
│ │ │ -
387 /**
│ │ │ -
388 * @brief Attempts to insert an element into the %unordered_set.
│ │ │ -
389 * @param __pos An iterator that serves as a hint as to where the
│ │ │ -
390 * element should be inserted.
│ │ │ -
391 * @param __args Arguments used to generate the element to be
│ │ │ -
392 * inserted.
│ │ │ -
393 * @return An iterator that points to the element with key equivalent to
│ │ │ -
394 * the one generated from @a __args (may or may not be the
│ │ │ -
395 * element itself).
│ │ │ -
396 *
│ │ │ -
397 * This function is not concerned about whether the insertion took place,
│ │ │ -
398 * and thus does not return a boolean like the single-argument emplace()
│ │ │ -
399 * does. Note that the first parameter is only a hint and can
│ │ │ -
400 * potentially improve the performance of the insertion process. A bad
│ │ │ -
401 * hint would cause no gains in efficiency.
│ │ │ -
402 *
│ │ │ -
403 * For more on @a hinting, see:
│ │ │ -
404 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
405 *
│ │ │ -
406 * Insertion requires amortized constant time.
│ │ │ -
407 */
│ │ │ -
408 template<typename... _Args>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
411 { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
412
│ │ │ -
413 ///@{
│ │ │ -
414 /**
│ │ │ -
415 * @brief Attempts to insert an element into the %unordered_set.
│ │ │ -
416 * @param __x Element to be inserted.
│ │ │ -
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 insert an element into the %unordered_set.
│ │ │ -
422 * An %unordered_set relies on unique keys and thus an element is only
│ │ │ -
423 * inserted if it is not already present in the %unordered_set.
│ │ │ -
424 *
│ │ │ -
425 * Insertion requires amortized constant time.
│ │ │ -
426 */
│ │ │ - │ │ │ -
│ │ │ -
428 insert(const value_type& __x)
│ │ │ -
429 { return _M_h.insert(__x); }
│ │ │ -
│ │ │ -
430
│ │ │ - │ │ │ +
357 ///@{
│ │ │ +
358 /**
│ │ │ +
359 * Returns a read-only (constant) iterator that points one past the last
│ │ │ +
360 * element in the %unordered_map.
│ │ │ +
361 */
│ │ │ + │ │ │ +
│ │ │ +
363 end() const noexcept
│ │ │ +
364 { return _M_h.end(); }
│ │ │ +
│ │ │ +
365
│ │ │ + │ │ │ +
│ │ │ +
367 cend() const noexcept
│ │ │ +
368 { return _M_h.end(); }
│ │ │ +
│ │ │ +
369 ///@}
│ │ │ +
370
│ │ │ +
371 // modifiers.
│ │ │ +
372
│ │ │ +
373 /**
│ │ │ +
374 * @brief Attempts to build and insert a std::pair into the
│ │ │ +
375 * %unordered_map.
│ │ │ +
376 *
│ │ │ +
377 * @param __args Arguments used to generate a new pair instance (see
│ │ │ +
378 * std::piecewise_contruct for passing arguments to each
│ │ │ +
379 * part of the pair constructor).
│ │ │ +
380 *
│ │ │ +
381 * @return A pair, of which the first element is an iterator that points
│ │ │ +
382 * to the possibly inserted pair, and the second is a bool that
│ │ │ +
383 * is true if the pair was actually inserted.
│ │ │ +
384 *
│ │ │ +
385 * This function attempts to build and insert a (key, value) %pair into
│ │ │ +
386 * the %unordered_map.
│ │ │ +
387 * An %unordered_map relies on unique keys and thus a %pair is only
│ │ │ +
388 * inserted if its first element (the key) is not already present in the
│ │ │ +
389 * %unordered_map.
│ │ │ +
390 *
│ │ │ +
391 * Insertion requires amortized constant time.
│ │ │ +
392 */
│ │ │ +
393 template<typename... _Args>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
396 { return _M_h.emplace(std::forward<_Args>(__args)...); }
│ │ │ +
│ │ │ +
397
│ │ │ +
398 /**
│ │ │ +
399 * @brief Attempts to build and insert a std::pair into the
│ │ │ +
400 * %unordered_map.
│ │ │ +
401 *
│ │ │ +
402 * @param __pos An iterator that serves as a hint as to where the pair
│ │ │ +
403 * should be inserted.
│ │ │ +
404 * @param __args Arguments used to generate a new pair instance (see
│ │ │ +
405 * std::piecewise_contruct for passing arguments to each
│ │ │ +
406 * part of the pair constructor).
│ │ │ +
407 * @return An iterator that points to the element with key of the
│ │ │ +
408 * std::pair built from @a __args (may or may not be that
│ │ │ +
409 * std::pair).
│ │ │ +
410 *
│ │ │ +
411 * This function is not concerned about whether the insertion took place,
│ │ │ +
412 * and thus does not return a boolean like the single-argument emplace()
│ │ │ +
413 * does.
│ │ │ +
414 * Note that the first parameter is only a hint and can potentially
│ │ │ +
415 * improve the performance of the insertion process. A bad hint would
│ │ │ +
416 * cause no gains in efficiency.
│ │ │ +
417 *
│ │ │ +
418 * See
│ │ │ +
419 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ +
420 * for more on @a hinting.
│ │ │ +
421 *
│ │ │ +
422 * Insertion requires amortized constant time.
│ │ │ +
423 */
│ │ │ +
424 template<typename... _Args>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
427 { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
│ │ │ +
│ │ │ +
428
│ │ │ +
429#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ +
430 /// Extract a node.
│ │ │ +
431 node_type
│ │ │
│ │ │ - │ │ │ -
433 { return _M_h.insert(std::move(__x)); }
│ │ │ + │ │ │ +
433 {
│ │ │ +
434 __glibcxx_assert(__pos != end());
│ │ │ +
435 return _M_h.extract(__pos);
│ │ │ +
436 }
│ │ │ +
│ │ │ +
437
│ │ │ +
438 /// Extract a node.
│ │ │ +
439 node_type
│ │ │ +
│ │ │ + │ │ │ +
441 { return _M_h.extract(__key); }
│ │ │ +
│ │ │ +
442
│ │ │ +
443 /// Re-insert an extracted node.
│ │ │ +
444 insert_return_type
│ │ │ +
│ │ │ +
445 insert(node_type&& __nh)
│ │ │ +
446 { return _M_h._M_reinsert_node(std::move(__nh)); }
│ │ │ +
│ │ │ +
447
│ │ │ +
448 /// Re-insert an extracted node.
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
451 { return _M_h._M_reinsert_node(std::move(__nh)).position; }
│ │ │ +
│ │ │ +
452#endif // node_extract
│ │ │ +
453
│ │ │ +
454#ifdef __glibcxx_unordered_map_try_emplace // C++ >= 17 && HOSTED
│ │ │ +
455 /**
│ │ │ +
456 * @brief Attempts to build and insert a std::pair into the
│ │ │ +
457 * %unordered_map.
│ │ │ +
458 *
│ │ │ +
459 * @param __k Key to use for finding a possibly existing pair in
│ │ │ +
460 * the unordered_map.
│ │ │ +
461 * @param __args Arguments used to generate the .second for a
│ │ │ +
462 * new pair instance.
│ │ │ +
463 *
│ │ │ +
464 * @return A pair, of which the first element is an iterator that points
│ │ │ +
465 * to the possibly inserted pair, and the second is a bool that
│ │ │ +
466 * is true if the pair was actually inserted.
│ │ │ +
467 *
│ │ │ +
468 * This function attempts to build and insert a (key, value) %pair into
│ │ │ +
469 * the %unordered_map.
│ │ │ +
470 * An %unordered_map relies on unique keys and thus a %pair is only
│ │ │ +
471 * inserted if its first element (the key) is not already present in the
│ │ │ +
472 * %unordered_map.
│ │ │ +
473 * If a %pair is not inserted, this function has no effect.
│ │ │ +
474 *
│ │ │ +
475 * Insertion requires amortized constant time.
│ │ │ +
476 */
│ │ │ +
477 template <typename... _Args>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
480 {
│ │ │ +
481 return _M_h.try_emplace(cend(), __k, std::forward<_Args>(__args)...);
│ │ │ +
482 }
│ │ │ +
│ │ │ +
483
│ │ │ +
484 // move-capable overload
│ │ │ +
485 template <typename... _Args>
│ │ │ + │ │ │ + │ │ │ +
488 {
│ │ │ +
489 return _M_h.try_emplace(cend(), std::move(__k),
│ │ │ + │ │ │ +
491 }
│ │ │ +
492
│ │ │ +
493 /**
│ │ │ +
494 * @brief Attempts to build and insert a std::pair into the
│ │ │ +
495 * %unordered_map.
│ │ │ +
496 *
│ │ │ +
497 * @param __hint An iterator that serves as a hint as to where the pair
│ │ │ +
498 * should be inserted.
│ │ │ +
499 * @param __k Key to use for finding a possibly existing pair in
│ │ │ +
500 * the unordered_map.
│ │ │ +
501 * @param __args Arguments used to generate the .second for a
│ │ │ +
502 * new pair instance.
│ │ │ +
503 * @return An iterator that points to the element with key of the
│ │ │ +
504 * std::pair built from @a __args (may or may not be that
│ │ │ +
505 * std::pair).
│ │ │ +
506 *
│ │ │ +
507 * This function is not concerned about whether the insertion took place,
│ │ │ +
508 * and thus does not return a boolean like the single-argument emplace()
│ │ │ +
509 * does. However, if insertion did not take place,
│ │ │ +
510 * this function has no effect.
│ │ │ +
511 * Note that the first parameter is only a hint and can potentially
│ │ │ +
512 * improve the performance of the insertion process. A bad hint would
│ │ │ +
513 * cause no gains in efficiency.
│ │ │ +
514 *
│ │ │ +
515 * See
│ │ │ +
516 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ +
517 * for more on @a hinting.
│ │ │ +
518 *
│ │ │ +
519 * Insertion requires amortized constant time.
│ │ │ +
520 */
│ │ │ +
521 template <typename... _Args>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
524 _Args&&... __args)
│ │ │ +
525 {
│ │ │ +
526 return _M_h.try_emplace(__hint, __k,
│ │ │ +
527 std::forward<_Args>(__args)...).first;
│ │ │ +
528 }
│ │ │ +
│ │ │ +
529
│ │ │ +
530 // move-capable overload
│ │ │ +
531 template <typename... _Args>
│ │ │ + │ │ │ + │ │ │ +
534 {
│ │ │ +
535 return _M_h.try_emplace(__hint, std::move(__k),
│ │ │ +
536 std::forward<_Args>(__args)...).first;
│ │ │ +
537 }
│ │ │ +
538#endif // __glibcxx_unordered_map_try_emplace
│ │ │ +
539
│ │ │ +
540 ///@{
│ │ │ +
541 /**
│ │ │ +
542 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ +
543
│ │ │ +
544 * @param __x Pair to be inserted (see std::make_pair for easy
│ │ │ +
545 * creation of pairs).
│ │ │ +
546 *
│ │ │ +
547 * @return A pair, of which the first element is an iterator that
│ │ │ +
548 * points to the possibly inserted pair, and the second is
│ │ │ +
549 * a bool that is true if the pair was actually inserted.
│ │ │ +
550 *
│ │ │ +
551 * This function attempts to insert a (key, value) %pair into the
│ │ │ +
552 * %unordered_map. An %unordered_map relies on unique keys and thus a
│ │ │ +
553 * %pair is only inserted if its first element (the key) is not already
│ │ │ +
554 * present in the %unordered_map.
│ │ │ +
555 *
│ │ │ +
556 * Insertion requires amortized constant time.
│ │ │ +
557 */
│ │ │ + │ │ │ +
│ │ │ +
559 insert(const value_type& __x)
│ │ │ +
560 { return _M_h.insert(__x); }
│ │ │ +
│ │ │ +
561
│ │ │ +
562 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
563 // 2354. Unnecessary copying when inserting into maps with braced-init
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
566 { return _M_h.insert(std::move(__x)); }
│ │ │ +
│ │ │ +
567
│ │ │ +
568 template<typename _Pair>
│ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ +
572 { return _M_h.emplace(std::forward<_Pair>(__x)); }
│ │ │ +
│ │ │ +
573 ///@}
│ │ │ +
574
│ │ │ +
575 ///@{
│ │ │ +
576 /**
│ │ │ +
577 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ +
578 * @param __hint An iterator that serves as a hint as to where the
│ │ │ +
579 * pair should be inserted.
│ │ │ +
580 * @param __x Pair to be inserted (see std::make_pair for easy creation
│ │ │ +
581 * of pairs).
│ │ │ +
582 * @return An iterator that points to the element with key of
│ │ │ +
583 * @a __x (may or may not be the %pair passed in).
│ │ │ +
584 *
│ │ │ +
585 * This function is not concerned about whether the insertion took place,
│ │ │ +
586 * and thus does not return a boolean like the single-argument insert()
│ │ │ +
587 * does. Note that the first parameter is only a hint and can
│ │ │ +
588 * potentially improve the performance of the insertion process. A bad
│ │ │ +
589 * hint would cause no gains in efficiency.
│ │ │ +
590 *
│ │ │ +
591 * See
│ │ │ +
592 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ +
593 * for more on @a hinting.
│ │ │ +
594 *
│ │ │ +
595 * Insertion requires amortized constant time.
│ │ │ +
596 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
599 { return _M_h.insert(__hint, __x); }
│ │ │
│ │ │ -
434 ///@}
│ │ │ -
435
│ │ │ -
436 ///@{
│ │ │ -
437 /**
│ │ │ -
438 * @brief Attempts to insert an element into the %unordered_set.
│ │ │ -
439 * @param __hint An iterator that serves as a hint as to where the
│ │ │ -
440 * element should be inserted.
│ │ │ -
441 * @param __x Element to be inserted.
│ │ │ -
442 * @return An iterator that points to the element with key of
│ │ │ -
443 * @a __x (may or may not be the element passed in).
│ │ │ -
444 *
│ │ │ -
445 * This function is not concerned about whether the insertion took place,
│ │ │ -
446 * and thus does not return a boolean like the single-argument insert()
│ │ │ -
447 * does. Note that the first parameter is only a hint and can
│ │ │ -
448 * potentially improve the performance of the insertion process. A bad
│ │ │ -
449 * hint would cause no gains in efficiency.
│ │ │ -
450 *
│ │ │ -
451 * For more on @a hinting, see:
│ │ │ -
452 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
453 *
│ │ │ -
454 * Insertion requires amortized constant.
│ │ │ -
455 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
458 { return _M_h.insert(__hint, __x); }
│ │ │ -
│ │ │ -
459
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
462 { return _M_h.insert(__hint, std::move(__x)); }
│ │ │ -
│ │ │ -
463 ///@}
│ │ │ -
464
│ │ │ -
465 /**
│ │ │ -
466 * @brief A template function that attempts to insert a range of
│ │ │ -
467 * elements.
│ │ │ -
468 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
469 * inserted.
│ │ │ -
470 * @param __last Iterator pointing to the end of the range.
│ │ │ -
471 *
│ │ │ -
472 * Complexity similar to that of the range constructor.
│ │ │ -
473 */
│ │ │ -
474 template<typename _InputIterator>
│ │ │ -
475 void
│ │ │ -
│ │ │ - │ │ │ -
477 { _M_h.insert(__first, __last); }
│ │ │ -
│ │ │ -
478
│ │ │ -
479 /**
│ │ │ -
480 * @brief Attempts to insert a list of elements into the %unordered_set.
│ │ │ -
481 * @param __l A std::initializer_list<value_type> of elements
│ │ │ -
482 * to be inserted.
│ │ │ -
483 *
│ │ │ -
484 * Complexity similar to that of the range constructor.
│ │ │ -
485 */
│ │ │ -
486 void
│ │ │ -
│ │ │ - │ │ │ -
488 { _M_h.insert(__l); }
│ │ │ -
│ │ │ -
489
│ │ │ -
490#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
491 /// Extract a node.
│ │ │ -
492 node_type
│ │ │ -
│ │ │ - │ │ │ -
494 {
│ │ │ -
495 __glibcxx_assert(__pos != end());
│ │ │ -
496 return _M_h.extract(__pos);
│ │ │ -
497 }
│ │ │ -
│ │ │ -
498
│ │ │ -
499 /// Extract a node.
│ │ │ -
500 node_type
│ │ │ -
│ │ │ - │ │ │ -
502 { return _M_h.extract(__key); }
│ │ │ -
│ │ │ -
503
│ │ │ -
504 /// Re-insert an extracted node.
│ │ │ -
505 insert_return_type
│ │ │ -
│ │ │ -
506 insert(node_type&& __nh)
│ │ │ -
507 { return _M_h._M_reinsert_node(std::move(__nh)); }
│ │ │ -
│ │ │ -
508
│ │ │ -
509 /// Re-insert an extracted node.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
512 { return _M_h._M_reinsert_node(std::move(__nh)).position; }
│ │ │ -
│ │ │ -
513#endif // node_extract
│ │ │ -
514
│ │ │ -
515 ///@{
│ │ │ -
516 /**
│ │ │ -
517 * @brief Erases an element from an %unordered_set.
│ │ │ -
518 * @param __position An iterator pointing to the element to be erased.
│ │ │ -
519 * @return An iterator pointing to the element immediately following
│ │ │ -
520 * @a __position prior to the element being erased. If no such
│ │ │ -
521 * element exists, end() is returned.
│ │ │ -
522 *
│ │ │ -
523 * This function erases an element, pointed to by the given iterator,
│ │ │ -
524 * from an %unordered_set. Note that this function only erases the
│ │ │ -
525 * element, and that if the element is itself a pointer, the pointed-to
│ │ │ -
526 * memory is not touched in any way. Managing the pointer is the user's
│ │ │ -
527 * responsibility.
│ │ │ -
528 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
531 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
532
│ │ │ -
533 // LWG 2059.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
536 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
537 ///@}
│ │ │ -
538
│ │ │ -
539 /**
│ │ │ -
540 * @brief Erases elements according to the provided key.
│ │ │ -
541 * @param __x Key of element to be erased.
│ │ │ -
542 * @return The number of elements erased.
│ │ │ -
543 *
│ │ │ -
544 * This function erases all the elements located by the given key from
│ │ │ -
545 * an %unordered_set. For an %unordered_set the result of this function
│ │ │ -
546 * can only be 0 (not present) or 1 (present).
│ │ │ -
547 * Note that this function only erases the element, and that if
│ │ │ -
548 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ -
549 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
550 */
│ │ │ - │ │ │ -
│ │ │ -
552 erase(const key_type& __x)
│ │ │ -
553 { return _M_h.erase(__x); }
│ │ │ -
│ │ │ -
554
│ │ │ -
555 /**
│ │ │ -
556 * @brief Erases a [__first,__last) range of elements from an
│ │ │ -
557 * %unordered_set.
│ │ │ -
558 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
559 * erased.
│ │ │ -
560 * @param __last Iterator pointing to the end of the range to
│ │ │ -
561 * be erased.
│ │ │ -
562 * @return The iterator @a __last.
│ │ │ -
563 *
│ │ │ -
564 * This function erases a sequence of elements from an %unordered_set.
│ │ │ -
565 * Note that this function only erases the element, and that if
│ │ │ -
566 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ -
567 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
568 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
571 { return _M_h.erase(__first, __last); }
│ │ │ -
│ │ │ -
572
│ │ │ -
573 /**
│ │ │ -
574 * Erases all elements in an %unordered_set. Note that this function only
│ │ │ -
575 * erases the elements, and that if the elements themselves are pointers,
│ │ │ -
576 * the pointed-to memory is not touched in any way. Managing the pointer
│ │ │ -
577 * is the user's responsibility.
│ │ │ -
578 */
│ │ │ -
579 void
│ │ │ -
│ │ │ -
580 clear() noexcept
│ │ │ -
581 { _M_h.clear(); }
│ │ │ -
│ │ │ -
582
│ │ │ -
583 /**
│ │ │ -
584 * @brief Swaps data with another %unordered_set.
│ │ │ -
585 * @param __x An %unordered_set of the same element and allocator
│ │ │ -
586 * types.
│ │ │ -
587 *
│ │ │ -
588 * This exchanges the elements between two sets in constant time.
│ │ │ -
589 * Note that the global std::swap() function is specialized such that
│ │ │ -
590 * std::swap(s1,s2) will feed to this function.
│ │ │ -
591 */
│ │ │ -
592 void
│ │ │ -
│ │ │ - │ │ │ -
594 noexcept( noexcept(_M_h.swap(__x._M_h)) )
│ │ │ -
595 { _M_h.swap(__x._M_h); }
│ │ │ -
│ │ │ -
596
│ │ │ -
597#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
598 template<typename, typename, typename>
│ │ │ -
599 friend class std::_Hash_merge_helper;
│ │ │
600
│ │ │ -
601 template<typename _H2, typename _P2>
│ │ │ -
602 void
│ │ │ - │ │ │ -
604 {
│ │ │ - │ │ │ -
606 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ -
607 }
│ │ │ -
608
│ │ │ -
609 template<typename _H2, typename _P2>
│ │ │ -
610 void
│ │ │ -
611 merge(unordered_set<_Value, _H2, _P2, _Alloc>&& __source)
│ │ │ -
612 { merge(__source); }
│ │ │ -
613
│ │ │ -
614 template<typename _H2, typename _P2>
│ │ │ -
615 void
│ │ │ -
616 merge(unordered_multiset<_Value, _H2, _P2, _Alloc>& __source)
│ │ │ -
617 {
│ │ │ -
618 using _Merge_helper = _Hash_merge_helper<unordered_set, _H2, _P2>;
│ │ │ -
619 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ -
620 }
│ │ │ -
621
│ │ │ -
622 template<typename _H2, typename _P2>
│ │ │ +
601 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
602 // 2354. Unnecessary copying when inserting into maps with braced-init
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
605 { return _M_h.insert(__hint, std::move(__x)); }
│ │ │ +
│ │ │ +
606
│ │ │ +
607 template<typename _Pair>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
610 { return _M_h.emplace_hint(__hint, std::forward<_Pair>(__x)); }
│ │ │ +
│ │ │ +
611 ///@}
│ │ │ +
612
│ │ │ +
613 /**
│ │ │ +
614 * @brief A template function that attempts to insert a range of
│ │ │ +
615 * elements.
│ │ │ +
616 * @param __first Iterator pointing to the start of the range to be
│ │ │ +
617 * inserted.
│ │ │ +
618 * @param __last Iterator pointing to the end of the range.
│ │ │ +
619 *
│ │ │ +
620 * Complexity similar to that of the range constructor.
│ │ │ +
621 */
│ │ │ +
622 template<typename _InputIterator>
│ │ │
623 void
│ │ │ -
624 merge(unordered_multiset<_Value, _H2, _P2, _Alloc>&& __source)
│ │ │ -
625 { merge(__source); }
│ │ │ -
626#endif // node_extract
│ │ │ -
627
│ │ │ -
628 // observers.
│ │ │ -
629
│ │ │ -
630 /// Returns the hash functor object with which the %unordered_set was
│ │ │ -
631 /// constructed.
│ │ │ -
632 hasher
│ │ │ -
│ │ │ - │ │ │ -
634 { return _M_h.hash_function(); }
│ │ │ -
│ │ │ -
635
│ │ │ -
636 /// Returns the key comparison object with which the %unordered_set was
│ │ │ -
637 /// constructed.
│ │ │ - │ │ │ -
│ │ │ -
639 key_eq() const
│ │ │ -
640 { return _M_h.key_eq(); }
│ │ │ -
│ │ │ -
641
│ │ │ -
642 // lookup.
│ │ │ -
643
│ │ │ -
644 ///@{
│ │ │ -
645 /**
│ │ │ -
646 * @brief Tries to locate an element in an %unordered_set.
│ │ │ -
647 * @param __x Element to be located.
│ │ │ -
648 * @return Iterator pointing to sought-after element, or end() if not
│ │ │ -
649 * found.
│ │ │ +
│ │ │ + │ │ │ +
625 { _M_h.insert(__first, __last); }
│ │ │ +
│ │ │ +
626
│ │ │ +
627 /**
│ │ │ +
628 * @brief Attempts to insert a list of elements into the %unordered_map.
│ │ │ +
629 * @param __l A std::initializer_list<value_type> of elements
│ │ │ +
630 * to be inserted.
│ │ │ +
631 *
│ │ │ +
632 * Complexity similar to that of the range constructor.
│ │ │ +
633 */
│ │ │ +
634 void
│ │ │ +
│ │ │ + │ │ │ +
636 { _M_h.insert(__l); }
│ │ │ +
│ │ │ +
637
│ │ │ +
638
│ │ │ +
639#ifdef __glibcxx_unordered_map_try_emplace // >= C++17 && HOSTED
│ │ │ +
640 /**
│ │ │ +
641 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ +
642 * @param __k Key to use for finding a possibly existing pair in
│ │ │ +
643 * the map.
│ │ │ +
644 * @param __obj Argument used to generate the .second for a pair
│ │ │ +
645 * instance.
│ │ │ +
646 *
│ │ │ +
647 * @return A pair, of which the first element is an iterator that
│ │ │ +
648 * points to the possibly inserted pair, and the second is
│ │ │ +
649 * a bool that is true if the pair was actually inserted.
│ │ │
650 *
│ │ │ -
651 * This function takes a key and tries to locate the element with which
│ │ │ -
652 * the key matches. If successful the function returns an iterator
│ │ │ -
653 * pointing to the sought after element. If unsuccessful it returns the
│ │ │ -
654 * past-the-end ( @c end() ) iterator.
│ │ │ -
655 */
│ │ │ - │ │ │ -
│ │ │ -
657 find(const key_type& __x)
│ │ │ -
658 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
659
│ │ │ -
660#if __cplusplus > 201703L
│ │ │ -
661 template<typename _Kt>
│ │ │ -
662 auto
│ │ │ -
│ │ │ -
663 find(const _Kt& __k)
│ │ │ -
664 -> decltype(_M_h._M_find_tr(__k))
│ │ │ -
665 { return _M_h._M_find_tr(__k); }
│ │ │ -
│ │ │ -
666#endif
│ │ │ -
667
│ │ │ - │ │ │ -
│ │ │ -
669 find(const key_type& __x) const
│ │ │ -
670 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
671
│ │ │ -
672#if __cplusplus > 201703L
│ │ │ -
673 template<typename _Kt>
│ │ │ -
674 auto
│ │ │ -
│ │ │ -
675 find(const _Kt& __k) const
│ │ │ -
676 -> decltype(_M_h._M_find_tr(__k))
│ │ │ -
677 { return _M_h._M_find_tr(__k); }
│ │ │ -
│ │ │ -
678#endif
│ │ │ -
679 ///@}
│ │ │ -
680
│ │ │ -
681 ///@{
│ │ │ -
682 /**
│ │ │ -
683 * @brief Finds the number of elements.
│ │ │ -
684 * @param __x Element to located.
│ │ │ -
685 * @return Number of elements with specified key.
│ │ │ -
686 *
│ │ │ -
687 * This function only makes sense for unordered_multisets; for
│ │ │ -
688 * unordered_set the result will either be 0 (not present) or 1
│ │ │ -
689 * (present).
│ │ │ -
690 */
│ │ │ - │ │ │ -
│ │ │ -
692 count(const key_type& __x) const
│ │ │ -
693 { return _M_h.count(__x); }
│ │ │ -
│ │ │ -
694
│ │ │ -
695#if __cplusplus > 201703L
│ │ │ -
696 template<typename _Kt>
│ │ │ -
697 auto
│ │ │ -
│ │ │ -
698 count(const _Kt& __k) const
│ │ │ -
699 -> decltype(_M_h._M_count_tr(__k))
│ │ │ -
700 { return _M_h._M_count_tr(__k); }
│ │ │ -
│ │ │ -
701#endif
│ │ │ -
702 ///@}
│ │ │ -
703
│ │ │ -
704#if __cplusplus > 201703L
│ │ │ -
705 ///@{
│ │ │ -
706 /**
│ │ │ -
707 * @brief Finds whether an element with the given key exists.
│ │ │ -
708 * @param __x Key of elements to be located.
│ │ │ -
709 * @return True if there is any element with the specified key.
│ │ │ -
710 */
│ │ │ -
711 bool
│ │ │ -
│ │ │ -
712 contains(const key_type& __x) const
│ │ │ -
713 { return _M_h.find(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
714
│ │ │ -
715 template<typename _Kt>
│ │ │ -
716 auto
│ │ │ -
│ │ │ -
717 contains(const _Kt& __k) const
│ │ │ -
718 -> decltype(_M_h._M_find_tr(__k), void(), true)
│ │ │ -
719 { return _M_h._M_find_tr(__k) != _M_h.end(); }
│ │ │ -
│ │ │ -
720 ///@}
│ │ │ -
721#endif
│ │ │ -
722
│ │ │ -
723 ///@{
│ │ │ -
724 /**
│ │ │ -
725 * @brief Finds a subsequence matching given key.
│ │ │ -
726 * @param __x Key to be located.
│ │ │ -
727 * @return Pair of iterators that possibly points to the subsequence
│ │ │ -
728 * matching given key.
│ │ │ -
729 *
│ │ │ -
730 * This function probably only makes sense for multisets.
│ │ │ -
731 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
734 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
735
│ │ │ -
736#if __cplusplus > 201703L
│ │ │ -
737 template<typename _Kt>
│ │ │ -
738 auto
│ │ │ -
│ │ │ - │ │ │ -
740 -> decltype(_M_h._M_equal_range_tr(__k))
│ │ │ -
741 { return _M_h._M_equal_range_tr(__k); }
│ │ │ -
│ │ │ -
742#endif
│ │ │ -
743
│ │ │ - │ │ │ -
│ │ │ -
745 equal_range(const key_type& __x) const
│ │ │ -
746 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
747
│ │ │ -
748#if __cplusplus > 201703L
│ │ │ -
749 template<typename _Kt>
│ │ │ -
750 auto
│ │ │ -
│ │ │ -
751 equal_range(const _Kt& __k) const
│ │ │ -
752 -> decltype(_M_h._M_equal_range_tr(__k))
│ │ │ -
753 { return _M_h._M_equal_range_tr(__k); }
│ │ │ +
651 * This function attempts to insert a (key, value) %pair into the
│ │ │ +
652 * %unordered_map. An %unordered_map relies on unique keys and thus a
│ │ │ +
653 * %pair is only inserted if its first element (the key) is not already
│ │ │ +
654 * present in the %unordered_map.
│ │ │ +
655 * If the %pair was already in the %unordered_map, the .second of
│ │ │ +
656 * the %pair is assigned from __obj.
│ │ │ +
657 *
│ │ │ +
658 * Insertion requires amortized constant time.
│ │ │ +
659 */
│ │ │ +
660 template <typename _Obj>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
663 {
│ │ │ +
664 auto __ret = _M_h.try_emplace(cend(), __k,
│ │ │ + │ │ │ +
666 if (!__ret.second)
│ │ │ +
667 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ +
668 return __ret;
│ │ │ +
669 }
│ │ │ +
│ │ │ +
670
│ │ │ +
671 // move-capable overload
│ │ │ +
672 template <typename _Obj>
│ │ │ + │ │ │ + │ │ │ +
675 {
│ │ │ +
676 auto __ret = _M_h.try_emplace(cend(), std::move(__k),
│ │ │ + │ │ │ +
678 if (!__ret.second)
│ │ │ +
679 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ +
680 return __ret;
│ │ │ +
681 }
│ │ │ +
682
│ │ │ +
683 /**
│ │ │ +
684 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ +
685 * @param __hint An iterator that serves as a hint as to where the
│ │ │ +
686 * pair should be inserted.
│ │ │ +
687 * @param __k Key to use for finding a possibly existing pair in
│ │ │ +
688 * the unordered_map.
│ │ │ +
689 * @param __obj Argument used to generate the .second for a pair
│ │ │ +
690 * instance.
│ │ │ +
691 * @return An iterator that points to the element with key of
│ │ │ +
692 * @a __x (may or may not be the %pair passed in).
│ │ │ +
693 *
│ │ │ +
694 * This function is not concerned about whether the insertion took place,
│ │ │ +
695 * and thus does not return a boolean like the single-argument insert()
│ │ │ +
696 * does.
│ │ │ +
697 * If the %pair was already in the %unordered map, the .second of
│ │ │ +
698 * the %pair is assigned from __obj.
│ │ │ +
699 * Note that the first parameter is only a hint and can
│ │ │ +
700 * potentially improve the performance of the insertion process. A bad
│ │ │ +
701 * hint would cause no gains in efficiency.
│ │ │ +
702 *
│ │ │ +
703 * See
│ │ │ +
704 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ +
705 * for more on @a hinting.
│ │ │ +
706 *
│ │ │ +
707 * Insertion requires amortized constant time.
│ │ │ +
708 */
│ │ │ +
709 template <typename _Obj>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
712 _Obj&& __obj)
│ │ │ +
713 {
│ │ │ +
714 auto __ret = _M_h.try_emplace(__hint, __k, std::forward<_Obj>(__obj));
│ │ │ +
715 if (!__ret.second)
│ │ │ +
716 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ +
717 return __ret.first;
│ │ │ +
718 }
│ │ │ +
│ │ │ +
719
│ │ │ +
720 // move-capable overload
│ │ │ +
721 template <typename _Obj>
│ │ │ + │ │ │ + │ │ │ +
724 {
│ │ │ +
725 auto __ret = _M_h.try_emplace(__hint, std::move(__k),
│ │ │ + │ │ │ +
727 if (!__ret.second)
│ │ │ +
728 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ +
729 return __ret.first;
│ │ │ +
730 }
│ │ │ +
731#endif // unordered_map_try_emplace
│ │ │ +
732
│ │ │ +
733 ///@{
│ │ │ +
734 /**
│ │ │ +
735 * @brief Erases an element from an %unordered_map.
│ │ │ +
736 * @param __position An iterator pointing to the element to be erased.
│ │ │ +
737 * @return An iterator pointing to the element immediately following
│ │ │ +
738 * @a __position prior to the element being erased. If no such
│ │ │ +
739 * element exists, end() is returned.
│ │ │ +
740 *
│ │ │ +
741 * This function erases an element, pointed to by the given iterator,
│ │ │ +
742 * from an %unordered_map.
│ │ │ +
743 * Note that this function only erases the element, and that if the
│ │ │ +
744 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ +
745 * any way. Managing the pointer is the user's responsibility.
│ │ │ +
746 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
749 { return _M_h.erase(__position); }
│ │ │ +
│ │ │ +
750
│ │ │ +
751 // LWG 2059.
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
754 { return _M_h.erase(__position); }
│ │ │
│ │ │ -
754#endif
│ │ │
755 ///@}
│ │ │ -
756
│ │ │ -
757 // bucket interface.
│ │ │ -
758
│ │ │ -
759 /// Returns the number of buckets of the %unordered_set.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
762 { return _M_h.bucket_count(); }
│ │ │ -
│ │ │ -
763
│ │ │ -
764 /// Returns the maximum number of buckets of the %unordered_set.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
767 { return _M_h.max_bucket_count(); }
│ │ │ -
│ │ │ -
768
│ │ │ -
769 /*
│ │ │ -
770 * @brief Returns the number of elements in a given bucket.
│ │ │ -
771 * @param __n A bucket index.
│ │ │ -
772 * @return The number of elements in the bucket.
│ │ │ -
773 */
│ │ │ - │ │ │ -
775 bucket_size(size_type __n) const
│ │ │ -
776 { return _M_h.bucket_size(__n); }
│ │ │ -
777
│ │ │ -
778 /*
│ │ │ -
779 * @brief Returns the bucket index of a given element.
│ │ │ -
780 * @param __key A key instance.
│ │ │ -
781 * @return The key bucket index.
│ │ │ -
782 */
│ │ │ - │ │ │ -
784 bucket(const key_type& __key) const
│ │ │ -
785 { return _M_h.bucket(__key); }
│ │ │ -
786
│ │ │ -
787 ///@{
│ │ │ -
788 /**
│ │ │ -
789 * @brief Returns a read-only (constant) iterator pointing to the first
│ │ │ -
790 * bucket element.
│ │ │ -
791 * @param __n The bucket index.
│ │ │ -
792 * @return A read-only local iterator.
│ │ │ -
793 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
796 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
797
│ │ │ - │ │ │ -
│ │ │ -
799 begin(size_type __n) const
│ │ │ -
800 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
801
│ │ │ - │ │ │ -
│ │ │ -
803 cbegin(size_type __n) const
│ │ │ -
804 { return _M_h.cbegin(__n); }
│ │ │ -
│ │ │ -
805 ///@}
│ │ │ -
806
│ │ │ -
807 ///@{
│ │ │ -
808 /**
│ │ │ -
809 * @brief Returns a read-only (constant) iterator pointing to one past
│ │ │ -
810 * the last bucket elements.
│ │ │ -
811 * @param __n The bucket index.
│ │ │ -
812 * @return A read-only local iterator.
│ │ │ -
813 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
816 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
817
│ │ │ - │ │ │ -
│ │ │ -
819 end(size_type __n) const
│ │ │ -
820 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
821
│ │ │ - │ │ │ -
│ │ │ -
823 cend(size_type __n) const
│ │ │ -
824 { return _M_h.cend(__n); }
│ │ │ -
│ │ │ -
825 ///@}
│ │ │ -
826
│ │ │ -
827 // hash policy.
│ │ │ -
828
│ │ │ -
829 /// Returns the average number of elements per bucket.
│ │ │ -
830 float
│ │ │ -
│ │ │ - │ │ │ -
832 { return _M_h.load_factor(); }
│ │ │ -
│ │ │ -
833
│ │ │ -
834 /// Returns a positive number that the %unordered_set tries to keep the
│ │ │ -
835 /// load factor less than or equal to.
│ │ │ -
836 float
│ │ │ -
│ │ │ - │ │ │ -
838 { return _M_h.max_load_factor(); }
│ │ │ -
│ │ │ -
839
│ │ │ -
840 /**
│ │ │ -
841 * @brief Change the %unordered_set maximum load factor.
│ │ │ -
842 * @param __z The new maximum load factor.
│ │ │ -
843 */
│ │ │ -
844 void
│ │ │ -
│ │ │ - │ │ │ -
846 { _M_h.max_load_factor(__z); }
│ │ │ -
│ │ │ -
847
│ │ │ -
848 /**
│ │ │ -
849 * @brief May rehash the %unordered_set.
│ │ │ -
850 * @param __n The new number of buckets.
│ │ │ -
851 *
│ │ │ -
852 * Rehash will occur only if the new number of buckets respect the
│ │ │ -
853 * %unordered_set maximum load factor.
│ │ │ -
854 */
│ │ │ -
855 void
│ │ │ -
│ │ │ - │ │ │ -
857 { _M_h.rehash(__n); }
│ │ │ -
│ │ │ -
858
│ │ │ -
859 /**
│ │ │ -
860 * @brief Prepare the %unordered_set for a specified number of
│ │ │ -
861 * elements.
│ │ │ -
862 * @param __n Number of elements required.
│ │ │ -
863 *
│ │ │ -
864 * Same as rehash(ceil(n / max_load_factor())).
│ │ │ -
865 */
│ │ │ -
866 void
│ │ │ -
│ │ │ - │ │ │ -
868 { _M_h.reserve(__n); }
│ │ │ -
│ │ │ -
869
│ │ │ -
870 template<typename _Value1, typename _Hash1, typename _Pred1,
│ │ │ -
871 typename _Alloc1>
│ │ │ -
872 friend bool
│ │ │ - │ │ │ - │ │ │ -
875 };
│ │ │ +
756
│ │ │ +
757 /**
│ │ │ +
758 * @brief Erases elements according to the provided key.
│ │ │ +
759 * @param __x Key of element to be erased.
│ │ │ +
760 * @return The number of elements erased.
│ │ │ +
761 *
│ │ │ +
762 * This function erases all the elements located by the given key from
│ │ │ +
763 * an %unordered_map. For an %unordered_map the result of this function
│ │ │ +
764 * can only be 0 (not present) or 1 (present).
│ │ │ +
765 * Note that this function only erases the element, and that if the
│ │ │ +
766 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ +
767 * any way. Managing the pointer is the user's responsibility.
│ │ │ +
768 */
│ │ │ + │ │ │ +
│ │ │ +
770 erase(const key_type& __x)
│ │ │ +
771 { return _M_h.erase(__x); }
│ │ │ +
│ │ │ +
772
│ │ │ +
773 /**
│ │ │ +
774 * @brief Erases a [__first,__last) range of elements from an
│ │ │ +
775 * %unordered_map.
│ │ │ +
776 * @param __first Iterator pointing to the start of the range to be
│ │ │ +
777 * erased.
│ │ │ +
778 * @param __last Iterator pointing to the end of the range to
│ │ │ +
779 * be erased.
│ │ │ +
780 * @return The iterator @a __last.
│ │ │ +
781 *
│ │ │ +
782 * This function erases a sequence of elements from an %unordered_map.
│ │ │ +
783 * Note that this function only erases the elements, and that if
│ │ │ +
784 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ +
785 * in any way. Managing the pointer is the user's responsibility.
│ │ │ +
786 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
789 { return _M_h.erase(__first, __last); }
│ │ │ +
│ │ │ +
790
│ │ │ +
791 /**
│ │ │ +
792 * Erases all elements in an %unordered_map.
│ │ │ +
793 * Note that this function only erases the elements, and that if the
│ │ │ +
794 * elements themselves are pointers, the pointed-to memory is not touched
│ │ │ +
795 * in any way. Managing the pointer is the user's responsibility.
│ │ │ +
796 */
│ │ │ +
797 void
│ │ │ +
│ │ │ +
798 clear() noexcept
│ │ │ +
799 { _M_h.clear(); }
│ │ │ +
│ │ │ +
800
│ │ │ +
801 /**
│ │ │ +
802 * @brief Swaps data with another %unordered_map.
│ │ │ +
803 * @param __x An %unordered_map of the same element and allocator
│ │ │ +
804 * types.
│ │ │ +
805 *
│ │ │ +
806 * This exchanges the elements between two %unordered_map in constant
│ │ │ +
807 * time.
│ │ │ +
808 * Note that the global std::swap() function is specialized such that
│ │ │ +
809 * std::swap(m1,m2) will feed to this function.
│ │ │ +
810 */
│ │ │ +
811 void
│ │ │ +
│ │ │ + │ │ │ +
813 noexcept( noexcept(_M_h.swap(__x._M_h)) )
│ │ │ +
814 { _M_h.swap(__x._M_h); }
│ │ │ +
│ │ │ +
815
│ │ │ +
816#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ +
817 template<typename, typename, typename>
│ │ │ +
818 friend class std::_Hash_merge_helper;
│ │ │ +
819
│ │ │ +
820 template<typename _H2, typename _P2>
│ │ │ +
821 void
│ │ │ + │ │ │ +
823 {
│ │ │ + │ │ │ +
825 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ +
826 }
│ │ │ +
827
│ │ │ +
828 template<typename _H2, typename _P2>
│ │ │ +
829 void
│ │ │ +
830 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ +
831 { merge(__source); }
│ │ │ +
832
│ │ │ +
833 template<typename _H2, typename _P2>
│ │ │ +
834 void
│ │ │ +
835 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>& __source)
│ │ │ +
836 {
│ │ │ +
837 using _Merge_helper = _Hash_merge_helper<unordered_map, _H2, _P2>;
│ │ │ +
838 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ +
839 }
│ │ │ +
840
│ │ │ +
841 template<typename _H2, typename _P2>
│ │ │ +
842 void
│ │ │ +
843 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ +
844 { merge(__source); }
│ │ │ +
845#endif // node_extract
│ │ │ +
846
│ │ │ +
847 // observers.
│ │ │ +
848
│ │ │ +
849 /// Returns the hash functor object with which the %unordered_map was
│ │ │ +
850 /// constructed.
│ │ │ +
851 hasher
│ │ │ +
│ │ │ + │ │ │ +
853 { return _M_h.hash_function(); }
│ │ │ +
│ │ │ +
854
│ │ │ +
855 /// Returns the key comparison object with which the %unordered_map was
│ │ │ +
856 /// constructed.
│ │ │ + │ │ │ +
│ │ │ +
858 key_eq() const
│ │ │ +
859 { return _M_h.key_eq(); }
│ │ │ +
│ │ │ +
860
│ │ │ +
861 // lookup.
│ │ │ +
862
│ │ │ +
863 ///@{
│ │ │ +
864 /**
│ │ │ +
865 * @brief Tries to locate an element in an %unordered_map.
│ │ │ +
866 * @param __x Key to be located.
│ │ │ +
867 * @return Iterator pointing to sought-after element, or end() if not
│ │ │ +
868 * found.
│ │ │ +
869 *
│ │ │ +
870 * This function takes a key and tries to locate the element with which
│ │ │ +
871 * the key matches. If successful the function returns an iterator
│ │ │ +
872 * pointing to the sought after element. If unsuccessful it returns the
│ │ │ +
873 * past-the-end ( @c end() ) iterator.
│ │ │ +
874 */
│ │ │ + │ │ │ +
│ │ │ +
876 find(const key_type& __x)
│ │ │ +
877 { return _M_h.find(__x); }
│ │ │
│ │ │ -
876
│ │ │ -
877#if __cpp_deduction_guides >= 201606
│ │ │
878
│ │ │ -
879 template<typename _InputIterator,
│ │ │ -
880 typename _Hash =
│ │ │ -
881 hash<typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
882 typename _Pred =
│ │ │ -
883 equal_to<typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
884 typename _Allocator =
│ │ │ -
885 allocator<typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
886 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
887 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
888 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
889 typename = _RequireAllocator<_Allocator>>
│ │ │ -
890 unordered_set(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
892 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ -
893 -> unordered_set<typename iterator_traits<_InputIterator>::value_type,
│ │ │ -
894 _Hash, _Pred, _Allocator>;
│ │ │ -
895
│ │ │ -
896 template<typename _Tp, typename _Hash = hash<_Tp>,
│ │ │ -
897 typename _Pred = equal_to<_Tp>,
│ │ │ -
898 typename _Allocator = allocator<_Tp>,
│ │ │ -
899 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
900 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
901 typename = _RequireAllocator<_Allocator>>
│ │ │ -
902 unordered_set(initializer_list<_Tp>,
│ │ │ - │ │ │ -
904 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ -
905 -> unordered_set<_Tp, _Hash, _Pred, _Allocator>;
│ │ │ -
906
│ │ │ -
907 template<typename _InputIterator, typename _Allocator,
│ │ │ -
908 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
909 typename = _RequireAllocator<_Allocator>>
│ │ │ -
910 unordered_set(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
912 -> unordered_set<typename iterator_traits<_InputIterator>::value_type,
│ │ │ -
913 hash<
│ │ │ -
914 typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
915 equal_to<
│ │ │ -
916 typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
917 _Allocator>;
│ │ │ -
918
│ │ │ -
919 template<typename _InputIterator, typename _Hash, typename _Allocator,
│ │ │ -
920 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
921 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
922 typename = _RequireAllocator<_Allocator>>
│ │ │ -
923 unordered_set(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
925 _Hash, _Allocator)
│ │ │ -
926 -> unordered_set<typename iterator_traits<_InputIterator>::value_type,
│ │ │ -
927 _Hash,
│ │ │ -
928 equal_to<
│ │ │ -
929 typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
930 _Allocator>;
│ │ │ -
931
│ │ │ -
932 template<typename _Tp, typename _Allocator,
│ │ │ -
933 typename = _RequireAllocator<_Allocator>>
│ │ │ -
934 unordered_set(initializer_list<_Tp>,
│ │ │ - │ │ │ -
936 -> unordered_set<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>;
│ │ │ -
937
│ │ │ -
938 template<typename _Tp, typename _Hash, typename _Allocator,
│ │ │ -
939 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
940 typename = _RequireAllocator<_Allocator>>
│ │ │ -
941 unordered_set(initializer_list<_Tp>,
│ │ │ -
942 unordered_set<int>::size_type, _Hash, _Allocator)
│ │ │ -
943 -> unordered_set<_Tp, _Hash, equal_to<_Tp>, _Allocator>;
│ │ │ -
944
│ │ │ -
945#endif
│ │ │ -
946
│ │ │ -
947 /**
│ │ │ -
948 * @brief A standard container composed of equivalent keys
│ │ │ -
949 * (possibly containing multiple of each key value) in which the
│ │ │ -
950 * elements' keys are the elements themselves.
│ │ │ -
951 *
│ │ │ -
952 * @ingroup unordered_associative_containers
│ │ │ -
953 * @headerfile unordered_set
│ │ │ -
954 * @since C++11
│ │ │ -
955 *
│ │ │ -
956 * @tparam _Value Type of key objects.
│ │ │ -
957 * @tparam _Hash Hashing function object type, defaults to hash<_Value>.
│ │ │ -
958 * @tparam _Pred Predicate function object type, defaults
│ │ │ -
959 * to equal_to<_Value>.
│ │ │ -
960 * @tparam _Alloc Allocator type, defaults to allocator<_Key>.
│ │ │ -
961 *
│ │ │ -
962 * Meets the requirements of a <a href="tables.html#65">container</a>, and
│ │ │ -
963 * <a href="tables.html#xx">unordered associative container</a>
│ │ │ -
964 *
│ │ │ -
965 * Base is _Hashtable, dispatched at compile time via template
│ │ │ -
966 * alias __umset_hashtable.
│ │ │ -
967 */
│ │ │ -
968 template<typename _Value,
│ │ │ -
969 typename _Hash = hash<_Value>,
│ │ │ -
970 typename _Pred = equal_to<_Value>,
│ │ │ -
971 typename _Alloc = allocator<_Value>>
│ │ │ -
│ │ │ - │ │ │ -
973 {
│ │ │ - │ │ │ -
975 _Hashtable _M_h;
│ │ │ -
976
│ │ │ -
977 public:
│ │ │ -
978 // typedefs:
│ │ │ -
979 ///@{
│ │ │ -
980 /// Public typedefs.
│ │ │ -
981 typedef typename _Hashtable::key_type key_type;
│ │ │ -
982 typedef typename _Hashtable::value_type value_type;
│ │ │ -
983 typedef typename _Hashtable::hasher hasher;
│ │ │ -
984 typedef typename _Hashtable::key_equal key_equal;
│ │ │ -
985 typedef typename _Hashtable::allocator_type allocator_type;
│ │ │ -
986 ///@}
│ │ │ -
987
│ │ │ -
988 ///@{
│ │ │ -
989 /// Iterator-related typedefs.
│ │ │ -
990 typedef typename _Hashtable::pointer pointer;
│ │ │ -
991 typedef typename _Hashtable::const_pointer const_pointer;
│ │ │ -
992 typedef typename _Hashtable::reference reference;
│ │ │ -
993 typedef typename _Hashtable::const_reference const_reference;
│ │ │ -
994 typedef typename _Hashtable::iterator iterator;
│ │ │ -
995 typedef typename _Hashtable::const_iterator const_iterator;
│ │ │ -
996 typedef typename _Hashtable::local_iterator local_iterator;
│ │ │ -
997 typedef typename _Hashtable::const_local_iterator const_local_iterator;
│ │ │ -
998 typedef typename _Hashtable::size_type size_type;
│ │ │ -
999 typedef typename _Hashtable::difference_type difference_type;
│ │ │ -
1000 ///@}
│ │ │ -
1001
│ │ │ -
1002#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
1003 using node_type = typename _Hashtable::node_type;
│ │ │ -
1004#endif
│ │ │ -
1005
│ │ │ -
1006 // construct/destroy/copy
│ │ │ -
1007
│ │ │ -
1008 /// Default constructor.
│ │ │ - │ │ │ -
1010
│ │ │ -
1011 /**
│ │ │ -
1012 * @brief Default constructor creates no elements.
│ │ │ -
1013 * @param __n Minimal initial number of buckets.
│ │ │ -
1014 * @param __hf A hash functor.
│ │ │ -
1015 * @param __eql A key equality functor.
│ │ │ -
1016 * @param __a An allocator object.
│ │ │ -
1017 */
│ │ │ -
1018 explicit
│ │ │ -
│ │ │ - │ │ │ -
1020 const hasher& __hf = hasher(),
│ │ │ -
1021 const key_equal& __eql = key_equal(),
│ │ │ -
1022 const allocator_type& __a = allocator_type())
│ │ │ -
1023 : _M_h(__n, __hf, __eql, __a)
│ │ │ -
1024 { }
│ │ │ -
│ │ │ -
1025
│ │ │ -
1026 /**
│ │ │ -
1027 * @brief Builds an %unordered_multiset from a range.
│ │ │ -
1028 * @param __first An input iterator.
│ │ │ -
1029 * @param __last An input iterator.
│ │ │ -
1030 * @param __n Minimal initial number of buckets.
│ │ │ -
1031 * @param __hf A hash functor.
│ │ │ -
1032 * @param __eql A key equality functor.
│ │ │ -
1033 * @param __a An allocator object.
│ │ │ -
1034 *
│ │ │ -
1035 * Create an %unordered_multiset consisting of copies of the elements
│ │ │ -
1036 * from [__first,__last). This is linear in N (where N is
│ │ │ -
1037 * distance(__first,__last)).
│ │ │ -
1038 */
│ │ │ -
1039 template<typename _InputIterator>
│ │ │ -
│ │ │ - │ │ │ -
1041 size_type __n = 0,
│ │ │ -
1042 const hasher& __hf = hasher(),
│ │ │ -
1043 const key_equal& __eql = key_equal(),
│ │ │ -
1044 const allocator_type& __a = allocator_type())
│ │ │ -
1045 : _M_h(__first, __last, __n, __hf, __eql, __a)
│ │ │ -
1046 { }
│ │ │ -
│ │ │ -
1047
│ │ │ -
1048 /// Copy constructor.
│ │ │ - │ │ │ -
1050
│ │ │ -
1051 /// Move constructor.
│ │ │ - │ │ │ -
1053
│ │ │ -
1054 /**
│ │ │ -
1055 * @brief Builds an %unordered_multiset from an initializer_list.
│ │ │ -
1056 * @param __l An initializer_list.
│ │ │ -
1057 * @param __n Minimal initial number of buckets.
│ │ │ -
1058 * @param __hf A hash functor.
│ │ │ -
1059 * @param __eql A key equality functor.
│ │ │ -
1060 * @param __a An allocator object.
│ │ │ -
1061 *
│ │ │ -
1062 * Create an %unordered_multiset consisting of copies of the elements in
│ │ │ -
1063 * the list. This is linear in N (where N is @a __l.size()).
│ │ │ -
1064 */
│ │ │ -
│ │ │ - │ │ │ -
1066 size_type __n = 0,
│ │ │ -
1067 const hasher& __hf = hasher(),
│ │ │ -
1068 const key_equal& __eql = key_equal(),
│ │ │ -
1069 const allocator_type& __a = allocator_type())
│ │ │ -
1070 : _M_h(__l, __n, __hf, __eql, __a)
│ │ │ -
1071 { }
│ │ │ -
│ │ │ -
1072
│ │ │ -
1073 /// Copy assignment operator.
│ │ │ - │ │ │ - │ │ │ -
1076
│ │ │ -
1077 /// Move assignment operator.
│ │ │ - │ │ │ - │ │ │ -
1080
│ │ │ -
1081 /**
│ │ │ -
1082 * @brief Creates an %unordered_multiset with no elements.
│ │ │ -
1083 * @param __a An allocator object.
│ │ │ +
879#if __cplusplus > 201703L
│ │ │ +
880 template<typename _Kt>
│ │ │ +
881 auto
│ │ │ +
│ │ │ +
882 find(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x))
│ │ │ +
883 { return _M_h._M_find_tr(__x); }
│ │ │ +
│ │ │ +
884#endif
│ │ │ +
885
│ │ │ + │ │ │ +
│ │ │ +
887 find(const key_type& __x) const
│ │ │ +
888 { return _M_h.find(__x); }
│ │ │ +
│ │ │ +
889
│ │ │ +
890#if __cplusplus > 201703L
│ │ │ +
891 template<typename _Kt>
│ │ │ +
892 auto
│ │ │ +
│ │ │ +
893 find(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x))
│ │ │ +
894 { return _M_h._M_find_tr(__x); }
│ │ │ +
│ │ │ +
895#endif
│ │ │ +
896 ///@}
│ │ │ +
897
│ │ │ +
898 ///@{
│ │ │ +
899 /**
│ │ │ +
900 * @brief Finds the number of elements.
│ │ │ +
901 * @param __x Key to count.
│ │ │ +
902 * @return Number of elements with specified key.
│ │ │ +
903 *
│ │ │ +
904 * This function only makes sense for %unordered_multimap; for
│ │ │ +
905 * %unordered_map the result will either be 0 (not present) or 1
│ │ │ +
906 * (present).
│ │ │ +
907 */
│ │ │ + │ │ │ +
│ │ │ +
909 count(const key_type& __x) const
│ │ │ +
910 { return _M_h.count(__x); }
│ │ │ +
│ │ │ +
911
│ │ │ +
912#if __cplusplus > 201703L
│ │ │ +
913 template<typename _Kt>
│ │ │ +
914 auto
│ │ │ +
│ │ │ +
915 count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x))
│ │ │ +
916 { return _M_h._M_count_tr(__x); }
│ │ │ +
│ │ │ +
917#endif
│ │ │ +
918 ///@}
│ │ │ +
919
│ │ │ +
920#if __cplusplus > 201703L
│ │ │ +
921 ///@{
│ │ │ +
922 /**
│ │ │ +
923 * @brief Finds whether an element with the given key exists.
│ │ │ +
924 * @param __x Key of elements to be located.
│ │ │ +
925 * @return True if there is any element with the specified key.
│ │ │ +
926 */
│ │ │ +
927 bool
│ │ │ +
│ │ │ +
928 contains(const key_type& __x) const
│ │ │ +
929 { return _M_h.find(__x) != _M_h.end(); }
│ │ │ +
│ │ │ +
930
│ │ │ +
931 template<typename _Kt>
│ │ │ +
932 auto
│ │ │ +
│ │ │ +
933 contains(const _Kt& __x) const
│ │ │ +
934 -> decltype(_M_h._M_find_tr(__x), void(), true)
│ │ │ +
935 { return _M_h._M_find_tr(__x) != _M_h.end(); }
│ │ │ +
│ │ │ +
936 ///@}
│ │ │ +
937#endif
│ │ │ +
938
│ │ │ +
939 ///@{
│ │ │ +
940 /**
│ │ │ +
941 * @brief Finds a subsequence matching given key.
│ │ │ +
942 * @param __x Key to be located.
│ │ │ +
943 * @return Pair of iterators that possibly points to the subsequence
│ │ │ +
944 * matching given key.
│ │ │ +
945 *
│ │ │ +
946 * This function probably only makes sense for %unordered_multimap.
│ │ │ +
947 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
950 { return _M_h.equal_range(__x); }
│ │ │ +
│ │ │ +
951
│ │ │ +
952#if __cplusplus > 201703L
│ │ │ +
953 template<typename _Kt>
│ │ │ +
954 auto
│ │ │ +
│ │ │ +
955 equal_range(const _Kt& __x)
│ │ │ +
956 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ +
957 { return _M_h._M_equal_range_tr(__x); }
│ │ │ +
│ │ │ +
958#endif
│ │ │ +
959
│ │ │ + │ │ │ +
│ │ │ +
961 equal_range(const key_type& __x) const
│ │ │ +
962 { return _M_h.equal_range(__x); }
│ │ │ +
│ │ │ +
963
│ │ │ +
964#if __cplusplus > 201703L
│ │ │ +
965 template<typename _Kt>
│ │ │ +
966 auto
│ │ │ +
│ │ │ +
967 equal_range(const _Kt& __x) const
│ │ │ +
968 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ +
969 { return _M_h._M_equal_range_tr(__x); }
│ │ │ +
│ │ │ +
970#endif
│ │ │ +
971 ///@}
│ │ │ +
972
│ │ │ +
973 ///@{
│ │ │ +
974 /**
│ │ │ +
975 * @brief Subscript ( @c [] ) access to %unordered_map data.
│ │ │ +
976 * @param __k The key for which data should be retrieved.
│ │ │ +
977 * @return A reference to the data of the (key,data) %pair.
│ │ │ +
978 *
│ │ │ +
979 * Allows for easy lookup with the subscript ( @c [] )operator. Returns
│ │ │ +
980 * data associated with the key specified in subscript. If the key does
│ │ │ +
981 * not exist, a pair with that key is created using default values, which
│ │ │ +
982 * is then returned.
│ │ │ +
983 *
│ │ │ +
984 * Lookup requires constant time.
│ │ │ +
985 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
988 { return _M_h[__k]; }
│ │ │ +
│ │ │ +
989
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
992 { return _M_h[std::move(__k)]; }
│ │ │ +
│ │ │ +
993 ///@}
│ │ │ +
994
│ │ │ +
995 ///@{
│ │ │ +
996 /**
│ │ │ +
997 * @brief Access to %unordered_map data.
│ │ │ +
998 * @param __k The key for which data should be retrieved.
│ │ │ +
999 * @return A reference to the data whose key is equal to @a __k, if
│ │ │ +
1000 * such a data is present in the %unordered_map.
│ │ │ +
1001 * @throw std::out_of_range If no such data is present.
│ │ │ +
1002 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1005 { return _M_h.at(__k); }
│ │ │ +
│ │ │ +
1006
│ │ │ +
1007 const mapped_type&
│ │ │ +
│ │ │ +
1008 at(const key_type& __k) const
│ │ │ +
1009 { return _M_h.at(__k); }
│ │ │ +
│ │ │ +
1010 ///@}
│ │ │ +
1011
│ │ │ +
1012 // bucket interface.
│ │ │ +
1013
│ │ │ +
1014 /// Returns the number of buckets of the %unordered_map.
│ │ │ +
1015 size_type
│ │ │ +
│ │ │ + │ │ │ +
1017 { return _M_h.bucket_count(); }
│ │ │ +
│ │ │ +
1018
│ │ │ +
1019 /// Returns the maximum number of buckets of the %unordered_map.
│ │ │ +
1020 size_type
│ │ │ +
│ │ │ + │ │ │ +
1022 { return _M_h.max_bucket_count(); }
│ │ │ +
│ │ │ +
1023
│ │ │ +
1024 /*
│ │ │ +
1025 * @brief Returns the number of elements in a given bucket.
│ │ │ +
1026 * @param __n A bucket index.
│ │ │ +
1027 * @return The number of elements in the bucket.
│ │ │ +
1028 */
│ │ │ +
1029 size_type
│ │ │ +
1030 bucket_size(size_type __n) const
│ │ │ +
1031 { return _M_h.bucket_size(__n); }
│ │ │ +
1032
│ │ │ +
1033 /*
│ │ │ +
1034 * @brief Returns the bucket index of a given element.
│ │ │ +
1035 * @param __key A key instance.
│ │ │ +
1036 * @return The key bucket index.
│ │ │ +
1037 */
│ │ │ +
1038 size_type
│ │ │ +
1039 bucket(const key_type& __key) const
│ │ │ +
1040 { return _M_h.bucket(__key); }
│ │ │ +
1041
│ │ │ +
1042 /**
│ │ │ +
1043 * @brief Returns a read/write iterator pointing to the first bucket
│ │ │ +
1044 * element.
│ │ │ +
1045 * @param __n The bucket index.
│ │ │ +
1046 * @return A read/write local iterator.
│ │ │ +
1047 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1050 { return _M_h.begin(__n); }
│ │ │ +
│ │ │ +
1051
│ │ │ +
1052 ///@{
│ │ │ +
1053 /**
│ │ │ +
1054 * @brief Returns a read-only (constant) iterator pointing to the first
│ │ │ +
1055 * bucket element.
│ │ │ +
1056 * @param __n The bucket index.
│ │ │ +
1057 * @return A read-only local iterator.
│ │ │ +
1058 */
│ │ │ + │ │ │ +
│ │ │ +
1060 begin(size_type __n) const
│ │ │ +
1061 { return _M_h.begin(__n); }
│ │ │ +
│ │ │ +
1062
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1065 { return _M_h.cbegin(__n); }
│ │ │ +
│ │ │ +
1066 ///@}
│ │ │ +
1067
│ │ │ +
1068 /**
│ │ │ +
1069 * @brief Returns a read/write iterator pointing to one past the last
│ │ │ +
1070 * bucket elements.
│ │ │ +
1071 * @param __n The bucket index.
│ │ │ +
1072 * @return A read/write local iterator.
│ │ │ +
1073 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1076 { return _M_h.end(__n); }
│ │ │ +
│ │ │ +
1077
│ │ │ +
1078 ///@{
│ │ │ +
1079 /**
│ │ │ +
1080 * @brief Returns a read-only (constant) iterator pointing to one past
│ │ │ +
1081 * the last bucket elements.
│ │ │ +
1082 * @param __n The bucket index.
│ │ │ +
1083 * @return A read-only local iterator.
│ │ │
1084 */
│ │ │ -
1085 explicit
│ │ │ + │ │ │
│ │ │ - │ │ │ -
1087 : _M_h(__a)
│ │ │ -
1088 { }
│ │ │ -
│ │ │ -
1089
│ │ │ -
1090 /*
│ │ │ -
1091 * @brief Copy constructor with allocator argument.
│ │ │ -
1092 * @param __uset Input %unordered_multiset to copy.
│ │ │ -
1093 * @param __a An allocator object.
│ │ │ -
1094 */
│ │ │ - │ │ │ -
1096 const allocator_type& __a)
│ │ │ -
1097 : _M_h(__umset._M_h, __a)
│ │ │ -
1098 { }
│ │ │ -
1099
│ │ │ -
1100 /*
│ │ │ -
1101 * @brief Move constructor with allocator argument.
│ │ │ -
1102 * @param __umset Input %unordered_multiset to move.
│ │ │ -
1103 * @param __a An allocator object.
│ │ │ -
1104 */
│ │ │ - │ │ │ -
1106 const allocator_type& __a)
│ │ │ -
1107 noexcept( noexcept(_Hashtable(std::move(__umset._M_h), __a)) )
│ │ │ -
1108 : _M_h(std::move(__umset._M_h), __a)
│ │ │ -
1109 { }
│ │ │ -
1110
│ │ │ - │ │ │ -
1112 : unordered_multiset(__n, hasher(), key_equal(), __a)
│ │ │ -
1113 { }
│ │ │ -
1114
│ │ │ -
1115 unordered_multiset(size_type __n, const hasher& __hf,
│ │ │ -
1116 const allocator_type& __a)
│ │ │ -
1117 : unordered_multiset(__n, __hf, key_equal(), __a)
│ │ │ -
1118 { }
│ │ │ -
1119
│ │ │ -
1120 template<typename _InputIterator>
│ │ │ -
1121 unordered_multiset(_InputIterator __first, _InputIterator __last,
│ │ │ -
1122 size_type __n,
│ │ │ -
1123 const allocator_type& __a)
│ │ │ -
1124 : unordered_multiset(__first, __last, __n, hasher(), key_equal(), __a)
│ │ │ -
1125 { }
│ │ │ -
1126
│ │ │ -
1127 template<typename _InputIterator>
│ │ │ -
1128 unordered_multiset(_InputIterator __first, _InputIterator __last,
│ │ │ -
1129 size_type __n, const hasher& __hf,
│ │ │ -
1130 const allocator_type& __a)
│ │ │ -
1131 : unordered_multiset(__first, __last, __n, __hf, key_equal(), __a)
│ │ │ -
1132 { }
│ │ │ -
1133
│ │ │ -
1134 unordered_multiset(initializer_list<value_type> __l,
│ │ │ -
1135 size_type __n,
│ │ │ -
1136 const allocator_type& __a)
│ │ │ -
1137 : unordered_multiset(__l, __n, hasher(), key_equal(), __a)
│ │ │ -
1138 { }
│ │ │ -
1139
│ │ │ -
1140 unordered_multiset(initializer_list<value_type> __l,
│ │ │ -
1141 size_type __n, const hasher& __hf,
│ │ │ -
1142 const allocator_type& __a)
│ │ │ -
1143 : unordered_multiset(__l, __n, __hf, key_equal(), __a)
│ │ │ -
1144 { }
│ │ │ -
1145
│ │ │ -
1146 /**
│ │ │ -
1147 * @brief %Unordered_multiset list assignment operator.
│ │ │ -
1148 * @param __l An initializer_list.
│ │ │ -
1149 *
│ │ │ -
1150 * This function fills an %unordered_multiset with copies of the elements
│ │ │ -
1151 * in the initializer list @a __l.
│ │ │ -
1152 *
│ │ │ -
1153 * Note that the assignment completely changes the %unordered_multiset
│ │ │ -
1154 * and that the resulting %unordered_multiset's size is the same as the
│ │ │ -
1155 * number of elements assigned.
│ │ │ -
1156 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1159 {
│ │ │ -
1160 _M_h = __l;
│ │ │ -
1161 return *this;
│ │ │ -
1162 }
│ │ │ -
│ │ │ -
1163
│ │ │ -
1164 /// Returns the allocator object used by the %unordered_multiset.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1167 { return _M_h.get_allocator(); }
│ │ │ -
│ │ │ -
1168
│ │ │ -
1169 // size and capacity:
│ │ │ -
1170
│ │ │ -
1171 /// Returns true if the %unordered_multiset is empty.
│ │ │ -
1172 _GLIBCXX_NODISCARD bool
│ │ │ -
│ │ │ -
1173 empty() const noexcept
│ │ │ -
1174 { return _M_h.empty(); }
│ │ │ -
│ │ │ -
1175
│ │ │ -
1176 /// Returns the size of the %unordered_multiset.
│ │ │ -
1177 size_type
│ │ │ -
│ │ │ -
1178 size() const noexcept
│ │ │ -
1179 { return _M_h.size(); }
│ │ │ -
│ │ │ -
1180
│ │ │ -
1181 /// Returns the maximum size of the %unordered_multiset.
│ │ │ -
1182 size_type
│ │ │ -
│ │ │ -
1183 max_size() const noexcept
│ │ │ -
1184 { return _M_h.max_size(); }
│ │ │ -
│ │ │ -
1185
│ │ │ -
1186 // iterators.
│ │ │ -
1187
│ │ │ -
1188 ///@{
│ │ │ -
1189 /**
│ │ │ -
1190 * Returns a read-only (constant) iterator that points to the first
│ │ │ -
1191 * element in the %unordered_multiset.
│ │ │ -
1192 */
│ │ │ -
1193 iterator
│ │ │ -
│ │ │ -
1194 begin() noexcept
│ │ │ -
1195 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
1196
│ │ │ - │ │ │ -
│ │ │ -
1198 begin() const noexcept
│ │ │ -
1199 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
1200 ///@}
│ │ │ -
1201
│ │ │ -
1202 ///@{
│ │ │ -
1203 /**
│ │ │ -
1204 * Returns a read-only (constant) iterator that points one past the last
│ │ │ -
1205 * element in the %unordered_multiset.
│ │ │ -
1206 */
│ │ │ -
1207 iterator
│ │ │ -
│ │ │ -
1208 end() noexcept
│ │ │ -
1209 { return _M_h.end(); }
│ │ │ +
1086 end(size_type __n) const
│ │ │ +
1087 { return _M_h.end(__n); }
│ │ │
│ │ │ +
1088
│ │ │ + │ │ │ +
│ │ │ +
1090 cend(size_type __n) const
│ │ │ +
1091 { return _M_h.cend(__n); }
│ │ │ +
│ │ │ +
1092 ///@}
│ │ │ +
1093
│ │ │ +
1094 // hash policy.
│ │ │ +
1095
│ │ │ +
1096 /// Returns the average number of elements per bucket.
│ │ │ +
1097 float
│ │ │ +
│ │ │ + │ │ │ +
1099 { return _M_h.load_factor(); }
│ │ │ +
│ │ │ +
1100
│ │ │ +
1101 /// Returns a positive number that the %unordered_map tries to keep the
│ │ │ +
1102 /// load factor less than or equal to.
│ │ │ +
1103 float
│ │ │ +
│ │ │ + │ │ │ +
1105 { return _M_h.max_load_factor(); }
│ │ │ +
│ │ │ +
1106
│ │ │ +
1107 /**
│ │ │ +
1108 * @brief Change the %unordered_map maximum load factor.
│ │ │ +
1109 * @param __z The new maximum load factor.
│ │ │ +
1110 */
│ │ │ +
1111 void
│ │ │ +
│ │ │ + │ │ │ +
1113 { _M_h.max_load_factor(__z); }
│ │ │ +
│ │ │ +
1114
│ │ │ +
1115 /**
│ │ │ +
1116 * @brief May rehash the %unordered_map.
│ │ │ +
1117 * @param __n The new number of buckets.
│ │ │ +
1118 *
│ │ │ +
1119 * Rehash will occur only if the new number of buckets respect the
│ │ │ +
1120 * %unordered_map maximum load factor.
│ │ │ +
1121 */
│ │ │ +
1122 void
│ │ │ +
│ │ │ + │ │ │ +
1124 { _M_h.rehash(__n); }
│ │ │ +
│ │ │ +
1125
│ │ │ +
1126 /**
│ │ │ +
1127 * @brief Prepare the %unordered_map for a specified number of
│ │ │ +
1128 * elements.
│ │ │ +
1129 * @param __n Number of elements required.
│ │ │ +
1130 *
│ │ │ +
1131 * Same as rehash(ceil(n / max_load_factor())).
│ │ │ +
1132 */
│ │ │ +
1133 void
│ │ │ +
│ │ │ + │ │ │ +
1135 { _M_h.reserve(__n); }
│ │ │ +
│ │ │ +
1136
│ │ │ +
1137 template<typename _Key1, typename _Tp1, typename _Hash1, typename _Pred1,
│ │ │ +
1138 typename _Alloc1>
│ │ │ +
1139 friend bool
│ │ │ + │ │ │ + │ │ │ +
1142 };
│ │ │ +
│ │ │ +
1143
│ │ │ +
1144#if __cpp_deduction_guides >= 201606
│ │ │ +
1145
│ │ │ +
1146 template<typename _InputIterator,
│ │ │ +
1147 typename _Hash = hash<__iter_key_t<_InputIterator>>,
│ │ │ +
1148 typename _Pred = equal_to<__iter_key_t<_InputIterator>>,
│ │ │ +
1149 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>,
│ │ │ +
1150 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
1151 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
1152 typename = _RequireNotAllocator<_Pred>,
│ │ │ +
1153 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1154 unordered_map(_InputIterator, _InputIterator,
│ │ │ + │ │ │ +
1156 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ +
1157 -> unordered_map<__iter_key_t<_InputIterator>,
│ │ │ +
1158 __iter_val_t<_InputIterator>,
│ │ │ +
1159 _Hash, _Pred, _Allocator>;
│ │ │ +
1160
│ │ │ +
1161 template<typename _Key, typename _Tp, typename _Hash = hash<_Key>,
│ │ │ +
1162 typename _Pred = equal_to<_Key>,
│ │ │ +
1163 typename _Allocator = allocator<pair<const _Key, _Tp>>,
│ │ │ +
1164 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
1165 typename = _RequireNotAllocator<_Pred>,
│ │ │ +
1166 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1167 unordered_map(initializer_list<pair<_Key, _Tp>>,
│ │ │ + │ │ │ +
1169 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ +
1170 -> unordered_map<_Key, _Tp, _Hash, _Pred, _Allocator>;
│ │ │ +
1171
│ │ │ +
1172 template<typename _InputIterator, typename _Allocator,
│ │ │ +
1173 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
1174 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1175 unordered_map(_InputIterator, _InputIterator,
│ │ │ +
1176 typename unordered_map<int, int>::size_type, _Allocator)
│ │ │ +
1177 -> unordered_map<__iter_key_t<_InputIterator>,
│ │ │ +
1178 __iter_val_t<_InputIterator>,
│ │ │ +
1179 hash<__iter_key_t<_InputIterator>>,
│ │ │ +
1180 equal_to<__iter_key_t<_InputIterator>>,
│ │ │ +
1181 _Allocator>;
│ │ │ +
1182
│ │ │ +
1183 template<typename _InputIterator, typename _Allocator,
│ │ │ +
1184 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
1185 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1186 unordered_map(_InputIterator, _InputIterator, _Allocator)
│ │ │ +
1187 -> unordered_map<__iter_key_t<_InputIterator>,
│ │ │ +
1188 __iter_val_t<_InputIterator>,
│ │ │ +
1189 hash<__iter_key_t<_InputIterator>>,
│ │ │ +
1190 equal_to<__iter_key_t<_InputIterator>>,
│ │ │ +
1191 _Allocator>;
│ │ │ +
1192
│ │ │ +
1193 template<typename _InputIterator, typename _Hash, typename _Allocator,
│ │ │ +
1194 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
1195 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
1196 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1197 unordered_map(_InputIterator, _InputIterator,
│ │ │ + │ │ │ +
1199 _Hash, _Allocator)
│ │ │ +
1200 -> unordered_map<__iter_key_t<_InputIterator>,
│ │ │ +
1201 __iter_val_t<_InputIterator>, _Hash,
│ │ │ +
1202 equal_to<__iter_key_t<_InputIterator>>, _Allocator>;
│ │ │ +
1203
│ │ │ +
1204 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ +
1205 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1206 unordered_map(initializer_list<pair<_Key, _Tp>>,
│ │ │ + │ │ │ +
1208 _Allocator)
│ │ │ +
1209 -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
│ │ │
1210
│ │ │ - │ │ │ -
│ │ │ -
1212 end() const noexcept
│ │ │ -
1213 { return _M_h.end(); }
│ │ │ -
│ │ │ -
1214 ///@}
│ │ │ -
1215
│ │ │ -
1216 /**
│ │ │ -
1217 * Returns a read-only (constant) iterator that points to the first
│ │ │ -
1218 * element in the %unordered_multiset.
│ │ │ -
1219 */
│ │ │ - │ │ │ -
│ │ │ -
1221 cbegin() const noexcept
│ │ │ -
1222 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
1223
│ │ │ -
1224 /**
│ │ │ -
1225 * Returns a read-only (constant) iterator that points one past the last
│ │ │ -
1226 * element in the %unordered_multiset.
│ │ │ -
1227 */
│ │ │ - │ │ │ -
│ │ │ -
1229 cend() const noexcept
│ │ │ -
1230 { return _M_h.end(); }
│ │ │ -
│ │ │ -
1231
│ │ │ -
1232 // modifiers.
│ │ │ -
1233
│ │ │ -
1234 /**
│ │ │ -
1235 * @brief Builds and insert an element into the %unordered_multiset.
│ │ │ -
1236 * @param __args Arguments used to generate an element.
│ │ │ -
1237 * @return An iterator that points to the inserted element.
│ │ │ -
1238 *
│ │ │ -
1239 * Insertion requires amortized constant time.
│ │ │ -
1240 */
│ │ │ -
1241 template<typename... _Args>
│ │ │ -
1242 iterator
│ │ │ -
│ │ │ - │ │ │ -
1244 { return _M_h.emplace(std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
1245
│ │ │ -
1246 /**
│ │ │ -
1247 * @brief Inserts an element into the %unordered_multiset.
│ │ │ -
1248 * @param __pos An iterator that serves as a hint as to where the
│ │ │ -
1249 * element should be inserted.
│ │ │ -
1250 * @param __args Arguments used to generate the element to be
│ │ │ -
1251 * inserted.
│ │ │ -
1252 * @return An iterator that points to the inserted element.
│ │ │ -
1253 *
│ │ │ -
1254 * Note that the first parameter is only a hint and can potentially
│ │ │ -
1255 * improve the performance of the insertion process. A bad hint would
│ │ │ -
1256 * cause no gains in efficiency.
│ │ │ -
1257 *
│ │ │ -
1258 * For more on @a hinting, see:
│ │ │ -
1259 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
1260 *
│ │ │ -
1261 * Insertion requires amortized constant time.
│ │ │ -
1262 */
│ │ │ -
1263 template<typename... _Args>
│ │ │ -
1264 iterator
│ │ │ -
│ │ │ - │ │ │ -
1266 { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
1267
│ │ │ -
1268 ///@{
│ │ │ -
1269 /**
│ │ │ -
1270 * @brief Inserts an element into the %unordered_multiset.
│ │ │ -
1271 * @param __x Element to be inserted.
│ │ │ -
1272 * @return An iterator that points to the inserted element.
│ │ │ -
1273 *
│ │ │ -
1274 * Insertion requires amortized constant time.
│ │ │ -
1275 */
│ │ │ -
1276 iterator
│ │ │ -
│ │ │ -
1277 insert(const value_type& __x)
│ │ │ -
1278 { return _M_h.insert(__x); }
│ │ │ -
│ │ │ -
1279
│ │ │ -
1280 iterator
│ │ │ -
│ │ │ - │ │ │ -
1282 { return _M_h.insert(std::move(__x)); }
│ │ │ -
│ │ │ -
1283 ///@}
│ │ │ -
1284
│ │ │ -
1285 ///@{
│ │ │ -
1286 /**
│ │ │ -
1287 * @brief Inserts an element into the %unordered_multiset.
│ │ │ -
1288 * @param __hint An iterator that serves as a hint as to where the
│ │ │ -
1289 * element should be inserted.
│ │ │ -
1290 * @param __x Element to be inserted.
│ │ │ -
1291 * @return An iterator that points to the inserted element.
│ │ │ -
1292 *
│ │ │ -
1293 * Note that the first parameter is only a hint and can potentially
│ │ │ -
1294 * improve the performance of the insertion process. A bad hint would
│ │ │ -
1295 * cause no gains in efficiency.
│ │ │ -
1296 *
│ │ │ -
1297 * For more on @a hinting, see:
│ │ │ -
1298 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
1299 *
│ │ │ -
1300 * Insertion requires amortized constant.
│ │ │ +
1211 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ +
1212 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1213 unordered_map(initializer_list<pair<_Key, _Tp>>, _Allocator)
│ │ │ +
1214 -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
│ │ │ +
1215
│ │ │ +
1216 template<typename _Key, typename _Tp, typename _Hash, typename _Allocator,
│ │ │ +
1217 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
1218 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1219 unordered_map(initializer_list<pair<_Key, _Tp>>,
│ │ │ + │ │ │ +
1221 _Hash, _Allocator)
│ │ │ +
1222 -> unordered_map<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>;
│ │ │ +
1223
│ │ │ +
1224#endif
│ │ │ +
1225
│ │ │ +
1226 /**
│ │ │ +
1227 * @brief A standard container composed of equivalent keys
│ │ │ +
1228 * (possibly containing multiple of each key value) that associates
│ │ │ +
1229 * values of another type with the keys.
│ │ │ +
1230 *
│ │ │ +
1231 * @ingroup unordered_associative_containers
│ │ │ +
1232 * @headerfile unordered_map
│ │ │ +
1233 * @since C++11
│ │ │ +
1234 *
│ │ │ +
1235 * @tparam _Key Type of key objects.
│ │ │ +
1236 * @tparam _Tp Type of mapped objects.
│ │ │ +
1237 * @tparam _Hash Hashing function object type, defaults to hash<_Value>.
│ │ │ +
1238 * @tparam _Pred Predicate function object type, defaults
│ │ │ +
1239 * to equal_to<_Value>.
│ │ │ +
1240 * @tparam _Alloc Allocator type, defaults to
│ │ │ +
1241 * std::allocator<std::pair<const _Key, _Tp>>.
│ │ │ +
1242 *
│ │ │ +
1243 * Meets the requirements of a <a href="tables.html#65">container</a>, and
│ │ │ +
1244 * <a href="tables.html#xx">unordered associative container</a>
│ │ │ +
1245 *
│ │ │ +
1246 * The resulting value type of the container is std::pair<const _Key, _Tp>.
│ │ │ +
1247 *
│ │ │ +
1248 * Base is _Hashtable, dispatched at compile time via template
│ │ │ +
1249 * alias __ummap_hashtable.
│ │ │ +
1250 */
│ │ │ +
1251 template<typename _Key, typename _Tp,
│ │ │ +
1252 typename _Hash = hash<_Key>,
│ │ │ +
1253 typename _Pred = equal_to<_Key>,
│ │ │ +
1254 typename _Alloc = allocator<std::pair<const _Key, _Tp>>>
│ │ │ +
│ │ │ + │ │ │ +
1256 {
│ │ │ + │ │ │ +
1258 _Hashtable _M_h;
│ │ │ +
1259
│ │ │ +
1260 public:
│ │ │ +
1261 // typedefs:
│ │ │ +
1262 ///@{
│ │ │ +
1263 /// Public typedefs.
│ │ │ +
1264 typedef typename _Hashtable::key_type key_type;
│ │ │ +
1265 typedef typename _Hashtable::value_type value_type;
│ │ │ +
1266 typedef typename _Hashtable::mapped_type mapped_type;
│ │ │ +
1267 typedef typename _Hashtable::hasher hasher;
│ │ │ +
1268 typedef typename _Hashtable::key_equal key_equal;
│ │ │ +
1269 typedef typename _Hashtable::allocator_type allocator_type;
│ │ │ +
1270 ///@}
│ │ │ +
1271
│ │ │ +
1272 ///@{
│ │ │ +
1273 /// Iterator-related typedefs.
│ │ │ +
1274 typedef typename _Hashtable::pointer pointer;
│ │ │ +
1275 typedef typename _Hashtable::const_pointer const_pointer;
│ │ │ +
1276 typedef typename _Hashtable::reference reference;
│ │ │ +
1277 typedef typename _Hashtable::const_reference const_reference;
│ │ │ +
1278 typedef typename _Hashtable::iterator iterator;
│ │ │ +
1279 typedef typename _Hashtable::const_iterator const_iterator;
│ │ │ +
1280 typedef typename _Hashtable::local_iterator local_iterator;
│ │ │ +
1281 typedef typename _Hashtable::const_local_iterator const_local_iterator;
│ │ │ +
1282 typedef typename _Hashtable::size_type size_type;
│ │ │ +
1283 typedef typename _Hashtable::difference_type difference_type;
│ │ │ +
1284 ///@}
│ │ │ +
1285
│ │ │ +
1286#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ +
1287 using node_type = typename _Hashtable::node_type;
│ │ │ +
1288#endif
│ │ │ +
1289
│ │ │ +
1290 //construct/destroy/copy
│ │ │ +
1291
│ │ │ +
1292 /// Default constructor.
│ │ │ + │ │ │ +
1294
│ │ │ +
1295 /**
│ │ │ +
1296 * @brief Default constructor creates no elements.
│ │ │ +
1297 * @param __n Mnimal initial number of buckets.
│ │ │ +
1298 * @param __hf A hash functor.
│ │ │ +
1299 * @param __eql A key equality functor.
│ │ │ +
1300 * @param __a An allocator object.
│ │ │
1301 */
│ │ │ -
1302 iterator
│ │ │ +
1302 explicit
│ │ │
│ │ │ - │ │ │ -
1304 { return _M_h.insert(__hint, __x); }
│ │ │ -
│ │ │ -
1305
│ │ │ -
1306 iterator
│ │ │ -
│ │ │ - │ │ │ -
1308 { return _M_h.insert(__hint, std::move(__x)); }
│ │ │ -
│ │ │ -
1309 ///@}
│ │ │ -
1310
│ │ │ -
1311 /**
│ │ │ -
1312 * @brief A template function that inserts a range of elements.
│ │ │ -
1313 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
1314 * inserted.
│ │ │ -
1315 * @param __last Iterator pointing to the end of the range.
│ │ │ -
1316 *
│ │ │ -
1317 * Complexity similar to that of the range constructor.
│ │ │ -
1318 */
│ │ │ -
1319 template<typename _InputIterator>
│ │ │ -
1320 void
│ │ │ -
│ │ │ - │ │ │ -
1322 { _M_h.insert(__first, __last); }
│ │ │ -
│ │ │ -
1323
│ │ │ -
1324 /**
│ │ │ -
1325 * @brief Inserts a list of elements into the %unordered_multiset.
│ │ │ -
1326 * @param __l A std::initializer_list<value_type> of elements to be
│ │ │ -
1327 * inserted.
│ │ │ -
1328 *
│ │ │ -
1329 * Complexity similar to that of the range constructor.
│ │ │ -
1330 */
│ │ │ -
1331 void
│ │ │ -
│ │ │ - │ │ │ -
1333 { _M_h.insert(__l); }
│ │ │ -
│ │ │ -
1334
│ │ │ -
1335#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
1336 /// Extract a node.
│ │ │ -
1337 node_type
│ │ │ -
│ │ │ - │ │ │ -
1339 {
│ │ │ -
1340 __glibcxx_assert(__pos != end());
│ │ │ -
1341 return _M_h.extract(__pos);
│ │ │ -
1342 }
│ │ │ -
│ │ │ -
1343
│ │ │ -
1344 /// Extract a node.
│ │ │ -
1345 node_type
│ │ │ -
│ │ │ - │ │ │ -
1347 { return _M_h.extract(__key); }
│ │ │ -
│ │ │ -
1348
│ │ │ -
1349 /// Re-insert an extracted node.
│ │ │ -
1350 iterator
│ │ │ -
│ │ │ -
1351 insert(node_type&& __nh)
│ │ │ -
1352 { return _M_h._M_reinsert_node_multi(cend(), std::move(__nh)); }
│ │ │ -
│ │ │ -
1353
│ │ │ -
1354 /// Re-insert an extracted node.
│ │ │ -
1355 iterator
│ │ │ -
│ │ │ - │ │ │ -
1357 { return _M_h._M_reinsert_node_multi(__hint, std::move(__nh)); }
│ │ │ -
│ │ │ -
1358#endif // node_extract
│ │ │ -
1359
│ │ │ -
1360 ///@{
│ │ │ -
1361 /**
│ │ │ -
1362 * @brief Erases an element from an %unordered_multiset.
│ │ │ -
1363 * @param __position An iterator pointing to the element to be erased.
│ │ │ -
1364 * @return An iterator pointing to the element immediately following
│ │ │ -
1365 * @a __position prior to the element being erased. If no such
│ │ │ -
1366 * element exists, end() is returned.
│ │ │ -
1367 *
│ │ │ -
1368 * This function erases an element, pointed to by the given iterator,
│ │ │ -
1369 * from an %unordered_multiset.
│ │ │ -
1370 *
│ │ │ -
1371 * Note that this function only erases the element, and that if the
│ │ │ -
1372 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ -
1373 * any way. Managing the pointer is the user's responsibility.
│ │ │ -
1374 */
│ │ │ -
1375 iterator
│ │ │ -
│ │ │ - │ │ │ -
1377 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
1378
│ │ │ -
1379 // LWG 2059.
│ │ │ -
1380 iterator
│ │ │ -
│ │ │ - │ │ │ -
1382 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
1383 ///@}
│ │ │ -
1384
│ │ │ -
1385
│ │ │ -
1386 /**
│ │ │ -
1387 * @brief Erases elements according to the provided key.
│ │ │ -
1388 * @param __x Key of element to be erased.
│ │ │ -
1389 * @return The number of elements erased.
│ │ │ -
1390 *
│ │ │ -
1391 * This function erases all the elements located by the given key from
│ │ │ -
1392 * an %unordered_multiset.
│ │ │ -
1393 *
│ │ │ -
1394 * Note that this function only erases the element, and that if the
│ │ │ -
1395 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ -
1396 * any way. Managing the pointer is the user's responsibility.
│ │ │ -
1397 */
│ │ │ -
1398 size_type
│ │ │ -
│ │ │ -
1399 erase(const key_type& __x)
│ │ │ -
1400 { return _M_h.erase(__x); }
│ │ │ -
│ │ │ -
1401
│ │ │ -
1402 /**
│ │ │ -
1403 * @brief Erases a [__first,__last) range of elements from an
│ │ │ -
1404 * %unordered_multiset.
│ │ │ -
1405 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
1406 * erased.
│ │ │ -
1407 * @param __last Iterator pointing to the end of the range to
│ │ │ -
1408 * be erased.
│ │ │ -
1409 * @return The iterator @a __last.
│ │ │ -
1410 *
│ │ │ -
1411 * This function erases a sequence of elements from an
│ │ │ -
1412 * %unordered_multiset.
│ │ │ -
1413 *
│ │ │ -
1414 * Note that this function only erases the element, and that if
│ │ │ -
1415 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ -
1416 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
1417 */
│ │ │ -
1418 iterator
│ │ │ -
│ │ │ - │ │ │ -
1420 { return _M_h.erase(__first, __last); }
│ │ │ -
│ │ │ + │ │ │ +
1304 const hasher& __hf = hasher(),
│ │ │ +
1305 const key_equal& __eql = key_equal(),
│ │ │ +
1306 const allocator_type& __a = allocator_type())
│ │ │ +
1307 : _M_h(__n, __hf, __eql, __a)
│ │ │ +
1308 { }
│ │ │ +
│ │ │ +
1309
│ │ │ +
1310 /**
│ │ │ +
1311 * @brief Builds an %unordered_multimap from a range.
│ │ │ +
1312 * @param __first An input iterator.
│ │ │ +
1313 * @param __last An input iterator.
│ │ │ +
1314 * @param __n Minimal initial number of buckets.
│ │ │ +
1315 * @param __hf A hash functor.
│ │ │ +
1316 * @param __eql A key equality functor.
│ │ │ +
1317 * @param __a An allocator object.
│ │ │ +
1318 *
│ │ │ +
1319 * Create an %unordered_multimap consisting of copies of the elements
│ │ │ +
1320 * from [__first,__last). This is linear in N (where N is
│ │ │ +
1321 * distance(__first,__last)).
│ │ │ +
1322 */
│ │ │ +
1323 template<typename _InputIterator>
│ │ │ +
│ │ │ + │ │ │ +
1325 size_type __n = 0,
│ │ │ +
1326 const hasher& __hf = hasher(),
│ │ │ +
1327 const key_equal& __eql = key_equal(),
│ │ │ +
1328 const allocator_type& __a = allocator_type())
│ │ │ +
1329 : _M_h(__first, __last, __n, __hf, __eql, __a)
│ │ │ +
1330 { }
│ │ │ +
│ │ │ +
1331
│ │ │ +
1332 /// Copy constructor.
│ │ │ + │ │ │ +
1334
│ │ │ +
1335 /// Move constructor.
│ │ │ + │ │ │ +
1337
│ │ │ +
1338 /**
│ │ │ +
1339 * @brief Creates an %unordered_multimap with no elements.
│ │ │ +
1340 * @param __a An allocator object.
│ │ │ +
1341 */
│ │ │ +
1342 explicit
│ │ │ +
│ │ │ + │ │ │ +
1344 : _M_h(__a)
│ │ │ +
1345 { }
│ │ │ +
│ │ │ +
1346
│ │ │ +
1347 /*
│ │ │ +
1348 * @brief Copy constructor with allocator argument.
│ │ │ +
1349 * @param __uset Input %unordered_multimap to copy.
│ │ │ +
1350 * @param __a An allocator object.
│ │ │ +
1351 */
│ │ │ + │ │ │ +
1353 const allocator_type& __a)
│ │ │ +
1354 : _M_h(__ummap._M_h, __a)
│ │ │ +
1355 { }
│ │ │ +
1356
│ │ │ +
1357 /*
│ │ │ +
1358 * @brief Move constructor with allocator argument.
│ │ │ +
1359 * @param __uset Input %unordered_multimap to move.
│ │ │ +
1360 * @param __a An allocator object.
│ │ │ +
1361 */
│ │ │ + │ │ │ +
1363 const allocator_type& __a)
│ │ │ +
1364 noexcept( noexcept(_Hashtable(std::move(__ummap._M_h), __a)) )
│ │ │ +
1365 : _M_h(std::move(__ummap._M_h), __a)
│ │ │ +
1366 { }
│ │ │ +
1367
│ │ │ +
1368 /**
│ │ │ +
1369 * @brief Builds an %unordered_multimap from an initializer_list.
│ │ │ +
1370 * @param __l An initializer_list.
│ │ │ +
1371 * @param __n Minimal initial number of buckets.
│ │ │ +
1372 * @param __hf A hash functor.
│ │ │ +
1373 * @param __eql A key equality functor.
│ │ │ +
1374 * @param __a An allocator object.
│ │ │ +
1375 *
│ │ │ +
1376 * Create an %unordered_multimap consisting of copies of the elements in
│ │ │ +
1377 * the list. This is linear in N (where N is @a __l.size()).
│ │ │ +
1378 */
│ │ │ +
│ │ │ + │ │ │ +
1380 size_type __n = 0,
│ │ │ +
1381 const hasher& __hf = hasher(),
│ │ │ +
1382 const key_equal& __eql = key_equal(),
│ │ │ +
1383 const allocator_type& __a = allocator_type())
│ │ │ +
1384 : _M_h(__l, __n, __hf, __eql, __a)
│ │ │ +
1385 { }
│ │ │ +
│ │ │ +
1386
│ │ │ + │ │ │ +
1388 : unordered_multimap(__n, hasher(), key_equal(), __a)
│ │ │ +
1389 { }
│ │ │ +
1390
│ │ │ +
1391 unordered_multimap(size_type __n, const hasher& __hf,
│ │ │ +
1392 const allocator_type& __a)
│ │ │ +
1393 : unordered_multimap(__n, __hf, key_equal(), __a)
│ │ │ +
1394 { }
│ │ │ +
1395
│ │ │ +
1396 template<typename _InputIterator>
│ │ │ +
1397 unordered_multimap(_InputIterator __first, _InputIterator __last,
│ │ │ +
1398 size_type __n,
│ │ │ +
1399 const allocator_type& __a)
│ │ │ +
1400 : unordered_multimap(__first, __last, __n, hasher(), key_equal(), __a)
│ │ │ +
1401 { }
│ │ │ +
1402
│ │ │ +
1403 template<typename _InputIterator>
│ │ │ +
1404 unordered_multimap(_InputIterator __first, _InputIterator __last,
│ │ │ +
1405 size_type __n, const hasher& __hf,
│ │ │ +
1406 const allocator_type& __a)
│ │ │ +
1407 : unordered_multimap(__first, __last, __n, __hf, key_equal(), __a)
│ │ │ +
1408 { }
│ │ │ +
1409
│ │ │ +
1410 unordered_multimap(initializer_list<value_type> __l,
│ │ │ +
1411 size_type __n,
│ │ │ +
1412 const allocator_type& __a)
│ │ │ +
1413 : unordered_multimap(__l, __n, hasher(), key_equal(), __a)
│ │ │ +
1414 { }
│ │ │ +
1415
│ │ │ +
1416 unordered_multimap(initializer_list<value_type> __l,
│ │ │ +
1417 size_type __n, const hasher& __hf,
│ │ │ +
1418 const allocator_type& __a)
│ │ │ +
1419 : unordered_multimap(__l, __n, __hf, key_equal(), __a)
│ │ │ +
1420 { }
│ │ │
1421
│ │ │ -
1422 /**
│ │ │ -
1423 * Erases all elements in an %unordered_multiset.
│ │ │ -
1424 *
│ │ │ -
1425 * Note that this function only erases the elements, and that if the
│ │ │ -
1426 * elements themselves are pointers, the pointed-to memory is not touched
│ │ │ -
1427 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
1428 */
│ │ │ -
1429 void
│ │ │ -
│ │ │ -
1430 clear() noexcept
│ │ │ -
1431 { _M_h.clear(); }
│ │ │ -
│ │ │ -
1432
│ │ │ -
1433 /**
│ │ │ -
1434 * @brief Swaps data with another %unordered_multiset.
│ │ │ -
1435 * @param __x An %unordered_multiset of the same element and allocator
│ │ │ -
1436 * types.
│ │ │ -
1437 *
│ │ │ -
1438 * This exchanges the elements between two sets in constant time.
│ │ │ -
1439 * Note that the global std::swap() function is specialized such that
│ │ │ -
1440 * std::swap(s1,s2) will feed to this function.
│ │ │ -
1441 */
│ │ │ -
1442 void
│ │ │ -
│ │ │ - │ │ │ -
1444 noexcept( noexcept(_M_h.swap(__x._M_h)) )
│ │ │ -
1445 { _M_h.swap(__x._M_h); }
│ │ │ -
│ │ │ -
1446
│ │ │ -
1447#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
1448 template<typename, typename, typename>
│ │ │ -
1449 friend class std::_Hash_merge_helper;
│ │ │ -
1450
│ │ │ -
1451 template<typename _H2, typename _P2>
│ │ │ -
1452 void
│ │ │ - │ │ │ -
1454 {
│ │ │ -
1455 using _Merge_helper
│ │ │ - │ │ │ -
1457 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ -
1458 }
│ │ │ -
1459
│ │ │ -
1460 template<typename _H2, typename _P2>
│ │ │ -
1461 void
│ │ │ -
1462 merge(unordered_multiset<_Value, _H2, _P2, _Alloc>&& __source)
│ │ │ -
1463 { merge(__source); }
│ │ │ -
1464
│ │ │ -
1465 template<typename _H2, typename _P2>
│ │ │ -
1466 void
│ │ │ -
1467 merge(unordered_set<_Value, _H2, _P2, _Alloc>& __source)
│ │ │ -
1468 {
│ │ │ -
1469 using _Merge_helper
│ │ │ -
1470 = _Hash_merge_helper<unordered_multiset, _H2, _P2>;
│ │ │ -
1471 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ -
1472 }
│ │ │ -
1473
│ │ │ -
1474 template<typename _H2, typename _P2>
│ │ │ -
1475 void
│ │ │ -
1476 merge(unordered_set<_Value, _H2, _P2, _Alloc>&& __source)
│ │ │ -
1477 { merge(__source); }
│ │ │ -
1478#endif // node_extract
│ │ │ -
1479
│ │ │ -
1480 // observers.
│ │ │ -
1481
│ │ │ -
1482 /// Returns the hash functor object with which the %unordered_multiset
│ │ │ -
1483 /// was constructed.
│ │ │ -
1484 hasher
│ │ │ -
│ │ │ - │ │ │ -
1486 { return _M_h.hash_function(); }
│ │ │ -
│ │ │ -
1487
│ │ │ -
1488 /// Returns the key comparison object with which the %unordered_multiset
│ │ │ -
1489 /// was constructed.
│ │ │ -
1490 key_equal
│ │ │ -
│ │ │ -
1491 key_eq() const
│ │ │ -
1492 { return _M_h.key_eq(); }
│ │ │ -
│ │ │ -
1493
│ │ │ -
1494 // lookup.
│ │ │ -
1495
│ │ │ -
1496 ///@{
│ │ │ -
1497 /**
│ │ │ -
1498 * @brief Tries to locate an element in an %unordered_multiset.
│ │ │ -
1499 * @param __x Element to be located.
│ │ │ -
1500 * @return Iterator pointing to sought-after element, or end() if not
│ │ │ -
1501 * found.
│ │ │ -
1502 *
│ │ │ -
1503 * This function takes a key and tries to locate the element with which
│ │ │ -
1504 * the key matches. If successful the function returns an iterator
│ │ │ -
1505 * pointing to the sought after element. If unsuccessful it returns the
│ │ │ -
1506 * past-the-end ( @c end() ) iterator.
│ │ │ -
1507 */
│ │ │ -
1508 iterator
│ │ │ -
│ │ │ -
1509 find(const key_type& __x)
│ │ │ -
1510 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
1511
│ │ │ -
1512#if __cplusplus > 201703L
│ │ │ -
1513 template<typename _Kt>
│ │ │ -
1514 auto
│ │ │ -
│ │ │ -
1515 find(const _Kt& __x)
│ │ │ -
1516 -> decltype(_M_h._M_find_tr(__x))
│ │ │ -
1517 { return _M_h._M_find_tr(__x); }
│ │ │ -
│ │ │ -
1518#endif
│ │ │ -
1519
│ │ │ - │ │ │ -
│ │ │ -
1521 find(const key_type& __x) const
│ │ │ -
1522 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
1523
│ │ │ -
1524#if __cplusplus > 201703L
│ │ │ -
1525 template<typename _Kt>
│ │ │ -
1526 auto
│ │ │ -
│ │ │ -
1527 find(const _Kt& __x) const
│ │ │ -
1528 -> decltype(_M_h._M_find_tr(__x))
│ │ │ -
1529 { return _M_h._M_find_tr(__x); }
│ │ │ -
│ │ │ -
1530#endif
│ │ │ -
1531 ///@}
│ │ │ -
1532
│ │ │ -
1533 ///@{
│ │ │ -
1534 /**
│ │ │ -
1535 * @brief Finds the number of elements.
│ │ │ -
1536 * @param __x Element to located.
│ │ │ -
1537 * @return Number of elements with specified key.
│ │ │ -
1538 */
│ │ │ -
1539 size_type
│ │ │ -
│ │ │ -
1540 count(const key_type& __x) const
│ │ │ -
1541 { return _M_h.count(__x); }
│ │ │ -
│ │ │ -
1542
│ │ │ -
1543#if __cplusplus > 201703L
│ │ │ -
1544 template<typename _Kt>
│ │ │ -
1545 auto
│ │ │ -
│ │ │ -
1546 count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x))
│ │ │ -
1547 { return _M_h._M_count_tr(__x); }
│ │ │ -
│ │ │ -
1548#endif
│ │ │ -
1549 ///@}
│ │ │ -
1550
│ │ │ -
1551#if __cplusplus > 201703L
│ │ │ -
1552 ///@{
│ │ │ -
1553 /**
│ │ │ -
1554 * @brief Finds whether an element with the given key exists.
│ │ │ -
1555 * @param __x Key of elements to be located.
│ │ │ -
1556 * @return True if there is any element with the specified key.
│ │ │ -
1557 */
│ │ │ -
1558 bool
│ │ │ -
│ │ │ -
1559 contains(const key_type& __x) const
│ │ │ -
1560 { return _M_h.find(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
1561
│ │ │ -
1562 template<typename _Kt>
│ │ │ -
1563 auto
│ │ │ -
│ │ │ -
1564 contains(const _Kt& __x) const
│ │ │ -
1565 -> decltype(_M_h._M_find_tr(__x), void(), true)
│ │ │ -
1566 { return _M_h._M_find_tr(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
1567 ///@}
│ │ │ -
1568#endif
│ │ │ -
1569
│ │ │ -
1570 ///@{
│ │ │ -
1571 /**
│ │ │ -
1572 * @brief Finds a subsequence matching given key.
│ │ │ -
1573 * @param __x Key to be located.
│ │ │ -
1574 * @return Pair of iterators that possibly points to the subsequence
│ │ │ -
1575 * matching given key.
│ │ │ -
1576 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1579 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
1580
│ │ │ -
1581#if __cplusplus > 201703L
│ │ │ -
1582 template<typename _Kt>
│ │ │ -
1583 auto
│ │ │ -
│ │ │ -
1584 equal_range(const _Kt& __x)
│ │ │ -
1585 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ -
1586 { return _M_h._M_equal_range_tr(__x); }
│ │ │ -
│ │ │ -
1587#endif
│ │ │ -
1588
│ │ │ - │ │ │ -
│ │ │ -
1590 equal_range(const key_type& __x) const
│ │ │ -
1591 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
1592
│ │ │ -
1593#if __cplusplus > 201703L
│ │ │ -
1594 template<typename _Kt>
│ │ │ -
1595 auto
│ │ │ -
│ │ │ -
1596 equal_range(const _Kt& __x) const
│ │ │ -
1597 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ -
1598 { return _M_h._M_equal_range_tr(__x); }
│ │ │ -
│ │ │ -
1599#endif
│ │ │ -
1600 ///@}
│ │ │ -
1601
│ │ │ -
1602 // bucket interface.
│ │ │ -
1603
│ │ │ -
1604 /// Returns the number of buckets of the %unordered_multiset.
│ │ │ -
1605 size_type
│ │ │ -
│ │ │ - │ │ │ -
1607 { return _M_h.bucket_count(); }
│ │ │ -
│ │ │ -
1608
│ │ │ -
1609 /// Returns the maximum number of buckets of the %unordered_multiset.
│ │ │ -
1610 size_type
│ │ │ -
│ │ │ - │ │ │ -
1612 { return _M_h.max_bucket_count(); }
│ │ │ -
│ │ │ -
1613
│ │ │ -
1614 /*
│ │ │ -
1615 * @brief Returns the number of elements in a given bucket.
│ │ │ -
1616 * @param __n A bucket index.
│ │ │ -
1617 * @return The number of elements in the bucket.
│ │ │ -
1618 */
│ │ │ -
1619 size_type
│ │ │ -
1620 bucket_size(size_type __n) const
│ │ │ -
1621 { return _M_h.bucket_size(__n); }
│ │ │ -
1622
│ │ │ -
1623 /*
│ │ │ -
1624 * @brief Returns the bucket index of a given element.
│ │ │ -
1625 * @param __key A key instance.
│ │ │ -
1626 * @return The key bucket index.
│ │ │ -
1627 */
│ │ │ -
1628 size_type
│ │ │ -
1629 bucket(const key_type& __key) const
│ │ │ -
1630 { return _M_h.bucket(__key); }
│ │ │ -
1631
│ │ │ -
1632 ///@{
│ │ │ -
1633 /**
│ │ │ -
1634 * @brief Returns a read-only (constant) iterator pointing to the first
│ │ │ -
1635 * bucket element.
│ │ │ -
1636 * @param __n The bucket index.
│ │ │ -
1637 * @return A read-only local iterator.
│ │ │ -
1638 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1641 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
1642
│ │ │ - │ │ │ -
│ │ │ -
1644 begin(size_type __n) const
│ │ │ -
1645 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
1646
│ │ │ - │ │ │ +
1422 /// Copy assignment operator.
│ │ │ + │ │ │ + │ │ │ +
1425
│ │ │ +
1426 /// Move assignment operator.
│ │ │ + │ │ │ + │ │ │ +
1429
│ │ │ +
1430 /**
│ │ │ +
1431 * @brief %Unordered_multimap list assignment operator.
│ │ │ +
1432 * @param __l An initializer_list.
│ │ │ +
1433 *
│ │ │ +
1434 * This function fills an %unordered_multimap with copies of the
│ │ │ +
1435 * elements in the initializer list @a __l.
│ │ │ +
1436 *
│ │ │ +
1437 * Note that the assignment completely changes the %unordered_multimap
│ │ │ +
1438 * and that the resulting %unordered_multimap's size is the same as the
│ │ │ +
1439 * number of elements assigned.
│ │ │ +
1440 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1443 {
│ │ │ +
1444 _M_h = __l;
│ │ │ +
1445 return *this;
│ │ │ +
1446 }
│ │ │ +
│ │ │ +
1447
│ │ │ +
1448 /// Returns the allocator object used by the %unordered_multimap.
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1451 { return _M_h.get_allocator(); }
│ │ │ +
│ │ │ +
1452
│ │ │ +
1453 // size and capacity:
│ │ │ +
1454
│ │ │ +
1455 /// Returns true if the %unordered_multimap is empty.
│ │ │ +
1456 _GLIBCXX_NODISCARD bool
│ │ │ +
│ │ │ +
1457 empty() const noexcept
│ │ │ +
1458 { return _M_h.empty(); }
│ │ │ +
│ │ │ +
1459
│ │ │ +
1460 /// Returns the size of the %unordered_multimap.
│ │ │ +
1461 size_type
│ │ │ +
│ │ │ +
1462 size() const noexcept
│ │ │ +
1463 { return _M_h.size(); }
│ │ │ +
│ │ │ +
1464
│ │ │ +
1465 /// Returns the maximum size of the %unordered_multimap.
│ │ │ +
1466 size_type
│ │ │ +
│ │ │ +
1467 max_size() const noexcept
│ │ │ +
1468 { return _M_h.max_size(); }
│ │ │ +
│ │ │ +
1469
│ │ │ +
1470 // iterators.
│ │ │ +
1471
│ │ │ +
1472 /**
│ │ │ +
1473 * Returns a read/write iterator that points to the first element in the
│ │ │ +
1474 * %unordered_multimap.
│ │ │ +
1475 */
│ │ │ +
1476 iterator
│ │ │ +
│ │ │ +
1477 begin() noexcept
│ │ │ +
1478 { return _M_h.begin(); }
│ │ │ +
│ │ │ +
1479
│ │ │ +
1480 ///@{
│ │ │ +
1481 /**
│ │ │ +
1482 * Returns a read-only (constant) iterator that points to the first
│ │ │ +
1483 * element in the %unordered_multimap.
│ │ │ +
1484 */
│ │ │ + │ │ │ +
│ │ │ +
1486 begin() const noexcept
│ │ │ +
1487 { return _M_h.begin(); }
│ │ │ +
│ │ │ +
1488
│ │ │ + │ │ │ +
│ │ │ +
1490 cbegin() const noexcept
│ │ │ +
1491 { return _M_h.begin(); }
│ │ │ +
│ │ │ +
1492 ///@}
│ │ │ +
1493
│ │ │ +
1494 /**
│ │ │ +
1495 * Returns a read/write iterator that points one past the last element in
│ │ │ +
1496 * the %unordered_multimap.
│ │ │ +
1497 */
│ │ │ +
1498 iterator
│ │ │ +
│ │ │ +
1499 end() noexcept
│ │ │ +
1500 { return _M_h.end(); }
│ │ │ +
│ │ │ +
1501
│ │ │ +
1502 ///@{
│ │ │ +
1503 /**
│ │ │ +
1504 * Returns a read-only (constant) iterator that points one past the last
│ │ │ +
1505 * element in the %unordered_multimap.
│ │ │ +
1506 */
│ │ │ + │ │ │ +
│ │ │ +
1508 end() const noexcept
│ │ │ +
1509 { return _M_h.end(); }
│ │ │ +
│ │ │ +
1510
│ │ │ + │ │ │ +
│ │ │ +
1512 cend() const noexcept
│ │ │ +
1513 { return _M_h.end(); }
│ │ │ +
│ │ │ +
1514 ///@}
│ │ │ +
1515
│ │ │ +
1516 // modifiers.
│ │ │ +
1517
│ │ │ +
1518 /**
│ │ │ +
1519 * @brief Attempts to build and insert a std::pair into the
│ │ │ +
1520 * %unordered_multimap.
│ │ │ +
1521 *
│ │ │ +
1522 * @param __args Arguments used to generate a new pair instance (see
│ │ │ +
1523 * std::piecewise_contruct for passing arguments to each
│ │ │ +
1524 * part of the pair constructor).
│ │ │ +
1525 *
│ │ │ +
1526 * @return An iterator that points to the inserted pair.
│ │ │ +
1527 *
│ │ │ +
1528 * This function attempts to build and insert a (key, value) %pair into
│ │ │ +
1529 * the %unordered_multimap.
│ │ │ +
1530 *
│ │ │ +
1531 * Insertion requires amortized constant time.
│ │ │ +
1532 */
│ │ │ +
1533 template<typename... _Args>
│ │ │ +
1534 iterator
│ │ │ +
│ │ │ + │ │ │ +
1536 { return _M_h.emplace(std::forward<_Args>(__args)...); }
│ │ │ +
│ │ │ +
1537
│ │ │ +
1538 /**
│ │ │ +
1539 * @brief Attempts to build and insert a std::pair into the
│ │ │ +
1540 * %unordered_multimap.
│ │ │ +
1541 *
│ │ │ +
1542 * @param __pos An iterator that serves as a hint as to where the pair
│ │ │ +
1543 * should be inserted.
│ │ │ +
1544 * @param __args Arguments used to generate a new pair instance (see
│ │ │ +
1545 * std::piecewise_contruct for passing arguments to each
│ │ │ +
1546 * part of the pair constructor).
│ │ │ +
1547 * @return An iterator that points to the element with key of the
│ │ │ +
1548 * std::pair built from @a __args.
│ │ │ +
1549 *
│ │ │ +
1550 * Note that the first parameter is only a hint and can potentially
│ │ │ +
1551 * improve the performance of the insertion process. A bad hint would
│ │ │ +
1552 * cause no gains in efficiency.
│ │ │ +
1553 *
│ │ │ +
1554 * See
│ │ │ +
1555 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ +
1556 * for more on @a hinting.
│ │ │ +
1557 *
│ │ │ +
1558 * Insertion requires amortized constant time.
│ │ │ +
1559 */
│ │ │ +
1560 template<typename... _Args>
│ │ │ +
1561 iterator
│ │ │ +
│ │ │ + │ │ │ +
1563 { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
│ │ │ +
│ │ │ +
1564
│ │ │ +
1565 ///@{
│ │ │ +
1566 /**
│ │ │ +
1567 * @brief Inserts a std::pair into the %unordered_multimap.
│ │ │ +
1568 * @param __x Pair to be inserted (see std::make_pair for easy
│ │ │ +
1569 * creation of pairs).
│ │ │ +
1570 *
│ │ │ +
1571 * @return An iterator that points to the inserted pair.
│ │ │ +
1572 *
│ │ │ +
1573 * Insertion requires amortized constant time.
│ │ │ +
1574 */
│ │ │ +
1575 iterator
│ │ │ +
│ │ │ +
1576 insert(const value_type& __x)
│ │ │ +
1577 { return _M_h.insert(__x); }
│ │ │ +
│ │ │ +
1578
│ │ │ +
1579 iterator
│ │ │ +
│ │ │ + │ │ │ +
1581 { return _M_h.insert(std::move(__x)); }
│ │ │ +
│ │ │ +
1582
│ │ │ +
1583 template<typename _Pair>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1586 { return _M_h.emplace(std::forward<_Pair>(__x)); }
│ │ │ +
│ │ │ +
1587 ///@}
│ │ │ +
1588
│ │ │ +
1589 ///@{
│ │ │ +
1590 /**
│ │ │ +
1591 * @brief Inserts a std::pair into the %unordered_multimap.
│ │ │ +
1592 * @param __hint An iterator that serves as a hint as to where the
│ │ │ +
1593 * pair should be inserted.
│ │ │ +
1594 * @param __x Pair to be inserted (see std::make_pair for easy creation
│ │ │ +
1595 * of pairs).
│ │ │ +
1596 * @return An iterator that points to the element with key of
│ │ │ +
1597 * @a __x (may or may not be the %pair passed in).
│ │ │ +
1598 *
│ │ │ +
1599 * Note that the first parameter is only a hint and can potentially
│ │ │ +
1600 * improve the performance of the insertion process. A bad hint would
│ │ │ +
1601 * cause no gains in efficiency.
│ │ │ +
1602 *
│ │ │ +
1603 * See
│ │ │ +
1604 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ +
1605 * for more on @a hinting.
│ │ │ +
1606 *
│ │ │ +
1607 * Insertion requires amortized constant time.
│ │ │ +
1608 */
│ │ │ +
1609 iterator
│ │ │ +
│ │ │ + │ │ │ +
1611 { return _M_h.insert(__hint, __x); }
│ │ │ +
│ │ │ +
1612
│ │ │ +
1613 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
1614 // 2354. Unnecessary copying when inserting into maps with braced-init
│ │ │ +
1615 iterator
│ │ │ +
│ │ │ + │ │ │ +
1617 { return _M_h.insert(__hint, std::move(__x)); }
│ │ │ +
│ │ │ +
1618
│ │ │ +
1619 template<typename _Pair>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1622 { return _M_h.emplace_hint(__hint, std::forward<_Pair>(__x)); }
│ │ │ +
│ │ │ +
1623 ///@}
│ │ │ +
1624
│ │ │ +
1625 /**
│ │ │ +
1626 * @brief A template function that attempts to insert a range of
│ │ │ +
1627 * elements.
│ │ │ +
1628 * @param __first Iterator pointing to the start of the range to be
│ │ │ +
1629 * inserted.
│ │ │ +
1630 * @param __last Iterator pointing to the end of the range.
│ │ │ +
1631 *
│ │ │ +
1632 * Complexity similar to that of the range constructor.
│ │ │ +
1633 */
│ │ │ +
1634 template<typename _InputIterator>
│ │ │ +
1635 void
│ │ │ +
│ │ │ + │ │ │ +
1637 { _M_h.insert(__first, __last); }
│ │ │ +
│ │ │ +
1638
│ │ │ +
1639 /**
│ │ │ +
1640 * @brief Attempts to insert a list of elements into the
│ │ │ +
1641 * %unordered_multimap.
│ │ │ +
1642 * @param __l A std::initializer_list<value_type> of elements
│ │ │ +
1643 * to be inserted.
│ │ │ +
1644 *
│ │ │ +
1645 * Complexity similar to that of the range constructor.
│ │ │ +
1646 */
│ │ │ +
1647 void
│ │ │
│ │ │ - │ │ │ -
1649 { return _M_h.cbegin(__n); }
│ │ │ + │ │ │ +
1649 { _M_h.insert(__l); }
│ │ │
│ │ │ -
1650 ///@}
│ │ │ -
1651
│ │ │ -
1652 ///@{
│ │ │ -
1653 /**
│ │ │ -
1654 * @brief Returns a read-only (constant) iterator pointing to one past
│ │ │ -
1655 * the last bucket elements.
│ │ │ -
1656 * @param __n The bucket index.
│ │ │ -
1657 * @return A read-only local iterator.
│ │ │ -
1658 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1661 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
1662
│ │ │ - │ │ │ -
│ │ │ -
1664 end(size_type __n) const
│ │ │ -
1665 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
1666
│ │ │ - │ │ │ -
│ │ │ -
1668 cend(size_type __n) const
│ │ │ -
1669 { return _M_h.cend(__n); }
│ │ │ -
│ │ │ -
1670 ///@}
│ │ │ -
1671
│ │ │ -
1672 // hash policy.
│ │ │ -
1673
│ │ │ -
1674 /// Returns the average number of elements per bucket.
│ │ │ -
1675 float
│ │ │ -
│ │ │ - │ │ │ -
1677 { return _M_h.load_factor(); }
│ │ │ -
│ │ │ -
1678
│ │ │ -
1679 /// Returns a positive number that the %unordered_multiset tries to keep the
│ │ │ -
1680 /// load factor less than or equal to.
│ │ │ -
1681 float
│ │ │ -
│ │ │ - │ │ │ -
1683 { return _M_h.max_load_factor(); }
│ │ │ -
│ │ │ -
1684
│ │ │ -
1685 /**
│ │ │ -
1686 * @brief Change the %unordered_multiset maximum load factor.
│ │ │ -
1687 * @param __z The new maximum load factor.
│ │ │ -
1688 */
│ │ │ -
1689 void
│ │ │ -
│ │ │ - │ │ │ -
1691 { _M_h.max_load_factor(__z); }
│ │ │ -
│ │ │ -
1692
│ │ │ -
1693 /**
│ │ │ -
1694 * @brief May rehash the %unordered_multiset.
│ │ │ -
1695 * @param __n The new number of buckets.
│ │ │ -
1696 *
│ │ │ -
1697 * Rehash will occur only if the new number of buckets respect the
│ │ │ -
1698 * %unordered_multiset maximum load factor.
│ │ │ -
1699 */
│ │ │ -
1700 void
│ │ │ -
│ │ │ - │ │ │ -
1702 { _M_h.rehash(__n); }
│ │ │ -
│ │ │ -
1703
│ │ │ -
1704 /**
│ │ │ -
1705 * @brief Prepare the %unordered_multiset for a specified number of
│ │ │ -
1706 * elements.
│ │ │ -
1707 * @param __n Number of elements required.
│ │ │ -
1708 *
│ │ │ -
1709 * Same as rehash(ceil(n / max_load_factor())).
│ │ │ +
1650
│ │ │ +
1651#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ +
1652 /// Extract a node.
│ │ │ +
1653 node_type
│ │ │ +
│ │ │ + │ │ │ +
1655 {
│ │ │ +
1656 __glibcxx_assert(__pos != end());
│ │ │ +
1657 return _M_h.extract(__pos);
│ │ │ +
1658 }
│ │ │ +
│ │ │ +
1659
│ │ │ +
1660 /// Extract a node.
│ │ │ +
1661 node_type
│ │ │ +
│ │ │ + │ │ │ +
1663 { return _M_h.extract(__key); }
│ │ │ +
│ │ │ +
1664
│ │ │ +
1665 /// Re-insert an extracted node.
│ │ │ +
1666 iterator
│ │ │ +
│ │ │ +
1667 insert(node_type&& __nh)
│ │ │ +
1668 { return _M_h._M_reinsert_node_multi(cend(), std::move(__nh)); }
│ │ │ +
│ │ │ +
1669
│ │ │ +
1670 /// Re-insert an extracted node.
│ │ │ +
1671 iterator
│ │ │ +
│ │ │ + │ │ │ +
1673 { return _M_h._M_reinsert_node_multi(__hint, std::move(__nh)); }
│ │ │ +
│ │ │ +
1674#endif // node_extract
│ │ │ +
1675
│ │ │ +
1676 ///@{
│ │ │ +
1677 /**
│ │ │ +
1678 * @brief Erases an element from an %unordered_multimap.
│ │ │ +
1679 * @param __position An iterator pointing to the element to be erased.
│ │ │ +
1680 * @return An iterator pointing to the element immediately following
│ │ │ +
1681 * @a __position prior to the element being erased. If no such
│ │ │ +
1682 * element exists, end() is returned.
│ │ │ +
1683 *
│ │ │ +
1684 * This function erases an element, pointed to by the given iterator,
│ │ │ +
1685 * from an %unordered_multimap.
│ │ │ +
1686 * Note that this function only erases the element, and that if the
│ │ │ +
1687 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ +
1688 * any way. Managing the pointer is the user's responsibility.
│ │ │ +
1689 */
│ │ │ +
1690 iterator
│ │ │ +
│ │ │ + │ │ │ +
1692 { return _M_h.erase(__position); }
│ │ │ +
│ │ │ +
1693
│ │ │ +
1694 // LWG 2059.
│ │ │ +
1695 iterator
│ │ │ +
│ │ │ + │ │ │ +
1697 { return _M_h.erase(__position); }
│ │ │ +
│ │ │ +
1698 ///@}
│ │ │ +
1699
│ │ │ +
1700 /**
│ │ │ +
1701 * @brief Erases elements according to the provided key.
│ │ │ +
1702 * @param __x Key of elements to be erased.
│ │ │ +
1703 * @return The number of elements erased.
│ │ │ +
1704 *
│ │ │ +
1705 * This function erases all the elements located by the given key from
│ │ │ +
1706 * an %unordered_multimap.
│ │ │ +
1707 * Note that this function only erases the element, and that if the
│ │ │ +
1708 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ +
1709 * any way. Managing the pointer is the user's responsibility.
│ │ │
1710 */
│ │ │ -
1711 void
│ │ │ +
1711 size_type
│ │ │
│ │ │ - │ │ │ -
1713 { _M_h.reserve(__n); }
│ │ │ +
1712 erase(const key_type& __x)
│ │ │ +
1713 { return _M_h.erase(__x); }
│ │ │ +
│ │ │ +
1714
│ │ │ +
1715 /**
│ │ │ +
1716 * @brief Erases a [__first,__last) range of elements from an
│ │ │ +
1717 * %unordered_multimap.
│ │ │ +
1718 * @param __first Iterator pointing to the start of the range to be
│ │ │ +
1719 * erased.
│ │ │ +
1720 * @param __last Iterator pointing to the end of the range to
│ │ │ +
1721 * be erased.
│ │ │ +
1722 * @return The iterator @a __last.
│ │ │ +
1723 *
│ │ │ +
1724 * This function erases a sequence of elements from an
│ │ │ +
1725 * %unordered_multimap.
│ │ │ +
1726 * Note that this function only erases the elements, and that if
│ │ │ +
1727 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ +
1728 * in any way. Managing the pointer is the user's responsibility.
│ │ │ +
1729 */
│ │ │ +
1730 iterator
│ │ │ +
│ │ │ + │ │ │ +
1732 { return _M_h.erase(__first, __last); }
│ │ │ +
│ │ │ +
1733
│ │ │ +
1734 /**
│ │ │ +
1735 * Erases all elements in an %unordered_multimap.
│ │ │ +
1736 * Note that this function only erases the elements, and that if the
│ │ │ +
1737 * elements themselves are pointers, the pointed-to memory is not touched
│ │ │ +
1738 * in any way. Managing the pointer is the user's responsibility.
│ │ │ +
1739 */
│ │ │ +
1740 void
│ │ │ +
│ │ │ +
1741 clear() noexcept
│ │ │ +
1742 { _M_h.clear(); }
│ │ │ +
│ │ │ +
1743
│ │ │ +
1744 /**
│ │ │ +
1745 * @brief Swaps data with another %unordered_multimap.
│ │ │ +
1746 * @param __x An %unordered_multimap of the same element and allocator
│ │ │ +
1747 * types.
│ │ │ +
1748 *
│ │ │ +
1749 * This exchanges the elements between two %unordered_multimap in
│ │ │ +
1750 * constant time.
│ │ │ +
1751 * Note that the global std::swap() function is specialized such that
│ │ │ +
1752 * std::swap(m1,m2) will feed to this function.
│ │ │ +
1753 */
│ │ │ +
1754 void
│ │ │ +
│ │ │ + │ │ │ +
1756 noexcept( noexcept(_M_h.swap(__x._M_h)) )
│ │ │ +
1757 { _M_h.swap(__x._M_h); }
│ │ │ +
│ │ │ +
1758
│ │ │ +
1759#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ +
1760 template<typename, typename, typename>
│ │ │ +
1761 friend class std::_Hash_merge_helper;
│ │ │ +
1762
│ │ │ +
1763 template<typename _H2, typename _P2>
│ │ │ +
1764 void
│ │ │ + │ │ │ +
1766 {
│ │ │ +
1767 using _Merge_helper
│ │ │ + │ │ │ +
1769 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ +
1770 }
│ │ │ +
1771
│ │ │ +
1772 template<typename _H2, typename _P2>
│ │ │ +
1773 void
│ │ │ +
1774 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ +
1775 { merge(__source); }
│ │ │ +
1776
│ │ │ +
1777 template<typename _H2, typename _P2>
│ │ │ +
1778 void
│ │ │ +
1779 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>& __source)
│ │ │ +
1780 {
│ │ │ +
1781 using _Merge_helper
│ │ │ +
1782 = _Hash_merge_helper<unordered_multimap, _H2, _P2>;
│ │ │ +
1783 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ +
1784 }
│ │ │ +
1785
│ │ │ +
1786 template<typename _H2, typename _P2>
│ │ │ +
1787 void
│ │ │ +
1788 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ +
1789 { merge(__source); }
│ │ │ +
1790#endif // node_extract
│ │ │ +
1791
│ │ │ +
1792 // observers.
│ │ │ +
1793
│ │ │ +
1794 /// Returns the hash functor object with which the %unordered_multimap
│ │ │ +
1795 /// was constructed.
│ │ │ +
1796 hasher
│ │ │ +
│ │ │ + │ │ │ +
1798 { return _M_h.hash_function(); }
│ │ │ +
│ │ │ +
1799
│ │ │ +
1800 /// Returns the key comparison object with which the %unordered_multimap
│ │ │ +
1801 /// was constructed.
│ │ │ +
1802 key_equal
│ │ │ +
│ │ │ +
1803 key_eq() const
│ │ │ +
1804 { return _M_h.key_eq(); }
│ │ │ +
│ │ │ +
1805
│ │ │ +
1806 // lookup.
│ │ │ +
1807
│ │ │ +
1808 ///@{
│ │ │ +
1809 /**
│ │ │ +
1810 * @brief Tries to locate an element in an %unordered_multimap.
│ │ │ +
1811 * @param __x Key to be located.
│ │ │ +
1812 * @return Iterator pointing to sought-after element, or end() if not
│ │ │ +
1813 * found.
│ │ │ +
1814 *
│ │ │ +
1815 * This function takes a key and tries to locate the element with which
│ │ │ +
1816 * the key matches. If successful the function returns an iterator
│ │ │ +
1817 * pointing to the sought after element. If unsuccessful it returns the
│ │ │ +
1818 * past-the-end ( @c end() ) iterator.
│ │ │ +
1819 */
│ │ │ +
1820 iterator
│ │ │ +
│ │ │ +
1821 find(const key_type& __x)
│ │ │ +
1822 { return _M_h.find(__x); }
│ │ │ +
│ │ │ +
1823
│ │ │ +
1824#if __cplusplus > 201703L
│ │ │ +
1825 template<typename _Kt>
│ │ │ +
1826 auto
│ │ │ +
│ │ │ +
1827 find(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x))
│ │ │ +
1828 { return _M_h._M_find_tr(__x); }
│ │ │
│ │ │ -
1714
│ │ │ -
1715 template<typename _Value1, typename _Hash1, typename _Pred1,
│ │ │ -
1716 typename _Alloc1>
│ │ │ -
1717 friend bool
│ │ │ - │ │ │ - │ │ │ -
1720 };
│ │ │ -
│ │ │ -
1721
│ │ │ -
1722
│ │ │ -
1723#if __cpp_deduction_guides >= 201606
│ │ │ -
1724
│ │ │ -
1725 template<typename _InputIterator,
│ │ │ -
1726 typename _Hash =
│ │ │ -
1727 hash<typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
1728 typename _Pred =
│ │ │ -
1729 equal_to<typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
1730 typename _Allocator =
│ │ │ -
1731 allocator<typename iterator_traits<_InputIterator>::value_type>,
│ │ │ -
1732 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1733 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1734 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
1735 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1736 unordered_multiset(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
1738 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ -
1739 _Allocator = _Allocator())
│ │ │ -
1740 -> unordered_multiset<typename iterator_traits<_InputIterator>::value_type,
│ │ │ -
1741 _Hash, _Pred, _Allocator>;
│ │ │ -
1742
│ │ │ -
1743 template<typename _Tp, typename _Hash = hash<_Tp>,
│ │ │ -
1744 typename _Pred = equal_to<_Tp>,
│ │ │ -
1745 typename _Allocator = allocator<_Tp>,
│ │ │ -
1746 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1747 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
1748 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1749 unordered_multiset(initializer_list<_Tp>,
│ │ │ - │ │ │ -
1751 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ -
1752 _Allocator = _Allocator())
│ │ │ -
1753 -> unordered_multiset<_Tp, _Hash, _Pred, _Allocator>;
│ │ │ -
1754
│ │ │ -
1755 template<typename _InputIterator, typename _Allocator,
│ │ │ -
1756 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1757 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1758 unordered_multiset(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
1760 -> unordered_multiset<typename iterator_traits<_InputIterator>::value_type,
│ │ │ -
1761 hash<typename
│ │ │ -
1762 iterator_traits<_InputIterator>::value_type>,
│ │ │ -
1763 equal_to<typename
│ │ │ -
1764 iterator_traits<_InputIterator>::value_type>,
│ │ │ -
1765 _Allocator>;
│ │ │ -
1766
│ │ │ -
1767 template<typename _InputIterator, typename _Hash, typename _Allocator,
│ │ │ -
1768 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1769 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1770 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1771 unordered_multiset(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
1773 _Hash, _Allocator)
│ │ │ -
1774 -> unordered_multiset<typename
│ │ │ -
1775 iterator_traits<_InputIterator>::value_type,
│ │ │ -
1776 _Hash,
│ │ │ -
1777 equal_to<
│ │ │ -
1778 typename
│ │ │ -
1779 iterator_traits<_InputIterator>::value_type>,
│ │ │ -
1780 _Allocator>;
│ │ │ -
1781
│ │ │ -
1782 template<typename _Tp, typename _Allocator,
│ │ │ -
1783 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1784 unordered_multiset(initializer_list<_Tp>,
│ │ │ - │ │ │ -
1786 -> unordered_multiset<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>;
│ │ │ -
1787
│ │ │ -
1788 template<typename _Tp, typename _Hash, typename _Allocator,
│ │ │ -
1789 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1790 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1791 unordered_multiset(initializer_list<_Tp>,
│ │ │ -
1792 unordered_multiset<int>::size_type, _Hash, _Allocator)
│ │ │ -
1793 -> unordered_multiset<_Tp, _Hash, equal_to<_Tp>, _Allocator>;
│ │ │ -
1794
│ │ │ -
1795#endif
│ │ │ -
1796
│ │ │ -
1797 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
1798 inline void
│ │ │ -
1799 swap(unordered_set<_Value, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
1800 unordered_set<_Value, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
1801 noexcept(noexcept(__x.swap(__y)))
│ │ │ -
1802 { __x.swap(__y); }
│ │ │ -
1803
│ │ │ -
1804 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
1805 inline void
│ │ │ -
1806 swap(unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
1807 unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
1808 noexcept(noexcept(__x.swap(__y)))
│ │ │ -
1809 { __x.swap(__y); }
│ │ │ -
1810
│ │ │ -
1811 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
1812 inline bool
│ │ │ -
1813 operator==(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
1814 const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
1815 { return __x._M_h._M_equal(__y._M_h); }
│ │ │ -
1816
│ │ │ -
1817#if __cpp_impl_three_way_comparison < 201907L
│ │ │ -
1818 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
1819 inline bool
│ │ │ -
1820 operator!=(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
1821 const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
1822 { return !(__x == __y); }
│ │ │ -
1823#endif
│ │ │ -
1824
│ │ │ -
1825 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
1826 inline bool
│ │ │ -
1827 operator==(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
1828 const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
1829 { return __x._M_h._M_equal(__y._M_h); }
│ │ │ +
1829#endif
│ │ │
1830
│ │ │ -
1831#if __cpp_impl_three_way_comparison < 201907L
│ │ │ -
1832 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
1833 inline bool
│ │ │ -
1834 operator!=(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
1835 const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
1836 { return !(__x == __y); }
│ │ │ -
1837#endif
│ │ │ -
1838
│ │ │ -
1839_GLIBCXX_END_NAMESPACE_CONTAINER
│ │ │ -
1840
│ │ │ -
1841#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
1842 // Allow std::unordered_set access to internals of compatible sets.
│ │ │ -
1843 template<typename _Val, typename _Hash1, typename _Eq1, typename _Alloc,
│ │ │ -
1844 typename _Hash2, typename _Eq2>
│ │ │ -
1845 struct _Hash_merge_helper<
│ │ │ -
1846 _GLIBCXX_STD_C::unordered_set<_Val, _Hash1, _Eq1, _Alloc>, _Hash2, _Eq2>
│ │ │ -
1847 {
│ │ │ -
1848 private:
│ │ │ -
1849 template<typename... _Tp>
│ │ │ -
1850 using unordered_set = _GLIBCXX_STD_C::unordered_set<_Tp...>;
│ │ │ -
1851 template<typename... _Tp>
│ │ │ -
1852 using unordered_multiset = _GLIBCXX_STD_C::unordered_multiset<_Tp...>;
│ │ │ -
1853
│ │ │ -
1854 friend unordered_set<_Val, _Hash1, _Eq1, _Alloc>;
│ │ │ -
1855
│ │ │ -
1856 static auto&
│ │ │ -
1857 _S_get_table(unordered_set<_Val, _Hash2, _Eq2, _Alloc>& __set)
│ │ │ -
1858 { return __set._M_h; }
│ │ │ -
1859
│ │ │ -
1860 static auto&
│ │ │ -
1861 _S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set)
│ │ │ -
1862 { return __set._M_h; }
│ │ │ -
1863 };
│ │ │ -
1864
│ │ │ -
1865 // Allow std::unordered_multiset access to internals of compatible sets.
│ │ │ -
1866 template<typename _Val, typename _Hash1, typename _Eq1, typename _Alloc,
│ │ │ -
1867 typename _Hash2, typename _Eq2>
│ │ │ -
1868 struct _Hash_merge_helper<
│ │ │ -
1869 _GLIBCXX_STD_C::unordered_multiset<_Val, _Hash1, _Eq1, _Alloc>,
│ │ │ -
1870 _Hash2, _Eq2>
│ │ │ -
1871 {
│ │ │ -
1872 private:
│ │ │ -
1873 template<typename... _Tp>
│ │ │ -
1874 using unordered_set = _GLIBCXX_STD_C::unordered_set<_Tp...>;
│ │ │ -
1875 template<typename... _Tp>
│ │ │ -
1876 using unordered_multiset = _GLIBCXX_STD_C::unordered_multiset<_Tp...>;
│ │ │ -
1877
│ │ │ -
1878 friend unordered_multiset<_Val, _Hash1, _Eq1, _Alloc>;
│ │ │ -
1879
│ │ │ -
1880 static auto&
│ │ │ -
1881 _S_get_table(unordered_set<_Val, _Hash2, _Eq2, _Alloc>& __set)
│ │ │ -
1882 { return __set._M_h; }
│ │ │ -
1883
│ │ │ -
1884 static auto&
│ │ │ -
1885 _S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set)
│ │ │ -
1886 { return __set._M_h; }
│ │ │ -
1887 };
│ │ │ -
1888#endif // node_extract
│ │ │ -
1889
│ │ │ -
1890_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
1891} // namespace std
│ │ │ -
1892
│ │ │ -
1893#endif /* _UNORDERED_SET_H */
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │ + │ │ │ +
│ │ │ +
1832 find(const key_type& __x) const
│ │ │ +
1833 { return _M_h.find(__x); }
│ │ │ +
│ │ │ +
1834
│ │ │ +
1835#if __cplusplus > 201703L
│ │ │ +
1836 template<typename _Kt>
│ │ │ +
1837 auto
│ │ │ +
│ │ │ +
1838 find(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x))
│ │ │ +
1839 { return _M_h._M_find_tr(__x); }
│ │ │ +
│ │ │ +
1840#endif
│ │ │ +
1841 ///@}
│ │ │ +
1842
│ │ │ +
1843 ///@{
│ │ │ +
1844 /**
│ │ │ +
1845 * @brief Finds the number of elements.
│ │ │ +
1846 * @param __x Key to count.
│ │ │ +
1847 * @return Number of elements with specified key.
│ │ │ +
1848 */
│ │ │ +
1849 size_type
│ │ │ +
│ │ │ +
1850 count(const key_type& __x) const
│ │ │ +
1851 { return _M_h.count(__x); }
│ │ │ +
│ │ │ +
1852
│ │ │ +
1853#if __cplusplus > 201703L
│ │ │ +
1854 template<typename _Kt>
│ │ │ +
1855 auto
│ │ │ +
│ │ │ +
1856 count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x))
│ │ │ +
1857 { return _M_h._M_count_tr(__x); }
│ │ │ +
│ │ │ +
1858#endif
│ │ │ +
1859 ///@}
│ │ │ +
1860
│ │ │ +
1861#if __cplusplus > 201703L
│ │ │ +
1862 ///@{
│ │ │ +
1863 /**
│ │ │ +
1864 * @brief Finds whether an element with the given key exists.
│ │ │ +
1865 * @param __x Key of elements to be located.
│ │ │ +
1866 * @return True if there is any element with the specified key.
│ │ │ +
1867 */
│ │ │ +
1868 bool
│ │ │ +
│ │ │ +
1869 contains(const key_type& __x) const
│ │ │ +
1870 { return _M_h.find(__x) != _M_h.end(); }
│ │ │ +
│ │ │ +
1871
│ │ │ +
1872 template<typename _Kt>
│ │ │ +
1873 auto
│ │ │ +
│ │ │ +
1874 contains(const _Kt& __x) const
│ │ │ +
1875 -> decltype(_M_h._M_find_tr(__x), void(), true)
│ │ │ +
1876 { return _M_h._M_find_tr(__x) != _M_h.end(); }
│ │ │ +
│ │ │ +
1877 ///@}
│ │ │ +
1878#endif
│ │ │ +
1879
│ │ │ +
1880 ///@{
│ │ │ +
1881 /**
│ │ │ +
1882 * @brief Finds a subsequence matching given key.
│ │ │ +
1883 * @param __x Key to be located.
│ │ │ +
1884 * @return Pair of iterators that possibly points to the subsequence
│ │ │ +
1885 * matching given key.
│ │ │ +
1886 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1889 { return _M_h.equal_range(__x); }
│ │ │ +
│ │ │ +
1890
│ │ │ +
1891#if __cplusplus > 201703L
│ │ │ +
1892 template<typename _Kt>
│ │ │ +
1893 auto
│ │ │ +
│ │ │ +
1894 equal_range(const _Kt& __x)
│ │ │ +
1895 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ +
1896 { return _M_h._M_equal_range_tr(__x); }
│ │ │ +
│ │ │ +
1897#endif
│ │ │ +
1898
│ │ │ + │ │ │ +
│ │ │ +
1900 equal_range(const key_type& __x) const
│ │ │ +
1901 { return _M_h.equal_range(__x); }
│ │ │ +
│ │ │ +
1902
│ │ │ +
1903#if __cplusplus > 201703L
│ │ │ +
1904 template<typename _Kt>
│ │ │ +
1905 auto
│ │ │ +
│ │ │ +
1906 equal_range(const _Kt& __x) const
│ │ │ +
1907 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ +
1908 { return _M_h._M_equal_range_tr(__x); }
│ │ │ +
│ │ │ +
1909#endif
│ │ │ +
1910 ///@}
│ │ │ +
1911
│ │ │ +
1912 // bucket interface.
│ │ │ +
1913
│ │ │ +
1914 /// Returns the number of buckets of the %unordered_multimap.
│ │ │ +
1915 size_type
│ │ │ +
│ │ │ + │ │ │ +
1917 { return _M_h.bucket_count(); }
│ │ │ +
│ │ │ +
1918
│ │ │ +
1919 /// Returns the maximum number of buckets of the %unordered_multimap.
│ │ │ +
1920 size_type
│ │ │ +
│ │ │ + │ │ │ +
1922 { return _M_h.max_bucket_count(); }
│ │ │ +
│ │ │ +
1923
│ │ │ +
1924 /*
│ │ │ +
1925 * @brief Returns the number of elements in a given bucket.
│ │ │ +
1926 * @param __n A bucket index.
│ │ │ +
1927 * @return The number of elements in the bucket.
│ │ │ +
1928 */
│ │ │ +
1929 size_type
│ │ │ +
1930 bucket_size(size_type __n) const
│ │ │ +
1931 { return _M_h.bucket_size(__n); }
│ │ │ +
1932
│ │ │ +
1933 /*
│ │ │ +
1934 * @brief Returns the bucket index of a given element.
│ │ │ +
1935 * @param __key A key instance.
│ │ │ +
1936 * @return The key bucket index.
│ │ │ +
1937 */
│ │ │ +
1938 size_type
│ │ │ +
1939 bucket(const key_type& __key) const
│ │ │ +
1940 { return _M_h.bucket(__key); }
│ │ │ +
1941
│ │ │ +
1942 /**
│ │ │ +
1943 * @brief Returns a read/write iterator pointing to the first bucket
│ │ │ +
1944 * element.
│ │ │ +
1945 * @param __n The bucket index.
│ │ │ +
1946 * @return A read/write local iterator.
│ │ │ +
1947 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1950 { return _M_h.begin(__n); }
│ │ │ +
│ │ │ +
1951
│ │ │ +
1952 ///@{
│ │ │ +
1953 /**
│ │ │ +
1954 * @brief Returns a read-only (constant) iterator pointing to the first
│ │ │ +
1955 * bucket element.
│ │ │ +
1956 * @param __n The bucket index.
│ │ │ +
1957 * @return A read-only local iterator.
│ │ │ +
1958 */
│ │ │ + │ │ │ +
│ │ │ +
1960 begin(size_type __n) const
│ │ │ +
1961 { return _M_h.begin(__n); }
│ │ │ +
│ │ │ +
1962
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1965 { return _M_h.cbegin(__n); }
│ │ │ +
│ │ │ +
1966 ///@}
│ │ │ +
1967
│ │ │ +
1968 /**
│ │ │ +
1969 * @brief Returns a read/write iterator pointing to one past the last
│ │ │ +
1970 * bucket elements.
│ │ │ +
1971 * @param __n The bucket index.
│ │ │ +
1972 * @return A read/write local iterator.
│ │ │ +
1973 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1976 { return _M_h.end(__n); }
│ │ │ +
│ │ │ +
1977
│ │ │ +
1978 ///@{
│ │ │ +
1979 /**
│ │ │ +
1980 * @brief Returns a read-only (constant) iterator pointing to one past
│ │ │ +
1981 * the last bucket elements.
│ │ │ +
1982 * @param __n The bucket index.
│ │ │ +
1983 * @return A read-only local iterator.
│ │ │ +
1984 */
│ │ │ + │ │ │ +
│ │ │ +
1986 end(size_type __n) const
│ │ │ +
1987 { return _M_h.end(__n); }
│ │ │ +
│ │ │ +
1988
│ │ │ + │ │ │ +
│ │ │ +
1990 cend(size_type __n) const
│ │ │ +
1991 { return _M_h.cend(__n); }
│ │ │ +
│ │ │ +
1992 ///@}
│ │ │ +
1993
│ │ │ +
1994 // hash policy.
│ │ │ +
1995
│ │ │ +
1996 /// Returns the average number of elements per bucket.
│ │ │ +
1997 float
│ │ │ +
│ │ │ + │ │ │ +
1999 { return _M_h.load_factor(); }
│ │ │ +
│ │ │ +
2000
│ │ │ +
2001 /// Returns a positive number that the %unordered_multimap tries to keep
│ │ │ +
2002 /// the load factor less than or equal to.
│ │ │ +
2003 float
│ │ │ +
│ │ │ + │ │ │ +
2005 { return _M_h.max_load_factor(); }
│ │ │ +
│ │ │ +
2006
│ │ │ +
2007 /**
│ │ │ +
2008 * @brief Change the %unordered_multimap maximum load factor.
│ │ │ +
2009 * @param __z The new maximum load factor.
│ │ │ +
2010 */
│ │ │ +
2011 void
│ │ │ +
│ │ │ + │ │ │ +
2013 { _M_h.max_load_factor(__z); }
│ │ │ +
│ │ │ +
2014
│ │ │ +
2015 /**
│ │ │ +
2016 * @brief May rehash the %unordered_multimap.
│ │ │ +
2017 * @param __n The new number of buckets.
│ │ │ +
2018 *
│ │ │ +
2019 * Rehash will occur only if the new number of buckets respect the
│ │ │ +
2020 * %unordered_multimap maximum load factor.
│ │ │ +
2021 */
│ │ │ +
2022 void
│ │ │ +
│ │ │ + │ │ │ +
2024 { _M_h.rehash(__n); }
│ │ │ +
│ │ │ +
2025
│ │ │ +
2026 /**
│ │ │ +
2027 * @brief Prepare the %unordered_multimap for a specified number of
│ │ │ +
2028 * elements.
│ │ │ +
2029 * @param __n Number of elements required.
│ │ │ +
2030 *
│ │ │ +
2031 * Same as rehash(ceil(n / max_load_factor())).
│ │ │ +
2032 */
│ │ │ +
2033 void
│ │ │ +
│ │ │ + │ │ │ +
2035 { _M_h.reserve(__n); }
│ │ │ +
│ │ │ +
2036
│ │ │ +
2037 template<typename _Key1, typename _Tp1, typename _Hash1, typename _Pred1,
│ │ │ +
2038 typename _Alloc1>
│ │ │ +
2039 friend bool
│ │ │ +
2040 operator==(const unordered_multimap<_Key1, _Tp1,
│ │ │ +
2041 _Hash1, _Pred1, _Alloc1>&,
│ │ │ + │ │ │ +
2043 _Hash1, _Pred1, _Alloc1>&);
│ │ │ +
2044 };
│ │ │ +
│ │ │ +
2045
│ │ │ +
2046#if __cpp_deduction_guides >= 201606
│ │ │ +
2047
│ │ │ +
2048 template<typename _InputIterator,
│ │ │ +
2049 typename _Hash = hash<__iter_key_t<_InputIterator>>,
│ │ │ +
2050 typename _Pred = equal_to<__iter_key_t<_InputIterator>>,
│ │ │ +
2051 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>,
│ │ │ +
2052 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
2053 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
2054 typename = _RequireNotAllocator<_Pred>,
│ │ │ +
2055 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2056 unordered_multimap(_InputIterator, _InputIterator,
│ │ │ + │ │ │ +
2058 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ +
2059 _Allocator = _Allocator())
│ │ │ +
2060 -> unordered_multimap<__iter_key_t<_InputIterator>,
│ │ │ +
2061 __iter_val_t<_InputIterator>, _Hash, _Pred,
│ │ │ +
2062 _Allocator>;
│ │ │ +
2063
│ │ │ +
2064 template<typename _Key, typename _Tp, typename _Hash = hash<_Key>,
│ │ │ +
2065 typename _Pred = equal_to<_Key>,
│ │ │ +
2066 typename _Allocator = allocator<pair<const _Key, _Tp>>,
│ │ │ +
2067 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
2068 typename = _RequireNotAllocator<_Pred>,
│ │ │ +
2069 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2070 unordered_multimap(initializer_list<pair<_Key, _Tp>>,
│ │ │ + │ │ │ +
2072 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ +
2073 _Allocator = _Allocator())
│ │ │ +
2074 -> unordered_multimap<_Key, _Tp, _Hash, _Pred, _Allocator>;
│ │ │ +
2075
│ │ │ +
2076 template<typename _InputIterator, typename _Allocator,
│ │ │ +
2077 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
2078 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2079 unordered_multimap(_InputIterator, _InputIterator,
│ │ │ + │ │ │ +
2081 -> unordered_multimap<__iter_key_t<_InputIterator>,
│ │ │ +
2082 __iter_val_t<_InputIterator>,
│ │ │ +
2083 hash<__iter_key_t<_InputIterator>>,
│ │ │ +
2084 equal_to<__iter_key_t<_InputIterator>>, _Allocator>;
│ │ │ +
2085
│ │ │ +
2086 template<typename _InputIterator, typename _Allocator,
│ │ │ +
2087 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
2088 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2089 unordered_multimap(_InputIterator, _InputIterator, _Allocator)
│ │ │ +
2090 -> unordered_multimap<__iter_key_t<_InputIterator>,
│ │ │ +
2091 __iter_val_t<_InputIterator>,
│ │ │ +
2092 hash<__iter_key_t<_InputIterator>>,
│ │ │ +
2093 equal_to<__iter_key_t<_InputIterator>>, _Allocator>;
│ │ │ +
2094
│ │ │ +
2095 template<typename _InputIterator, typename _Hash, typename _Allocator,
│ │ │ +
2096 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
2097 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
2098 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2099 unordered_multimap(_InputIterator, _InputIterator,
│ │ │ + │ │ │ +
2101 _Allocator)
│ │ │ +
2102 -> unordered_multimap<__iter_key_t<_InputIterator>,
│ │ │ +
2103 __iter_val_t<_InputIterator>, _Hash,
│ │ │ +
2104 equal_to<__iter_key_t<_InputIterator>>, _Allocator>;
│ │ │ +
2105
│ │ │ +
2106 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ +
2107 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2108 unordered_multimap(initializer_list<pair<_Key, _Tp>>,
│ │ │ + │ │ │ +
2110 _Allocator)
│ │ │ +
2111 -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
│ │ │ +
2112
│ │ │ +
2113 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ +
2114 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2115 unordered_multimap(initializer_list<pair<_Key, _Tp>>, _Allocator)
│ │ │ +
2116 -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
│ │ │ +
2117
│ │ │ +
2118 template<typename _Key, typename _Tp, typename _Hash, typename _Allocator,
│ │ │ +
2119 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
2120 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2121 unordered_multimap(initializer_list<pair<_Key, _Tp>>,
│ │ │ + │ │ │ +
2123 _Hash, _Allocator)
│ │ │ +
2124 -> unordered_multimap<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>;
│ │ │ +
2125
│ │ │ +
2126#endif
│ │ │ +
2127
│ │ │ +
2128 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ +
2129 inline void
│ │ │ +
2130 swap(unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ +
2131 unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ +
2132 noexcept(noexcept(__x.swap(__y)))
│ │ │ +
2133 { __x.swap(__y); }
│ │ │ +
2134
│ │ │ +
2135 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ +
2136 inline void
│ │ │ +
2137 swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ +
2138 unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ +
2139 noexcept(noexcept(__x.swap(__y)))
│ │ │ +
2140 { __x.swap(__y); }
│ │ │ +
2141
│ │ │ +
2142 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ +
2143 inline bool
│ │ │ +
2144 operator==(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ +
2145 const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ +
2146 { return __x._M_h._M_equal(__y._M_h); }
│ │ │ +
2147
│ │ │ +
2148#if __cpp_impl_three_way_comparison < 201907L
│ │ │ +
2149 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ +
2150 inline bool
│ │ │ +
2151 operator!=(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ +
2152 const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ +
2153 { return !(__x == __y); }
│ │ │ +
2154#endif
│ │ │ +
2155
│ │ │ +
2156 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ +
2157 inline bool
│ │ │ +
2158 operator==(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ +
2159 const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ +
2160 { return __x._M_h._M_equal(__y._M_h); }
│ │ │ +
2161
│ │ │ +
2162#if __cpp_impl_three_way_comparison < 201907L
│ │ │ +
2163 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ +
2164 inline bool
│ │ │ +
2165 operator!=(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ +
2166 const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ +
2167 { return !(__x == __y); }
│ │ │ +
2168#endif
│ │ │ +
2169
│ │ │ +
2170_GLIBCXX_END_NAMESPACE_CONTAINER
│ │ │ +
2171
│ │ │ +
2172#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ +
2173 // Allow std::unordered_map access to internals of compatible maps.
│ │ │ +
2174 template<typename _Key, typename _Val, typename _Hash1, typename _Eq1,
│ │ │ +
2175 typename _Alloc, typename _Hash2, typename _Eq2>
│ │ │ +
2176 struct _Hash_merge_helper<
│ │ │ +
2177 _GLIBCXX_STD_C::unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>,
│ │ │ +
2178 _Hash2, _Eq2>
│ │ │ +
2179 {
│ │ │ +
2180 private:
│ │ │ +
2181 template<typename... _Tp>
│ │ │ +
2182 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>;
│ │ │ +
2183 template<typename... _Tp>
│ │ │ +
2184 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>;
│ │ │ +
2185
│ │ │ +
2186 friend unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>;
│ │ │ +
2187
│ │ │ +
2188 static auto&
│ │ │ +
2189 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ +
2190 { return __map._M_h; }
│ │ │ +
2191
│ │ │ +
2192 static auto&
│ │ │ +
2193 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ +
2194 { return __map._M_h; }
│ │ │ +
2195 };
│ │ │ +
2196
│ │ │ +
2197 // Allow std::unordered_multimap access to internals of compatible maps.
│ │ │ +
2198 template<typename _Key, typename _Val, typename _Hash1, typename _Eq1,
│ │ │ +
2199 typename _Alloc, typename _Hash2, typename _Eq2>
│ │ │ +
2200 struct _Hash_merge_helper<
│ │ │ +
2201 _GLIBCXX_STD_C::unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>,
│ │ │ +
2202 _Hash2, _Eq2>
│ │ │ +
2203 {
│ │ │ +
2204 private:
│ │ │ +
2205 template<typename... _Tp>
│ │ │ +
2206 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>;
│ │ │ +
2207 template<typename... _Tp>
│ │ │ +
2208 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>;
│ │ │ +
2209
│ │ │ +
2210 friend unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>;
│ │ │ +
2211
│ │ │ +
2212 static auto&
│ │ │ +
2213 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ +
2214 { return __map._M_h; }
│ │ │ +
2215
│ │ │ +
2216 static auto&
│ │ │ +
2217 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ +
2218 { return __map._M_h; }
│ │ │ +
2219 };
│ │ │ +
2220#endif // node_extract
│ │ │ +
2221
│ │ │ +
2222_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
2223} // namespace std
│ │ │ +
2224
│ │ │ +
2225#endif /* _UNORDERED_MAP_H */
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │
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-2024 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,2557 +21,2948 @@ │ │ │ │ 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 │ │ │ │ 38namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ 39{ │ │ │ │ 40_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ 41_GLIBCXX_BEGIN_NAMESPACE_CONTAINER │ │ │ │ 42 │ │ │ │ -43 /// Base types for unordered_set. │ │ │ │ +43 /// Base types for unordered_map. │ │ │ │ 44 template │ │ │ │ -_4_5 using _____u_s_e_t___t_r_a_i_t_s = __detail::_Hashtable_traits<_Cache, true, true>; │ │ │ │ +_4_5 using _____u_m_a_p___t_r_a_i_t_s = __detail::_Hashtable_traits<_Cache, false, true>; │ │ │ │ 46 │ │ │ │ -47 template, │ │ │ │ -49 typename ___P_r_e_d = _s_t_d_:_:_e_q_u_a_l___t_o_<___V_a_l_u_e_>, │ │ │ │ -50 typename _Alloc = _s_t_d_:_:_a_l_l_o_c_a_t_o_r_<___V_a_l_u_e_>, │ │ │ │ -51 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>> │ │ │ │ -52 using _____u_s_e_t___h_a_s_h_t_a_b_l_e = _Hashtable<_Value, _Value, _Alloc, │ │ │ │ -53 __detail::_Identity, ___P_r_e_d, ___H_a_s_h, │ │ │ │ -54 __detail::_Mod_range_hashing, │ │ │ │ -55 __detail::_Default_ranged_hash, │ │ │ │ -56 __detail::_Prime_rehash_policy, ___T_r>; │ │ │ │ -57 │ │ │ │ -58 /// Base types for unordered_multiset. │ │ │ │ -59 template │ │ │ │ -_6_0 using _____u_m_s_e_t___t_r_a_i_t_s = __detail::_Hashtable_traits<_Cache, true, false>; │ │ │ │ -61 │ │ │ │ -62 template, │ │ │ │ -64 typename ___P_r_e_d = _s_t_d_:_:_e_q_u_a_l___t_o_<___V_a_l_u_e_>, │ │ │ │ -65 typename _Alloc = _s_t_d_:_:_a_l_l_o_c_a_t_o_r_<___V_a_l_u_e_>, │ │ │ │ -66 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>> │ │ │ │ -67 using _____u_m_s_e_t___h_a_s_h_t_a_b_l_e = _Hashtable<_Value, _Value, _Alloc, │ │ │ │ -68 __detail::_Identity, │ │ │ │ -69 ___P_r_e_d, ___H_a_s_h, │ │ │ │ -70 __detail::_Mod_range_hashing, │ │ │ │ -71 __detail::_Default_ranged_hash, │ │ │ │ -72 __detail::_Prime_rehash_policy, ___T_r>; │ │ │ │ -73 │ │ │ │ -74 template │ │ │ │ -75 class _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t; │ │ │ │ +47 template, │ │ │ │ +50 typename ___P_r_e_d = _s_t_d_:_:_e_q_u_a_l___t_o_<___K_e_y_>, │ │ │ │ +51 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_> >, │ │ │ │ +52 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>> │ │ │ │ +53 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_>, │ │ │ │ +54 _Alloc, __detail::_Select1st, │ │ │ │ +55 ___P_r_e_d, ___H_a_s_h, │ │ │ │ +56 __detail::_Mod_range_hashing, │ │ │ │ +57 __detail::_Default_ranged_hash, │ │ │ │ +58 __detail::_Prime_rehash_policy, ___T_r>; │ │ │ │ +59 │ │ │ │ +60 /// Base types for unordered_multimap. │ │ │ │ +61 template │ │ │ │ +_6_2 using _____u_m_m_a_p___t_r_a_i_t_s = __detail::_Hashtable_traits<_Cache, false, false>; │ │ │ │ +63 │ │ │ │ +64 template, │ │ │ │ +67 typename ___P_r_e_d = _s_t_d_:_:_e_q_u_a_l___t_o_<___K_e_y_>, │ │ │ │ +68 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_> >, │ │ │ │ +69 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>> │ │ │ │ +70 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_>, │ │ │ │ +71 _Alloc, __detail::_Select1st, │ │ │ │ +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 /** │ │ │ │ -78 * @brief A standard container composed of unique keys (containing │ │ │ │ -79 * at most one of each key value) in which the elements' keys are │ │ │ │ -80 * the elements themselves. │ │ │ │ -81 * │ │ │ │ -82 * @ingroup unordered_associative_containers │ │ │ │ -83 * @headerfile unordered_set │ │ │ │ -84 * @since C++11 │ │ │ │ -85 * │ │ │ │ -86 * @tparam _Value Type of key objects. │ │ │ │ -87 * @tparam _Hash Hashing function object type, defaults to hash<_Value>. │ │ │ │ -88 │ │ │ │ -89 * @tparam _Pred Predicate function object type, defaults to │ │ │ │ -90 * equal_to<_Value>. │ │ │ │ -91 * │ │ │ │ -92 * @tparam _Alloc Allocator type, defaults to allocator<_Key>. │ │ │ │ -93 * │ │ │ │ -94 * Meets the requirements of a container, and │ │ │ │ -95 * unordered associative container │ │ │ │ +77 template │ │ │ │ +78 class _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p; │ │ │ │ +79 │ │ │ │ +80 /** │ │ │ │ +81 * @brief A standard container composed of unique keys (containing │ │ │ │ +82 * at most one of each key value) that associates values of another type │ │ │ │ +83 * with the keys. │ │ │ │ +84 * │ │ │ │ +85 * @ingroup unordered_associative_containers │ │ │ │ +86 * @headerfile unordered_map │ │ │ │ +87 * @since C++11 │ │ │ │ +88 * │ │ │ │ +89 * @tparam _Key Type of key objects. │ │ │ │ +90 * @tparam _Tp Type of mapped objects. │ │ │ │ +91 * @tparam _Hash Hashing function object type, defaults to hash<_Value>. │ │ │ │ +92 * @tparam _Pred Predicate function object type, defaults │ │ │ │ +93 * to equal_to<_Value>. │ │ │ │ +94 * @tparam _Alloc Allocator type, defaults to │ │ │ │ +95 * std::allocator>. │ │ │ │ 96 * │ │ │ │ -97 * Base is _Hashtable, dispatched at compile time via template │ │ │ │ -98 * alias __uset_hashtable. │ │ │ │ -99 */ │ │ │ │ -100 template, │ │ │ │ -102 typename ___P_r_e_d = _e_q_u_a_l___t_o_<___V_a_l_u_e_>, │ │ │ │ -103 typename _Alloc = _a_l_l_o_c_a_t_o_r_<___V_a_l_u_e_>> │ │ │ │ -_1_0_4 class _u_n_o_r_d_e_r_e_d___s_e_t │ │ │ │ -105 { │ │ │ │ -106 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; │ │ │ │ -107 ___H_a_s_h_t_a_b_l_e _M_h; │ │ │ │ -108 │ │ │ │ -109 public: │ │ │ │ -110 // typedefs: │ │ │ │ -111 ///@{ │ │ │ │ -112 /// Public typedefs. │ │ │ │ -_1_1_3 typedef typename _Hashtable::key_type _k_e_y___t_y_p_e; │ │ │ │ -_1_1_4 typedef typename _Hashtable::value_type _v_a_l_u_e___t_y_p_e; │ │ │ │ -_1_1_5 typedef typename _Hashtable::hasher _h_a_s_h_e_r; │ │ │ │ -_1_1_6 typedef typename _Hashtable::key_equal _k_e_y___e_q_u_a_l; │ │ │ │ -_1_1_7 typedef typename _Hashtable::allocator_type _a_l_l_o_c_a_t_o_r___t_y_p_e; │ │ │ │ -118 ///@} │ │ │ │ -119 │ │ │ │ -120 ///@{ │ │ │ │ -121 /// Iterator-related typedefs. │ │ │ │ -_1_2_2 typedef typename _Hashtable::pointer _p_o_i_n_t_e_r; │ │ │ │ -_1_2_3 typedef typename _Hashtable::const_pointer _c_o_n_s_t___p_o_i_n_t_e_r; │ │ │ │ -_1_2_4 typedef typename _Hashtable::reference _r_e_f_e_r_e_n_c_e; │ │ │ │ -_1_2_5 typedef typename _Hashtable::const_reference _c_o_n_s_t___r_e_f_e_r_e_n_c_e; │ │ │ │ -_1_2_6 typedef typename _Hashtable::iterator _i_t_e_r_a_t_o_r; │ │ │ │ -_1_2_7 typedef typename _Hashtable::const_iterator _c_o_n_s_t___i_t_e_r_a_t_o_r; │ │ │ │ -_1_2_8 typedef typename _Hashtable::local_iterator _l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ -_1_2_9 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_0 typedef typename _Hashtable::size_type _s_i_z_e___t_y_p_e; │ │ │ │ -_1_3_1 typedef typename _Hashtable::difference_type _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ -132 ///@} │ │ │ │ -133 │ │ │ │ -134#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -135 using node_type = typename _Hashtable::node_type; │ │ │ │ -136 using insert_return_type = typename _Hashtable::insert_return_type; │ │ │ │ -137#endif │ │ │ │ -138 │ │ │ │ -139 // construct/destroy/copy │ │ │ │ -140 │ │ │ │ -141 /// Default constructor. │ │ │ │ -_1_4_2 _u_n_o_r_d_e_r_e_d___s_e_t() = default; │ │ │ │ -143 │ │ │ │ -144 /** │ │ │ │ -145 * @brief Default constructor creates no elements. │ │ │ │ -146 * @param __n Minimal initial number of buckets. │ │ │ │ -147 * @param __hf A hash functor. │ │ │ │ -148 * @param __eql A key equality functor. │ │ │ │ -149 * @param __a An allocator object. │ │ │ │ -150 */ │ │ │ │ -151 explicit │ │ │ │ -_1_5_2 _u_n_o_r_d_e_r_e_d___s_e_t(_s_i_z_e___t_y_p_e __n, │ │ │ │ -153 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -154 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ -155 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()) │ │ │ │ -156 : _M_h(__n, _____h_f, _____e_q_l, __a) │ │ │ │ -157 { } │ │ │ │ -158 │ │ │ │ -159 /** │ │ │ │ -160 * @brief Builds an %unordered_set from a range. │ │ │ │ -161 * @param __first An input iterator. │ │ │ │ -162 * @param __last An input iterator. │ │ │ │ -163 * @param __n Minimal initial number of buckets. │ │ │ │ -164 * @param __hf A hash functor. │ │ │ │ -165 * @param __eql A key equality functor. │ │ │ │ -166 * @param __a An allocator object. │ │ │ │ -167 * │ │ │ │ -168 * Create an %unordered_set consisting of copies of the elements from │ │ │ │ -169 * [__first,__last). This is linear in N (where N is │ │ │ │ -170 * distance(__first,__last)). │ │ │ │ -171 */ │ │ │ │ -172 template │ │ │ │ -_1_7_3 _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, │ │ │ │ -174 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -175 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -176 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ -177 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()) │ │ │ │ -178 : _M_h(__first, __last, __n, _____h_f, _____e_q_l, __a) │ │ │ │ -179 { } │ │ │ │ -180 │ │ │ │ -181 /// Copy constructor. │ │ │ │ -_1_8_2 _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; │ │ │ │ -183 │ │ │ │ -184 /// Move constructor. │ │ │ │ -_1_8_5 _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; │ │ │ │ +97 * Meets the requirements of a container, and │ │ │ │ +98 * unordered associative container │ │ │ │ +99 * │ │ │ │ +100 * The resulting value type of the container is std::pair. │ │ │ │ +101 * │ │ │ │ +102 * Base is _Hashtable, dispatched at compile time via template │ │ │ │ +103 * alias __umap_hashtable. │ │ │ │ +104 */ │ │ │ │ +105 template, │ │ │ │ +107 typename ___P_r_e_d = _e_q_u_a_l___t_o_<___K_e_y_>, │ │ │ │ +108 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_0_9 class _u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ +110 { │ │ │ │ +111 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; │ │ │ │ +112 ___H_a_s_h_t_a_b_l_e _M_h; │ │ │ │ +113 │ │ │ │ +114 public: │ │ │ │ +115 // typedefs: │ │ │ │ +116 ///@{ │ │ │ │ +117 /// Public typedefs. │ │ │ │ +_1_1_8 typedef typename _Hashtable::key_type _k_e_y___t_y_p_e; │ │ │ │ +_1_1_9 typedef typename _Hashtable::value_type _v_a_l_u_e___t_y_p_e; │ │ │ │ +_1_2_0 typedef typename _Hashtable::mapped_type _m_a_p_p_e_d___t_y_p_e; │ │ │ │ +_1_2_1 typedef typename _Hashtable::hasher _h_a_s_h_e_r; │ │ │ │ +_1_2_2 typedef typename _Hashtable::key_equal _k_e_y___e_q_u_a_l; │ │ │ │ +_1_2_3 typedef typename _Hashtable::allocator_type _a_l_l_o_c_a_t_o_r___t_y_p_e; │ │ │ │ +124 ///@} │ │ │ │ +125 │ │ │ │ +126 ///@{ │ │ │ │ +127 /// Iterator-related typedefs. │ │ │ │ +_1_2_8 typedef typename _Hashtable::pointer _p_o_i_n_t_e_r; │ │ │ │ +_1_2_9 typedef typename _Hashtable::const_pointer _c_o_n_s_t___p_o_i_n_t_e_r; │ │ │ │ +_1_3_0 typedef typename _Hashtable::reference _r_e_f_e_r_e_n_c_e; │ │ │ │ +_1_3_1 typedef typename _Hashtable::const_reference _c_o_n_s_t___r_e_f_e_r_e_n_c_e; │ │ │ │ +_1_3_2 typedef typename _Hashtable::iterator _i_t_e_r_a_t_o_r; │ │ │ │ +_1_3_3 typedef typename _Hashtable::const_iterator _c_o_n_s_t___i_t_e_r_a_t_o_r; │ │ │ │ +_1_3_4 typedef typename _Hashtable::local_iterator _l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ +_1_3_5 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_6 typedef typename _Hashtable::size_type _s_i_z_e___t_y_p_e; │ │ │ │ +_1_3_7 typedef typename _Hashtable::difference_type _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ +138 ///@} │ │ │ │ +139 │ │ │ │ +140#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +141 using node_type = typename _Hashtable::node_type; │ │ │ │ +142 using insert_return_type = typename _Hashtable::insert_return_type; │ │ │ │ +143#endif │ │ │ │ +144 │ │ │ │ +145 //construct/destroy/copy │ │ │ │ +146 │ │ │ │ +147 /// Default constructor. │ │ │ │ +_1_4_8 _u_n_o_r_d_e_r_e_d___m_a_p() = default; │ │ │ │ +149 │ │ │ │ +150 /** │ │ │ │ +151 * @brief Default constructor creates no elements. │ │ │ │ +152 * @param __n Minimal initial number of buckets. │ │ │ │ +153 * @param __hf A hash functor. │ │ │ │ +154 * @param __eql A key equality functor. │ │ │ │ +155 * @param __a An allocator object. │ │ │ │ +156 */ │ │ │ │ +157 explicit │ │ │ │ +_1_5_8 _u_n_o_r_d_e_r_e_d___m_a_p(_s_i_z_e___t_y_p_e __n, │ │ │ │ +159 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ +160 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ +161 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()) │ │ │ │ +162 : _M_h(__n, _____h_f, _____e_q_l, __a) │ │ │ │ +163 { } │ │ │ │ +164 │ │ │ │ +165 /** │ │ │ │ +166 * @brief Builds an %unordered_map from a range. │ │ │ │ +167 * @param __first An input iterator. │ │ │ │ +168 * @param __last An input iterator. │ │ │ │ +169 * @param __n Minimal initial number of buckets. │ │ │ │ +170 * @param __hf A hash functor. │ │ │ │ +171 * @param __eql A key equality functor. │ │ │ │ +172 * @param __a An allocator object. │ │ │ │ +173 * │ │ │ │ +174 * Create an %unordered_map consisting of copies of the elements from │ │ │ │ +175 * [__first,__last). This is linear in N (where N is │ │ │ │ +176 * distance(__first,__last)). │ │ │ │ +177 */ │ │ │ │ +178 template │ │ │ │ +_1_7_9 _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, │ │ │ │ +180 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ +181 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ +182 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ +183 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()) │ │ │ │ +184 : _M_h(__first, __last, __n, _____h_f, _____e_q_l, __a) │ │ │ │ +185 { } │ │ │ │ 186 │ │ │ │ -187 /** │ │ │ │ -188 * @brief Creates an %unordered_set with no elements. │ │ │ │ -189 * @param __a An allocator object. │ │ │ │ -190 */ │ │ │ │ -191 explicit │ │ │ │ -_1_9_2 _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) │ │ │ │ -193 : _M_h(__a) │ │ │ │ -194 { } │ │ │ │ -195 │ │ │ │ -196 /* │ │ │ │ -197 * @brief Copy constructor with allocator argument. │ │ │ │ -198 * @param __uset Input %unordered_set to copy. │ │ │ │ -199 * @param __a An allocator object. │ │ │ │ -200 */ │ │ │ │ -201 _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, │ │ │ │ -202 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -203 : _M_h(_____u_s_e_t._M_h, __a) │ │ │ │ -204 { } │ │ │ │ -205 │ │ │ │ -206 /* │ │ │ │ -207 * @brief Move constructor with allocator argument. │ │ │ │ -208 * @param __uset Input %unordered_set to move. │ │ │ │ -209 * @param __a An allocator object. │ │ │ │ -210 */ │ │ │ │ -211 _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, │ │ │ │ -212 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -213 noexcept( noexcept(_Hashtable(_s_t_d_:_:_m_o_v_e(__uset._M_h), __a)) ) │ │ │ │ -214 : _M_h(_s_t_d_:_:_m_o_v_e(__uset._M_h), __a) │ │ │ │ -215 { } │ │ │ │ -216 │ │ │ │ -217 /** │ │ │ │ -218 * @brief Builds an %unordered_set from an initializer_list. │ │ │ │ -219 * @param __l An initializer_list. │ │ │ │ -220 * @param __n Minimal initial number of buckets. │ │ │ │ -221 * @param __hf A hash functor. │ │ │ │ -222 * @param __eql A key equality functor. │ │ │ │ -223 * @param __a An allocator object. │ │ │ │ -224 * │ │ │ │ -225 * Create an %unordered_set consisting of copies of the elements in the │ │ │ │ -226 * list. This is linear in N (where N is @a __l.size()). │ │ │ │ -227 */ │ │ │ │ -_2_2_8 _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, │ │ │ │ -229 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -230 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -231 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ -232 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()) │ │ │ │ -233 : _M_h(_____l, __n, _____h_f, _____e_q_l, __a) │ │ │ │ -234 { } │ │ │ │ -235 │ │ │ │ -236 _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) │ │ │ │ -237 : _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) │ │ │ │ -238 { } │ │ │ │ -239 │ │ │ │ -240 _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, │ │ │ │ -241 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -242 : _u_n_o_r_d_e_r_e_d___s_e_t(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -243 { } │ │ │ │ -244 │ │ │ │ -245 template │ │ │ │ -246 _u_n_o_r_d_e_r_e_d___s_e_t(_InputIterator __first, _InputIterator __last, │ │ │ │ -247 _s_i_z_e___t_y_p_e __n, │ │ │ │ -248 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -249 : _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) │ │ │ │ -250 { } │ │ │ │ -251 │ │ │ │ -252 template │ │ │ │ -253 _u_n_o_r_d_e_r_e_d___s_e_t(_InputIterator __first, _InputIterator __last, │ │ │ │ -254 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -255 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -256 : _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) │ │ │ │ -257 { } │ │ │ │ -258 │ │ │ │ -259 _u_n_o_r_d_e_r_e_d___s_e_t(initializer_list __l, │ │ │ │ -260 _s_i_z_e___t_y_p_e __n, │ │ │ │ +187 /// Copy constructor. │ │ │ │ +_1_8_8 _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; │ │ │ │ +189 │ │ │ │ +190 /// Move constructor. │ │ │ │ +_1_9_1 _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; │ │ │ │ +192 │ │ │ │ +193 /** │ │ │ │ +194 * @brief Creates an %unordered_map with no elements. │ │ │ │ +195 * @param __a An allocator object. │ │ │ │ +196 */ │ │ │ │ +197 explicit │ │ │ │ +_1_9_8 _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) │ │ │ │ +199 : _M_h(__a) │ │ │ │ +200 { } │ │ │ │ +201 │ │ │ │ +202 /* │ │ │ │ +203 * @brief Copy constructor with allocator argument. │ │ │ │ +204 * @param __uset Input %unordered_map to copy. │ │ │ │ +205 * @param __a An allocator object. │ │ │ │ +206 */ │ │ │ │ +207 _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, │ │ │ │ +208 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +209 : _M_h(_____u_m_a_p._M_h, __a) │ │ │ │ +210 { } │ │ │ │ +211 │ │ │ │ +212 /* │ │ │ │ +213 * @brief Move constructor with allocator argument. │ │ │ │ +214 * @param __uset Input %unordered_map to move. │ │ │ │ +215 * @param __a An allocator object. │ │ │ │ +216 */ │ │ │ │ +217 _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, │ │ │ │ +218 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +219 noexcept( noexcept(_Hashtable(_s_t_d_:_:_m_o_v_e(__umap._M_h), __a)) ) │ │ │ │ +220 : _M_h(_s_t_d_:_:_m_o_v_e(__umap._M_h), __a) │ │ │ │ +221 { } │ │ │ │ +222 │ │ │ │ +223 /** │ │ │ │ +224 * @brief Builds an %unordered_map from an initializer_list. │ │ │ │ +225 * @param __l An initializer_list. │ │ │ │ +226 * @param __n Minimal initial number of buckets. │ │ │ │ +227 * @param __hf A hash functor. │ │ │ │ +228 * @param __eql A key equality functor. │ │ │ │ +229 * @param __a An allocator object. │ │ │ │ +230 * │ │ │ │ +231 * Create an %unordered_map consisting of copies of the elements in the │ │ │ │ +232 * list. This is linear in N (where N is @a __l.size()). │ │ │ │ +233 */ │ │ │ │ +_2_3_4 _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, │ │ │ │ +235 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ +236 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ +237 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ +238 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()) │ │ │ │ +239 : _M_h(_____l, __n, _____h_f, _____e_q_l, __a) │ │ │ │ +240 { } │ │ │ │ +241 │ │ │ │ +242 _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) │ │ │ │ +243 : _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) │ │ │ │ +244 { } │ │ │ │ +245 │ │ │ │ +246 _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, │ │ │ │ +247 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +248 : _u_n_o_r_d_e_r_e_d___m_a_p(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +249 { } │ │ │ │ +250 │ │ │ │ +251 template │ │ │ │ +252 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ +253 _s_i_z_e___t_y_p_e __n, │ │ │ │ +254 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +255 : _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) │ │ │ │ +256 { } │ │ │ │ +257 │ │ │ │ +258 template │ │ │ │ +259 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ +260 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ 261 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -262 : _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) │ │ │ │ +262 : _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) │ │ │ │ 263 { } │ │ │ │ 264 │ │ │ │ -265 _u_n_o_r_d_e_r_e_d___s_e_t(initializer_list __l, │ │ │ │ -266 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ +265 _u_n_o_r_d_e_r_e_d___m_a_p(initializer_list __l, │ │ │ │ +266 _s_i_z_e___t_y_p_e __n, │ │ │ │ 267 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -268 : _u_n_o_r_d_e_r_e_d___s_e_t(__l, __n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +268 : _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) │ │ │ │ 269 { } │ │ │ │ 270 │ │ │ │ -271 /// Copy assignment operator. │ │ │ │ -272 _u_n_o_r_d_e_r_e_d___s_e_t& │ │ │ │ -_2_7_3 _o_p_e_r_a_t_o_r_=(const _u_n_o_r_d_e_r_e_d___s_e_t&) = default; │ │ │ │ -274 │ │ │ │ -275 /// Move assignment operator. │ │ │ │ -276 _u_n_o_r_d_e_r_e_d___s_e_t& │ │ │ │ -_2_7_7 _o_p_e_r_a_t_o_r_=(_u_n_o_r_d_e_r_e_d___s_e_t&&) = default; │ │ │ │ -278 │ │ │ │ -279 /** │ │ │ │ -280 * @brief %Unordered_set list assignment operator. │ │ │ │ -281 * @param __l An initializer_list. │ │ │ │ -282 * │ │ │ │ -283 * This function fills an %unordered_set with copies of the elements in │ │ │ │ -284 * the initializer list @a __l. │ │ │ │ -285 * │ │ │ │ -286 * Note that the assignment completely changes the %unordered_set and │ │ │ │ -287 * that the resulting %unordered_set's size is the same as the number │ │ │ │ -288 * of elements assigned. │ │ │ │ -289 */ │ │ │ │ -290 _u_n_o_r_d_e_r_e_d___s_e_t& │ │ │ │ -_2_9_1 _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) │ │ │ │ -292 { │ │ │ │ -293 _M_h = _____l; │ │ │ │ -294 return *this; │ │ │ │ -295 } │ │ │ │ -296 │ │ │ │ -297 /// Returns the allocator object used by the %unordered_set. │ │ │ │ -298 _a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ -_2_9_9 _g_e_t___a_l_l_o_c_a_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -300 { return _M_h.get_allocator(); } │ │ │ │ -301 │ │ │ │ -302 // size and capacity: │ │ │ │ -303 │ │ │ │ -304 /// Returns true if the %unordered_set is empty. │ │ │ │ -305 _GLIBCXX_NODISCARD bool │ │ │ │ -_3_0_6 _e_m_p_t_y() _c_o_n_s_t noexcept │ │ │ │ -307 { return _M_h.empty(); } │ │ │ │ -308 │ │ │ │ -309 /// Returns the size of the %unordered_set. │ │ │ │ -310 _s_i_z_e___t_y_p_e │ │ │ │ -_3_1_1 _s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ -312 { return _M_h.size(); } │ │ │ │ -313 │ │ │ │ -314 /// Returns the maximum size of the %unordered_set. │ │ │ │ -315 _s_i_z_e___t_y_p_e │ │ │ │ -_3_1_6 _m_a_x___s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ -317 { return _M_h.max_size(); } │ │ │ │ -318 │ │ │ │ -319 // iterators. │ │ │ │ -320 │ │ │ │ -321 ///@{ │ │ │ │ -322 /** │ │ │ │ -323 * Returns a read-only (constant) iterator that points to the first │ │ │ │ -324 * element in the %unordered_set. │ │ │ │ -325 */ │ │ │ │ -326 _i_t_e_r_a_t_o_r │ │ │ │ -_3_2_7 _b_e_g_i_n() noexcept │ │ │ │ -328 { return _M_h.begin(); } │ │ │ │ -329 │ │ │ │ -330 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_3_3_1 _b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ -332 { return _M_h.begin(); } │ │ │ │ -333 ///@} │ │ │ │ +271 _u_n_o_r_d_e_r_e_d___m_a_p(initializer_list __l, │ │ │ │ +272 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ +273 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +274 : _u_n_o_r_d_e_r_e_d___m_a_p(__l, __n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ +275 { } │ │ │ │ +276 │ │ │ │ +277 /// Copy assignment operator. │ │ │ │ +278 _u_n_o_r_d_e_r_e_d___m_a_p& │ │ │ │ +_2_7_9 _o_p_e_r_a_t_o_r_=(const _u_n_o_r_d_e_r_e_d___m_a_p&) = default; │ │ │ │ +280 │ │ │ │ +281 /// Move assignment operator. │ │ │ │ +282 _u_n_o_r_d_e_r_e_d___m_a_p& │ │ │ │ +_2_8_3 _o_p_e_r_a_t_o_r_=(_u_n_o_r_d_e_r_e_d___m_a_p&&) = default; │ │ │ │ +284 │ │ │ │ +285 /** │ │ │ │ +286 * @brief %Unordered_map list assignment operator. │ │ │ │ +287 * @param __l An initializer_list. │ │ │ │ +288 * │ │ │ │ +289 * This function fills an %unordered_map with copies of the elements in │ │ │ │ +290 * the initializer list @a __l. │ │ │ │ +291 * │ │ │ │ +292 * Note that the assignment completely changes the %unordered_map and │ │ │ │ +293 * that the resulting %unordered_map's size is the same as the number │ │ │ │ +294 * of elements assigned. │ │ │ │ +295 */ │ │ │ │ +296 _u_n_o_r_d_e_r_e_d___m_a_p& │ │ │ │ +_2_9_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) │ │ │ │ +298 { │ │ │ │ +299 _M_h = _____l; │ │ │ │ +300 return *this; │ │ │ │ +301 } │ │ │ │ +302 │ │ │ │ +303 /// Returns the allocator object used by the %unordered_map. │ │ │ │ +304 _a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ +_3_0_5 _g_e_t___a_l_l_o_c_a_t_o_r() _c_o_n_s_t noexcept │ │ │ │ +306 { return _M_h.get_allocator(); } │ │ │ │ +307 │ │ │ │ +308 // size and capacity: │ │ │ │ +309 │ │ │ │ +310 /// Returns true if the %unordered_map is empty. │ │ │ │ +311 _GLIBCXX_NODISCARD bool │ │ │ │ +_3_1_2 _e_m_p_t_y() _c_o_n_s_t noexcept │ │ │ │ +313 { return _M_h.empty(); } │ │ │ │ +314 │ │ │ │ +315 /// Returns the size of the %unordered_map. │ │ │ │ +316 _s_i_z_e___t_y_p_e │ │ │ │ +_3_1_7 _s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ +318 { return _M_h.size(); } │ │ │ │ +319 │ │ │ │ +320 /// Returns the maximum size of the %unordered_map. │ │ │ │ +321 _s_i_z_e___t_y_p_e │ │ │ │ +_3_2_2 _m_a_x___s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ +323 { return _M_h.max_size(); } │ │ │ │ +324 │ │ │ │ +325 // iterators. │ │ │ │ +326 │ │ │ │ +327 /** │ │ │ │ +328 * Returns a read/write iterator that points to the first element in the │ │ │ │ +329 * %unordered_map. │ │ │ │ +330 */ │ │ │ │ +331 _i_t_e_r_a_t_o_r │ │ │ │ +_3_3_2 _b_e_g_i_n() noexcept │ │ │ │ +333 { return _M_h.begin(); } │ │ │ │ 334 │ │ │ │ 335 ///@{ │ │ │ │ 336 /** │ │ │ │ -337 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ -338 * element in the %unordered_set. │ │ │ │ +337 * Returns a read-only (constant) iterator that points to the first │ │ │ │ +338 * element in the %unordered_map. │ │ │ │ 339 */ │ │ │ │ -340 _i_t_e_r_a_t_o_r │ │ │ │ -_3_4_1 _e_n_d() noexcept │ │ │ │ -342 { return _M_h.end(); } │ │ │ │ +340 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_3_4_1 _b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ +342 { return _M_h.begin(); } │ │ │ │ 343 │ │ │ │ 344 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_3_4_5 _e_n_d() _c_o_n_s_t noexcept │ │ │ │ -346 { return _M_h.end(); } │ │ │ │ +_3_4_5 _c_b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ +346 { return _M_h.begin(); } │ │ │ │ 347 ///@} │ │ │ │ 348 │ │ │ │ 349 /** │ │ │ │ -350 * Returns a read-only (constant) iterator that points to the first │ │ │ │ -351 * element in the %unordered_set. │ │ │ │ +350 * Returns a read/write iterator that points one past the last element in │ │ │ │ +351 * the %unordered_map. │ │ │ │ 352 */ │ │ │ │ -353 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_3_5_4 _c_b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ -355 { return _M_h.begin(); } │ │ │ │ +353 _i_t_e_r_a_t_o_r │ │ │ │ +_3_5_4 _e_n_d() noexcept │ │ │ │ +355 { return _M_h.end(); } │ │ │ │ 356 │ │ │ │ -357 /** │ │ │ │ -358 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ -359 * element in the %unordered_set. │ │ │ │ -360 */ │ │ │ │ -361 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_3_6_2 _c_e_n_d() _c_o_n_s_t noexcept │ │ │ │ -363 { return _M_h.end(); } │ │ │ │ -364 │ │ │ │ -365 // modifiers. │ │ │ │ -366 │ │ │ │ -367 /** │ │ │ │ -368 * @brief Attempts to build and insert an element into the │ │ │ │ -369 * %unordered_set. │ │ │ │ -370 * @param __args Arguments used to generate an element. │ │ │ │ -371 * @return A pair, of which the first element is an iterator that points │ │ │ │ -372 * to the possibly inserted element, and the second is a bool │ │ │ │ -373 * that is true if the element was actually inserted. │ │ │ │ -374 * │ │ │ │ -375 * This function attempts to build and insert an element into the │ │ │ │ -376 * %unordered_set. An %unordered_set relies on unique keys and thus an │ │ │ │ -377 * element is only inserted if it is not already present in the │ │ │ │ -378 * %unordered_set. │ │ │ │ -379 * │ │ │ │ -380 * Insertion requires amortized constant time. │ │ │ │ -381 */ │ │ │ │ -382 template │ │ │ │ -383 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_3_8_4 _e_m_p_l_a_c_e(___A_r_g_s&&... _____a_r_g_s) │ │ │ │ -385 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); } │ │ │ │ -386 │ │ │ │ -387 /** │ │ │ │ -388 * @brief Attempts to insert an element into the %unordered_set. │ │ │ │ -389 * @param __pos An iterator that serves as a hint as to where the │ │ │ │ -390 * element should be inserted. │ │ │ │ -391 * @param __args Arguments used to generate the element to be │ │ │ │ -392 * inserted. │ │ │ │ -393 * @return An iterator that points to the element with key equivalent to │ │ │ │ -394 * the one generated from @a __args (may or may not be the │ │ │ │ -395 * element itself). │ │ │ │ -396 * │ │ │ │ -397 * This function is not concerned about whether the insertion took place, │ │ │ │ -398 * and thus does not return a boolean like the single-argument emplace() │ │ │ │ -399 * does. Note that the first parameter is only a hint and can │ │ │ │ -400 * potentially improve the performance of the insertion process. A bad │ │ │ │ -401 * hint would cause no gains in efficiency. │ │ │ │ -402 * │ │ │ │ -403 * For more on @a hinting, see: │ │ │ │ -404 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ +357 ///@{ │ │ │ │ +358 /** │ │ │ │ +359 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ +360 * element in the %unordered_map. │ │ │ │ +361 */ │ │ │ │ +362 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_3_6_3 _e_n_d() _c_o_n_s_t noexcept │ │ │ │ +364 { return _M_h.end(); } │ │ │ │ +365 │ │ │ │ +366 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_3_6_7 _c_e_n_d() _c_o_n_s_t noexcept │ │ │ │ +368 { return _M_h.end(); } │ │ │ │ +369 ///@} │ │ │ │ +370 │ │ │ │ +371 // modifiers. │ │ │ │ +372 │ │ │ │ +373 /** │ │ │ │ +374 * @brief Attempts to build and insert a std::pair into the │ │ │ │ +375 * %unordered_map. │ │ │ │ +376 * │ │ │ │ +377 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ +378 * std::piecewise_contruct for passing arguments to each │ │ │ │ +379 * part of the pair constructor). │ │ │ │ +380 * │ │ │ │ +381 * @return A pair, of which the first element is an iterator that points │ │ │ │ +382 * to the possibly inserted pair, and the second is a bool that │ │ │ │ +383 * is true if the pair was actually inserted. │ │ │ │ +384 * │ │ │ │ +385 * This function attempts to build and insert a (key, value) %pair into │ │ │ │ +386 * the %unordered_map. │ │ │ │ +387 * An %unordered_map relies on unique keys and thus a %pair is only │ │ │ │ +388 * inserted if its first element (the key) is not already present in the │ │ │ │ +389 * %unordered_map. │ │ │ │ +390 * │ │ │ │ +391 * Insertion requires amortized constant time. │ │ │ │ +392 */ │ │ │ │ +393 template │ │ │ │ +394 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +_3_9_5 _e_m_p_l_a_c_e(___A_r_g_s&&... _____a_r_g_s) │ │ │ │ +396 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); } │ │ │ │ +397 │ │ │ │ +398 /** │ │ │ │ +399 * @brief Attempts to build and insert a std::pair into the │ │ │ │ +400 * %unordered_map. │ │ │ │ +401 * │ │ │ │ +402 * @param __pos An iterator that serves as a hint as to where the pair │ │ │ │ +403 * should be inserted. │ │ │ │ +404 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ +405 * std::piecewise_contruct for passing arguments to each │ │ │ │ +406 * part of the pair constructor). │ │ │ │ +407 * @return An iterator that points to the element with key of the │ │ │ │ +408 * std::pair built from @a __args (may or may not be that │ │ │ │ +409 * std::pair). │ │ │ │ +410 * │ │ │ │ +411 * This function is not concerned about whether the insertion took place, │ │ │ │ +412 * and thus does not return a boolean like the single-argument emplace() │ │ │ │ +413 * does. │ │ │ │ +414 * Note that the first parameter is only a hint and can potentially │ │ │ │ +415 * improve the performance of the insertion process. A bad hint would │ │ │ │ +416 * cause no gains in efficiency. │ │ │ │ +417 * │ │ │ │ +418 * See │ │ │ │ +419 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ associative.html#containers.associative.insert_hints │ │ │ │ -405 * │ │ │ │ -406 * Insertion requires amortized constant time. │ │ │ │ -407 */ │ │ │ │ -408 template │ │ │ │ -409 _i_t_e_r_a_t_o_r │ │ │ │ -_4_1_0 _e_m_p_l_a_c_e___h_i_n_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s, ___A_r_g_s&&... _____a_r_g_s) │ │ │ │ -411 { 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)...); } │ │ │ │ -412 │ │ │ │ -413 ///@{ │ │ │ │ -414 /** │ │ │ │ -415 * @brief Attempts to insert an element into the %unordered_set. │ │ │ │ -416 * @param __x Element to be inserted. │ │ │ │ -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 insert an element into the %unordered_set. │ │ │ │ -422 * An %unordered_set relies on unique keys and thus an element is only │ │ │ │ -423 * inserted if it is not already present in the %unordered_set. │ │ │ │ -424 * │ │ │ │ -425 * Insertion requires amortized constant time. │ │ │ │ -426 */ │ │ │ │ -427 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_4_2_8 _i_n_s_e_r_t(const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -429 { return _M_h.insert(__x); } │ │ │ │ -430 │ │ │ │ -431 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_4_3_2 _i_n_s_e_r_t(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -433 { return _M_h.insert(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -434 ///@} │ │ │ │ -435 │ │ │ │ -436 ///@{ │ │ │ │ -437 /** │ │ │ │ -438 * @brief Attempts to insert an element into the %unordered_set. │ │ │ │ -439 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ -440 * element should be inserted. │ │ │ │ -441 * @param __x Element to be inserted. │ │ │ │ -442 * @return An iterator that points to the element with key of │ │ │ │ -443 * @a __x (may or may not be the element passed in). │ │ │ │ -444 * │ │ │ │ -445 * This function is not concerned about whether the insertion took place, │ │ │ │ -446 * and thus does not return a boolean like the single-argument insert() │ │ │ │ -447 * does. Note that the first parameter is only a hint and can │ │ │ │ -448 * potentially improve the performance of the insertion process. A bad │ │ │ │ -449 * hint would cause no gains in efficiency. │ │ │ │ -450 * │ │ │ │ -451 * For more on @a hinting, see: │ │ │ │ -452 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ +420 * for more on @a hinting. │ │ │ │ +421 * │ │ │ │ +422 * Insertion requires amortized constant time. │ │ │ │ +423 */ │ │ │ │ +424 template │ │ │ │ +425 _i_t_e_r_a_t_o_r │ │ │ │ +_4_2_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) │ │ │ │ +427 { 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)...); } │ │ │ │ +428 │ │ │ │ +429#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +430 /// Extract a node. │ │ │ │ +431 node_type │ │ │ │ +_4_3_2 _e_x_t_r_a_c_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s) │ │ │ │ +433 { │ │ │ │ +434 __glibcxx_assert(_____p_o_s != _e_n_d()); │ │ │ │ +435 return _M_h.extract(_____p_o_s); │ │ │ │ +436 } │ │ │ │ +437 │ │ │ │ +438 /// Extract a node. │ │ │ │ +439 node_type │ │ │ │ +_4_4_0 _e_x_t_r_a_c_t(const _k_e_y___t_y_p_e& _____k_e_y) │ │ │ │ +441 { return _M_h.extract(_____k_e_y); } │ │ │ │ +442 │ │ │ │ +443 /// Re-insert an extracted node. │ │ │ │ +444 insert_return_type │ │ │ │ +_4_4_5 _i_n_s_e_r_t(node_type&& _____n_h) │ │ │ │ +446 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(_____n_h)); } │ │ │ │ +447 │ │ │ │ +448 /// Re-insert an extracted node. │ │ │ │ +449 _i_t_e_r_a_t_o_r │ │ │ │ +_4_5_0 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r, node_type&& _____n_h) │ │ │ │ +451 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(_____n_h)).position; } │ │ │ │ +452#endif // node_extract │ │ │ │ +453 │ │ │ │ +454#ifdef __glibcxx_unordered_map_try_emplace // C++ >= 17 && HOSTED │ │ │ │ +455 /** │ │ │ │ +456 * @brief Attempts to build and insert a std::pair into the │ │ │ │ +457 * %unordered_map. │ │ │ │ +458 * │ │ │ │ +459 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ +460 * the unordered_map. │ │ │ │ +461 * @param __args Arguments used to generate the .second for a │ │ │ │ +462 * new pair instance. │ │ │ │ +463 * │ │ │ │ +464 * @return A pair, of which the first element is an iterator that points │ │ │ │ +465 * to the possibly inserted pair, and the second is a bool that │ │ │ │ +466 * is true if the pair was actually inserted. │ │ │ │ +467 * │ │ │ │ +468 * This function attempts to build and insert a (key, value) %pair into │ │ │ │ +469 * the %unordered_map. │ │ │ │ +470 * An %unordered_map relies on unique keys and thus a %pair is only │ │ │ │ +471 * inserted if its first element (the key) is not already present in the │ │ │ │ +472 * %unordered_map. │ │ │ │ +473 * If a %pair is not inserted, this function has no effect. │ │ │ │ +474 * │ │ │ │ +475 * Insertion requires amortized constant time. │ │ │ │ +476 */ │ │ │ │ +477 template │ │ │ │ +478 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +_4_7_9 _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) │ │ │ │ +480 { │ │ │ │ +481 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)...); │ │ │ │ +482 } │ │ │ │ +483 │ │ │ │ +484 // move-capable overload │ │ │ │ +485 template │ │ │ │ +486 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +487 _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) │ │ │ │ +488 { │ │ │ │ +489 return _M_h.try_emplace(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(_____k), │ │ │ │ +490 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); │ │ │ │ +491 } │ │ │ │ +492 │ │ │ │ +493 /** │ │ │ │ +494 * @brief Attempts to build and insert a std::pair into the │ │ │ │ +495 * %unordered_map. │ │ │ │ +496 * │ │ │ │ +497 * @param __hint An iterator that serves as a hint as to where the pair │ │ │ │ +498 * should be inserted. │ │ │ │ +499 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ +500 * the unordered_map. │ │ │ │ +501 * @param __args Arguments used to generate the .second for a │ │ │ │ +502 * new pair instance. │ │ │ │ +503 * @return An iterator that points to the element with key of the │ │ │ │ +504 * std::pair built from @a __args (may or may not be that │ │ │ │ +505 * std::pair). │ │ │ │ +506 * │ │ │ │ +507 * This function is not concerned about whether the insertion took place, │ │ │ │ +508 * and thus does not return a boolean like the single-argument emplace() │ │ │ │ +509 * does. However, if insertion did not take place, │ │ │ │ +510 * this function has no effect. │ │ │ │ +511 * Note that the first parameter is only a hint and can potentially │ │ │ │ +512 * improve the performance of the insertion process. A bad hint would │ │ │ │ +513 * cause no gains in efficiency. │ │ │ │ +514 * │ │ │ │ +515 * See │ │ │ │ +516 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ associative.html#containers.associative.insert_hints │ │ │ │ -453 * │ │ │ │ -454 * Insertion requires amortized constant. │ │ │ │ -455 */ │ │ │ │ -456 _i_t_e_r_a_t_o_r │ │ │ │ -_4_5_7 _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) │ │ │ │ -458 { return _M_h.insert(_____h_i_n_t, __x); } │ │ │ │ -459 │ │ │ │ -460 _i_t_e_r_a_t_o_r │ │ │ │ -_4_6_1 _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) │ │ │ │ -462 { return _M_h.insert(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -463 ///@} │ │ │ │ -464 │ │ │ │ -465 /** │ │ │ │ -466 * @brief A template function that attempts to insert a range of │ │ │ │ -467 * elements. │ │ │ │ -468 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -469 * inserted. │ │ │ │ -470 * @param __last Iterator pointing to the end of the range. │ │ │ │ -471 * │ │ │ │ -472 * Complexity similar to that of the range constructor. │ │ │ │ -473 */ │ │ │ │ -474 template │ │ │ │ -475 void │ │ │ │ -_4_7_6 _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) │ │ │ │ -477 { _M_h.insert(__first, __last); } │ │ │ │ -478 │ │ │ │ -479 /** │ │ │ │ -480 * @brief Attempts to insert a list of elements into the %unordered_set. │ │ │ │ -481 * @param __l A std::initializer_list of elements │ │ │ │ -482 * to be inserted. │ │ │ │ -483 * │ │ │ │ -484 * Complexity similar to that of the range constructor. │ │ │ │ -485 */ │ │ │ │ -486 void │ │ │ │ -_4_8_7 _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) │ │ │ │ -488 { _M_h.insert(_____l); } │ │ │ │ -489 │ │ │ │ -490#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -491 /// Extract a node. │ │ │ │ -492 node_type │ │ │ │ -_4_9_3 _e_x_t_r_a_c_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s) │ │ │ │ -494 { │ │ │ │ -495 __glibcxx_assert(_____p_o_s != _e_n_d()); │ │ │ │ -496 return _M_h.extract(_____p_o_s); │ │ │ │ -497 } │ │ │ │ -498 │ │ │ │ -499 /// Extract a node. │ │ │ │ -500 node_type │ │ │ │ -_5_0_1 _e_x_t_r_a_c_t(const _k_e_y___t_y_p_e& _____k_e_y) │ │ │ │ -502 { return _M_h.extract(_____k_e_y); } │ │ │ │ -503 │ │ │ │ -504 /// Re-insert an extracted node. │ │ │ │ -505 insert_return_type │ │ │ │ -_5_0_6 _i_n_s_e_r_t(node_type&& _____n_h) │ │ │ │ -507 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(_____n_h)); } │ │ │ │ -508 │ │ │ │ -509 /// Re-insert an extracted node. │ │ │ │ -510 _i_t_e_r_a_t_o_r │ │ │ │ -_5_1_1 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r, node_type&& _____n_h) │ │ │ │ -512 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(_____n_h)).position; } │ │ │ │ -513#endif // node_extract │ │ │ │ -514 │ │ │ │ -515 ///@{ │ │ │ │ -516 /** │ │ │ │ -517 * @brief Erases an element from an %unordered_set. │ │ │ │ -518 * @param __position An iterator pointing to the element to be erased. │ │ │ │ -519 * @return An iterator pointing to the element immediately following │ │ │ │ -520 * @a __position prior to the element being erased. If no such │ │ │ │ -521 * element exists, end() is returned. │ │ │ │ -522 * │ │ │ │ -523 * This function erases an element, pointed to by the given iterator, │ │ │ │ -524 * from an %unordered_set. Note that this function only erases the │ │ │ │ -525 * element, and that if the element is itself a pointer, the pointed-to │ │ │ │ -526 * memory is not touched in any way. Managing the pointer is the user's │ │ │ │ -527 * responsibility. │ │ │ │ -528 */ │ │ │ │ -529 _i_t_e_r_a_t_o_r │ │ │ │ -_5_3_0 _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) │ │ │ │ -531 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ -532 │ │ │ │ -533 // LWG 2059. │ │ │ │ -534 _i_t_e_r_a_t_o_r │ │ │ │ -_5_3_5 _e_r_a_s_e(_i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n) │ │ │ │ -536 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ -537 ///@} │ │ │ │ -538 │ │ │ │ -539 /** │ │ │ │ -540 * @brief Erases elements according to the provided key. │ │ │ │ -541 * @param __x Key of element to be erased. │ │ │ │ -542 * @return The number of elements erased. │ │ │ │ -543 * │ │ │ │ -544 * This function erases all the elements located by the given key from │ │ │ │ -545 * an %unordered_set. For an %unordered_set the result of this function │ │ │ │ -546 * can only be 0 (not present) or 1 (present). │ │ │ │ -547 * Note that this function only erases the element, and that if │ │ │ │ -548 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ -549 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -550 */ │ │ │ │ -551 _s_i_z_e___t_y_p_e │ │ │ │ -_5_5_2 _e_r_a_s_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -553 { return _M_h.erase(__x); } │ │ │ │ -554 │ │ │ │ -555 /** │ │ │ │ -556 * @brief Erases a [__first,__last) range of elements from an │ │ │ │ -557 * %unordered_set. │ │ │ │ -558 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -559 * erased. │ │ │ │ -560 * @param __last Iterator pointing to the end of the range to │ │ │ │ -561 * be erased. │ │ │ │ -562 * @return The iterator @a __last. │ │ │ │ -563 * │ │ │ │ -564 * This function erases a sequence of elements from an %unordered_set. │ │ │ │ -565 * Note that this function only erases the element, and that if │ │ │ │ -566 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ -567 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -568 */ │ │ │ │ -569 _i_t_e_r_a_t_o_r │ │ │ │ -_5_7_0 _e_r_a_s_e(_c_o_n_s_t___i_t_e_r_a_t_o_r __first, _c_o_n_s_t___i_t_e_r_a_t_o_r __last) │ │ │ │ -571 { return _M_h.erase(__first, __last); } │ │ │ │ -572 │ │ │ │ -573 /** │ │ │ │ -574 * Erases all elements in an %unordered_set. Note that this function only │ │ │ │ -575 * erases the elements, and that if the elements themselves are pointers, │ │ │ │ -576 * the pointed-to memory is not touched in any way. Managing the pointer │ │ │ │ -577 * is the user's responsibility. │ │ │ │ -578 */ │ │ │ │ -579 void │ │ │ │ -_5_8_0 _c_l_e_a_r() noexcept │ │ │ │ -581 { _M_h.clear(); } │ │ │ │ -582 │ │ │ │ -583 /** │ │ │ │ -584 * @brief Swaps data with another %unordered_set. │ │ │ │ -585 * @param __x An %unordered_set of the same element and allocator │ │ │ │ -586 * types. │ │ │ │ -587 * │ │ │ │ -588 * This exchanges the elements between two sets in constant time. │ │ │ │ -589 * Note that the global std::swap() function is specialized such that │ │ │ │ -590 * std::swap(s1,s2) will feed to this function. │ │ │ │ -591 */ │ │ │ │ -592 void │ │ │ │ -_5_9_3 _s_w_a_p(_u_n_o_r_d_e_r_e_d___s_e_t& __x) │ │ │ │ -594 noexcept( noexcept(_M_h.swap(__x._M_h)) ) │ │ │ │ -595 { _M_h.swap(__x._M_h); } │ │ │ │ -596 │ │ │ │ -597#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -598 template │ │ │ │ -599 friend class std::_Hash_merge_helper; │ │ │ │ +517 * for more on @a hinting. │ │ │ │ +518 * │ │ │ │ +519 * Insertion requires amortized constant time. │ │ │ │ +520 */ │ │ │ │ +521 template │ │ │ │ +522 _i_t_e_r_a_t_o_r │ │ │ │ +_5_2_3 _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, │ │ │ │ +524 ___A_r_g_s&&... _____a_r_g_s) │ │ │ │ +525 { │ │ │ │ +526 return _M_h.try_emplace(_____h_i_n_t, _____k, │ │ │ │ +527 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...).first; │ │ │ │ +528 } │ │ │ │ +529 │ │ │ │ +530 // move-capable overload │ │ │ │ +531 template │ │ │ │ +532 _i_t_e_r_a_t_o_r │ │ │ │ +533 _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) │ │ │ │ +534 { │ │ │ │ +535 return _M_h.try_emplace(_____h_i_n_t, _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)...).first; │ │ │ │ +537 } │ │ │ │ +538#endif // __glibcxx_unordered_map_try_emplace │ │ │ │ +539 │ │ │ │ +540 ///@{ │ │ │ │ +541 /** │ │ │ │ +542 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ +543 │ │ │ │ +544 * @param __x Pair to be inserted (see std::make_pair for easy │ │ │ │ +545 * creation of pairs). │ │ │ │ +546 * │ │ │ │ +547 * @return A pair, of which the first element is an iterator that │ │ │ │ +548 * points to the possibly inserted pair, and the second is │ │ │ │ +549 * a bool that is true if the pair was actually inserted. │ │ │ │ +550 * │ │ │ │ +551 * This function attempts to insert a (key, value) %pair into the │ │ │ │ +552 * %unordered_map. An %unordered_map relies on unique keys and thus a │ │ │ │ +553 * %pair is only inserted if its first element (the key) is not already │ │ │ │ +554 * present in the %unordered_map. │ │ │ │ +555 * │ │ │ │ +556 * Insertion requires amortized constant time. │ │ │ │ +557 */ │ │ │ │ +558 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +_5_5_9 _i_n_s_e_r_t(const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ +560 { return _M_h.insert(__x); } │ │ │ │ +561 │ │ │ │ +562 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +563 // 2354. Unnecessary copying when inserting into maps with braced-init │ │ │ │ +564 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +_5_6_5 _i_n_s_e_r_t(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ +566 { return _M_h.insert(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ +567 │ │ │ │ +568 template │ │ │ │ +569 _____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, │ │ │ │ +570 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_>> │ │ │ │ +_5_7_1 _i_n_s_e_r_t(___P_a_i_r&& __x) │ │ │ │ +572 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ +573 ///@} │ │ │ │ +574 │ │ │ │ +575 ///@{ │ │ │ │ +576 /** │ │ │ │ +577 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ +578 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ +579 * pair should be inserted. │ │ │ │ +580 * @param __x Pair to be inserted (see std::make_pair for easy creation │ │ │ │ +581 * of pairs). │ │ │ │ +582 * @return An iterator that points to the element with key of │ │ │ │ +583 * @a __x (may or may not be the %pair passed in). │ │ │ │ +584 * │ │ │ │ +585 * This function is not concerned about whether the insertion took place, │ │ │ │ +586 * and thus does not return a boolean like the single-argument insert() │ │ │ │ +587 * does. Note that the first parameter is only a hint and can │ │ │ │ +588 * potentially improve the performance of the insertion process. A bad │ │ │ │ +589 * hint would cause no gains in efficiency. │ │ │ │ +590 * │ │ │ │ +591 * See │ │ │ │ +592 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ +associative.html#containers.associative.insert_hints │ │ │ │ +593 * for more on @a hinting. │ │ │ │ +594 * │ │ │ │ +595 * Insertion requires amortized constant time. │ │ │ │ +596 */ │ │ │ │ +597 _i_t_e_r_a_t_o_r │ │ │ │ +_5_9_8 _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) │ │ │ │ +599 { return _M_h.insert(_____h_i_n_t, __x); } │ │ │ │ 600 │ │ │ │ -601 template │ │ │ │ -602 void │ │ │ │ -603 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) │ │ │ │ -604 { │ │ │ │ -605 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_>; │ │ │ │ -606 _M_h._M_merge_unique(_Merge_helper::_S_get_table(_____s_o_u_r_c_e)); │ │ │ │ -607 } │ │ │ │ -608 │ │ │ │ -609 template │ │ │ │ -610 void │ │ │ │ -611 merge(unordered_set<_Value, _H2, _P2, _Alloc>&& __source) │ │ │ │ -612 { merge(__source); } │ │ │ │ -613 │ │ │ │ -614 template │ │ │ │ -615 void │ │ │ │ -616 merge(unordered_multiset<_Value, _H2, _P2, _Alloc>& __source) │ │ │ │ -617 { │ │ │ │ -618 using _Merge_helper = _Hash_merge_helper; │ │ │ │ -619 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ -620 } │ │ │ │ -621 │ │ │ │ -622 template │ │ │ │ +601 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +602 // 2354. Unnecessary copying when inserting into maps with braced-init │ │ │ │ +603 _i_t_e_r_a_t_o_r │ │ │ │ +_6_0_4 _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) │ │ │ │ +605 { return _M_h.insert(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ +606 │ │ │ │ +607 template │ │ │ │ +608 _____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_0_9 _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) │ │ │ │ +610 { return _M_h.emplace_hint(_____h_i_n_t, _s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ +611 ///@} │ │ │ │ +612 │ │ │ │ +613 /** │ │ │ │ +614 * @brief A template function that attempts to insert a range of │ │ │ │ +615 * elements. │ │ │ │ +616 * @param __first Iterator pointing to the start of the range to be │ │ │ │ +617 * inserted. │ │ │ │ +618 * @param __last Iterator pointing to the end of the range. │ │ │ │ +619 * │ │ │ │ +620 * Complexity similar to that of the range constructor. │ │ │ │ +621 */ │ │ │ │ +622 template │ │ │ │ 623 void │ │ │ │ -624 merge(unordered_multiset<_Value, _H2, _P2, _Alloc>&& __source) │ │ │ │ -625 { merge(__source); } │ │ │ │ -626#endif // node_extract │ │ │ │ -627 │ │ │ │ -628 // observers. │ │ │ │ -629 │ │ │ │ -630 /// Returns the hash functor object with which the %unordered_set was │ │ │ │ -631 /// constructed. │ │ │ │ -632 _h_a_s_h_e_r │ │ │ │ -_6_3_3 _h_a_s_h___f_u_n_c_t_i_o_n() const │ │ │ │ -634 { return _M_h.hash_function(); } │ │ │ │ -635 │ │ │ │ -636 /// Returns the key comparison object with which the %unordered_set was │ │ │ │ -637 /// constructed. │ │ │ │ -638 _k_e_y___e_q_u_a_l │ │ │ │ -_6_3_9 _k_e_y___e_q() const │ │ │ │ -640 { return _M_h.key_eq(); } │ │ │ │ -641 │ │ │ │ -642 // lookup. │ │ │ │ -643 │ │ │ │ -644 ///@{ │ │ │ │ -645 /** │ │ │ │ -646 * @brief Tries to locate an element in an %unordered_set. │ │ │ │ -647 * @param __x Element to be located. │ │ │ │ -648 * @return Iterator pointing to sought-after element, or end() if not │ │ │ │ -649 * found. │ │ │ │ +_6_2_4 _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) │ │ │ │ +625 { _M_h.insert(__first, __last); } │ │ │ │ +626 │ │ │ │ +627 /** │ │ │ │ +628 * @brief Attempts to insert a list of elements into the %unordered_map. │ │ │ │ +629 * @param __l A std::initializer_list of elements │ │ │ │ +630 * to be inserted. │ │ │ │ +631 * │ │ │ │ +632 * Complexity similar to that of the range constructor. │ │ │ │ +633 */ │ │ │ │ +634 void │ │ │ │ +_6_3_5 _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) │ │ │ │ +636 { _M_h.insert(_____l); } │ │ │ │ +637 │ │ │ │ +638 │ │ │ │ +639#ifdef __glibcxx_unordered_map_try_emplace // >= C++17 && HOSTED │ │ │ │ +640 /** │ │ │ │ +641 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ +642 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ +643 * the map. │ │ │ │ +644 * @param __obj Argument used to generate the .second for a pair │ │ │ │ +645 * instance. │ │ │ │ +646 * │ │ │ │ +647 * @return A pair, of which the first element is an iterator that │ │ │ │ +648 * points to the possibly inserted pair, and the second is │ │ │ │ +649 * a bool that is true if the pair was actually inserted. │ │ │ │ 650 * │ │ │ │ -651 * This function takes a key and tries to locate the element with which │ │ │ │ -652 * the key matches. If successful the function returns an iterator │ │ │ │ -653 * pointing to the sought after element. If unsuccessful it returns the │ │ │ │ -654 * past-the-end ( @c end() ) iterator. │ │ │ │ -655 */ │ │ │ │ -656 _i_t_e_r_a_t_o_r │ │ │ │ -_6_5_7 _f_i_n_d(const _k_e_y___t_y_p_e& __x) │ │ │ │ -658 { return _M_h.find(__x); } │ │ │ │ -659 │ │ │ │ -660#if __cplusplus > 201703L │ │ │ │ -661 template │ │ │ │ -662 auto │ │ │ │ -_6_6_3 _f_i_n_d(const ___K_t& _____k) │ │ │ │ -664 -> decltype(_M_h._M_find_tr(_____k)) │ │ │ │ -665 { return _M_h._M_find_tr(_____k); } │ │ │ │ -666#endif │ │ │ │ -667 │ │ │ │ -668 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_6_6_9 _f_i_n_d(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -670 { return _M_h.find(__x); } │ │ │ │ -671 │ │ │ │ -672#if __cplusplus > 201703L │ │ │ │ -673 template │ │ │ │ -674 auto │ │ │ │ -_6_7_5 _f_i_n_d(const ___K_t& _____k) const │ │ │ │ -676 -> decltype(_M_h._M_find_tr(_____k)) │ │ │ │ -677 { return _M_h._M_find_tr(_____k); } │ │ │ │ -678#endif │ │ │ │ -679 ///@} │ │ │ │ -680 │ │ │ │ -681 ///@{ │ │ │ │ -682 /** │ │ │ │ -683 * @brief Finds the number of elements. │ │ │ │ -684 * @param __x Element to located. │ │ │ │ -685 * @return Number of elements with specified key. │ │ │ │ -686 * │ │ │ │ -687 * This function only makes sense for unordered_multisets; for │ │ │ │ -688 * unordered_set the result will either be 0 (not present) or 1 │ │ │ │ -689 * (present). │ │ │ │ -690 */ │ │ │ │ -691 _s_i_z_e___t_y_p_e │ │ │ │ -_6_9_2 _c_o_u_n_t(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -693 { return _M_h.count(__x); } │ │ │ │ -694 │ │ │ │ -695#if __cplusplus > 201703L │ │ │ │ -696 template │ │ │ │ -697 auto │ │ │ │ -_6_9_8 _c_o_u_n_t(const ___K_t& _____k) const │ │ │ │ -699 -> decltype(_M_h._M_count_tr(_____k)) │ │ │ │ -700 { return _M_h._M_count_tr(_____k); } │ │ │ │ -701#endif │ │ │ │ -702 ///@} │ │ │ │ -703 │ │ │ │ -704#if __cplusplus > 201703L │ │ │ │ -705 ///@{ │ │ │ │ -706 /** │ │ │ │ -707 * @brief Finds whether an element with the given key exists. │ │ │ │ -708 * @param __x Key of elements to be located. │ │ │ │ -709 * @return True if there is any element with the specified key. │ │ │ │ -710 */ │ │ │ │ -711 bool │ │ │ │ -_7_1_2 _c_o_n_t_a_i_n_s(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -713 { return _M_h.find(__x) != _M_h.end(); } │ │ │ │ -714 │ │ │ │ -715 template │ │ │ │ -716 auto │ │ │ │ -_7_1_7 _c_o_n_t_a_i_n_s(const ___K_t& _____k) const │ │ │ │ -718 -> decltype(_M_h._M_find_tr(_____k), _v_o_i_d(), true) │ │ │ │ -719 { return _M_h._M_find_tr(_____k) != _M_h.end(); } │ │ │ │ -720 ///@} │ │ │ │ -721#endif │ │ │ │ -722 │ │ │ │ -723 ///@{ │ │ │ │ -724 /** │ │ │ │ -725 * @brief Finds a subsequence matching given key. │ │ │ │ -726 * @param __x Key to be located. │ │ │ │ -727 * @return Pair of iterators that possibly points to the subsequence │ │ │ │ -728 * matching given key. │ │ │ │ -729 * │ │ │ │ -730 * This function probably only makes sense for multisets. │ │ │ │ -731 */ │ │ │ │ -732 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _i_t_e_r_a_t_o_r_> │ │ │ │ -_7_3_3 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -734 { return _M_h.equal_range(__x); } │ │ │ │ -735 │ │ │ │ -736#if __cplusplus > 201703L │ │ │ │ -737 template │ │ │ │ -738 auto │ │ │ │ -_7_3_9 _e_q_u_a_l___r_a_n_g_e(const ___K_t& _____k) │ │ │ │ -740 -> decltype(_M_h._M_equal_range_tr(_____k)) │ │ │ │ -741 { return _M_h._M_equal_range_tr(_____k); } │ │ │ │ -742#endif │ │ │ │ -743 │ │ │ │ -744 _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_> │ │ │ │ -_7_4_5 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -746 { return _M_h.equal_range(__x); } │ │ │ │ -747 │ │ │ │ -748#if __cplusplus > 201703L │ │ │ │ -749 template │ │ │ │ -750 auto │ │ │ │ -_7_5_1 _e_q_u_a_l___r_a_n_g_e(const ___K_t& _____k) const │ │ │ │ -752 -> decltype(_M_h._M_equal_range_tr(_____k)) │ │ │ │ -753 { return _M_h._M_equal_range_tr(_____k); } │ │ │ │ -754#endif │ │ │ │ +651 * This function attempts to insert a (key, value) %pair into the │ │ │ │ +652 * %unordered_map. An %unordered_map relies on unique keys and thus a │ │ │ │ +653 * %pair is only inserted if its first element (the key) is not already │ │ │ │ +654 * present in the %unordered_map. │ │ │ │ +655 * If the %pair was already in the %unordered_map, the .second of │ │ │ │ +656 * the %pair is assigned from __obj. │ │ │ │ +657 * │ │ │ │ +658 * Insertion requires amortized constant time. │ │ │ │ +659 */ │ │ │ │ +660 template │ │ │ │ +661 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +_6_6_2 _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) │ │ │ │ +663 { │ │ │ │ +664 auto _____r_e_t = _M_h.try_emplace(_c_e_n_d(), _____k, │ │ │ │ +665 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j)); │ │ │ │ +666 if (!_____r_e_t.second) │ │ │ │ +667 _____r_e_t.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j); │ │ │ │ +668 return _____r_e_t; │ │ │ │ +669 } │ │ │ │ +670 │ │ │ │ +671 // move-capable overload │ │ │ │ +672 template │ │ │ │ +673 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +674 _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) │ │ │ │ +675 { │ │ │ │ +676 auto _____r_e_t = _M_h.try_emplace(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(_____k), │ │ │ │ +677 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j)); │ │ │ │ +678 if (!_____r_e_t.second) │ │ │ │ +679 _____r_e_t.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j); │ │ │ │ +680 return _____r_e_t; │ │ │ │ +681 } │ │ │ │ +682 │ │ │ │ +683 /** │ │ │ │ +684 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ +685 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ +686 * pair should be inserted. │ │ │ │ +687 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ +688 * the unordered_map. │ │ │ │ +689 * @param __obj Argument used to generate the .second for a pair │ │ │ │ +690 * instance. │ │ │ │ +691 * @return An iterator that points to the element with key of │ │ │ │ +692 * @a __x (may or may not be the %pair passed in). │ │ │ │ +693 * │ │ │ │ +694 * This function is not concerned about whether the insertion took place, │ │ │ │ +695 * and thus does not return a boolean like the single-argument insert() │ │ │ │ +696 * does. │ │ │ │ +697 * If the %pair was already in the %unordered map, the .second of │ │ │ │ +698 * the %pair is assigned from __obj. │ │ │ │ +699 * Note that the first parameter is only a hint and can │ │ │ │ +700 * potentially improve the performance of the insertion process. A bad │ │ │ │ +701 * hint would cause no gains in efficiency. │ │ │ │ +702 * │ │ │ │ +703 * See │ │ │ │ +704 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ +associative.html#containers.associative.insert_hints │ │ │ │ +705 * for more on @a hinting. │ │ │ │ +706 * │ │ │ │ +707 * Insertion requires amortized constant time. │ │ │ │ +708 */ │ │ │ │ +709 template │ │ │ │ +710 _i_t_e_r_a_t_o_r │ │ │ │ +_7_1_1 _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, │ │ │ │ +712 _Obj&& _____o_b_j) │ │ │ │ +713 { │ │ │ │ +714 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)); │ │ │ │ +715 if (!_____r_e_t.second) │ │ │ │ +716 _____r_e_t.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j); │ │ │ │ +717 return _____r_e_t.first; │ │ │ │ +718 } │ │ │ │ +719 │ │ │ │ +720 // move-capable overload │ │ │ │ +721 template │ │ │ │ +722 _i_t_e_r_a_t_o_r │ │ │ │ +723 _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) │ │ │ │ +724 { │ │ │ │ +725 auto _____r_e_t = _M_h.try_emplace(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(_____k), │ │ │ │ +726 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j)); │ │ │ │ +727 if (!_____r_e_t.second) │ │ │ │ +728 _____r_e_t.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j); │ │ │ │ +729 return _____r_e_t.first; │ │ │ │ +730 } │ │ │ │ +731#endif // unordered_map_try_emplace │ │ │ │ +732 │ │ │ │ +733 ///@{ │ │ │ │ +734 /** │ │ │ │ +735 * @brief Erases an element from an %unordered_map. │ │ │ │ +736 * @param __position An iterator pointing to the element to be erased. │ │ │ │ +737 * @return An iterator pointing to the element immediately following │ │ │ │ +738 * @a __position prior to the element being erased. If no such │ │ │ │ +739 * element exists, end() is returned. │ │ │ │ +740 * │ │ │ │ +741 * This function erases an element, pointed to by the given iterator, │ │ │ │ +742 * from an %unordered_map. │ │ │ │ +743 * Note that this function only erases the element, and that if the │ │ │ │ +744 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ +745 * any way. Managing the pointer is the user's responsibility. │ │ │ │ +746 */ │ │ │ │ +747 _i_t_e_r_a_t_o_r │ │ │ │ +_7_4_8 _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) │ │ │ │ +749 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ +750 │ │ │ │ +751 // LWG 2059. │ │ │ │ +752 _i_t_e_r_a_t_o_r │ │ │ │ +_7_5_3 _e_r_a_s_e(_i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n) │ │ │ │ +754 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ 755 ///@} │ │ │ │ 756 │ │ │ │ -757 // bucket interface. │ │ │ │ -758 │ │ │ │ -759 /// Returns the number of buckets of the %unordered_set. │ │ │ │ -760 _s_i_z_e___t_y_p_e │ │ │ │ -_7_6_1 _b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ -762 { return _M_h.bucket_count(); } │ │ │ │ -763 │ │ │ │ -764 /// Returns the maximum number of buckets of the %unordered_set. │ │ │ │ -765 _s_i_z_e___t_y_p_e │ │ │ │ -_7_6_6 _m_a_x___b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ -767 { return _M_h.max_bucket_count(); } │ │ │ │ -768 │ │ │ │ -769 /* │ │ │ │ -770 * @brief Returns the number of elements in a given bucket. │ │ │ │ -771 * @param __n A bucket index. │ │ │ │ -772 * @return The number of elements in the bucket. │ │ │ │ -773 */ │ │ │ │ -774 _s_i_z_e___t_y_p_e │ │ │ │ -775 bucket_size(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -776 { return _M_h.bucket_size(__n); } │ │ │ │ -777 │ │ │ │ -778 /* │ │ │ │ -779 * @brief Returns the bucket index of a given element. │ │ │ │ -780 * @param __key A key instance. │ │ │ │ -781 * @return The key bucket index. │ │ │ │ -782 */ │ │ │ │ -783 _s_i_z_e___t_y_p_e │ │ │ │ -784 bucket(const _k_e_y___t_y_p_e& __key) const │ │ │ │ -785 { return _M_h.bucket(__key); } │ │ │ │ -786 │ │ │ │ -787 ///@{ │ │ │ │ -788 /** │ │ │ │ -789 * @brief Returns a read-only (constant) iterator pointing to the first │ │ │ │ -790 * bucket element. │ │ │ │ -791 * @param __n The bucket index. │ │ │ │ -792 * @return A read-only local iterator. │ │ │ │ -793 */ │ │ │ │ -794 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_7_9_5 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) │ │ │ │ -796 { return _M_h.begin(__n); } │ │ │ │ -797 │ │ │ │ -798 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_7_9_9 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -800 { return _M_h.begin(__n); } │ │ │ │ -801 │ │ │ │ -802 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_8_0_3 _c_b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -804 { return _M_h.cbegin(__n); } │ │ │ │ -805 ///@} │ │ │ │ -806 │ │ │ │ -807 ///@{ │ │ │ │ -808 /** │ │ │ │ -809 * @brief Returns a read-only (constant) iterator pointing to one past │ │ │ │ -810 * the last bucket elements. │ │ │ │ -811 * @param __n The bucket index. │ │ │ │ -812 * @return A read-only local iterator. │ │ │ │ -813 */ │ │ │ │ -814 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_8_1_5 _e_n_d(_s_i_z_e___t_y_p_e __n) │ │ │ │ -816 { return _M_h.end(__n); } │ │ │ │ -817 │ │ │ │ -818 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_8_1_9 _e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -820 { return _M_h.end(__n); } │ │ │ │ -821 │ │ │ │ -822 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_8_2_3 _c_e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -824 { return _M_h.cend(__n); } │ │ │ │ -825 ///@} │ │ │ │ -826 │ │ │ │ -827 // hash policy. │ │ │ │ -828 │ │ │ │ -829 /// Returns the average number of elements per bucket. │ │ │ │ -830 float │ │ │ │ -_8_3_1 _l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -832 { return _M_h.load_factor(); } │ │ │ │ -833 │ │ │ │ -834 /// Returns a positive number that the %unordered_set tries to keep the │ │ │ │ -835 /// load factor less than or equal to. │ │ │ │ -836 float │ │ │ │ -_8_3_7 _m_a_x___l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -838 { return _M_h.max_load_factor(); } │ │ │ │ -839 │ │ │ │ -840 /** │ │ │ │ -841 * @brief Change the %unordered_set maximum load factor. │ │ │ │ -842 * @param __z The new maximum load factor. │ │ │ │ -843 */ │ │ │ │ -844 void │ │ │ │ -_8_4_5 _m_a_x___l_o_a_d___f_a_c_t_o_r(float _____z) │ │ │ │ -846 { _M_h.max_load_factor(_____z); } │ │ │ │ -847 │ │ │ │ -848 /** │ │ │ │ -849 * @brief May rehash the %unordered_set. │ │ │ │ -850 * @param __n The new number of buckets. │ │ │ │ -851 * │ │ │ │ -852 * Rehash will occur only if the new number of buckets respect the │ │ │ │ -853 * %unordered_set maximum load factor. │ │ │ │ -854 */ │ │ │ │ -855 void │ │ │ │ -_8_5_6 _r_e_h_a_s_h(_s_i_z_e___t_y_p_e __n) │ │ │ │ -857 { _M_h.rehash(__n); } │ │ │ │ -858 │ │ │ │ -859 /** │ │ │ │ -860 * @brief Prepare the %unordered_set for a specified number of │ │ │ │ -861 * elements. │ │ │ │ -862 * @param __n Number of elements required. │ │ │ │ -863 * │ │ │ │ -864 * Same as rehash(ceil(n / max_load_factor())). │ │ │ │ -865 */ │ │ │ │ -866 void │ │ │ │ -_8_6_7 _r_e_s_e_r_v_e(_s_i_z_e___t_y_p_e __n) │ │ │ │ -868 { _M_h.reserve(__n); } │ │ │ │ -869 │ │ │ │ -870 template │ │ │ │ -872 friend bool │ │ │ │ -873 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_>&, │ │ │ │ -874 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_>&); │ │ │ │ -875 }; │ │ │ │ -876 │ │ │ │ -877#if __cpp_deduction_guides >= 201606 │ │ │ │ +757 /** │ │ │ │ +758 * @brief Erases elements according to the provided key. │ │ │ │ +759 * @param __x Key of element to be erased. │ │ │ │ +760 * @return The number of elements erased. │ │ │ │ +761 * │ │ │ │ +762 * This function erases all the elements located by the given key from │ │ │ │ +763 * an %unordered_map. For an %unordered_map the result of this function │ │ │ │ +764 * can only be 0 (not present) or 1 (present). │ │ │ │ +765 * Note that this function only erases the element, and that if the │ │ │ │ +766 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ +767 * any way. Managing the pointer is the user's responsibility. │ │ │ │ +768 */ │ │ │ │ +769 _s_i_z_e___t_y_p_e │ │ │ │ +_7_7_0 _e_r_a_s_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ +771 { return _M_h.erase(__x); } │ │ │ │ +772 │ │ │ │ +773 /** │ │ │ │ +774 * @brief Erases a [__first,__last) range of elements from an │ │ │ │ +775 * %unordered_map. │ │ │ │ +776 * @param __first Iterator pointing to the start of the range to be │ │ │ │ +777 * erased. │ │ │ │ +778 * @param __last Iterator pointing to the end of the range to │ │ │ │ +779 * be erased. │ │ │ │ +780 * @return The iterator @a __last. │ │ │ │ +781 * │ │ │ │ +782 * This function erases a sequence of elements from an %unordered_map. │ │ │ │ +783 * Note that this function only erases the elements, and that if │ │ │ │ +784 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ +785 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ +786 */ │ │ │ │ +787 _i_t_e_r_a_t_o_r │ │ │ │ +_7_8_8 _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) │ │ │ │ +789 { return _M_h.erase(__first, __last); } │ │ │ │ +790 │ │ │ │ +791 /** │ │ │ │ +792 * Erases all elements in an %unordered_map. │ │ │ │ +793 * Note that this function only erases the elements, and that if the │ │ │ │ +794 * elements themselves are pointers, the pointed-to memory is not touched │ │ │ │ +795 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ +796 */ │ │ │ │ +797 void │ │ │ │ +_7_9_8 _c_l_e_a_r() noexcept │ │ │ │ +799 { _M_h.clear(); } │ │ │ │ +800 │ │ │ │ +801 /** │ │ │ │ +802 * @brief Swaps data with another %unordered_map. │ │ │ │ +803 * @param __x An %unordered_map of the same element and allocator │ │ │ │ +804 * types. │ │ │ │ +805 * │ │ │ │ +806 * This exchanges the elements between two %unordered_map in constant │ │ │ │ +807 * time. │ │ │ │ +808 * Note that the global std::swap() function is specialized such that │ │ │ │ +809 * std::swap(m1,m2) will feed to this function. │ │ │ │ +810 */ │ │ │ │ +811 void │ │ │ │ +_8_1_2 _s_w_a_p(_u_n_o_r_d_e_r_e_d___m_a_p& __x) │ │ │ │ +813 noexcept( noexcept(_M_h.swap(__x._M_h)) ) │ │ │ │ +814 { _M_h.swap(__x._M_h); } │ │ │ │ +815 │ │ │ │ +816#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +817 template │ │ │ │ +818 friend class std::_Hash_merge_helper; │ │ │ │ +819 │ │ │ │ +820 template │ │ │ │ +821 void │ │ │ │ +822 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) │ │ │ │ +823 { │ │ │ │ +824 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_>; │ │ │ │ +825 _M_h._M_merge_unique(_Merge_helper::_S_get_table(_____s_o_u_r_c_e)); │ │ │ │ +826 } │ │ │ │ +827 │ │ │ │ +828 template │ │ │ │ +829 void │ │ │ │ +830 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ +831 { merge(__source); } │ │ │ │ +832 │ │ │ │ +833 template │ │ │ │ +834 void │ │ │ │ +835 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>& __source) │ │ │ │ +836 { │ │ │ │ +837 using _Merge_helper = _Hash_merge_helper; │ │ │ │ +838 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ +839 } │ │ │ │ +840 │ │ │ │ +841 template │ │ │ │ +842 void │ │ │ │ +843 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ +844 { merge(__source); } │ │ │ │ +845#endif // node_extract │ │ │ │ +846 │ │ │ │ +847 // observers. │ │ │ │ +848 │ │ │ │ +849 /// Returns the hash functor object with which the %unordered_map was │ │ │ │ +850 /// constructed. │ │ │ │ +851 _h_a_s_h_e_r │ │ │ │ +_8_5_2 _h_a_s_h___f_u_n_c_t_i_o_n() const │ │ │ │ +853 { return _M_h.hash_function(); } │ │ │ │ +854 │ │ │ │ +855 /// Returns the key comparison object with which the %unordered_map was │ │ │ │ +856 /// constructed. │ │ │ │ +857 _k_e_y___e_q_u_a_l │ │ │ │ +_8_5_8 _k_e_y___e_q() const │ │ │ │ +859 { return _M_h.key_eq(); } │ │ │ │ +860 │ │ │ │ +861 // lookup. │ │ │ │ +862 │ │ │ │ +863 ///@{ │ │ │ │ +864 /** │ │ │ │ +865 * @brief Tries to locate an element in an %unordered_map. │ │ │ │ +866 * @param __x Key to be located. │ │ │ │ +867 * @return Iterator pointing to sought-after element, or end() if not │ │ │ │ +868 * found. │ │ │ │ +869 * │ │ │ │ +870 * This function takes a key and tries to locate the element with which │ │ │ │ +871 * the key matches. If successful the function returns an iterator │ │ │ │ +872 * pointing to the sought after element. If unsuccessful it returns the │ │ │ │ +873 * past-the-end ( @c end() ) iterator. │ │ │ │ +874 */ │ │ │ │ +875 _i_t_e_r_a_t_o_r │ │ │ │ +_8_7_6 _f_i_n_d(const _k_e_y___t_y_p_e& __x) │ │ │ │ +877 { return _M_h.find(__x); } │ │ │ │ 878 │ │ │ │ -879 template::value_type>, │ │ │ │ -882 typename _Pred = │ │ │ │ -883 equal_to::value_type>, │ │ │ │ -884 typename _Allocator = │ │ │ │ -885 allocator::value_type>, │ │ │ │ -886 typename = _RequireInputIter<_InputIterator>, │ │ │ │ -887 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -888 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -889 typename = _RequireAllocator<_Allocator>> │ │ │ │ -890 unordered_set(_InputIterator, _InputIterator, │ │ │ │ -891 _u_n_o_r_d_e_r_e_d___s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e = {}, │ │ │ │ -892 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ -893 -> unordered_set::value_type, │ │ │ │ -894 _Hash, _Pred, _Allocator>; │ │ │ │ -895 │ │ │ │ -896 template, │ │ │ │ -897 typename _Pred = equal_to<_Tp>, │ │ │ │ -898 typename _Allocator = allocator<_Tp>, │ │ │ │ -899 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -900 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -901 typename = _RequireAllocator<_Allocator>> │ │ │ │ -902 unordered_set(initializer_list<_Tp>, │ │ │ │ -903 _u_n_o_r_d_e_r_e_d___s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e = {}, │ │ │ │ -904 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ -905 -> unordered_set<_Tp, _Hash, _Pred, _Allocator>; │ │ │ │ -906 │ │ │ │ -907 template, │ │ │ │ -909 typename = _RequireAllocator<_Allocator>> │ │ │ │ -910 unordered_set(_InputIterator, _InputIterator, │ │ │ │ -911 _u_n_o_r_d_e_r_e_d___s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e, _Allocator) │ │ │ │ -912 -> unordered_set::value_type, │ │ │ │ -913 hash< │ │ │ │ -914 typename iterator_traits<_InputIterator>::value_type>, │ │ │ │ -915 equal_to< │ │ │ │ -916 typename iterator_traits<_InputIterator>::value_type>, │ │ │ │ -917 _Allocator>; │ │ │ │ -918 │ │ │ │ -919 template, │ │ │ │ -921 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -922 typename = _RequireAllocator<_Allocator>> │ │ │ │ -923 unordered_set(_InputIterator, _InputIterator, │ │ │ │ -924 _u_n_o_r_d_e_r_e_d___s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e, │ │ │ │ -925 _Hash, _Allocator) │ │ │ │ -926 -> unordered_set::value_type, │ │ │ │ -927 _Hash, │ │ │ │ -928 equal_to< │ │ │ │ -929 typename iterator_traits<_InputIterator>::value_type>, │ │ │ │ -930 _Allocator>; │ │ │ │ -931 │ │ │ │ -932 template> │ │ │ │ -934 unordered_set(initializer_list<_Tp>, │ │ │ │ -935 _u_n_o_r_d_e_r_e_d___s_e_t_<_i_n_t_>_:_:_s_i_z_e___t_y_p_e, _Allocator) │ │ │ │ -936 -> unordered_set<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>; │ │ │ │ -937 │ │ │ │ -938 template, │ │ │ │ -940 typename = _RequireAllocator<_Allocator>> │ │ │ │ -941 unordered_set(initializer_list<_Tp>, │ │ │ │ -942 _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) │ │ │ │ -943 -> unordered_set<_Tp, _Hash, equal_to<_Tp>, _Allocator>; │ │ │ │ -944 │ │ │ │ -945#endif │ │ │ │ -946 │ │ │ │ -947 /** │ │ │ │ -948 * @brief A standard container composed of equivalent keys │ │ │ │ -949 * (possibly containing multiple of each key value) in which the │ │ │ │ -950 * elements' keys are the elements themselves. │ │ │ │ -951 * │ │ │ │ -952 * @ingroup unordered_associative_containers │ │ │ │ -953 * @headerfile unordered_set │ │ │ │ -954 * @since C++11 │ │ │ │ -955 * │ │ │ │ -956 * @tparam _Value Type of key objects. │ │ │ │ -957 * @tparam _Hash Hashing function object type, defaults to hash<_Value>. │ │ │ │ -958 * @tparam _Pred Predicate function object type, defaults │ │ │ │ -959 * to equal_to<_Value>. │ │ │ │ -960 * @tparam _Alloc Allocator type, defaults to allocator<_Key>. │ │ │ │ -961 * │ │ │ │ -962 * Meets the requirements of a container, and │ │ │ │ -963 * unordered associative container │ │ │ │ -964 * │ │ │ │ -965 * Base is _Hashtable, dispatched at compile time via template │ │ │ │ -966 * alias __umset_hashtable. │ │ │ │ -967 */ │ │ │ │ -968 template, │ │ │ │ -970 typename _Pred = equal_to<_Value>, │ │ │ │ -971 typename _Alloc = allocator<_Value>> │ │ │ │ -_9_7_2 class _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t │ │ │ │ -973 { │ │ │ │ -974 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; │ │ │ │ -975 ___H_a_s_h_t_a_b_l_e _M_h; │ │ │ │ -976 │ │ │ │ -977 public: │ │ │ │ -978 // typedefs: │ │ │ │ -979 ///@{ │ │ │ │ -980 /// Public typedefs. │ │ │ │ -_9_8_1 typedef typename _Hashtable::key_type _k_e_y___t_y_p_e; │ │ │ │ -_9_8_2 typedef typename _Hashtable::value_type _v_a_l_u_e___t_y_p_e; │ │ │ │ -_9_8_3 typedef typename _Hashtable::hasher _h_a_s_h_e_r; │ │ │ │ -_9_8_4 typedef typename _Hashtable::key_equal _k_e_y___e_q_u_a_l; │ │ │ │ -_9_8_5 typedef typename _Hashtable::allocator_type _a_l_l_o_c_a_t_o_r___t_y_p_e; │ │ │ │ -986 ///@} │ │ │ │ -987 │ │ │ │ -988 ///@{ │ │ │ │ -989 /// Iterator-related typedefs. │ │ │ │ -_9_9_0 typedef typename _Hashtable::pointer _p_o_i_n_t_e_r; │ │ │ │ -_9_9_1 typedef typename _Hashtable::const_pointer _c_o_n_s_t___p_o_i_n_t_e_r; │ │ │ │ -_9_9_2 typedef typename _Hashtable::reference _r_e_f_e_r_e_n_c_e; │ │ │ │ -_9_9_3 typedef typename _Hashtable::const_reference _c_o_n_s_t___r_e_f_e_r_e_n_c_e; │ │ │ │ -_9_9_4 typedef typename _Hashtable::iterator _i_t_e_r_a_t_o_r; │ │ │ │ -_9_9_5 typedef typename _Hashtable::const_iterator _c_o_n_s_t___i_t_e_r_a_t_o_r; │ │ │ │ -_9_9_6 typedef typename _Hashtable::local_iterator _l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ -_9_9_7 typedef typename _Hashtable::const_local_iterator _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ -_9_9_8 typedef typename _Hashtable::size_type _s_i_z_e___t_y_p_e; │ │ │ │ -_9_9_9 typedef typename _Hashtable::difference_type _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ -1000 ///@} │ │ │ │ -1001 │ │ │ │ -1002#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -1003 using node_type = typename _Hashtable::node_type; │ │ │ │ -1004#endif │ │ │ │ -1005 │ │ │ │ -1006 // construct/destroy/copy │ │ │ │ -1007 │ │ │ │ -1008 /// Default constructor. │ │ │ │ -_1_0_0_9 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t() = default; │ │ │ │ -1010 │ │ │ │ -1011 /** │ │ │ │ -1012 * @brief Default constructor creates no elements. │ │ │ │ -1013 * @param __n Minimal initial number of buckets. │ │ │ │ -1014 * @param __hf A hash functor. │ │ │ │ -1015 * @param __eql A key equality functor. │ │ │ │ -1016 * @param __a An allocator object. │ │ │ │ -1017 */ │ │ │ │ -1018 explicit │ │ │ │ -_1_0_1_9 _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, │ │ │ │ -1020 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -1021 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ -1022 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()) │ │ │ │ -1023 : _M_h(__n, _____h_f, _____e_q_l, __a) │ │ │ │ -1024 { } │ │ │ │ -1025 │ │ │ │ -1026 /** │ │ │ │ -1027 * @brief Builds an %unordered_multiset from a range. │ │ │ │ -1028 * @param __first An input iterator. │ │ │ │ -1029 * @param __last An input iterator. │ │ │ │ -1030 * @param __n Minimal initial number of buckets. │ │ │ │ -1031 * @param __hf A hash functor. │ │ │ │ -1032 * @param __eql A key equality functor. │ │ │ │ -1033 * @param __a An allocator object. │ │ │ │ -1034 * │ │ │ │ -1035 * Create an %unordered_multiset consisting of copies of the elements │ │ │ │ -1036 * from [__first,__last). This is linear in N (where N is │ │ │ │ -1037 * distance(__first,__last)). │ │ │ │ -1038 */ │ │ │ │ -1039 template │ │ │ │ -_1_0_4_0 _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, │ │ │ │ -1041 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -1042 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -1043 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ -1044 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()) │ │ │ │ -1045 : _M_h(__first, __last, __n, _____h_f, _____e_q_l, __a) │ │ │ │ -1046 { } │ │ │ │ -1047 │ │ │ │ -1048 /// Copy constructor. │ │ │ │ -_1_0_4_9 _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; │ │ │ │ -1050 │ │ │ │ -1051 /// Move constructor. │ │ │ │ -_1_0_5_2 _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; │ │ │ │ -1053 │ │ │ │ -1054 /** │ │ │ │ -1055 * @brief Builds an %unordered_multiset from an initializer_list. │ │ │ │ -1056 * @param __l An initializer_list. │ │ │ │ -1057 * @param __n Minimal initial number of buckets. │ │ │ │ -1058 * @param __hf A hash functor. │ │ │ │ -1059 * @param __eql A key equality functor. │ │ │ │ -1060 * @param __a An allocator object. │ │ │ │ -1061 * │ │ │ │ -1062 * Create an %unordered_multiset consisting of copies of the elements in │ │ │ │ -1063 * the list. This is linear in N (where N is @a __l.size()). │ │ │ │ -1064 */ │ │ │ │ -_1_0_6_5 _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, │ │ │ │ -1066 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -1067 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -1068 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ -1069 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()) │ │ │ │ -1070 : _M_h(_____l, __n, _____h_f, _____e_q_l, __a) │ │ │ │ -1071 { } │ │ │ │ -1072 │ │ │ │ -1073 /// Copy assignment operator. │ │ │ │ -1074 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t& │ │ │ │ -_1_0_7_5 _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; │ │ │ │ -1076 │ │ │ │ -1077 /// Move assignment operator. │ │ │ │ -1078 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t& │ │ │ │ -_1_0_7_9 _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; │ │ │ │ -1080 │ │ │ │ -1081 /** │ │ │ │ -1082 * @brief Creates an %unordered_multiset with no elements. │ │ │ │ -1083 * @param __a An allocator object. │ │ │ │ +879#if __cplusplus > 201703L │ │ │ │ +880 template │ │ │ │ +881 auto │ │ │ │ +_8_8_2 _f_i_n_d(const ___K_t& __x) -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ +883 { return _M_h._M_find_tr(__x); } │ │ │ │ +884#endif │ │ │ │ +885 │ │ │ │ +886 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_8_8_7 _f_i_n_d(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +888 { return _M_h.find(__x); } │ │ │ │ +889 │ │ │ │ +890#if __cplusplus > 201703L │ │ │ │ +891 template │ │ │ │ +892 auto │ │ │ │ +_8_9_3 _f_i_n_d(const ___K_t& __x) const -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ +894 { return _M_h._M_find_tr(__x); } │ │ │ │ +895#endif │ │ │ │ +896 ///@} │ │ │ │ +897 │ │ │ │ +898 ///@{ │ │ │ │ +899 /** │ │ │ │ +900 * @brief Finds the number of elements. │ │ │ │ +901 * @param __x Key to count. │ │ │ │ +902 * @return Number of elements with specified key. │ │ │ │ +903 * │ │ │ │ +904 * This function only makes sense for %unordered_multimap; for │ │ │ │ +905 * %unordered_map the result will either be 0 (not present) or 1 │ │ │ │ +906 * (present). │ │ │ │ +907 */ │ │ │ │ +908 _s_i_z_e___t_y_p_e │ │ │ │ +_9_0_9 _c_o_u_n_t(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +910 { return _M_h.count(__x); } │ │ │ │ +911 │ │ │ │ +912#if __cplusplus > 201703L │ │ │ │ +913 template │ │ │ │ +914 auto │ │ │ │ +_9_1_5 _c_o_u_n_t(const ___K_t& __x) const -> decltype(_M_h._M_count_tr(__x)) │ │ │ │ +916 { return _M_h._M_count_tr(__x); } │ │ │ │ +917#endif │ │ │ │ +918 ///@} │ │ │ │ +919 │ │ │ │ +920#if __cplusplus > 201703L │ │ │ │ +921 ///@{ │ │ │ │ +922 /** │ │ │ │ +923 * @brief Finds whether an element with the given key exists. │ │ │ │ +924 * @param __x Key of elements to be located. │ │ │ │ +925 * @return True if there is any element with the specified key. │ │ │ │ +926 */ │ │ │ │ +927 bool │ │ │ │ +_9_2_8 _c_o_n_t_a_i_n_s(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +929 { return _M_h.find(__x) != _M_h.end(); } │ │ │ │ +930 │ │ │ │ +931 template │ │ │ │ +932 auto │ │ │ │ +_9_3_3 _c_o_n_t_a_i_n_s(const ___K_t& __x) const │ │ │ │ +934 -> decltype(_M_h._M_find_tr(__x), _v_o_i_d(), true) │ │ │ │ +935 { return _M_h._M_find_tr(__x) != _M_h.end(); } │ │ │ │ +936 ///@} │ │ │ │ +937#endif │ │ │ │ +938 │ │ │ │ +939 ///@{ │ │ │ │ +940 /** │ │ │ │ +941 * @brief Finds a subsequence matching given key. │ │ │ │ +942 * @param __x Key to be located. │ │ │ │ +943 * @return Pair of iterators that possibly points to the subsequence │ │ │ │ +944 * matching given key. │ │ │ │ +945 * │ │ │ │ +946 * This function probably only makes sense for %unordered_multimap. │ │ │ │ +947 */ │ │ │ │ +948 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _i_t_e_r_a_t_o_r_> │ │ │ │ +_9_4_9 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ +950 { return _M_h.equal_range(__x); } │ │ │ │ +951 │ │ │ │ +952#if __cplusplus > 201703L │ │ │ │ +953 template │ │ │ │ +954 auto │ │ │ │ +_9_5_5 _e_q_u_a_l___r_a_n_g_e(const ___K_t& __x) │ │ │ │ +956 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ +957 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ +958#endif │ │ │ │ +959 │ │ │ │ +960 _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_> │ │ │ │ +_9_6_1 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +962 { return _M_h.equal_range(__x); } │ │ │ │ +963 │ │ │ │ +964#if __cplusplus > 201703L │ │ │ │ +965 template │ │ │ │ +966 auto │ │ │ │ +_9_6_7 _e_q_u_a_l___r_a_n_g_e(const ___K_t& __x) const │ │ │ │ +968 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ +969 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ +970#endif │ │ │ │ +971 ///@} │ │ │ │ +972 │ │ │ │ +973 ///@{ │ │ │ │ +974 /** │ │ │ │ +975 * @brief Subscript ( @c [] ) access to %unordered_map data. │ │ │ │ +976 * @param __k The key for which data should be retrieved. │ │ │ │ +977 * @return A reference to the data of the (key,data) %pair. │ │ │ │ +978 * │ │ │ │ +979 * Allows for easy lookup with the subscript ( @c [] )operator. Returns │ │ │ │ +980 * data associated with the key specified in subscript. If the key does │ │ │ │ +981 * not exist, a pair with that key is created using default values, which │ │ │ │ +982 * is then returned. │ │ │ │ +983 * │ │ │ │ +984 * Lookup requires constant time. │ │ │ │ +985 */ │ │ │ │ +986 _m_a_p_p_e_d___t_y_p_e& │ │ │ │ +_9_8_7 _o_p_e_r_a_t_o_r_[_](const _k_e_y___t_y_p_e& _____k) │ │ │ │ +988 { return _M_h[_____k]; } │ │ │ │ +989 │ │ │ │ +990 _m_a_p_p_e_d___t_y_p_e& │ │ │ │ +_9_9_1 _o_p_e_r_a_t_o_r_[_](_k_e_y___t_y_p_e&& _____k) │ │ │ │ +992 { return _M_h[_s_t_d_:_:_m_o_v_e(_____k)]; } │ │ │ │ +993 ///@} │ │ │ │ +994 │ │ │ │ +995 ///@{ │ │ │ │ +996 /** │ │ │ │ +997 * @brief Access to %unordered_map data. │ │ │ │ +998 * @param __k The key for which data should be retrieved. │ │ │ │ +999 * @return A reference to the data whose key is equal to @a __k, if │ │ │ │ +1000 * such a data is present in the %unordered_map. │ │ │ │ +1001 * @throw std::out_of_range If no such data is present. │ │ │ │ +1002 */ │ │ │ │ +1003 _m_a_p_p_e_d___t_y_p_e& │ │ │ │ +_1_0_0_4 _a_t(const _k_e_y___t_y_p_e& _____k) │ │ │ │ +1005 { return _M_h.at(_____k); } │ │ │ │ +1006 │ │ │ │ +1007 const _m_a_p_p_e_d___t_y_p_e& │ │ │ │ +_1_0_0_8 _a_t(const _k_e_y___t_y_p_e& _____k) const │ │ │ │ +1009 { return _M_h.at(_____k); } │ │ │ │ +1010 ///@} │ │ │ │ +1011 │ │ │ │ +1012 // bucket interface. │ │ │ │ +1013 │ │ │ │ +1014 /// Returns the number of buckets of the %unordered_map. │ │ │ │ +1015 _s_i_z_e___t_y_p_e │ │ │ │ +_1_0_1_6 _b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ +1017 { return _M_h.bucket_count(); } │ │ │ │ +1018 │ │ │ │ +1019 /// Returns the maximum number of buckets of the %unordered_map. │ │ │ │ +1020 _s_i_z_e___t_y_p_e │ │ │ │ +_1_0_2_1 _m_a_x___b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ +1022 { return _M_h.max_bucket_count(); } │ │ │ │ +1023 │ │ │ │ +1024 /* │ │ │ │ +1025 * @brief Returns the number of elements in a given bucket. │ │ │ │ +1026 * @param __n A bucket index. │ │ │ │ +1027 * @return The number of elements in the bucket. │ │ │ │ +1028 */ │ │ │ │ +1029 _s_i_z_e___t_y_p_e │ │ │ │ +1030 bucket_size(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +1031 { return _M_h.bucket_size(__n); } │ │ │ │ +1032 │ │ │ │ +1033 /* │ │ │ │ +1034 * @brief Returns the bucket index of a given element. │ │ │ │ +1035 * @param __key A key instance. │ │ │ │ +1036 * @return The key bucket index. │ │ │ │ +1037 */ │ │ │ │ +1038 _s_i_z_e___t_y_p_e │ │ │ │ +1039 bucket(const _k_e_y___t_y_p_e& __key) const │ │ │ │ +1040 { return _M_h.bucket(__key); } │ │ │ │ +1041 │ │ │ │ +1042 /** │ │ │ │ +1043 * @brief Returns a read/write iterator pointing to the first bucket │ │ │ │ +1044 * element. │ │ │ │ +1045 * @param __n The bucket index. │ │ │ │ +1046 * @return A read/write local iterator. │ │ │ │ +1047 */ │ │ │ │ +1048 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_0_4_9 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) │ │ │ │ +1050 { return _M_h.begin(__n); } │ │ │ │ +1051 │ │ │ │ +1052 ///@{ │ │ │ │ +1053 /** │ │ │ │ +1054 * @brief Returns a read-only (constant) iterator pointing to the first │ │ │ │ +1055 * bucket element. │ │ │ │ +1056 * @param __n The bucket index. │ │ │ │ +1057 * @return A read-only local iterator. │ │ │ │ +1058 */ │ │ │ │ +1059 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_0_6_0 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +1061 { return _M_h.begin(__n); } │ │ │ │ +1062 │ │ │ │ +1063 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_0_6_4 _c_b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +1065 { return _M_h.cbegin(__n); } │ │ │ │ +1066 ///@} │ │ │ │ +1067 │ │ │ │ +1068 /** │ │ │ │ +1069 * @brief Returns a read/write iterator pointing to one past the last │ │ │ │ +1070 * bucket elements. │ │ │ │ +1071 * @param __n The bucket index. │ │ │ │ +1072 * @return A read/write local iterator. │ │ │ │ +1073 */ │ │ │ │ +1074 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_0_7_5 _e_n_d(_s_i_z_e___t_y_p_e __n) │ │ │ │ +1076 { return _M_h.end(__n); } │ │ │ │ +1077 │ │ │ │ +1078 ///@{ │ │ │ │ +1079 /** │ │ │ │ +1080 * @brief Returns a read-only (constant) iterator pointing to one past │ │ │ │ +1081 * the last bucket elements. │ │ │ │ +1082 * @param __n The bucket index. │ │ │ │ +1083 * @return A read-only local iterator. │ │ │ │ 1084 */ │ │ │ │ -1085 explicit │ │ │ │ -_1_0_8_6 _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) │ │ │ │ -1087 : _M_h(__a) │ │ │ │ -1088 { } │ │ │ │ -1089 │ │ │ │ -1090 /* │ │ │ │ -1091 * @brief Copy constructor with allocator argument. │ │ │ │ -1092 * @param __uset Input %unordered_multiset to copy. │ │ │ │ -1093 * @param __a An allocator object. │ │ │ │ -1094 */ │ │ │ │ -1095 _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, │ │ │ │ -1096 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1097 : _M_h(_____u_m_s_e_t._M_h, __a) │ │ │ │ -1098 { } │ │ │ │ -1099 │ │ │ │ -1100 /* │ │ │ │ -1101 * @brief Move constructor with allocator argument. │ │ │ │ -1102 * @param __umset Input %unordered_multiset to move. │ │ │ │ -1103 * @param __a An allocator object. │ │ │ │ -1104 */ │ │ │ │ -1105 _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, │ │ │ │ -1106 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1107 noexcept( noexcept(_Hashtable(_s_t_d_:_:_m_o_v_e(__umset._M_h), __a)) ) │ │ │ │ -1108 : _M_h(_s_t_d_:_:_m_o_v_e(__umset._M_h), __a) │ │ │ │ -1109 { } │ │ │ │ -1110 │ │ │ │ -1111 _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) │ │ │ │ -1112 : _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) │ │ │ │ -1113 { } │ │ │ │ +1085 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_0_8_6 _e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +1087 { return _M_h.end(__n); } │ │ │ │ +1088 │ │ │ │ +1089 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_0_9_0 _c_e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +1091 { return _M_h.cend(__n); } │ │ │ │ +1092 ///@} │ │ │ │ +1093 │ │ │ │ +1094 // hash policy. │ │ │ │ +1095 │ │ │ │ +1096 /// Returns the average number of elements per bucket. │ │ │ │ +1097 float │ │ │ │ +_1_0_9_8 _l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ +1099 { return _M_h.load_factor(); } │ │ │ │ +1100 │ │ │ │ +1101 /// Returns a positive number that the %unordered_map tries to keep the │ │ │ │ +1102 /// load factor less than or equal to. │ │ │ │ +1103 float │ │ │ │ +_1_1_0_4 _m_a_x___l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ +1105 { return _M_h.max_load_factor(); } │ │ │ │ +1106 │ │ │ │ +1107 /** │ │ │ │ +1108 * @brief Change the %unordered_map maximum load factor. │ │ │ │ +1109 * @param __z The new maximum load factor. │ │ │ │ +1110 */ │ │ │ │ +1111 void │ │ │ │ +_1_1_1_2 _m_a_x___l_o_a_d___f_a_c_t_o_r(float _____z) │ │ │ │ +1113 { _M_h.max_load_factor(_____z); } │ │ │ │ 1114 │ │ │ │ -1115 _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, │ │ │ │ -1116 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1117 : _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) │ │ │ │ -1118 { } │ │ │ │ -1119 │ │ │ │ -1120 template │ │ │ │ -1121 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_InputIterator __first, _InputIterator __last, │ │ │ │ -1122 _s_i_z_e___t_y_p_e __n, │ │ │ │ -1123 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1124 : _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) │ │ │ │ -1125 { } │ │ │ │ -1126 │ │ │ │ -1127 template │ │ │ │ -1128 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_InputIterator __first, _InputIterator __last, │ │ │ │ -1129 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -1130 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1131 : _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) │ │ │ │ -1132 { } │ │ │ │ -1133 │ │ │ │ -1134 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(initializer_list __l, │ │ │ │ -1135 _s_i_z_e___t_y_p_e __n, │ │ │ │ -1136 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1137 : _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) │ │ │ │ -1138 { } │ │ │ │ -1139 │ │ │ │ -1140 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(initializer_list __l, │ │ │ │ -1141 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -1142 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1143 : _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) │ │ │ │ -1144 { } │ │ │ │ +1115 /** │ │ │ │ +1116 * @brief May rehash the %unordered_map. │ │ │ │ +1117 * @param __n The new number of buckets. │ │ │ │ +1118 * │ │ │ │ +1119 * Rehash will occur only if the new number of buckets respect the │ │ │ │ +1120 * %unordered_map maximum load factor. │ │ │ │ +1121 */ │ │ │ │ +1122 void │ │ │ │ +_1_1_2_3 _r_e_h_a_s_h(_s_i_z_e___t_y_p_e __n) │ │ │ │ +1124 { _M_h.rehash(__n); } │ │ │ │ +1125 │ │ │ │ +1126 /** │ │ │ │ +1127 * @brief Prepare the %unordered_map for a specified number of │ │ │ │ +1128 * elements. │ │ │ │ +1129 * @param __n Number of elements required. │ │ │ │ +1130 * │ │ │ │ +1131 * Same as rehash(ceil(n / max_load_factor())). │ │ │ │ +1132 */ │ │ │ │ +1133 void │ │ │ │ +_1_1_3_4 _r_e_s_e_r_v_e(_s_i_z_e___t_y_p_e __n) │ │ │ │ +1135 { _M_h.reserve(__n); } │ │ │ │ +1136 │ │ │ │ +1137 template │ │ │ │ +1139 friend bool │ │ │ │ +1140 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_>&, │ │ │ │ +1141 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_>&); │ │ │ │ +1142 }; │ │ │ │ +1143 │ │ │ │ +1144#if __cpp_deduction_guides >= 201606 │ │ │ │ 1145 │ │ │ │ -1146 /** │ │ │ │ -1147 * @brief %Unordered_multiset list assignment operator. │ │ │ │ -1148 * @param __l An initializer_list. │ │ │ │ -1149 * │ │ │ │ -1150 * This function fills an %unordered_multiset with copies of the elements │ │ │ │ -1151 * in the initializer list @a __l. │ │ │ │ -1152 * │ │ │ │ -1153 * Note that the assignment completely changes the %unordered_multiset │ │ │ │ -1154 * and that the resulting %unordered_multiset's size is the same as the │ │ │ │ -1155 * number of elements assigned. │ │ │ │ -1156 */ │ │ │ │ -1157 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t& │ │ │ │ -_1_1_5_8 _o_p_e_r_a_t_o_r_=(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> _____l) │ │ │ │ -1159 { │ │ │ │ -1160 _M_h = _____l; │ │ │ │ -1161 return *this; │ │ │ │ -1162 } │ │ │ │ -1163 │ │ │ │ -1164 /// Returns the allocator object used by the %unordered_multiset. │ │ │ │ -1165 _a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ -_1_1_6_6 _g_e_t___a_l_l_o_c_a_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -1167 { return _M_h.get_allocator(); } │ │ │ │ -1168 │ │ │ │ -1169 // size and capacity: │ │ │ │ -1170 │ │ │ │ -1171 /// Returns true if the %unordered_multiset is empty. │ │ │ │ -1172 _GLIBCXX_NODISCARD bool │ │ │ │ -_1_1_7_3 _e_m_p_t_y() _c_o_n_s_t noexcept │ │ │ │ -1174 { return _M_h.empty(); } │ │ │ │ -1175 │ │ │ │ -1176 /// Returns the size of the %unordered_multiset. │ │ │ │ -1177 _s_i_z_e___t_y_p_e │ │ │ │ -_1_1_7_8 _s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ -1179 { return _M_h.size(); } │ │ │ │ -1180 │ │ │ │ -1181 /// Returns the maximum size of the %unordered_multiset. │ │ │ │ -1182 _s_i_z_e___t_y_p_e │ │ │ │ -_1_1_8_3 _m_a_x___s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ -1184 { return _M_h.max_size(); } │ │ │ │ -1185 │ │ │ │ -1186 // iterators. │ │ │ │ -1187 │ │ │ │ -1188 ///@{ │ │ │ │ -1189 /** │ │ │ │ -1190 * Returns a read-only (constant) iterator that points to the first │ │ │ │ -1191 * element in the %unordered_multiset. │ │ │ │ -1192 */ │ │ │ │ -1193 _i_t_e_r_a_t_o_r │ │ │ │ -_1_1_9_4 _b_e_g_i_n() noexcept │ │ │ │ -1195 { return _M_h.begin(); } │ │ │ │ -1196 │ │ │ │ -1197 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_1_1_9_8 _b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ -1199 { return _M_h.begin(); } │ │ │ │ -1200 ///@} │ │ │ │ -1201 │ │ │ │ -1202 ///@{ │ │ │ │ -1203 /** │ │ │ │ -1204 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ -1205 * element in the %unordered_multiset. │ │ │ │ -1206 */ │ │ │ │ -1207 _i_t_e_r_a_t_o_r │ │ │ │ -_1_2_0_8 _e_n_d() noexcept │ │ │ │ -1209 { return _M_h.end(); } │ │ │ │ +1146 template>, │ │ │ │ +1148 typename _Pred = equal_to<__iter_key_t<_InputIterator>>, │ │ │ │ +1149 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, │ │ │ │ +1150 typename = _RequireInputIter<_InputIterator>, │ │ │ │ +1151 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ +1152 typename = _RequireNotAllocator<_Pred>, │ │ │ │ +1153 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1154 unordered_map(_InputIterator, _InputIterator, │ │ │ │ +1155 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 = {}, │ │ │ │ +1156 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ +1157 -> unordered_map<__iter_key_t<_InputIterator>, │ │ │ │ +1158 __iter_val_t<_InputIterator>, │ │ │ │ +1159 _Hash, _Pred, _Allocator>; │ │ │ │ +1160 │ │ │ │ +1161 template, │ │ │ │ +1162 typename _Pred = equal_to<_Key>, │ │ │ │ +1163 typename _Allocator = allocator>, │ │ │ │ +1164 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ +1165 typename = _RequireNotAllocator<_Pred>, │ │ │ │ +1166 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1167 unordered_map(initializer_list>, │ │ │ │ +1168 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 = {}, │ │ │ │ +1169 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ +1170 -> unordered_map<_Key, _Tp, _Hash, _Pred, _Allocator>; │ │ │ │ +1171 │ │ │ │ +1172 template, │ │ │ │ +1174 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1175 unordered_map(_InputIterator, _InputIterator, │ │ │ │ +1176 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) │ │ │ │ +1177 -> unordered_map<__iter_key_t<_InputIterator>, │ │ │ │ +1178 __iter_val_t<_InputIterator>, │ │ │ │ +1179 hash<__iter_key_t<_InputIterator>>, │ │ │ │ +1180 equal_to<__iter_key_t<_InputIterator>>, │ │ │ │ +1181 _Allocator>; │ │ │ │ +1182 │ │ │ │ +1183 template, │ │ │ │ +1185 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1186 unordered_map(_InputIterator, _InputIterator, _Allocator) │ │ │ │ +1187 -> unordered_map<__iter_key_t<_InputIterator>, │ │ │ │ +1188 __iter_val_t<_InputIterator>, │ │ │ │ +1189 hash<__iter_key_t<_InputIterator>>, │ │ │ │ +1190 equal_to<__iter_key_t<_InputIterator>>, │ │ │ │ +1191 _Allocator>; │ │ │ │ +1192 │ │ │ │ +1193 template, │ │ │ │ +1195 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ +1196 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1197 unordered_map(_InputIterator, _InputIterator, │ │ │ │ +1198 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, │ │ │ │ +1199 _Hash, _Allocator) │ │ │ │ +1200 -> unordered_map<__iter_key_t<_InputIterator>, │ │ │ │ +1201 __iter_val_t<_InputIterator>, _Hash, │ │ │ │ +1202 equal_to<__iter_key_t<_InputIterator>>, _Allocator>; │ │ │ │ +1203 │ │ │ │ +1204 template> │ │ │ │ +1206 unordered_map(initializer_list>, │ │ │ │ +1207 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, │ │ │ │ +1208 _Allocator) │ │ │ │ +1209 -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; │ │ │ │ 1210 │ │ │ │ -1211 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_1_2_1_2 _e_n_d() _c_o_n_s_t noexcept │ │ │ │ -1213 { return _M_h.end(); } │ │ │ │ -1214 ///@} │ │ │ │ +1211 template> │ │ │ │ +1213 unordered_map(initializer_list>, _Allocator) │ │ │ │ +1214 -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; │ │ │ │ 1215 │ │ │ │ -1216 /** │ │ │ │ -1217 * Returns a read-only (constant) iterator that points to the first │ │ │ │ -1218 * element in the %unordered_multiset. │ │ │ │ -1219 */ │ │ │ │ -1220 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_1_2_2_1 _c_b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ -1222 { return _M_h.begin(); } │ │ │ │ +1216 template, │ │ │ │ +1218 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1219 unordered_map(initializer_list>, │ │ │ │ +1220 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, │ │ │ │ +1221 _Hash, _Allocator) │ │ │ │ +1222 -> unordered_map<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>; │ │ │ │ 1223 │ │ │ │ -1224 /** │ │ │ │ -1225 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ -1226 * element in the %unordered_multiset. │ │ │ │ -1227 */ │ │ │ │ -1228 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_1_2_2_9 _c_e_n_d() _c_o_n_s_t noexcept │ │ │ │ -1230 { return _M_h.end(); } │ │ │ │ -1231 │ │ │ │ -1232 // modifiers. │ │ │ │ -1233 │ │ │ │ -1234 /** │ │ │ │ -1235 * @brief Builds and insert an element into the %unordered_multiset. │ │ │ │ -1236 * @param __args Arguments used to generate an element. │ │ │ │ -1237 * @return An iterator that points to the inserted element. │ │ │ │ -1238 * │ │ │ │ -1239 * Insertion requires amortized constant time. │ │ │ │ -1240 */ │ │ │ │ -1241 template │ │ │ │ -1242 _i_t_e_r_a_t_o_r │ │ │ │ -_1_2_4_3 _e_m_p_l_a_c_e(___A_r_g_s&&... _____a_r_g_s) │ │ │ │ -1244 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); } │ │ │ │ -1245 │ │ │ │ -1246 /** │ │ │ │ -1247 * @brief Inserts an element into the %unordered_multiset. │ │ │ │ -1248 * @param __pos An iterator that serves as a hint as to where the │ │ │ │ -1249 * element should be inserted. │ │ │ │ -1250 * @param __args Arguments used to generate the element to be │ │ │ │ -1251 * inserted. │ │ │ │ -1252 * @return An iterator that points to the inserted element. │ │ │ │ -1253 * │ │ │ │ -1254 * Note that the first parameter is only a hint and can potentially │ │ │ │ -1255 * improve the performance of the insertion process. A bad hint would │ │ │ │ -1256 * cause no gains in efficiency. │ │ │ │ -1257 * │ │ │ │ -1258 * For more on @a hinting, see: │ │ │ │ -1259 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -1260 * │ │ │ │ -1261 * Insertion requires amortized constant time. │ │ │ │ -1262 */ │ │ │ │ -1263 template │ │ │ │ -1264 _i_t_e_r_a_t_o_r │ │ │ │ -_1_2_6_5 _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) │ │ │ │ -1266 { 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)...); } │ │ │ │ -1267 │ │ │ │ -1268 ///@{ │ │ │ │ -1269 /** │ │ │ │ -1270 * @brief Inserts an element into the %unordered_multiset. │ │ │ │ -1271 * @param __x Element to be inserted. │ │ │ │ -1272 * @return An iterator that points to the inserted element. │ │ │ │ -1273 * │ │ │ │ -1274 * Insertion requires amortized constant time. │ │ │ │ -1275 */ │ │ │ │ -1276 _i_t_e_r_a_t_o_r │ │ │ │ -_1_2_7_7 _i_n_s_e_r_t(const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -1278 { return _M_h.insert(__x); } │ │ │ │ -1279 │ │ │ │ -1280 _i_t_e_r_a_t_o_r │ │ │ │ -_1_2_8_1 _i_n_s_e_r_t(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -1282 { return _M_h.insert(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -1283 ///@} │ │ │ │ -1284 │ │ │ │ -1285 ///@{ │ │ │ │ -1286 /** │ │ │ │ -1287 * @brief Inserts an element into the %unordered_multiset. │ │ │ │ -1288 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ -1289 * element should be inserted. │ │ │ │ -1290 * @param __x Element to be inserted. │ │ │ │ -1291 * @return An iterator that points to the inserted element. │ │ │ │ -1292 * │ │ │ │ -1293 * Note that the first parameter is only a hint and can potentially │ │ │ │ -1294 * improve the performance of the insertion process. A bad hint would │ │ │ │ -1295 * cause no gains in efficiency. │ │ │ │ -1296 * │ │ │ │ -1297 * For more on @a hinting, see: │ │ │ │ -1298 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -1299 * │ │ │ │ -1300 * Insertion requires amortized constant. │ │ │ │ +1224#endif │ │ │ │ +1225 │ │ │ │ +1226 /** │ │ │ │ +1227 * @brief A standard container composed of equivalent keys │ │ │ │ +1228 * (possibly containing multiple of each key value) that associates │ │ │ │ +1229 * values of another type with the keys. │ │ │ │ +1230 * │ │ │ │ +1231 * @ingroup unordered_associative_containers │ │ │ │ +1232 * @headerfile unordered_map │ │ │ │ +1233 * @since C++11 │ │ │ │ +1234 * │ │ │ │ +1235 * @tparam _Key Type of key objects. │ │ │ │ +1236 * @tparam _Tp Type of mapped objects. │ │ │ │ +1237 * @tparam _Hash Hashing function object type, defaults to hash<_Value>. │ │ │ │ +1238 * @tparam _Pred Predicate function object type, defaults │ │ │ │ +1239 * to equal_to<_Value>. │ │ │ │ +1240 * @tparam _Alloc Allocator type, defaults to │ │ │ │ +1241 * std::allocator>. │ │ │ │ +1242 * │ │ │ │ +1243 * Meets the requirements of a container, and │ │ │ │ +1244 * unordered associative container │ │ │ │ +1245 * │ │ │ │ +1246 * The resulting value type of the container is std::pair. │ │ │ │ +1247 * │ │ │ │ +1248 * Base is _Hashtable, dispatched at compile time via template │ │ │ │ +1249 * alias __ummap_hashtable. │ │ │ │ +1250 */ │ │ │ │ +1251 template, │ │ │ │ +1253 typename _Pred = equal_to<_Key>, │ │ │ │ +1254 typename _Alloc = allocator>> │ │ │ │ +_1_2_5_5 class _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ +1256 { │ │ │ │ +1257 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; │ │ │ │ +1258 ___H_a_s_h_t_a_b_l_e _M_h; │ │ │ │ +1259 │ │ │ │ +1260 public: │ │ │ │ +1261 // typedefs: │ │ │ │ +1262 ///@{ │ │ │ │ +1263 /// Public typedefs. │ │ │ │ +_1_2_6_4 typedef typename _Hashtable::key_type _k_e_y___t_y_p_e; │ │ │ │ +_1_2_6_5 typedef typename _Hashtable::value_type _v_a_l_u_e___t_y_p_e; │ │ │ │ +_1_2_6_6 typedef typename _Hashtable::mapped_type _m_a_p_p_e_d___t_y_p_e; │ │ │ │ +_1_2_6_7 typedef typename _Hashtable::hasher _h_a_s_h_e_r; │ │ │ │ +_1_2_6_8 typedef typename _Hashtable::key_equal _k_e_y___e_q_u_a_l; │ │ │ │ +_1_2_6_9 typedef typename _Hashtable::allocator_type _a_l_l_o_c_a_t_o_r___t_y_p_e; │ │ │ │ +1270 ///@} │ │ │ │ +1271 │ │ │ │ +1272 ///@{ │ │ │ │ +1273 /// Iterator-related typedefs. │ │ │ │ +_1_2_7_4 typedef typename _Hashtable::pointer _p_o_i_n_t_e_r; │ │ │ │ +_1_2_7_5 typedef typename _Hashtable::const_pointer _c_o_n_s_t___p_o_i_n_t_e_r; │ │ │ │ +_1_2_7_6 typedef typename _Hashtable::reference _r_e_f_e_r_e_n_c_e; │ │ │ │ +_1_2_7_7 typedef typename _Hashtable::const_reference _c_o_n_s_t___r_e_f_e_r_e_n_c_e; │ │ │ │ +_1_2_7_8 typedef typename _Hashtable::iterator _i_t_e_r_a_t_o_r; │ │ │ │ +_1_2_7_9 typedef typename _Hashtable::const_iterator _c_o_n_s_t___i_t_e_r_a_t_o_r; │ │ │ │ +_1_2_8_0 typedef typename _Hashtable::local_iterator _l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ +_1_2_8_1 typedef typename _Hashtable::const_local_iterator _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ +_1_2_8_2 typedef typename _Hashtable::size_type _s_i_z_e___t_y_p_e; │ │ │ │ +_1_2_8_3 typedef typename _Hashtable::difference_type _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ +1284 ///@} │ │ │ │ +1285 │ │ │ │ +1286#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +1287 using node_type = typename _Hashtable::node_type; │ │ │ │ +1288#endif │ │ │ │ +1289 │ │ │ │ +1290 //construct/destroy/copy │ │ │ │ +1291 │ │ │ │ +1292 /// Default constructor. │ │ │ │ +_1_2_9_3 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p() = default; │ │ │ │ +1294 │ │ │ │ +1295 /** │ │ │ │ +1296 * @brief Default constructor creates no elements. │ │ │ │ +1297 * @param __n Mnimal initial number of buckets. │ │ │ │ +1298 * @param __hf A hash functor. │ │ │ │ +1299 * @param __eql A key equality functor. │ │ │ │ +1300 * @param __a An allocator object. │ │ │ │ 1301 */ │ │ │ │ -1302 _i_t_e_r_a_t_o_r │ │ │ │ -_1_3_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) │ │ │ │ -1304 { return _M_h.insert(_____h_i_n_t, __x); } │ │ │ │ -1305 │ │ │ │ -1306 _i_t_e_r_a_t_o_r │ │ │ │ -_1_3_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) │ │ │ │ -1308 { return _M_h.insert(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -1309 ///@} │ │ │ │ -1310 │ │ │ │ -1311 /** │ │ │ │ -1312 * @brief A template function that inserts a range of elements. │ │ │ │ -1313 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -1314 * inserted. │ │ │ │ -1315 * @param __last Iterator pointing to the end of the range. │ │ │ │ -1316 * │ │ │ │ -1317 * Complexity similar to that of the range constructor. │ │ │ │ -1318 */ │ │ │ │ -1319 template │ │ │ │ -1320 void │ │ │ │ -_1_3_2_1 _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) │ │ │ │ -1322 { _M_h.insert(__first, __last); } │ │ │ │ -1323 │ │ │ │ -1324 /** │ │ │ │ -1325 * @brief Inserts a list of elements into the %unordered_multiset. │ │ │ │ -1326 * @param __l A std::initializer_list of elements to be │ │ │ │ -1327 * inserted. │ │ │ │ -1328 * │ │ │ │ -1329 * Complexity similar to that of the range constructor. │ │ │ │ -1330 */ │ │ │ │ -1331 void │ │ │ │ -_1_3_3_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) │ │ │ │ -1333 { _M_h.insert(_____l); } │ │ │ │ +1302 explicit │ │ │ │ +_1_3_0_3 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_s_i_z_e___t_y_p_e __n, │ │ │ │ +1304 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ +1305 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ +1306 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()) │ │ │ │ +1307 : _M_h(__n, _____h_f, _____e_q_l, __a) │ │ │ │ +1308 { } │ │ │ │ +1309 │ │ │ │ +1310 /** │ │ │ │ +1311 * @brief Builds an %unordered_multimap from a range. │ │ │ │ +1312 * @param __first An input iterator. │ │ │ │ +1313 * @param __last An input iterator. │ │ │ │ +1314 * @param __n Minimal initial number of buckets. │ │ │ │ +1315 * @param __hf A hash functor. │ │ │ │ +1316 * @param __eql A key equality functor. │ │ │ │ +1317 * @param __a An allocator object. │ │ │ │ +1318 * │ │ │ │ +1319 * Create an %unordered_multimap consisting of copies of the elements │ │ │ │ +1320 * from [__first,__last). This is linear in N (where N is │ │ │ │ +1321 * distance(__first,__last)). │ │ │ │ +1322 */ │ │ │ │ +1323 template │ │ │ │ +_1_3_2_4 _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, │ │ │ │ +1325 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ +1326 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ +1327 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ +1328 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()) │ │ │ │ +1329 : _M_h(__first, __last, __n, _____h_f, _____e_q_l, __a) │ │ │ │ +1330 { } │ │ │ │ +1331 │ │ │ │ +1332 /// Copy constructor. │ │ │ │ +_1_3_3_3 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p&) = default; │ │ │ │ 1334 │ │ │ │ -1335#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -1336 /// Extract a node. │ │ │ │ -1337 node_type │ │ │ │ -_1_3_3_8 _e_x_t_r_a_c_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s) │ │ │ │ -1339 { │ │ │ │ -1340 __glibcxx_assert(_____p_o_s != _e_n_d()); │ │ │ │ -1341 return _M_h.extract(_____p_o_s); │ │ │ │ -1342 } │ │ │ │ -1343 │ │ │ │ -1344 /// Extract a node. │ │ │ │ -1345 node_type │ │ │ │ -_1_3_4_6 _e_x_t_r_a_c_t(const _k_e_y___t_y_p_e& _____k_e_y) │ │ │ │ -1347 { return _M_h.extract(_____k_e_y); } │ │ │ │ -1348 │ │ │ │ -1349 /// Re-insert an extracted node. │ │ │ │ -1350 _i_t_e_r_a_t_o_r │ │ │ │ -_1_3_5_1 _i_n_s_e_r_t(node_type&& _____n_h) │ │ │ │ -1352 { return _M_h._M_reinsert_node_multi(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(_____n_h)); } │ │ │ │ -1353 │ │ │ │ -1354 /// Re-insert an extracted node. │ │ │ │ -1355 _i_t_e_r_a_t_o_r │ │ │ │ -_1_3_5_6 _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) │ │ │ │ -1357 { return _M_h._M_reinsert_node_multi(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(_____n_h)); } │ │ │ │ -1358#endif // node_extract │ │ │ │ -1359 │ │ │ │ -1360 ///@{ │ │ │ │ -1361 /** │ │ │ │ -1362 * @brief Erases an element from an %unordered_multiset. │ │ │ │ -1363 * @param __position An iterator pointing to the element to be erased. │ │ │ │ -1364 * @return An iterator pointing to the element immediately following │ │ │ │ -1365 * @a __position prior to the element being erased. If no such │ │ │ │ -1366 * element exists, end() is returned. │ │ │ │ -1367 * │ │ │ │ -1368 * This function erases an element, pointed to by the given iterator, │ │ │ │ -1369 * from an %unordered_multiset. │ │ │ │ -1370 * │ │ │ │ -1371 * Note that this function only erases the element, and that if the │ │ │ │ -1372 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ -1373 * any way. Managing the pointer is the user's responsibility. │ │ │ │ -1374 */ │ │ │ │ -1375 _i_t_e_r_a_t_o_r │ │ │ │ -_1_3_7_6 _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) │ │ │ │ -1377 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ -1378 │ │ │ │ -1379 // LWG 2059. │ │ │ │ -1380 _i_t_e_r_a_t_o_r │ │ │ │ -_1_3_8_1 _e_r_a_s_e(_i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n) │ │ │ │ -1382 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ -1383 ///@} │ │ │ │ -1384 │ │ │ │ -1385 │ │ │ │ -1386 /** │ │ │ │ -1387 * @brief Erases elements according to the provided key. │ │ │ │ -1388 * @param __x Key of element to be erased. │ │ │ │ -1389 * @return The number of elements erased. │ │ │ │ -1390 * │ │ │ │ -1391 * This function erases all the elements located by the given key from │ │ │ │ -1392 * an %unordered_multiset. │ │ │ │ -1393 * │ │ │ │ -1394 * Note that this function only erases the element, and that if the │ │ │ │ -1395 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ -1396 * any way. Managing the pointer is the user's responsibility. │ │ │ │ -1397 */ │ │ │ │ -1398 _s_i_z_e___t_y_p_e │ │ │ │ -_1_3_9_9 _e_r_a_s_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -1400 { return _M_h.erase(__x); } │ │ │ │ -1401 │ │ │ │ -1402 /** │ │ │ │ -1403 * @brief Erases a [__first,__last) range of elements from an │ │ │ │ -1404 * %unordered_multiset. │ │ │ │ -1405 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -1406 * erased. │ │ │ │ -1407 * @param __last Iterator pointing to the end of the range to │ │ │ │ -1408 * be erased. │ │ │ │ -1409 * @return The iterator @a __last. │ │ │ │ -1410 * │ │ │ │ -1411 * This function erases a sequence of elements from an │ │ │ │ -1412 * %unordered_multiset. │ │ │ │ -1413 * │ │ │ │ -1414 * Note that this function only erases the element, and that if │ │ │ │ -1415 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ -1416 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -1417 */ │ │ │ │ -1418 _i_t_e_r_a_t_o_r │ │ │ │ -_1_4_1_9 _e_r_a_s_e(_c_o_n_s_t___i_t_e_r_a_t_o_r __first, _c_o_n_s_t___i_t_e_r_a_t_o_r __last) │ │ │ │ -1420 { return _M_h.erase(__first, __last); } │ │ │ │ +1335 /// Move constructor. │ │ │ │ +_1_3_3_6 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p&&) = default; │ │ │ │ +1337 │ │ │ │ +1338 /** │ │ │ │ +1339 * @brief Creates an %unordered_multimap with no elements. │ │ │ │ +1340 * @param __a An allocator object. │ │ │ │ +1341 */ │ │ │ │ +1342 explicit │ │ │ │ +_1_3_4_3 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1344 : _M_h(__a) │ │ │ │ +1345 { } │ │ │ │ +1346 │ │ │ │ +1347 /* │ │ │ │ +1348 * @brief Copy constructor with allocator argument. │ │ │ │ +1349 * @param __uset Input %unordered_multimap to copy. │ │ │ │ +1350 * @param __a An allocator object. │ │ │ │ +1351 */ │ │ │ │ +1352 _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, │ │ │ │ +1353 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1354 : _M_h(_____u_m_m_a_p._M_h, __a) │ │ │ │ +1355 { } │ │ │ │ +1356 │ │ │ │ +1357 /* │ │ │ │ +1358 * @brief Move constructor with allocator argument. │ │ │ │ +1359 * @param __uset Input %unordered_multimap to move. │ │ │ │ +1360 * @param __a An allocator object. │ │ │ │ +1361 */ │ │ │ │ +1362 _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, │ │ │ │ +1363 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1364 noexcept( noexcept(_Hashtable(_s_t_d_:_:_m_o_v_e(__ummap._M_h), __a)) ) │ │ │ │ +1365 : _M_h(_s_t_d_:_:_m_o_v_e(__ummap._M_h), __a) │ │ │ │ +1366 { } │ │ │ │ +1367 │ │ │ │ +1368 /** │ │ │ │ +1369 * @brief Builds an %unordered_multimap from an initializer_list. │ │ │ │ +1370 * @param __l An initializer_list. │ │ │ │ +1371 * @param __n Minimal initial number of buckets. │ │ │ │ +1372 * @param __hf A hash functor. │ │ │ │ +1373 * @param __eql A key equality functor. │ │ │ │ +1374 * @param __a An allocator object. │ │ │ │ +1375 * │ │ │ │ +1376 * Create an %unordered_multimap consisting of copies of the elements in │ │ │ │ +1377 * the list. This is linear in N (where N is @a __l.size()). │ │ │ │ +1378 */ │ │ │ │ +_1_3_7_9 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> _____l, │ │ │ │ +1380 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ +1381 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ +1382 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ +1383 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()) │ │ │ │ +1384 : _M_h(_____l, __n, _____h_f, _____e_q_l, __a) │ │ │ │ +1385 { } │ │ │ │ +1386 │ │ │ │ +1387 _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) │ │ │ │ +1388 : _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) │ │ │ │ +1389 { } │ │ │ │ +1390 │ │ │ │ +1391 _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, │ │ │ │ +1392 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1393 : _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) │ │ │ │ +1394 { } │ │ │ │ +1395 │ │ │ │ +1396 template │ │ │ │ +1397 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ +1398 _s_i_z_e___t_y_p_e __n, │ │ │ │ +1399 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1400 : _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) │ │ │ │ +1401 { } │ │ │ │ +1402 │ │ │ │ +1403 template │ │ │ │ +1404 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ +1405 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ +1406 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1407 : _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) │ │ │ │ +1408 { } │ │ │ │ +1409 │ │ │ │ +1410 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(initializer_list __l, │ │ │ │ +1411 _s_i_z_e___t_y_p_e __n, │ │ │ │ +1412 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1413 : _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) │ │ │ │ +1414 { } │ │ │ │ +1415 │ │ │ │ +1416 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(initializer_list __l, │ │ │ │ +1417 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ +1418 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ +1419 : _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) │ │ │ │ +1420 { } │ │ │ │ 1421 │ │ │ │ -1422 /** │ │ │ │ -1423 * Erases all elements in an %unordered_multiset. │ │ │ │ -1424 * │ │ │ │ -1425 * Note that this function only erases the elements, and that if the │ │ │ │ -1426 * elements themselves are pointers, the pointed-to memory is not touched │ │ │ │ -1427 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -1428 */ │ │ │ │ -1429 void │ │ │ │ -_1_4_3_0 _c_l_e_a_r() noexcept │ │ │ │ -1431 { _M_h.clear(); } │ │ │ │ -1432 │ │ │ │ -1433 /** │ │ │ │ -1434 * @brief Swaps data with another %unordered_multiset. │ │ │ │ -1435 * @param __x An %unordered_multiset of the same element and allocator │ │ │ │ -1436 * types. │ │ │ │ -1437 * │ │ │ │ -1438 * This exchanges the elements between two sets in constant time. │ │ │ │ -1439 * Note that the global std::swap() function is specialized such that │ │ │ │ -1440 * std::swap(s1,s2) will feed to this function. │ │ │ │ -1441 */ │ │ │ │ -1442 void │ │ │ │ -_1_4_4_3 _s_w_a_p(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t& __x) │ │ │ │ -1444 noexcept( noexcept(_M_h.swap(__x._M_h)) ) │ │ │ │ -1445 { _M_h.swap(__x._M_h); } │ │ │ │ -1446 │ │ │ │ -1447#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -1448 template │ │ │ │ -1449 friend class std::_Hash_merge_helper; │ │ │ │ -1450 │ │ │ │ -1451 template │ │ │ │ -1452 void │ │ │ │ -1453 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) │ │ │ │ -1454 { │ │ │ │ -1455 using ___M_e_r_g_e___h_e_l_p_e_r │ │ │ │ -1456 = ___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_>; │ │ │ │ -1457 _M_h._M_merge_multi(_Merge_helper::_S_get_table(_____s_o_u_r_c_e)); │ │ │ │ -1458 } │ │ │ │ +1422 /// Copy assignment operator. │ │ │ │ +1423 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& │ │ │ │ +_1_4_2_4 _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; │ │ │ │ +1425 │ │ │ │ +1426 /// Move assignment operator. │ │ │ │ +1427 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& │ │ │ │ +_1_4_2_8 _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; │ │ │ │ +1429 │ │ │ │ +1430 /** │ │ │ │ +1431 * @brief %Unordered_multimap list assignment operator. │ │ │ │ +1432 * @param __l An initializer_list. │ │ │ │ +1433 * │ │ │ │ +1434 * This function fills an %unordered_multimap with copies of the │ │ │ │ +1435 * elements in the initializer list @a __l. │ │ │ │ +1436 * │ │ │ │ +1437 * Note that the assignment completely changes the %unordered_multimap │ │ │ │ +1438 * and that the resulting %unordered_multimap's size is the same as the │ │ │ │ +1439 * number of elements assigned. │ │ │ │ +1440 */ │ │ │ │ +1441 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& │ │ │ │ +_1_4_4_2 _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) │ │ │ │ +1443 { │ │ │ │ +1444 _M_h = _____l; │ │ │ │ +1445 return *this; │ │ │ │ +1446 } │ │ │ │ +1447 │ │ │ │ +1448 /// Returns the allocator object used by the %unordered_multimap. │ │ │ │ +1449 _a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ +_1_4_5_0 _g_e_t___a_l_l_o_c_a_t_o_r() _c_o_n_s_t noexcept │ │ │ │ +1451 { return _M_h.get_allocator(); } │ │ │ │ +1452 │ │ │ │ +1453 // size and capacity: │ │ │ │ +1454 │ │ │ │ +1455 /// Returns true if the %unordered_multimap is empty. │ │ │ │ +1456 _GLIBCXX_NODISCARD bool │ │ │ │ +_1_4_5_7 _e_m_p_t_y() _c_o_n_s_t noexcept │ │ │ │ +1458 { return _M_h.empty(); } │ │ │ │ 1459 │ │ │ │ -1460 template │ │ │ │ -1461 void │ │ │ │ -1462 merge(unordered_multiset<_Value, _H2, _P2, _Alloc>&& __source) │ │ │ │ -1463 { merge(__source); } │ │ │ │ +1460 /// Returns the size of the %unordered_multimap. │ │ │ │ +1461 _s_i_z_e___t_y_p_e │ │ │ │ +_1_4_6_2 _s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ +1463 { return _M_h.size(); } │ │ │ │ 1464 │ │ │ │ -1465 template │ │ │ │ -1466 void │ │ │ │ -1467 merge(unordered_set<_Value, _H2, _P2, _Alloc>& __source) │ │ │ │ -1468 { │ │ │ │ -1469 using _Merge_helper │ │ │ │ -1470 = _Hash_merge_helper; │ │ │ │ -1471 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ -1472 } │ │ │ │ -1473 │ │ │ │ -1474 template │ │ │ │ -1475 void │ │ │ │ -1476 merge(unordered_set<_Value, _H2, _P2, _Alloc>&& __source) │ │ │ │ -1477 { merge(__source); } │ │ │ │ -1478#endif // node_extract │ │ │ │ +1465 /// Returns the maximum size of the %unordered_multimap. │ │ │ │ +1466 _s_i_z_e___t_y_p_e │ │ │ │ +_1_4_6_7 _m_a_x___s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ +1468 { return _M_h.max_size(); } │ │ │ │ +1469 │ │ │ │ +1470 // iterators. │ │ │ │ +1471 │ │ │ │ +1472 /** │ │ │ │ +1473 * Returns a read/write iterator that points to the first element in the │ │ │ │ +1474 * %unordered_multimap. │ │ │ │ +1475 */ │ │ │ │ +1476 _i_t_e_r_a_t_o_r │ │ │ │ +_1_4_7_7 _b_e_g_i_n() noexcept │ │ │ │ +1478 { return _M_h.begin(); } │ │ │ │ 1479 │ │ │ │ -1480 // observers. │ │ │ │ -1481 │ │ │ │ -1482 /// Returns the hash functor object with which the %unordered_multiset │ │ │ │ -1483 /// was constructed. │ │ │ │ -1484 _h_a_s_h_e_r │ │ │ │ -_1_4_8_5 _h_a_s_h___f_u_n_c_t_i_o_n() const │ │ │ │ -1486 { return _M_h.hash_function(); } │ │ │ │ -1487 │ │ │ │ -1488 /// Returns the key comparison object with which the %unordered_multiset │ │ │ │ -1489 /// was constructed. │ │ │ │ -1490 _k_e_y___e_q_u_a_l │ │ │ │ -_1_4_9_1 _k_e_y___e_q() const │ │ │ │ -1492 { return _M_h.key_eq(); } │ │ │ │ +1480 ///@{ │ │ │ │ +1481 /** │ │ │ │ +1482 * Returns a read-only (constant) iterator that points to the first │ │ │ │ +1483 * element in the %unordered_multimap. │ │ │ │ +1484 */ │ │ │ │ +1485 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_1_4_8_6 _b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ +1487 { return _M_h.begin(); } │ │ │ │ +1488 │ │ │ │ +1489 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_1_4_9_0 _c_b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ +1491 { return _M_h.begin(); } │ │ │ │ +1492 ///@} │ │ │ │ 1493 │ │ │ │ -1494 // lookup. │ │ │ │ -1495 │ │ │ │ -1496 ///@{ │ │ │ │ -1497 /** │ │ │ │ -1498 * @brief Tries to locate an element in an %unordered_multiset. │ │ │ │ -1499 * @param __x Element to be located. │ │ │ │ -1500 * @return Iterator pointing to sought-after element, or end() if not │ │ │ │ -1501 * found. │ │ │ │ -1502 * │ │ │ │ -1503 * This function takes a key and tries to locate the element with which │ │ │ │ -1504 * the key matches. If successful the function returns an iterator │ │ │ │ -1505 * pointing to the sought after element. If unsuccessful it returns the │ │ │ │ -1506 * past-the-end ( @c end() ) iterator. │ │ │ │ -1507 */ │ │ │ │ -1508 _i_t_e_r_a_t_o_r │ │ │ │ -_1_5_0_9 _f_i_n_d(const _k_e_y___t_y_p_e& __x) │ │ │ │ -1510 { return _M_h.find(__x); } │ │ │ │ -1511 │ │ │ │ -1512#if __cplusplus > 201703L │ │ │ │ -1513 template │ │ │ │ -1514 auto │ │ │ │ -_1_5_1_5 _f_i_n_d(const ___K_t& __x) │ │ │ │ -1516 -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -1517 { return _M_h._M_find_tr(__x); } │ │ │ │ -1518#endif │ │ │ │ -1519 │ │ │ │ -1520 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_1_5_2_1 _f_i_n_d(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -1522 { return _M_h.find(__x); } │ │ │ │ -1523 │ │ │ │ -1524#if __cplusplus > 201703L │ │ │ │ -1525 template │ │ │ │ -1526 auto │ │ │ │ -_1_5_2_7 _f_i_n_d(const ___K_t& __x) const │ │ │ │ -1528 -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -1529 { return _M_h._M_find_tr(__x); } │ │ │ │ -1530#endif │ │ │ │ -1531 ///@} │ │ │ │ -1532 │ │ │ │ -1533 ///@{ │ │ │ │ -1534 /** │ │ │ │ -1535 * @brief Finds the number of elements. │ │ │ │ -1536 * @param __x Element to located. │ │ │ │ -1537 * @return Number of elements with specified key. │ │ │ │ -1538 */ │ │ │ │ -1539 _s_i_z_e___t_y_p_e │ │ │ │ -_1_5_4_0 _c_o_u_n_t(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -1541 { return _M_h.count(__x); } │ │ │ │ -1542 │ │ │ │ -1543#if __cplusplus > 201703L │ │ │ │ -1544 template │ │ │ │ -1545 auto │ │ │ │ -_1_5_4_6 _c_o_u_n_t(const ___K_t& __x) const -> decltype(_M_h._M_count_tr(__x)) │ │ │ │ -1547 { return _M_h._M_count_tr(__x); } │ │ │ │ -1548#endif │ │ │ │ -1549 ///@} │ │ │ │ -1550 │ │ │ │ -1551#if __cplusplus > 201703L │ │ │ │ -1552 ///@{ │ │ │ │ -1553 /** │ │ │ │ -1554 * @brief Finds whether an element with the given key exists. │ │ │ │ -1555 * @param __x Key of elements to be located. │ │ │ │ -1556 * @return True if there is any element with the specified key. │ │ │ │ -1557 */ │ │ │ │ -1558 bool │ │ │ │ -_1_5_5_9 _c_o_n_t_a_i_n_s(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -1560 { return _M_h.find(__x) != _M_h.end(); } │ │ │ │ -1561 │ │ │ │ -1562 template │ │ │ │ -1563 auto │ │ │ │ -_1_5_6_4 _c_o_n_t_a_i_n_s(const ___K_t& __x) const │ │ │ │ -1565 -> decltype(_M_h._M_find_tr(__x), _v_o_i_d(), true) │ │ │ │ -1566 { return _M_h._M_find_tr(__x) != _M_h.end(); } │ │ │ │ -1567 ///@} │ │ │ │ -1568#endif │ │ │ │ -1569 │ │ │ │ -1570 ///@{ │ │ │ │ -1571 /** │ │ │ │ -1572 * @brief Finds a subsequence matching given key. │ │ │ │ -1573 * @param __x Key to be located. │ │ │ │ -1574 * @return Pair of iterators that possibly points to the subsequence │ │ │ │ -1575 * matching given key. │ │ │ │ -1576 */ │ │ │ │ -1577 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _i_t_e_r_a_t_o_r_> │ │ │ │ -_1_5_7_8 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -1579 { return _M_h.equal_range(__x); } │ │ │ │ -1580 │ │ │ │ -1581#if __cplusplus > 201703L │ │ │ │ -1582 template │ │ │ │ -1583 auto │ │ │ │ -_1_5_8_4 _e_q_u_a_l___r_a_n_g_e(const ___K_t& __x) │ │ │ │ -1585 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -1586 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ -1587#endif │ │ │ │ +1494 /** │ │ │ │ +1495 * Returns a read/write iterator that points one past the last element in │ │ │ │ +1496 * the %unordered_multimap. │ │ │ │ +1497 */ │ │ │ │ +1498 _i_t_e_r_a_t_o_r │ │ │ │ +_1_4_9_9 _e_n_d() noexcept │ │ │ │ +1500 { return _M_h.end(); } │ │ │ │ +1501 │ │ │ │ +1502 ///@{ │ │ │ │ +1503 /** │ │ │ │ +1504 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ +1505 * element in the %unordered_multimap. │ │ │ │ +1506 */ │ │ │ │ +1507 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_1_5_0_8 _e_n_d() _c_o_n_s_t noexcept │ │ │ │ +1509 { return _M_h.end(); } │ │ │ │ +1510 │ │ │ │ +1511 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_1_5_1_2 _c_e_n_d() _c_o_n_s_t noexcept │ │ │ │ +1513 { return _M_h.end(); } │ │ │ │ +1514 ///@} │ │ │ │ +1515 │ │ │ │ +1516 // modifiers. │ │ │ │ +1517 │ │ │ │ +1518 /** │ │ │ │ +1519 * @brief Attempts to build and insert a std::pair into the │ │ │ │ +1520 * %unordered_multimap. │ │ │ │ +1521 * │ │ │ │ +1522 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ +1523 * std::piecewise_contruct for passing arguments to each │ │ │ │ +1524 * part of the pair constructor). │ │ │ │ +1525 * │ │ │ │ +1526 * @return An iterator that points to the inserted pair. │ │ │ │ +1527 * │ │ │ │ +1528 * This function attempts to build and insert a (key, value) %pair into │ │ │ │ +1529 * the %unordered_multimap. │ │ │ │ +1530 * │ │ │ │ +1531 * Insertion requires amortized constant time. │ │ │ │ +1532 */ │ │ │ │ +1533 template │ │ │ │ +1534 _i_t_e_r_a_t_o_r │ │ │ │ +_1_5_3_5 _e_m_p_l_a_c_e(___A_r_g_s&&... _____a_r_g_s) │ │ │ │ +1536 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); } │ │ │ │ +1537 │ │ │ │ +1538 /** │ │ │ │ +1539 * @brief Attempts to build and insert a std::pair into the │ │ │ │ +1540 * %unordered_multimap. │ │ │ │ +1541 * │ │ │ │ +1542 * @param __pos An iterator that serves as a hint as to where the pair │ │ │ │ +1543 * should be inserted. │ │ │ │ +1544 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ +1545 * std::piecewise_contruct for passing arguments to each │ │ │ │ +1546 * part of the pair constructor). │ │ │ │ +1547 * @return An iterator that points to the element with key of the │ │ │ │ +1548 * std::pair built from @a __args. │ │ │ │ +1549 * │ │ │ │ +1550 * Note that the first parameter is only a hint and can potentially │ │ │ │ +1551 * improve the performance of the insertion process. A bad hint would │ │ │ │ +1552 * cause no gains in efficiency. │ │ │ │ +1553 * │ │ │ │ +1554 * See │ │ │ │ +1555 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ +associative.html#containers.associative.insert_hints │ │ │ │ +1556 * for more on @a hinting. │ │ │ │ +1557 * │ │ │ │ +1558 * Insertion requires amortized constant time. │ │ │ │ +1559 */ │ │ │ │ +1560 template │ │ │ │ +1561 _i_t_e_r_a_t_o_r │ │ │ │ +_1_5_6_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) │ │ │ │ +1563 { 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)...); } │ │ │ │ +1564 │ │ │ │ +1565 ///@{ │ │ │ │ +1566 /** │ │ │ │ +1567 * @brief Inserts a std::pair into the %unordered_multimap. │ │ │ │ +1568 * @param __x Pair to be inserted (see std::make_pair for easy │ │ │ │ +1569 * creation of pairs). │ │ │ │ +1570 * │ │ │ │ +1571 * @return An iterator that points to the inserted pair. │ │ │ │ +1572 * │ │ │ │ +1573 * Insertion requires amortized constant time. │ │ │ │ +1574 */ │ │ │ │ +1575 _i_t_e_r_a_t_o_r │ │ │ │ +_1_5_7_6 _i_n_s_e_r_t(const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ +1577 { return _M_h.insert(__x); } │ │ │ │ +1578 │ │ │ │ +1579 _i_t_e_r_a_t_o_r │ │ │ │ +_1_5_8_0 _i_n_s_e_r_t(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ +1581 { return _M_h.insert(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ +1582 │ │ │ │ +1583 template │ │ │ │ +1584 _____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_5_8_5 _i_n_s_e_r_t(___P_a_i_r&& __x) │ │ │ │ +1586 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ +1587 ///@} │ │ │ │ 1588 │ │ │ │ -1589 _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_5_9_0 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -1591 { return _M_h.equal_range(__x); } │ │ │ │ -1592 │ │ │ │ -1593#if __cplusplus > 201703L │ │ │ │ -1594 template │ │ │ │ -1595 auto │ │ │ │ -_1_5_9_6 _e_q_u_a_l___r_a_n_g_e(const ___K_t& __x) const │ │ │ │ -1597 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -1598 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ -1599#endif │ │ │ │ -1600 ///@} │ │ │ │ -1601 │ │ │ │ -1602 // bucket interface. │ │ │ │ -1603 │ │ │ │ -1604 /// Returns the number of buckets of the %unordered_multiset. │ │ │ │ -1605 _s_i_z_e___t_y_p_e │ │ │ │ -_1_6_0_6 _b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ -1607 { return _M_h.bucket_count(); } │ │ │ │ -1608 │ │ │ │ -1609 /// Returns the maximum number of buckets of the %unordered_multiset. │ │ │ │ -1610 _s_i_z_e___t_y_p_e │ │ │ │ -_1_6_1_1 _m_a_x___b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ -1612 { return _M_h.max_bucket_count(); } │ │ │ │ -1613 │ │ │ │ -1614 /* │ │ │ │ -1615 * @brief Returns the number of elements in a given bucket. │ │ │ │ -1616 * @param __n A bucket index. │ │ │ │ -1617 * @return The number of elements in the bucket. │ │ │ │ -1618 */ │ │ │ │ -1619 _s_i_z_e___t_y_p_e │ │ │ │ -1620 bucket_size(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1621 { return _M_h.bucket_size(__n); } │ │ │ │ -1622 │ │ │ │ -1623 /* │ │ │ │ -1624 * @brief Returns the bucket index of a given element. │ │ │ │ -1625 * @param __key A key instance. │ │ │ │ -1626 * @return The key bucket index. │ │ │ │ -1627 */ │ │ │ │ -1628 _s_i_z_e___t_y_p_e │ │ │ │ -1629 bucket(const _k_e_y___t_y_p_e& __key) const │ │ │ │ -1630 { return _M_h.bucket(__key); } │ │ │ │ -1631 │ │ │ │ -1632 ///@{ │ │ │ │ -1633 /** │ │ │ │ -1634 * @brief Returns a read-only (constant) iterator pointing to the first │ │ │ │ -1635 * bucket element. │ │ │ │ -1636 * @param __n The bucket index. │ │ │ │ -1637 * @return A read-only local iterator. │ │ │ │ -1638 */ │ │ │ │ -1639 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_6_4_0 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1641 { return _M_h.begin(__n); } │ │ │ │ -1642 │ │ │ │ -1643 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_6_4_4 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1645 { return _M_h.begin(__n); } │ │ │ │ -1646 │ │ │ │ -1647 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_6_4_8 _c_b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1649 { return _M_h.cbegin(__n); } │ │ │ │ -1650 ///@} │ │ │ │ -1651 │ │ │ │ -1652 ///@{ │ │ │ │ -1653 /** │ │ │ │ -1654 * @brief Returns a read-only (constant) iterator pointing to one past │ │ │ │ -1655 * the last bucket elements. │ │ │ │ -1656 * @param __n The bucket index. │ │ │ │ -1657 * @return A read-only local iterator. │ │ │ │ -1658 */ │ │ │ │ -1659 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_6_6_0 _e_n_d(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1661 { return _M_h.end(__n); } │ │ │ │ -1662 │ │ │ │ -1663 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_6_6_4 _e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1665 { return _M_h.end(__n); } │ │ │ │ -1666 │ │ │ │ -1667 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_6_6_8 _c_e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1669 { return _M_h.cend(__n); } │ │ │ │ -1670 ///@} │ │ │ │ -1671 │ │ │ │ -1672 // hash policy. │ │ │ │ -1673 │ │ │ │ -1674 /// Returns the average number of elements per bucket. │ │ │ │ -1675 float │ │ │ │ -_1_6_7_6 _l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -1677 { return _M_h.load_factor(); } │ │ │ │ -1678 │ │ │ │ -1679 /// Returns a positive number that the %unordered_multiset tries to keep │ │ │ │ -the │ │ │ │ -1680 /// load factor less than or equal to. │ │ │ │ -1681 float │ │ │ │ -_1_6_8_2 _m_a_x___l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -1683 { return _M_h.max_load_factor(); } │ │ │ │ -1684 │ │ │ │ -1685 /** │ │ │ │ -1686 * @brief Change the %unordered_multiset maximum load factor. │ │ │ │ -1687 * @param __z The new maximum load factor. │ │ │ │ -1688 */ │ │ │ │ -1689 void │ │ │ │ -_1_6_9_0 _m_a_x___l_o_a_d___f_a_c_t_o_r(float _____z) │ │ │ │ -1691 { _M_h.max_load_factor(_____z); } │ │ │ │ -1692 │ │ │ │ -1693 /** │ │ │ │ -1694 * @brief May rehash the %unordered_multiset. │ │ │ │ -1695 * @param __n The new number of buckets. │ │ │ │ -1696 * │ │ │ │ -1697 * Rehash will occur only if the new number of buckets respect the │ │ │ │ -1698 * %unordered_multiset maximum load factor. │ │ │ │ -1699 */ │ │ │ │ -1700 void │ │ │ │ -_1_7_0_1 _r_e_h_a_s_h(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1702 { _M_h.rehash(__n); } │ │ │ │ -1703 │ │ │ │ -1704 /** │ │ │ │ -1705 * @brief Prepare the %unordered_multiset for a specified number of │ │ │ │ -1706 * elements. │ │ │ │ -1707 * @param __n Number of elements required. │ │ │ │ -1708 * │ │ │ │ -1709 * Same as rehash(ceil(n / max_load_factor())). │ │ │ │ +1589 ///@{ │ │ │ │ +1590 /** │ │ │ │ +1591 * @brief Inserts a std::pair into the %unordered_multimap. │ │ │ │ +1592 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ +1593 * pair should be inserted. │ │ │ │ +1594 * @param __x Pair to be inserted (see std::make_pair for easy creation │ │ │ │ +1595 * of pairs). │ │ │ │ +1596 * @return An iterator that points to the element with key of │ │ │ │ +1597 * @a __x (may or may not be the %pair passed in). │ │ │ │ +1598 * │ │ │ │ +1599 * Note that the first parameter is only a hint and can potentially │ │ │ │ +1600 * improve the performance of the insertion process. A bad hint would │ │ │ │ +1601 * cause no gains in efficiency. │ │ │ │ +1602 * │ │ │ │ +1603 * See │ │ │ │ +1604 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ +associative.html#containers.associative.insert_hints │ │ │ │ +1605 * for more on @a hinting. │ │ │ │ +1606 * │ │ │ │ +1607 * Insertion requires amortized constant time. │ │ │ │ +1608 */ │ │ │ │ +1609 _i_t_e_r_a_t_o_r │ │ │ │ +_1_6_1_0 _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) │ │ │ │ +1611 { return _M_h.insert(_____h_i_n_t, __x); } │ │ │ │ +1612 │ │ │ │ +1613 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +1614 // 2354. Unnecessary copying when inserting into maps with braced-init │ │ │ │ +1615 _i_t_e_r_a_t_o_r │ │ │ │ +_1_6_1_6 _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) │ │ │ │ +1617 { return _M_h.insert(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ +1618 │ │ │ │ +1619 template │ │ │ │ +1620 _____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_6_2_1 _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) │ │ │ │ +1622 { return _M_h.emplace_hint(_____h_i_n_t, _s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ +1623 ///@} │ │ │ │ +1624 │ │ │ │ +1625 /** │ │ │ │ +1626 * @brief A template function that attempts to insert a range of │ │ │ │ +1627 * elements. │ │ │ │ +1628 * @param __first Iterator pointing to the start of the range to be │ │ │ │ +1629 * inserted. │ │ │ │ +1630 * @param __last Iterator pointing to the end of the range. │ │ │ │ +1631 * │ │ │ │ +1632 * Complexity similar to that of the range constructor. │ │ │ │ +1633 */ │ │ │ │ +1634 template │ │ │ │ +1635 void │ │ │ │ +_1_6_3_6 _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) │ │ │ │ +1637 { _M_h.insert(__first, __last); } │ │ │ │ +1638 │ │ │ │ +1639 /** │ │ │ │ +1640 * @brief Attempts to insert a list of elements into the │ │ │ │ +1641 * %unordered_multimap. │ │ │ │ +1642 * @param __l A std::initializer_list of elements │ │ │ │ +1643 * to be inserted. │ │ │ │ +1644 * │ │ │ │ +1645 * Complexity similar to that of the range constructor. │ │ │ │ +1646 */ │ │ │ │ +1647 void │ │ │ │ +_1_6_4_8 _i_n_s_e_r_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> _____l) │ │ │ │ +1649 { _M_h.insert(_____l); } │ │ │ │ +1650 │ │ │ │ +1651#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +1652 /// Extract a node. │ │ │ │ +1653 node_type │ │ │ │ +_1_6_5_4 _e_x_t_r_a_c_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s) │ │ │ │ +1655 { │ │ │ │ +1656 __glibcxx_assert(_____p_o_s != _e_n_d()); │ │ │ │ +1657 return _M_h.extract(_____p_o_s); │ │ │ │ +1658 } │ │ │ │ +1659 │ │ │ │ +1660 /// Extract a node. │ │ │ │ +1661 node_type │ │ │ │ +_1_6_6_2 _e_x_t_r_a_c_t(const _k_e_y___t_y_p_e& _____k_e_y) │ │ │ │ +1663 { return _M_h.extract(_____k_e_y); } │ │ │ │ +1664 │ │ │ │ +1665 /// Re-insert an extracted node. │ │ │ │ +1666 _i_t_e_r_a_t_o_r │ │ │ │ +_1_6_6_7 _i_n_s_e_r_t(node_type&& _____n_h) │ │ │ │ +1668 { return _M_h._M_reinsert_node_multi(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(_____n_h)); } │ │ │ │ +1669 │ │ │ │ +1670 /// Re-insert an extracted node. │ │ │ │ +1671 _i_t_e_r_a_t_o_r │ │ │ │ +_1_6_7_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) │ │ │ │ +1673 { return _M_h._M_reinsert_node_multi(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(_____n_h)); } │ │ │ │ +1674#endif // node_extract │ │ │ │ +1675 │ │ │ │ +1676 ///@{ │ │ │ │ +1677 /** │ │ │ │ +1678 * @brief Erases an element from an %unordered_multimap. │ │ │ │ +1679 * @param __position An iterator pointing to the element to be erased. │ │ │ │ +1680 * @return An iterator pointing to the element immediately following │ │ │ │ +1681 * @a __position prior to the element being erased. If no such │ │ │ │ +1682 * element exists, end() is returned. │ │ │ │ +1683 * │ │ │ │ +1684 * This function erases an element, pointed to by the given iterator, │ │ │ │ +1685 * from an %unordered_multimap. │ │ │ │ +1686 * Note that this function only erases the element, and that if the │ │ │ │ +1687 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ +1688 * any way. Managing the pointer is the user's responsibility. │ │ │ │ +1689 */ │ │ │ │ +1690 _i_t_e_r_a_t_o_r │ │ │ │ +_1_6_9_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) │ │ │ │ +1692 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ +1693 │ │ │ │ +1694 // LWG 2059. │ │ │ │ +1695 _i_t_e_r_a_t_o_r │ │ │ │ +_1_6_9_6 _e_r_a_s_e(_i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n) │ │ │ │ +1697 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ +1698 ///@} │ │ │ │ +1699 │ │ │ │ +1700 /** │ │ │ │ +1701 * @brief Erases elements according to the provided key. │ │ │ │ +1702 * @param __x Key of elements to be erased. │ │ │ │ +1703 * @return The number of elements erased. │ │ │ │ +1704 * │ │ │ │ +1705 * This function erases all the elements located by the given key from │ │ │ │ +1706 * an %unordered_multimap. │ │ │ │ +1707 * Note that this function only erases the element, and that if the │ │ │ │ +1708 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ +1709 * any way. Managing the pointer is the user's responsibility. │ │ │ │ 1710 */ │ │ │ │ -1711 void │ │ │ │ -_1_7_1_2 _r_e_s_e_r_v_e(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1713 { _M_h.reserve(__n); } │ │ │ │ +1711 _s_i_z_e___t_y_p_e │ │ │ │ +_1_7_1_2 _e_r_a_s_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ +1713 { return _M_h.erase(__x); } │ │ │ │ 1714 │ │ │ │ -1715 template │ │ │ │ -1717 friend bool │ │ │ │ -1718 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_>&, │ │ │ │ -1719 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_>&); │ │ │ │ -1720 }; │ │ │ │ -1721 │ │ │ │ -1722 │ │ │ │ -1723#if __cpp_deduction_guides >= 201606 │ │ │ │ -1724 │ │ │ │ -1725 template::value_type>, │ │ │ │ -1728 typename _Pred = │ │ │ │ -1729 equal_to::value_type>, │ │ │ │ -1730 typename _Allocator = │ │ │ │ -1731 allocator::value_type>, │ │ │ │ -1732 typename = _RequireInputIter<_InputIterator>, │ │ │ │ -1733 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -1734 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -1735 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1736 unordered_multiset(_InputIterator, _InputIterator, │ │ │ │ -1737 _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 = {}, │ │ │ │ -1738 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ -1739 _Allocator = _Allocator()) │ │ │ │ -1740 -> unordered_multiset:: │ │ │ │ -value_type, │ │ │ │ -1741 _Hash, _Pred, _Allocator>; │ │ │ │ -1742 │ │ │ │ -1743 template, │ │ │ │ -1744 typename _Pred = equal_to<_Tp>, │ │ │ │ -1745 typename _Allocator = allocator<_Tp>, │ │ │ │ -1746 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -1747 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -1748 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1749 unordered_multiset(initializer_list<_Tp>, │ │ │ │ -1750 _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 = {}, │ │ │ │ -1751 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ -1752 _Allocator = _Allocator()) │ │ │ │ -1753 -> unordered_multiset<_Tp, _Hash, _Pred, _Allocator>; │ │ │ │ -1754 │ │ │ │ -1755 template, │ │ │ │ -1757 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1758 unordered_multiset(_InputIterator, _InputIterator, │ │ │ │ -1759 _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) │ │ │ │ -1760 -> unordered_multiset:: │ │ │ │ -value_type, │ │ │ │ -1761 hash::value_type>, │ │ │ │ -1763 equal_to::value_type>, │ │ │ │ -1765 _Allocator>; │ │ │ │ -1766 │ │ │ │ -1767 template, │ │ │ │ -1769 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -1770 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1771 unordered_multiset(_InputIterator, _InputIterator, │ │ │ │ -1772 _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, │ │ │ │ -1773 _Hash, _Allocator) │ │ │ │ -1774 -> unordered_multiset::value_type, │ │ │ │ -1776 _Hash, │ │ │ │ -1777 equal_to< │ │ │ │ -1778 typename │ │ │ │ -1779 iterator_traits<_InputIterator>::value_type>, │ │ │ │ -1780 _Allocator>; │ │ │ │ -1781 │ │ │ │ -1782 template> │ │ │ │ -1784 unordered_multiset(initializer_list<_Tp>, │ │ │ │ -1785 _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) │ │ │ │ -1786 -> unordered_multiset<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>; │ │ │ │ -1787 │ │ │ │ -1788 template, │ │ │ │ -1790 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1791 unordered_multiset(initializer_list<_Tp>, │ │ │ │ -1792 _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) │ │ │ │ -1793 -> unordered_multiset<_Tp, _Hash, equal_to<_Tp>, _Allocator>; │ │ │ │ -1794 │ │ │ │ -1795#endif │ │ │ │ -1796 │ │ │ │ -1797 template │ │ │ │ -1798 inline void │ │ │ │ -1799 swap(unordered_set<_Value, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -1800 unordered_set<_Value, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -1801 noexcept(noexcept(__x.swap(__y))) │ │ │ │ -1802 { __x.swap(__y); } │ │ │ │ -1803 │ │ │ │ -1804 template │ │ │ │ -1805 inline void │ │ │ │ -1806 swap(unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -1807 unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -1808 noexcept(noexcept(__x.swap(__y))) │ │ │ │ -1809 { __x.swap(__y); } │ │ │ │ -1810 │ │ │ │ -1811 template │ │ │ │ -1812 inline bool │ │ │ │ -1813 operator==(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -1814 const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -1815 { return __x._M_h._M_equal(__y._M_h); } │ │ │ │ -1816 │ │ │ │ -1817#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ -1818 template │ │ │ │ -1819 inline bool │ │ │ │ -1820 operator!=(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -1821 const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -1822 { return !(__x == __y); } │ │ │ │ -1823#endif │ │ │ │ -1824 │ │ │ │ -1825 template │ │ │ │ -1826 inline bool │ │ │ │ -1827 operator==(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -1828 const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -1829 { return __x._M_h._M_equal(__y._M_h); } │ │ │ │ +1715 /** │ │ │ │ +1716 * @brief Erases a [__first,__last) range of elements from an │ │ │ │ +1717 * %unordered_multimap. │ │ │ │ +1718 * @param __first Iterator pointing to the start of the range to be │ │ │ │ +1719 * erased. │ │ │ │ +1720 * @param __last Iterator pointing to the end of the range to │ │ │ │ +1721 * be erased. │ │ │ │ +1722 * @return The iterator @a __last. │ │ │ │ +1723 * │ │ │ │ +1724 * This function erases a sequence of elements from an │ │ │ │ +1725 * %unordered_multimap. │ │ │ │ +1726 * Note that this function only erases the elements, and that if │ │ │ │ +1727 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ +1728 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ +1729 */ │ │ │ │ +1730 _i_t_e_r_a_t_o_r │ │ │ │ +_1_7_3_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) │ │ │ │ +1732 { return _M_h.erase(__first, __last); } │ │ │ │ +1733 │ │ │ │ +1734 /** │ │ │ │ +1735 * Erases all elements in an %unordered_multimap. │ │ │ │ +1736 * Note that this function only erases the elements, and that if the │ │ │ │ +1737 * elements themselves are pointers, the pointed-to memory is not touched │ │ │ │ +1738 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ +1739 */ │ │ │ │ +1740 void │ │ │ │ +_1_7_4_1 _c_l_e_a_r() noexcept │ │ │ │ +1742 { _M_h.clear(); } │ │ │ │ +1743 │ │ │ │ +1744 /** │ │ │ │ +1745 * @brief Swaps data with another %unordered_multimap. │ │ │ │ +1746 * @param __x An %unordered_multimap of the same element and allocator │ │ │ │ +1747 * types. │ │ │ │ +1748 * │ │ │ │ +1749 * This exchanges the elements between two %unordered_multimap in │ │ │ │ +1750 * constant time. │ │ │ │ +1751 * Note that the global std::swap() function is specialized such that │ │ │ │ +1752 * std::swap(m1,m2) will feed to this function. │ │ │ │ +1753 */ │ │ │ │ +1754 void │ │ │ │ +_1_7_5_5 _s_w_a_p(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& __x) │ │ │ │ +1756 noexcept( noexcept(_M_h.swap(__x._M_h)) ) │ │ │ │ +1757 { _M_h.swap(__x._M_h); } │ │ │ │ +1758 │ │ │ │ +1759#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +1760 template │ │ │ │ +1761 friend class std::_Hash_merge_helper; │ │ │ │ +1762 │ │ │ │ +1763 template │ │ │ │ +1764 void │ │ │ │ +1765 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) │ │ │ │ +1766 { │ │ │ │ +1767 using ___M_e_r_g_e___h_e_l_p_e_r │ │ │ │ +1768 = ___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_>; │ │ │ │ +1769 _M_h._M_merge_multi(_Merge_helper::_S_get_table(_____s_o_u_r_c_e)); │ │ │ │ +1770 } │ │ │ │ +1771 │ │ │ │ +1772 template │ │ │ │ +1773 void │ │ │ │ +1774 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ +1775 { merge(__source); } │ │ │ │ +1776 │ │ │ │ +1777 template │ │ │ │ +1778 void │ │ │ │ +1779 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>& __source) │ │ │ │ +1780 { │ │ │ │ +1781 using _Merge_helper │ │ │ │ +1782 = _Hash_merge_helper; │ │ │ │ +1783 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ +1784 } │ │ │ │ +1785 │ │ │ │ +1786 template │ │ │ │ +1787 void │ │ │ │ +1788 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ +1789 { merge(__source); } │ │ │ │ +1790#endif // node_extract │ │ │ │ +1791 │ │ │ │ +1792 // observers. │ │ │ │ +1793 │ │ │ │ +1794 /// Returns the hash functor object with which the %unordered_multimap │ │ │ │ +1795 /// was constructed. │ │ │ │ +1796 _h_a_s_h_e_r │ │ │ │ +_1_7_9_7 _h_a_s_h___f_u_n_c_t_i_o_n() const │ │ │ │ +1798 { return _M_h.hash_function(); } │ │ │ │ +1799 │ │ │ │ +1800 /// Returns the key comparison object with which the %unordered_multimap │ │ │ │ +1801 /// was constructed. │ │ │ │ +1802 _k_e_y___e_q_u_a_l │ │ │ │ +_1_8_0_3 _k_e_y___e_q() const │ │ │ │ +1804 { return _M_h.key_eq(); } │ │ │ │ +1805 │ │ │ │ +1806 // lookup. │ │ │ │ +1807 │ │ │ │ +1808 ///@{ │ │ │ │ +1809 /** │ │ │ │ +1810 * @brief Tries to locate an element in an %unordered_multimap. │ │ │ │ +1811 * @param __x Key to be located. │ │ │ │ +1812 * @return Iterator pointing to sought-after element, or end() if not │ │ │ │ +1813 * found. │ │ │ │ +1814 * │ │ │ │ +1815 * This function takes a key and tries to locate the element with which │ │ │ │ +1816 * the key matches. If successful the function returns an iterator │ │ │ │ +1817 * pointing to the sought after element. If unsuccessful it returns the │ │ │ │ +1818 * past-the-end ( @c end() ) iterator. │ │ │ │ +1819 */ │ │ │ │ +1820 _i_t_e_r_a_t_o_r │ │ │ │ +_1_8_2_1 _f_i_n_d(const _k_e_y___t_y_p_e& __x) │ │ │ │ +1822 { return _M_h.find(__x); } │ │ │ │ +1823 │ │ │ │ +1824#if __cplusplus > 201703L │ │ │ │ +1825 template │ │ │ │ +1826 auto │ │ │ │ +_1_8_2_7 _f_i_n_d(const ___K_t& __x) -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ +1828 { return _M_h._M_find_tr(__x); } │ │ │ │ +1829#endif │ │ │ │ 1830 │ │ │ │ -1831#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ -1832 template │ │ │ │ -1833 inline bool │ │ │ │ -1834 operator!=(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -1835 const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -1836 { return !(__x == __y); } │ │ │ │ -1837#endif │ │ │ │ -1838 │ │ │ │ -1839_GLIBCXX_END_NAMESPACE_CONTAINER │ │ │ │ -1840 │ │ │ │ -1841#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -1842 // Allow std::unordered_set access to internals of compatible sets. │ │ │ │ -1843 template │ │ │ │ -1845 struct _Hash_merge_helper< │ │ │ │ -1846 _GLIBCXX_STD_C::unordered_set<_Val, _Hash1, _Eq1, _Alloc>, _Hash2, _Eq2> │ │ │ │ -1847 { │ │ │ │ -1848 private: │ │ │ │ -1849 template │ │ │ │ -1850 using unordered_set = _GLIBCXX_STD_C::unordered_set<_Tp...>; │ │ │ │ -1851 template │ │ │ │ -1852 using unordered_multiset = _GLIBCXX_STD_C::unordered_multiset<_Tp...>; │ │ │ │ -1853 │ │ │ │ -1854 friend unordered_set<_Val, _Hash1, _Eq1, _Alloc>; │ │ │ │ -1855 │ │ │ │ -1856 static auto& │ │ │ │ -1857 _S_get_table(unordered_set<_Val, _Hash2, _Eq2, _Alloc>& __set) │ │ │ │ -1858 { return __set._M_h; } │ │ │ │ -1859 │ │ │ │ -1860 static auto& │ │ │ │ -1861 _S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set) │ │ │ │ -1862 { return __set._M_h; } │ │ │ │ -1863 }; │ │ │ │ -1864 │ │ │ │ -1865 // Allow std::unordered_multiset access to internals of compatible sets. │ │ │ │ -1866 template │ │ │ │ -1868 struct _Hash_merge_helper< │ │ │ │ -1869 _GLIBCXX_STD_C::unordered_multiset<_Val, _Hash1, _Eq1, _Alloc>, │ │ │ │ -1870 _Hash2, _Eq2> │ │ │ │ -1871 { │ │ │ │ -1872 private: │ │ │ │ -1873 template │ │ │ │ -1874 using unordered_set = _GLIBCXX_STD_C::unordered_set<_Tp...>; │ │ │ │ -1875 template │ │ │ │ -1876 using unordered_multiset = _GLIBCXX_STD_C::unordered_multiset<_Tp...>; │ │ │ │ -1877 │ │ │ │ -1878 friend unordered_multiset<_Val, _Hash1, _Eq1, _Alloc>; │ │ │ │ +1831 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_1_8_3_2 _f_i_n_d(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +1833 { return _M_h.find(__x); } │ │ │ │ +1834 │ │ │ │ +1835#if __cplusplus > 201703L │ │ │ │ +1836 template │ │ │ │ +1837 auto │ │ │ │ +_1_8_3_8 _f_i_n_d(const ___K_t& __x) const -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ +1839 { return _M_h._M_find_tr(__x); } │ │ │ │ +1840#endif │ │ │ │ +1841 ///@} │ │ │ │ +1842 │ │ │ │ +1843 ///@{ │ │ │ │ +1844 /** │ │ │ │ +1845 * @brief Finds the number of elements. │ │ │ │ +1846 * @param __x Key to count. │ │ │ │ +1847 * @return Number of elements with specified key. │ │ │ │ +1848 */ │ │ │ │ +1849 _s_i_z_e___t_y_p_e │ │ │ │ +_1_8_5_0 _c_o_u_n_t(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +1851 { return _M_h.count(__x); } │ │ │ │ +1852 │ │ │ │ +1853#if __cplusplus > 201703L │ │ │ │ +1854 template │ │ │ │ +1855 auto │ │ │ │ +_1_8_5_6 _c_o_u_n_t(const ___K_t& __x) const -> decltype(_M_h._M_count_tr(__x)) │ │ │ │ +1857 { return _M_h._M_count_tr(__x); } │ │ │ │ +1858#endif │ │ │ │ +1859 ///@} │ │ │ │ +1860 │ │ │ │ +1861#if __cplusplus > 201703L │ │ │ │ +1862 ///@{ │ │ │ │ +1863 /** │ │ │ │ +1864 * @brief Finds whether an element with the given key exists. │ │ │ │ +1865 * @param __x Key of elements to be located. │ │ │ │ +1866 * @return True if there is any element with the specified key. │ │ │ │ +1867 */ │ │ │ │ +1868 bool │ │ │ │ +_1_8_6_9 _c_o_n_t_a_i_n_s(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +1870 { return _M_h.find(__x) != _M_h.end(); } │ │ │ │ +1871 │ │ │ │ +1872 template │ │ │ │ +1873 auto │ │ │ │ +_1_8_7_4 _c_o_n_t_a_i_n_s(const ___K_t& __x) const │ │ │ │ +1875 -> decltype(_M_h._M_find_tr(__x), _v_o_i_d(), true) │ │ │ │ +1876 { return _M_h._M_find_tr(__x) != _M_h.end(); } │ │ │ │ +1877 ///@} │ │ │ │ +1878#endif │ │ │ │ 1879 │ │ │ │ -1880 static auto& │ │ │ │ -1881 _S_get_table(unordered_set<_Val, _Hash2, _Eq2, _Alloc>& __set) │ │ │ │ -1882 { return __set._M_h; } │ │ │ │ -1883 │ │ │ │ -1884 static auto& │ │ │ │ -1885 _S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set) │ │ │ │ -1886 { return __set._M_h; } │ │ │ │ -1887 }; │ │ │ │ -1888#endif // node_extract │ │ │ │ -1889 │ │ │ │ -1890_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -1891} // namespace std │ │ │ │ -1892 │ │ │ │ -1893#endif /* _UNORDERED_SET_H */ │ │ │ │ -_s_t_l___f_u_n_c_t_i_o_n_._h │ │ │ │ +1880 ///@{ │ │ │ │ +1881 /** │ │ │ │ +1882 * @brief Finds a subsequence matching given key. │ │ │ │ +1883 * @param __x Key to be located. │ │ │ │ +1884 * @return Pair of iterators that possibly points to the subsequence │ │ │ │ +1885 * matching given key. │ │ │ │ +1886 */ │ │ │ │ +1887 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _i_t_e_r_a_t_o_r_> │ │ │ │ +_1_8_8_8 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ +1889 { return _M_h.equal_range(__x); } │ │ │ │ +1890 │ │ │ │ +1891#if __cplusplus > 201703L │ │ │ │ +1892 template │ │ │ │ +1893 auto │ │ │ │ +_1_8_9_4 _e_q_u_a_l___r_a_n_g_e(const ___K_t& __x) │ │ │ │ +1895 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ +1896 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ +1897#endif │ │ │ │ +1898 │ │ │ │ +1899 _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_9_0_0 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) const │ │ │ │ +1901 { return _M_h.equal_range(__x); } │ │ │ │ +1902 │ │ │ │ +1903#if __cplusplus > 201703L │ │ │ │ +1904 template │ │ │ │ +1905 auto │ │ │ │ +_1_9_0_6 _e_q_u_a_l___r_a_n_g_e(const ___K_t& __x) const │ │ │ │ +1907 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ +1908 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ +1909#endif │ │ │ │ +1910 ///@} │ │ │ │ +1911 │ │ │ │ +1912 // bucket interface. │ │ │ │ +1913 │ │ │ │ +1914 /// Returns the number of buckets of the %unordered_multimap. │ │ │ │ +1915 _s_i_z_e___t_y_p_e │ │ │ │ +_1_9_1_6 _b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ +1917 { return _M_h.bucket_count(); } │ │ │ │ +1918 │ │ │ │ +1919 /// Returns the maximum number of buckets of the %unordered_multimap. │ │ │ │ +1920 _s_i_z_e___t_y_p_e │ │ │ │ +_1_9_2_1 _m_a_x___b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ +1922 { return _M_h.max_bucket_count(); } │ │ │ │ +1923 │ │ │ │ +1924 /* │ │ │ │ +1925 * @brief Returns the number of elements in a given bucket. │ │ │ │ +1926 * @param __n A bucket index. │ │ │ │ +1927 * @return The number of elements in the bucket. │ │ │ │ +1928 */ │ │ │ │ +1929 _s_i_z_e___t_y_p_e │ │ │ │ +1930 bucket_size(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +1931 { return _M_h.bucket_size(__n); } │ │ │ │ +1932 │ │ │ │ +1933 /* │ │ │ │ +1934 * @brief Returns the bucket index of a given element. │ │ │ │ +1935 * @param __key A key instance. │ │ │ │ +1936 * @return The key bucket index. │ │ │ │ +1937 */ │ │ │ │ +1938 _s_i_z_e___t_y_p_e │ │ │ │ +1939 bucket(const _k_e_y___t_y_p_e& __key) const │ │ │ │ +1940 { return _M_h.bucket(__key); } │ │ │ │ +1941 │ │ │ │ +1942 /** │ │ │ │ +1943 * @brief Returns a read/write iterator pointing to the first bucket │ │ │ │ +1944 * element. │ │ │ │ +1945 * @param __n The bucket index. │ │ │ │ +1946 * @return A read/write local iterator. │ │ │ │ +1947 */ │ │ │ │ +1948 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_9_4_9 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) │ │ │ │ +1950 { return _M_h.begin(__n); } │ │ │ │ +1951 │ │ │ │ +1952 ///@{ │ │ │ │ +1953 /** │ │ │ │ +1954 * @brief Returns a read-only (constant) iterator pointing to the first │ │ │ │ +1955 * bucket element. │ │ │ │ +1956 * @param __n The bucket index. │ │ │ │ +1957 * @return A read-only local iterator. │ │ │ │ +1958 */ │ │ │ │ +1959 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_9_6_0 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +1961 { return _M_h.begin(__n); } │ │ │ │ +1962 │ │ │ │ +1963 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_9_6_4 _c_b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +1965 { return _M_h.cbegin(__n); } │ │ │ │ +1966 ///@} │ │ │ │ +1967 │ │ │ │ +1968 /** │ │ │ │ +1969 * @brief Returns a read/write iterator pointing to one past the last │ │ │ │ +1970 * bucket elements. │ │ │ │ +1971 * @param __n The bucket index. │ │ │ │ +1972 * @return A read/write local iterator. │ │ │ │ +1973 */ │ │ │ │ +1974 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_9_7_5 _e_n_d(_s_i_z_e___t_y_p_e __n) │ │ │ │ +1976 { return _M_h.end(__n); } │ │ │ │ +1977 │ │ │ │ +1978 ///@{ │ │ │ │ +1979 /** │ │ │ │ +1980 * @brief Returns a read-only (constant) iterator pointing to one past │ │ │ │ +1981 * the last bucket elements. │ │ │ │ +1982 * @param __n The bucket index. │ │ │ │ +1983 * @return A read-only local iterator. │ │ │ │ +1984 */ │ │ │ │ +1985 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_9_8_6 _e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +1987 { return _M_h.end(__n); } │ │ │ │ +1988 │ │ │ │ +1989 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_1_9_9_0 _c_e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ +1991 { return _M_h.cend(__n); } │ │ │ │ +1992 ///@} │ │ │ │ +1993 │ │ │ │ +1994 // hash policy. │ │ │ │ +1995 │ │ │ │ +1996 /// Returns the average number of elements per bucket. │ │ │ │ +1997 float │ │ │ │ +_1_9_9_8 _l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ +1999 { return _M_h.load_factor(); } │ │ │ │ +2000 │ │ │ │ +2001 /// Returns a positive number that the %unordered_multimap tries to keep │ │ │ │ +2002 /// the load factor less than or equal to. │ │ │ │ +2003 float │ │ │ │ +_2_0_0_4 _m_a_x___l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ +2005 { return _M_h.max_load_factor(); } │ │ │ │ +2006 │ │ │ │ +2007 /** │ │ │ │ +2008 * @brief Change the %unordered_multimap maximum load factor. │ │ │ │ +2009 * @param __z The new maximum load factor. │ │ │ │ +2010 */ │ │ │ │ +2011 void │ │ │ │ +_2_0_1_2 _m_a_x___l_o_a_d___f_a_c_t_o_r(float _____z) │ │ │ │ +2013 { _M_h.max_load_factor(_____z); } │ │ │ │ +2014 │ │ │ │ +2015 /** │ │ │ │ +2016 * @brief May rehash the %unordered_multimap. │ │ │ │ +2017 * @param __n The new number of buckets. │ │ │ │ +2018 * │ │ │ │ +2019 * Rehash will occur only if the new number of buckets respect the │ │ │ │ +2020 * %unordered_multimap maximum load factor. │ │ │ │ +2021 */ │ │ │ │ +2022 void │ │ │ │ +_2_0_2_3 _r_e_h_a_s_h(_s_i_z_e___t_y_p_e __n) │ │ │ │ +2024 { _M_h.rehash(__n); } │ │ │ │ +2025 │ │ │ │ +2026 /** │ │ │ │ +2027 * @brief Prepare the %unordered_multimap for a specified number of │ │ │ │ +2028 * elements. │ │ │ │ +2029 * @param __n Number of elements required. │ │ │ │ +2030 * │ │ │ │ +2031 * Same as rehash(ceil(n / max_load_factor())). │ │ │ │ +2032 */ │ │ │ │ +2033 void │ │ │ │ +_2_0_3_4 _r_e_s_e_r_v_e(_s_i_z_e___t_y_p_e __n) │ │ │ │ +2035 { _M_h.reserve(__n); } │ │ │ │ +2036 │ │ │ │ +2037 template │ │ │ │ +2039 friend bool │ │ │ │ +2040 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, │ │ │ │ +2041 ___H_a_s_h_1, ___P_r_e_d_1, _Alloc1>&, │ │ │ │ +2042 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, │ │ │ │ +2043 ___H_a_s_h_1, ___P_r_e_d_1, _Alloc1>&); │ │ │ │ +2044 }; │ │ │ │ +2045 │ │ │ │ +2046#if __cpp_deduction_guides >= 201606 │ │ │ │ +2047 │ │ │ │ +2048 template>, │ │ │ │ +2050 typename _Pred = equal_to<__iter_key_t<_InputIterator>>, │ │ │ │ +2051 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, │ │ │ │ +2052 typename = _RequireInputIter<_InputIterator>, │ │ │ │ +2053 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ +2054 typename = _RequireNotAllocator<_Pred>, │ │ │ │ +2055 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2056 unordered_multimap(_InputIterator, _InputIterator, │ │ │ │ +2057 _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 = {}, │ │ │ │ +2058 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ +2059 _Allocator = _Allocator()) │ │ │ │ +2060 -> unordered_multimap<__iter_key_t<_InputIterator>, │ │ │ │ +2061 __iter_val_t<_InputIterator>, _Hash, _Pred, │ │ │ │ +2062 _Allocator>; │ │ │ │ +2063 │ │ │ │ +2064 template, │ │ │ │ +2065 typename _Pred = equal_to<_Key>, │ │ │ │ +2066 typename _Allocator = allocator>, │ │ │ │ +2067 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ +2068 typename = _RequireNotAllocator<_Pred>, │ │ │ │ +2069 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2070 unordered_multimap(initializer_list>, │ │ │ │ +2071 _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 = {}, │ │ │ │ +2072 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ +2073 _Allocator = _Allocator()) │ │ │ │ +2074 -> unordered_multimap<_Key, _Tp, _Hash, _Pred, _Allocator>; │ │ │ │ +2075 │ │ │ │ +2076 template, │ │ │ │ +2078 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2079 unordered_multimap(_InputIterator, _InputIterator, │ │ │ │ +2080 _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) │ │ │ │ +2081 -> unordered_multimap<__iter_key_t<_InputIterator>, │ │ │ │ +2082 __iter_val_t<_InputIterator>, │ │ │ │ +2083 hash<__iter_key_t<_InputIterator>>, │ │ │ │ +2084 equal_to<__iter_key_t<_InputIterator>>, _Allocator>; │ │ │ │ +2085 │ │ │ │ +2086 template, │ │ │ │ +2088 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2089 unordered_multimap(_InputIterator, _InputIterator, _Allocator) │ │ │ │ +2090 -> unordered_multimap<__iter_key_t<_InputIterator>, │ │ │ │ +2091 __iter_val_t<_InputIterator>, │ │ │ │ +2092 hash<__iter_key_t<_InputIterator>>, │ │ │ │ +2093 equal_to<__iter_key_t<_InputIterator>>, _Allocator>; │ │ │ │ +2094 │ │ │ │ +2095 template, │ │ │ │ +2097 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ +2098 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2099 unordered_multimap(_InputIterator, _InputIterator, │ │ │ │ +2100 _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, │ │ │ │ +2101 _Allocator) │ │ │ │ +2102 -> unordered_multimap<__iter_key_t<_InputIterator>, │ │ │ │ +2103 __iter_val_t<_InputIterator>, _Hash, │ │ │ │ +2104 equal_to<__iter_key_t<_InputIterator>>, _Allocator>; │ │ │ │ +2105 │ │ │ │ +2106 template> │ │ │ │ +2108 unordered_multimap(initializer_list>, │ │ │ │ +2109 _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, │ │ │ │ +2110 _Allocator) │ │ │ │ +2111 -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; │ │ │ │ +2112 │ │ │ │ +2113 template> │ │ │ │ +2115 unordered_multimap(initializer_list>, _Allocator) │ │ │ │ +2116 -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; │ │ │ │ +2117 │ │ │ │ +2118 template, │ │ │ │ +2120 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2121 unordered_multimap(initializer_list>, │ │ │ │ +2122 _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, │ │ │ │ +2123 _Hash, _Allocator) │ │ │ │ +2124 -> unordered_multimap<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>; │ │ │ │ +2125 │ │ │ │ +2126#endif │ │ │ │ +2127 │ │ │ │ +2128 template │ │ │ │ +2129 inline void │ │ │ │ +2130 swap(unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ +2131 unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ +2132 noexcept(noexcept(__x.swap(__y))) │ │ │ │ +2133 { __x.swap(__y); } │ │ │ │ +2134 │ │ │ │ +2135 template │ │ │ │ +2136 inline void │ │ │ │ +2137 swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ +2138 unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ +2139 noexcept(noexcept(__x.swap(__y))) │ │ │ │ +2140 { __x.swap(__y); } │ │ │ │ +2141 │ │ │ │ +2142 template │ │ │ │ +2143 inline bool │ │ │ │ +2144 operator==(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ +2145 const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ +2146 { return __x._M_h._M_equal(__y._M_h); } │ │ │ │ +2147 │ │ │ │ +2148#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ +2149 template │ │ │ │ +2150 inline bool │ │ │ │ +2151 operator!=(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ +2152 const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ +2153 { return !(__x == __y); } │ │ │ │ +2154#endif │ │ │ │ +2155 │ │ │ │ +2156 template │ │ │ │ +2157 inline bool │ │ │ │ +2158 operator==(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ +2159 const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ +2160 { return __x._M_h._M_equal(__y._M_h); } │ │ │ │ +2161 │ │ │ │ +2162#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ +2163 template │ │ │ │ +2164 inline bool │ │ │ │ +2165 operator!=(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ +2166 const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ +2167 { return !(__x == __y); } │ │ │ │ +2168#endif │ │ │ │ +2169 │ │ │ │ +2170_GLIBCXX_END_NAMESPACE_CONTAINER │ │ │ │ +2171 │ │ │ │ +2172#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +2173 // Allow std::unordered_map access to internals of compatible maps. │ │ │ │ +2174 template │ │ │ │ +2176 struct _Hash_merge_helper< │ │ │ │ +2177 _GLIBCXX_STD_C::unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>, │ │ │ │ +2178 _Hash2, _Eq2> │ │ │ │ +2179 { │ │ │ │ +2180 private: │ │ │ │ +2181 template │ │ │ │ +2182 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>; │ │ │ │ +2183 template │ │ │ │ +2184 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>; │ │ │ │ +2185 │ │ │ │ +2186 friend unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>; │ │ │ │ +2187 │ │ │ │ +2188 static auto& │ │ │ │ +2189 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ +2190 { return __map._M_h; } │ │ │ │ +2191 │ │ │ │ +2192 static auto& │ │ │ │ +2193 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ +2194 { return __map._M_h; } │ │ │ │ +2195 }; │ │ │ │ +2196 │ │ │ │ +2197 // Allow std::unordered_multimap access to internals of compatible maps. │ │ │ │ +2198 template │ │ │ │ +2200 struct _Hash_merge_helper< │ │ │ │ +2201 _GLIBCXX_STD_C::unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>, │ │ │ │ +2202 _Hash2, _Eq2> │ │ │ │ +2203 { │ │ │ │ +2204 private: │ │ │ │ +2205 template │ │ │ │ +2206 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>; │ │ │ │ +2207 template │ │ │ │ +2208 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>; │ │ │ │ +2209 │ │ │ │ +2210 friend unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>; │ │ │ │ +2211 │ │ │ │ +2212 static auto& │ │ │ │ +2213 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ +2214 { return __map._M_h; } │ │ │ │ +2215 │ │ │ │ +2216 static auto& │ │ │ │ +2217 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ +2218 { return __map._M_h; } │ │ │ │ +2219 }; │ │ │ │ +2220#endif // node_extract │ │ │ │ +2221 │ │ │ │ +2222_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +2223} // namespace std │ │ │ │ +2224 │ │ │ │ +2225#endif /* _UNORDERED_MAP_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 │ │ │ │ _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_7 │ │ │ │ _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_5 │ │ │ │ -_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_0 │ │ │ │ +_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_2 │ │ │ │ +_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_5 │ │ │ │ _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_2_8 │ │ │ │ -_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_:_9_7_3 │ │ │ │ -_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_5_2_7 │ │ │ │ -_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_1_9_4 │ │ │ │ -_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_5_1_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 │ │ │ │ -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_3_0_3 │ │ │ │ -_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_2_5_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_l_o_a_d___f_a_c_t_o_r │ │ │ │ +float load_factor() const noexcept │ │ │ │ +Returns the average number of elements per bucket. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_9_8 │ │ │ │ +_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_:_9_9_9 │ │ │ │ -_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_3_3_2 │ │ │ │ -_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_2_7_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_r_a_s_e │ │ │ │ +iterator erase(iterator __position) │ │ │ │ +Erases an element from an unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_9_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_5_0_8 │ │ │ │ +_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_7_1_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_:_1_8_8_8 │ │ │ │ +_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_:_1_9_1_6 │ │ │ │ +_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_:_9_9_0 │ │ │ │ -_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_2_7_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_m_a_x___b_u_c_k_e_t___c_o_u_n_t │ │ │ │ +size_type max_bucket_count() const noexcept │ │ │ │ +Returns the maximum number of buckets of the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_2_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 │ │ │ │ +iterator begin() noexcept │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_7_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_b_e_g_i_n │ │ │ │ +const_iterator begin() const noexcept │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_8_6 │ │ │ │ +_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_7_9_7 │ │ │ │ +_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_6_7_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_6_2_1 │ │ │ │ +_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_8_0_3 │ │ │ │ +_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_:_1_8_5_0 │ │ │ │ +_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_:_1_8_3_2 │ │ │ │ +_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_2_6_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_f_i_n_d │ │ │ │ +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_:_1_8_2_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_n_d │ │ │ │ +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_9_7_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 │ │ │ │ +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_6_3_6 │ │ │ │ +_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_4_4_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(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_3_0_3 │ │ │ │ +_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_2_6_5 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_m_p_l_a_c_e │ │ │ │ +iterator emplace(_Args &&... __args) │ │ │ │ +Attempts to build and insert a std::pair into the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_5_3_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 key_type &__key) │ │ │ │ +Extract a node. │ │ │ │ +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_:_:_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_5_5_9 │ │ │ │ -_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_7_0_1 │ │ │ │ -_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_:_1_8_6_9 │ │ │ │ +_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_2_7_7 │ │ │ │ +_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_6_6_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_6_9_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_4_9_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 │ │ │ │ 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_6_4_0 │ │ │ │ -_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_6_0_6 │ │ │ │ -_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_4_3_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 │ │ │ │ +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_9_4_9 │ │ │ │ +_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_6_8_2 │ │ │ │ -_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_1_7_3 │ │ │ │ -_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_2_2_9 │ │ │ │ -_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_0_0_4 │ │ │ │ +_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_5_8_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ +iterator insert(const 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_5_7_6 │ │ │ │ +_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_2_6_7 │ │ │ │ +_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_:_9_9_6 │ │ │ │ -_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_3_4_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 │ │ │ │ -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_6_4_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_e_m_p_l_a_c_e │ │ │ │ -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_2_4_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(_InputIterator __first, _InputIterator __last, size_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_8_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_r_e_s_e_r_v_e │ │ │ │ +void reserve(size_type __n) │ │ │ │ +Prepare the unordered_multimap for a specified number of elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_3_4 │ │ │ │ +_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_:_1_9_0_0 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ +unordered_multimap(_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_0_4_0 │ │ │ │ -_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_:_9_9_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t │ │ │ │ -unordered_multiset(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_0_8_6 │ │ │ │ -_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_:_9_8_5 │ │ │ │ -_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_3_2_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_l_e_a_r │ │ │ │ +void clear() noexcept │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_7_4_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_:_1_8_2_1 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ +unordered_multimap(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_3_7_9 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_o_u_n_t │ │ │ │ +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_:_1_8_5_6 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_r_a_s_e │ │ │ │ +iterator erase(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_7_3_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_6_6_4 │ │ │ │ -_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_5_0_9 │ │ │ │ -_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_:_1_9_8_6 │ │ │ │ +_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_2_7_4 │ │ │ │ +_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_:_9_8_2 │ │ │ │ -_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_6_7_6 │ │ │ │ -_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_3_5_6 │ │ │ │ -_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_2_6_9 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_b_e_g_i_n │ │ │ │ +const_local_iterator begin(size_type __n) const │ │ │ │ +Returns a read-only (constant) iterator pointing to the first bucket element. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_6_0 │ │ │ │ +_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_:_1_8_3_8 │ │ │ │ +_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_2_8_1 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ +unordered_multimap(unordered_multimap &&)=default │ │ │ │ +Move constructor. │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ +unordered_multimap(const allocator_type &__a) │ │ │ │ +Creates an unordered_multimap with no elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_4_3 │ │ │ │ +_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_2_8_3 │ │ │ │ +_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_:_9_9_8 │ │ │ │ -_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_5_8_4 │ │ │ │ -_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_:_9_8_1 │ │ │ │ -_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_4_8_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t │ │ │ │ -unordered_multiset(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_0_6_5 │ │ │ │ -_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_2_8_2 │ │ │ │ +_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_2_7_5 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ +__enable_if_t< is_constructible< value_type, _Pair && >::value, iterator > │ │ │ │ +insert(_Pair &&__x) │ │ │ │ +Inserts a std::pair into the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_5_8_5 │ │ │ │ +_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_5_6_4 │ │ │ │ -_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_5_4_6 │ │ │ │ -_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_5_4_0 │ │ │ │ -_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_3_7_6 │ │ │ │ -_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_:_1_8_7_4 │ │ │ │ +_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_7_5_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_0_2_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___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_:_9_9_2 │ │ │ │ -_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_2_0_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_e_m_p_l_a_c_e___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_2_6_5 │ │ │ │ -_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_4_4_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_iterator begin() const noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_9_8 │ │ │ │ -_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_4_1_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_:_:_c_b_e_g_i_n │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_7_9 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ +void insert(initializer_list< value_type > __l) │ │ │ │ +Attempts to insert a list of elements into the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_4_8 │ │ │ │ +_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_5_1_2 │ │ │ │ +_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_4_6_7 │ │ │ │ +_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_:_1_9_6_4 │ │ │ │ +_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_4_5_7 │ │ │ │ +_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_2_2_1 │ │ │ │ -_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_3_2_1 │ │ │ │ -_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_5_9_0 │ │ │ │ -_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_4_9_1 │ │ │ │ -_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_:_9_9_1 │ │ │ │ -_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_5_7_8 │ │ │ │ -_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_2_8_1 │ │ │ │ -_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_2_7_7 │ │ │ │ -_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_2_1_2 │ │ │ │ -_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_7_1_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_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_3_0_7 │ │ │ │ -_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_:_9_9_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 │ │ │ │ -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_3_8_1 │ │ │ │ -_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_4_9_0 │ │ │ │ +_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_2_6_4 │ │ │ │ +_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_6_5_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_6_6_8 │ │ │ │ -_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_6_1_1 │ │ │ │ -_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_3_5_1 │ │ │ │ -_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_:_9_8_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(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_0_1_9 │ │ │ │ -_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_1_5_8 │ │ │ │ -_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_:_1_9_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 │ │ │ │ +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_6_1_0 │ │ │ │ +_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_1_7_8 │ │ │ │ -_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_:_9_9_4 │ │ │ │ -_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_6_6_0 │ │ │ │ -_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_5_9_6 │ │ │ │ -_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_3_3_8 │ │ │ │ -_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_1_8_3 │ │ │ │ -_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_6_4_8 │ │ │ │ -_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_4_6_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(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_:_9_9_7 │ │ │ │ -_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_3_9_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 │ │ │ │ -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_5_2_1 │ │ │ │ -_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_1_6_6 │ │ │ │ -_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_5_6_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 │ │ │ │ +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_6_1_6 │ │ │ │ +_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_:_1_8_9_4 │ │ │ │ +_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_:_9_8_4 │ │ │ │ -_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_2_6_8 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_g_e_t___a_l_l_o_c_a_t_o_r │ │ │ │ +allocator_type get_allocator() const noexcept │ │ │ │ +Returns the allocator object used by the unordered_multimap. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_5_0 │ │ │ │ +_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_6_9_0 │ │ │ │ -_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_0_1_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 │ │ │ │ +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_9_0_6 │ │ │ │ +_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_5 │ │ │ │ -_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_2_8 │ │ │ │ -_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_0 │ │ │ │ +_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_0_4 │ │ │ │ +_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_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(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_2_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_m_a_x___l_o_a_d___f_a_c_t_o_r │ │ │ │ +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_:_:_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_:_8_4_5 │ │ │ │ -_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_1_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_0_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_2_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_4_0 │ │ │ │ +_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_2_4 │ │ │ │ +_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_0_5 │ │ │ │ +_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_:_8_8_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_:_2_9_7 │ │ │ │ +_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_4 │ │ │ │ -_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_1_9 │ │ │ │ -_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_4 │ │ │ │ -_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_:_3_6_2 │ │ │ │ -_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_:_6_6_3 │ │ │ │ -_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_:_6_6_9 │ │ │ │ -_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_3 │ │ │ │ -_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_:_6_9_2 │ │ │ │ -_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_:_7_9_9 │ │ │ │ -_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_2_9 │ │ │ │ +_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_:_8_9_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_3_5 │ │ │ │ +_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_0_9 │ │ │ │ +_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_:_7_3_9 │ │ │ │ -_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_:_9_4_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_0_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_:_7_8_8 │ │ │ │ +_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_2_3 │ │ │ │ +_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_3_2 │ │ │ │ +_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_:_5_5_9 │ │ │ │ +_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_1_3_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_0_3 │ │ │ │ -_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_:_6_9_8 │ │ │ │ -_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_3_1 │ │ │ │ -_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_5 │ │ │ │ -_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_2_8 │ │ │ │ -_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_0_6_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_:_9_6_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_0_6 │ │ │ │ -_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_5_0 │ │ │ │ +_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_0 │ │ │ │ -_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_:_3_5_4 │ │ │ │ -_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_0 │ │ │ │ +_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_:_5_9_8 │ │ │ │ +_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_:_3_5_4 │ │ │ │ +_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_3 │ │ │ │ +_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_0_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_0_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ -unordered_set & operator=(initializer_list< value_type > __l) │ │ │ │ -Unordered_set list assignment operator. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_2_9_1 │ │ │ │ -_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_3_5 │ │ │ │ -_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_1_2 │ │ │ │ +_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_:_7_7_0 │ │ │ │ +_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_:_8_8_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_2 │ │ │ │ -_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_2_3 │ │ │ │ -_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_0_8_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_:_9_5_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_1_7 │ │ │ │ -_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_3 │ │ │ │ -_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_:_7_4_5 │ │ │ │ -_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_:_5_9_3 │ │ │ │ -_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_:_4_5_7 │ │ │ │ -_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_3_2 │ │ │ │ -_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_:_8_3_1 │ │ │ │ -_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_:_8_5_6 │ │ │ │ -_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_:_9_3_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_2_2 │ │ │ │ +_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_:_3_6_3 │ │ │ │ +_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_0 │ │ │ │ +_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_0_6_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_5_8 │ │ │ │ +_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_:_3_9_5 │ │ │ │ +_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_1_5 │ │ │ │ -_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_6 │ │ │ │ -_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_0_9_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_1_1 │ │ │ │ -_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_1_1 │ │ │ │ -_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_1_7 │ │ │ │ +_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_:_5_7_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[](key_type &&__k) │ │ │ │ +Subscript ( [] ) access to unordered_map data. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_9_9_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_:_5_6_5 │ │ │ │ +_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_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 │ │ │ │ +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_:_6_6_2 │ │ │ │ +_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_7_9 │ │ │ │ +_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_:_7_9_8 │ │ │ │ +_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_:_9_8_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_:_4_7_9 │ │ │ │ +_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_4_1 │ │ │ │ +_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_:_8_5_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_2_7 │ │ │ │ -_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_1 │ │ │ │ +_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_2 │ │ │ │ +_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_1 │ │ │ │ -_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_4 │ │ │ │ +_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_:_7_5_3 │ │ │ │ +_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_:_3_6_7 │ │ │ │ +_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_0_7_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_5 │ │ │ │ -_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_2_8 │ │ │ │ +_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_1_1 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ +unordered_map(const allocator_type &__a) │ │ │ │ +Creates an unordered_map with no elements. │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_8 │ │ │ │ +_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_1_8 │ │ │ │ +_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_1_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_3_2 │ │ │ │ +_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_:_6_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(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_:_8_5_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_:_7_3_3 │ │ │ │ -_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_:_6_7_5 │ │ │ │ -_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_1_0 │ │ │ │ -_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_:_6_3_9 │ │ │ │ -_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_1_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, 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_6_1 │ │ │ │ -_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_4_5 │ │ │ │ -_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_4_1 │ │ │ │ -_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_0_1 │ │ │ │ -_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_:_9_6_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_4 │ │ │ │ +_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_3 │ │ │ │ +_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_6 │ │ │ │ +_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_:_8_7_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_0_9_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_:_7_4_8 │ │ │ │ +_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_1_2 │ │ │ │ +_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_:_7_9_5 │ │ │ │ -_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_:_4_7_6 │ │ │ │ -_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_0_4_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_:_8_3_7 │ │ │ │ -_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_1_2 │ │ │ │ -_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_:_3_8_4 │ │ │ │ -_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_0_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_:_5_5_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_:_:_u_n_o_r_d_e_r_e_d___s_e_t │ │ │ │ -unordered_set(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_2 │ │ │ │ -_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_:_5_7_0 │ │ │ │ -_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_3_0 │ │ │ │ -_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_:_2_9_9 │ │ │ │ -_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_:_7_5_1 │ │ │ │ -_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_2_9 │ │ │ │ -_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_:_5_8_0 │ │ │ │ -_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_:_4_8_7 │ │ │ │ -_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_3 │ │ │ │ -_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_:_7_6_1 │ │ │ │ -_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_:_8_6_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_iterator __pos) │ │ │ │ -Extract a node. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_4_9_3 │ │ │ │ -_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_3_7 │ │ │ │ +_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_1_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_2 │ │ │ │ -_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_2_7 │ │ │ │ -_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_:_6_5_7 │ │ │ │ -_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_1_6 │ │ │ │ -_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_5 │ │ │ │ +_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_:_7_6_6 │ │ │ │ +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_2_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_2_6 │ │ │ │ +_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_4_5 │ │ │ │ +_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_1_9 │ │ │ │ +_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_2_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_4_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 │ │ │ │ _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-14-base/libstdc++/user/a00377.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: unordered_map.h File Reference │ │ │ +libstdc++: forward_list.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,136 +48,88 @@ │ │ │ /* @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
 
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

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

│ │ │ │ │ │ -

Definition in file unordered_map.h.

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

Definition at line 1188 of file forward_list.h.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,196 +1,58 @@ │ │ │ │ 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 │ │ │ │ -  │ │ │ │ -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___i_t_e_r_a_t_o_r_<_ ___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_<_ ___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 > >, _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 > │ │ │ │ +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 ___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 > │ │ │ │ + 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 ___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 > │ │ │ │ +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 > >, │ │ │ │ - _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 > │ │ │ │ +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 ___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_1_8_8 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-14-base/libstdc++/user/a00377.js │ │ │ ├── js-beautify {} │ │ │ │ @@ -1,4 +1,10 @@ │ │ │ │ var a00377 = [ │ │ │ │ - ["__umap_traits", "a00377.html#a84b02064179c0ef21d0189a7bf15803b", null], │ │ │ │ - ["__ummap_traits", "a00377.html#a1a55f2ace43a0a61a859367d227d245f", null] │ │ │ │ + ["std::_Fwd_list_base< _Tp, _Alloc >", "a04769.html", null], │ │ │ │ + ["std::_Fwd_list_const_iterator< _Tp >", "a04765.html", "a04765"], │ │ │ │ + ["std::_Fwd_list_iterator< _Tp >", "a04761.html", "a04761"], │ │ │ │ + ["std::_Fwd_list_node< _Tp >", "a04757.html", null], │ │ │ │ + ["std::_Fwd_list_node_base", "a04753.html", null], │ │ │ │ + ["operator<=>", "a00377.html#af2fde05a4b1c8436bb83bd8921460639", null], │ │ │ │ + ["operator==", "a00377.html#ada41d3682184f0d0d8525907fdfcbea8", null], │ │ │ │ + ["swap", "a00377.html#aeb866eb47db586b6058b597e97d8b909", null] │ │ │ │ ]; │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00377_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-2024 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2008-2024 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,2673 +72,1740 @@ │ │ │
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
│ │ │ -
38namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
39{
│ │ │ -
40_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
41_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
│ │ │ -
42
│ │ │ -
43 /// Base types for unordered_map.
│ │ │ -
44 template<bool _Cache>
│ │ │ -
45 using __umap_traits = __detail::_Hashtable_traits<_Cache, false, true>;
│ │ │ -
46
│ │ │ -
47 template<typename _Key,
│ │ │ -
48 typename _Tp,
│ │ │ -
49 typename _Hash = hash<_Key>,
│ │ │ -
50 typename _Pred = std::equal_to<_Key>,
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
54 _Alloc, __detail::_Select1st,
│ │ │ -
55 _Pred, _Hash,
│ │ │ -
56 __detail::_Mod_range_hashing,
│ │ │ -
57 __detail::_Default_ranged_hash,
│ │ │ -
58 __detail::_Prime_rehash_policy, _Tr>;
│ │ │ -
59
│ │ │ -
60 /// Base types for unordered_multimap.
│ │ │ -
61 template<bool _Cache>
│ │ │ -
62 using __ummap_traits = __detail::_Hashtable_traits<_Cache, false, false>;
│ │ │ -
63
│ │ │ -
64 template<typename _Key,
│ │ │ -
65 typename _Tp,
│ │ │ -
66 typename _Hash = hash<_Key>,
│ │ │ -
67 typename _Pred = std::equal_to<_Key>,
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
71 _Alloc, __detail::_Select1st,
│ │ │ -
72 _Pred, _Hash,
│ │ │ -
73 __detail::_Mod_range_hashing,
│ │ │ -
74 __detail::_Default_ranged_hash,
│ │ │ -
75 __detail::_Prime_rehash_policy, _Tr>;
│ │ │ -
76
│ │ │ -
77 template<class _Key, class _Tp, 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) that associates values of another type
│ │ │ -
83 * with the keys.
│ │ │ -
84 *
│ │ │ -
85 * @ingroup unordered_associative_containers
│ │ │ -
86 * @headerfile unordered_map
│ │ │ -
87 * @since C++11
│ │ │ -
88 *
│ │ │ -
89 * @tparam _Key Type of key objects.
│ │ │ -
90 * @tparam _Tp Type of mapped objects.
│ │ │ -
91 * @tparam _Hash Hashing function object type, defaults to hash<_Value>.
│ │ │ -
92 * @tparam _Pred Predicate function object type, defaults
│ │ │ -
93 * to equal_to<_Value>.
│ │ │ -
94 * @tparam _Alloc Allocator type, defaults to
│ │ │ -
95 * std::allocator<std::pair<const _Key, _Tp>>.
│ │ │ -
96 *
│ │ │ -
97 * Meets the requirements of a <a href="tables.html#65">container</a>, and
│ │ │ -
98 * <a href="tables.html#xx">unordered associative container</a>
│ │ │ -
99 *
│ │ │ -
100 * The resulting value type of the container is std::pair<const _Key, _Tp>.
│ │ │ -
101 *
│ │ │ -
102 * Base is _Hashtable, dispatched at compile time via template
│ │ │ -
103 * alias __umap_hashtable.
│ │ │ -
104 */
│ │ │ -
105 template<typename _Key, typename _Tp,
│ │ │ -
106 typename _Hash = hash<_Key>,
│ │ │ -
107 typename _Pred = equal_to<_Key>,
│ │ │ -
108 typename _Alloc = allocator<std::pair<const _Key, _Tp>>>
│ │ │ -
│ │ │ - │ │ │ -
110 {
│ │ │ - │ │ │ -
112 _Hashtable _M_h;
│ │ │ -
113
│ │ │ -
114 public:
│ │ │ -
115 // typedefs:
│ │ │ -
116 ///@{
│ │ │ -
117 /// Public typedefs.
│ │ │ -
118 typedef typename _Hashtable::key_type key_type;
│ │ │ -
119 typedef typename _Hashtable::value_type value_type;
│ │ │ -
120 typedef typename _Hashtable::mapped_type mapped_type;
│ │ │ -
121 typedef typename _Hashtable::hasher hasher;
│ │ │ -
122 typedef typename _Hashtable::key_equal key_equal;
│ │ │ -
123 typedef typename _Hashtable::allocator_type allocator_type;
│ │ │ -
124 ///@}
│ │ │ -
125
│ │ │ -
126 ///@{
│ │ │ -
127 /// Iterator-related typedefs.
│ │ │ -
128 typedef typename _Hashtable::pointer pointer;
│ │ │ -
129 typedef typename _Hashtable::const_pointer const_pointer;
│ │ │ -
130 typedef typename _Hashtable::reference reference;
│ │ │ -
131 typedef typename _Hashtable::const_reference const_reference;
│ │ │ -
132 typedef typename _Hashtable::iterator iterator;
│ │ │ -
133 typedef typename _Hashtable::const_iterator const_iterator;
│ │ │ -
134 typedef typename _Hashtable::local_iterator local_iterator;
│ │ │ -
135 typedef typename _Hashtable::const_local_iterator const_local_iterator;
│ │ │ -
136 typedef typename _Hashtable::size_type size_type;
│ │ │ -
137 typedef typename _Hashtable::difference_type difference_type;
│ │ │ -
138 ///@}
│ │ │ -
139
│ │ │ -
140#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
141 using node_type = typename _Hashtable::node_type;
│ │ │ -
142 using insert_return_type = typename _Hashtable::insert_return_type;
│ │ │ -
143#endif
│ │ │ -
144
│ │ │ -
145 //construct/destroy/copy
│ │ │ -
146
│ │ │ -
147 /// Default constructor.
│ │ │ -
148 unordered_map() = default;
│ │ │ -
149
│ │ │ -
150 /**
│ │ │ -
151 * @brief Default constructor creates no elements.
│ │ │ -
152 * @param __n Minimal initial number of buckets.
│ │ │ -
153 * @param __hf A hash functor.
│ │ │ -
154 * @param __eql A key equality functor.
│ │ │ -
155 * @param __a An allocator object.
│ │ │ -
156 */
│ │ │ -
157 explicit
│ │ │ -
│ │ │ - │ │ │ -
159 const hasher& __hf = hasher(),
│ │ │ -
160 const key_equal& __eql = key_equal(),
│ │ │ -
161 const allocator_type& __a = allocator_type())
│ │ │ -
162 : _M_h(__n, __hf, __eql, __a)
│ │ │ -
163 { }
│ │ │ -
│ │ │ -
164
│ │ │ -
165 /**
│ │ │ -
166 * @brief Builds an %unordered_map from a range.
│ │ │ -
167 * @param __first An input iterator.
│ │ │ -
168 * @param __last An input iterator.
│ │ │ -
169 * @param __n Minimal initial number of buckets.
│ │ │ -
170 * @param __hf A hash functor.
│ │ │ -
171 * @param __eql A key equality functor.
│ │ │ -
172 * @param __a An allocator object.
│ │ │ -
173 *
│ │ │ -
174 * Create an %unordered_map consisting of copies of the elements from
│ │ │ -
175 * [__first,__last). This is linear in N (where N is
│ │ │ -
176 * distance(__first,__last)).
│ │ │ -
177 */
│ │ │ -
178 template<typename _InputIterator>
│ │ │ -
│ │ │ - │ │ │ -
180 size_type __n = 0,
│ │ │ -
181 const hasher& __hf = hasher(),
│ │ │ -
182 const key_equal& __eql = key_equal(),
│ │ │ -
183 const allocator_type& __a = allocator_type())
│ │ │ -
184 : _M_h(__first, __last, __n, __hf, __eql, __a)
│ │ │ -
185 { }
│ │ │ -
│ │ │ -
186
│ │ │ -
187 /// Copy constructor.
│ │ │ -
188 unordered_map(const unordered_map&) = default;
│ │ │ -
189
│ │ │ -
190 /// Move constructor.
│ │ │ - │ │ │ -
192
│ │ │ -
193 /**
│ │ │ -
194 * @brief Creates an %unordered_map with no elements.
│ │ │ -
195 * @param __a An allocator object.
│ │ │ -
196 */
│ │ │ -
197 explicit
│ │ │ -
│ │ │ - │ │ │ -
199 : _M_h(__a)
│ │ │ -
200 { }
│ │ │ -
│ │ │ -
201
│ │ │ -
202 /*
│ │ │ -
203 * @brief Copy constructor with allocator argument.
│ │ │ -
204 * @param __uset Input %unordered_map to copy.
│ │ │ -
205 * @param __a An allocator object.
│ │ │ -
206 */
│ │ │ - │ │ │ -
208 const allocator_type& __a)
│ │ │ -
209 : _M_h(__umap._M_h, __a)
│ │ │ -
210 { }
│ │ │ -
211
│ │ │ -
212 /*
│ │ │ -
213 * @brief Move constructor with allocator argument.
│ │ │ -
214 * @param __uset Input %unordered_map to move.
│ │ │ -
215 * @param __a An allocator object.
│ │ │ -
216 */
│ │ │ - │ │ │ -
218 const allocator_type& __a)
│ │ │ -
219 noexcept( noexcept(_Hashtable(std::move(__umap._M_h), __a)) )
│ │ │ -
220 : _M_h(std::move(__umap._M_h), __a)
│ │ │ -
221 { }
│ │ │ -
222
│ │ │ -
223 /**
│ │ │ -
224 * @brief Builds an %unordered_map from an initializer_list.
│ │ │ -
225 * @param __l An initializer_list.
│ │ │ -
226 * @param __n Minimal initial number of buckets.
│ │ │ -
227 * @param __hf A hash functor.
│ │ │ -
228 * @param __eql A key equality functor.
│ │ │ -
229 * @param __a An allocator object.
│ │ │ -
230 *
│ │ │ -
231 * Create an %unordered_map consisting of copies of the elements in the
│ │ │ -
232 * list. This is linear in N (where N is @a __l.size()).
│ │ │ -
233 */
│ │ │ -
│ │ │ - │ │ │ -
235 size_type __n = 0,
│ │ │ -
236 const hasher& __hf = hasher(),
│ │ │ -
237 const key_equal& __eql = key_equal(),
│ │ │ -
238 const allocator_type& __a = allocator_type())
│ │ │ -
239 : _M_h(__l, __n, __hf, __eql, __a)
│ │ │ -
240 { }
│ │ │ -
│ │ │ +
33#pragma GCC system_header
│ │ │ +
34
│ │ │ +
35#include <initializer_list>
│ │ │ + │ │ │ +
37#include <bits/stl_iterator.h>
│ │ │ +
38#include <bits/stl_algobase.h>
│ │ │ +
39#include <bits/stl_function.h>
│ │ │ +
40#include <bits/allocator.h>
│ │ │ +
41#include <ext/alloc_traits.h>
│ │ │ +
42#include <ext/aligned_buffer.h>
│ │ │ +
43#include <debug/assertions.h>
│ │ │ +
44
│ │ │ +
45namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
46{
│ │ │ +
47_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
48_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
│ │ │ +
49
│ │ │ +
50 /**
│ │ │ +
51 * @brief A helper basic node class for %forward_list.
│ │ │ +
52 * This is just a linked list with nothing inside it.
│ │ │ +
53 * There are purely list shuffling utility methods here.
│ │ │ +
54 */
│ │ │ +
│ │ │ + │ │ │ +
56 {
│ │ │ +
57 _Fwd_list_node_base() = default;
│ │ │ + │ │ │ +
59 : _M_next(__x._M_next)
│ │ │ +
60 { __x._M_next = nullptr; }
│ │ │ +
61
│ │ │ + │ │ │ +
63 _Fwd_list_node_base& operator=(const _Fwd_list_node_base&) = delete;
│ │ │ +
64
│ │ │ + │ │ │ +
66 operator=(_Fwd_list_node_base&& __x) noexcept
│ │ │ +
67 {
│ │ │ +
68 _M_next = __x._M_next;
│ │ │ +
69 __x._M_next = nullptr;
│ │ │ +
70 return *this;
│ │ │ +
71 }
│ │ │ +
72
│ │ │ +
73 _Fwd_list_node_base* _M_next = nullptr;
│ │ │ +
74
│ │ │ + │ │ │ +
76 _M_transfer_after(_Fwd_list_node_base* __begin,
│ │ │ +
77 _Fwd_list_node_base* __end) noexcept
│ │ │ +
78 {
│ │ │ +
79 _Fwd_list_node_base* __keep = __begin->_M_next;
│ │ │ +
80 if (__end)
│ │ │ +
81 {
│ │ │ +
82 __begin->_M_next = __end->_M_next;
│ │ │ +
83 __end->_M_next = _M_next;
│ │ │ +
84 }
│ │ │ +
85 else
│ │ │ +
86 __begin->_M_next = nullptr;
│ │ │ +
87 _M_next = __keep;
│ │ │ +
88 return __end;
│ │ │ +
89 }
│ │ │ +
90
│ │ │ +
91 void
│ │ │ +
92 _M_reverse_after() noexcept
│ │ │ +
93 {
│ │ │ +
94 _Fwd_list_node_base* __tail = _M_next;
│ │ │ +
95 if (!__tail)
│ │ │ +
96 return;
│ │ │ +
97 while (_Fwd_list_node_base* __temp = __tail->_M_next)
│ │ │ +
98 {
│ │ │ +
99 _Fwd_list_node_base* __keep = _M_next;
│ │ │ +
100 _M_next = __temp;
│ │ │ +
101 __tail->_M_next = __temp->_M_next;
│ │ │ +
102 _M_next->_M_next = __keep;
│ │ │ +
103 }
│ │ │ +
104 }
│ │ │ +
105 };
│ │ │ +
│ │ │ +
106
│ │ │ +
107 /**
│ │ │ +
108 * @brief A helper node class for %forward_list.
│ │ │ +
109 * This is just a linked list with uninitialized storage for a
│ │ │ +
110 * data value in each node.
│ │ │ +
111 * There is a sorting utility method.
│ │ │ +
112 */
│ │ │ +
113 template<typename _Tp>
│ │ │ +
│ │ │ + │ │ │ +
115 : public _Fwd_list_node_base
│ │ │ +
116 {
│ │ │ +
117 _Fwd_list_node() = default;
│ │ │ +
118
│ │ │ +
119 __gnu_cxx::__aligned_buffer<_Tp> _M_storage;
│ │ │ +
120
│ │ │ +
121 _Tp*
│ │ │ +
122 _M_valptr() noexcept
│ │ │ +
123 { return _M_storage._M_ptr(); }
│ │ │ +
124
│ │ │ +
125 const _Tp*
│ │ │ +
126 _M_valptr() const noexcept
│ │ │ +
127 { return _M_storage._M_ptr(); }
│ │ │ +
128 };
│ │ │ +
│ │ │ +
129
│ │ │ +
130 /**
│ │ │ +
131 * @brief A forward_list::iterator.
│ │ │ +
132 *
│ │ │ +
133 * All the functions are op overloads.
│ │ │ +
134 */
│ │ │ +
135 template<typename _Tp>
│ │ │ +
│ │ │ + │ │ │ +
137 {
│ │ │ + │ │ │ + │ │ │ +
140
│ │ │ +
141 typedef _Tp value_type;
│ │ │ +
142 typedef _Tp* pointer;
│ │ │ +
143 typedef _Tp& reference;
│ │ │ + │ │ │ + │ │ │ +
146
│ │ │ +
147 _Fwd_list_iterator() noexcept
│ │ │ +
148 : _M_node() { }
│ │ │ +
149
│ │ │ +
150 explicit
│ │ │ + │ │ │ +
152 : _M_node(__n) { }
│ │ │ +
153
│ │ │ +
154 [[__nodiscard__]]
│ │ │ +
155 reference
│ │ │ +
156 operator*() const noexcept
│ │ │ +
157 { return *static_cast<_Node*>(this->_M_node)->_M_valptr(); }
│ │ │ +
158
│ │ │ +
159 [[__nodiscard__]]
│ │ │ +
160 pointer
│ │ │ +
161 operator->() const noexcept
│ │ │ +
162 { return static_cast<_Node*>(this->_M_node)->_M_valptr(); }
│ │ │ +
163
│ │ │ +
164 _Self&
│ │ │ +
165 operator++() noexcept
│ │ │ +
166 {
│ │ │ +
167 _M_node = _M_node->_M_next;
│ │ │ +
168 return *this;
│ │ │ +
169 }
│ │ │ +
170
│ │ │ +
171 _Self
│ │ │ +
172 operator++(int) noexcept
│ │ │ +
173 {
│ │ │ +
174 _Self __tmp(*this);
│ │ │ +
175 _M_node = _M_node->_M_next;
│ │ │ +
176 return __tmp;
│ │ │ +
177 }
│ │ │ +
178
│ │ │ +
179 /**
│ │ │ +
180 * @brief Forward list iterator equality comparison.
│ │ │ +
181 */
│ │ │ +
182 [[__nodiscard__]]
│ │ │ +
183 friend bool
│ │ │ +
│ │ │ +
184 operator==(const _Self& __x, const _Self& __y) noexcept
│ │ │ +
185 { return __x._M_node == __y._M_node; }
│ │ │ +
│ │ │ +
186
│ │ │ +
187#if __cpp_impl_three_way_comparison < 201907L
│ │ │ +
188 /**
│ │ │ +
189 * @brief Forward list iterator inequality comparison.
│ │ │ +
190 */
│ │ │ +
191 [[__nodiscard__]]
│ │ │ +
192 friend bool
│ │ │ +
193 operator!=(const _Self& __x, const _Self& __y) noexcept
│ │ │ +
194 { return __x._M_node != __y._M_node; }
│ │ │ +
195#endif
│ │ │ +
196
│ │ │ +
197 _Self
│ │ │ +
198 _M_next() const noexcept
│ │ │ +
199 {
│ │ │ +
200 if (_M_node)
│ │ │ +
201 return _Fwd_list_iterator(_M_node->_M_next);
│ │ │ +
202 else
│ │ │ +
203 return _Fwd_list_iterator(nullptr);
│ │ │ +
204 }
│ │ │ +
205
│ │ │ +
206 _Fwd_list_node_base* _M_node;
│ │ │ +
207 };
│ │ │ +
│ │ │ +
208
│ │ │ +
209 /**
│ │ │ +
210 * @brief A forward_list::const_iterator.
│ │ │ +
211 *
│ │ │ +
212 * All the functions are op overloads.
│ │ │ +
213 */
│ │ │ +
214 template<typename _Tp>
│ │ │ +
│ │ │ + │ │ │ +
216 {
│ │ │ + │ │ │ +
218 typedef const _Fwd_list_node<_Tp> _Node;
│ │ │ + │ │ │ +
220
│ │ │ +
221 typedef _Tp value_type;
│ │ │ +
222 typedef const _Tp* pointer;
│ │ │ +
223 typedef const _Tp& reference;
│ │ │ + │ │ │ + │ │ │ +
226
│ │ │ +
227 _Fwd_list_const_iterator() noexcept
│ │ │ +
228 : _M_node() { }
│ │ │ +
229
│ │ │ +
230 explicit
│ │ │ + │ │ │ +
232 : _M_node(__n) { }
│ │ │ +
233
│ │ │ +
234 _Fwd_list_const_iterator(const iterator& __iter) noexcept
│ │ │ +
235 : _M_node(__iter._M_node) { }
│ │ │ +
236
│ │ │ +
237 [[__nodiscard__]]
│ │ │ +
238 reference
│ │ │ +
239 operator*() const noexcept
│ │ │ +
240 { return *static_cast<_Node*>(this->_M_node)->_M_valptr(); }
│ │ │
241
│ │ │ -
242 unordered_map(size_type __n, const allocator_type& __a)
│ │ │ -
243 : unordered_map(__n, hasher(), key_equal(), __a)
│ │ │ -
244 { }
│ │ │ -
245
│ │ │ -
246 unordered_map(size_type __n, const hasher& __hf,
│ │ │ -
247 const allocator_type& __a)
│ │ │ -
248 : unordered_map(__n, __hf, key_equal(), __a)
│ │ │ -
249 { }
│ │ │ -
250
│ │ │ -
251 template<typename _InputIterator>
│ │ │ -
252 unordered_map(_InputIterator __first, _InputIterator __last,
│ │ │ -
253 size_type __n,
│ │ │ -
254 const allocator_type& __a)
│ │ │ -
255 : unordered_map(__first, __last, __n, hasher(), key_equal(), __a)
│ │ │ -
256 { }
│ │ │ -
257
│ │ │ -
258 template<typename _InputIterator>
│ │ │ -
259 unordered_map(_InputIterator __first, _InputIterator __last,
│ │ │ -
260 size_type __n, const hasher& __hf,
│ │ │ -
261 const allocator_type& __a)
│ │ │ -
262 : unordered_map(__first, __last, __n, __hf, key_equal(), __a)
│ │ │ -
263 { }
│ │ │ -
264
│ │ │ -
265 unordered_map(initializer_list<value_type> __l,
│ │ │ -
266 size_type __n,
│ │ │ -
267 const allocator_type& __a)
│ │ │ -
268 : unordered_map(__l, __n, hasher(), key_equal(), __a)
│ │ │ -
269 { }
│ │ │ -
270
│ │ │ -
271 unordered_map(initializer_list<value_type> __l,
│ │ │ -
272 size_type __n, const hasher& __hf,
│ │ │ -
273 const allocator_type& __a)
│ │ │ -
274 : unordered_map(__l, __n, __hf, key_equal(), __a)
│ │ │ -
275 { }
│ │ │ -
276
│ │ │ -
277 /// Copy assignment operator.
│ │ │ - │ │ │ -
279 operator=(const unordered_map&) = default;
│ │ │ -
280
│ │ │ -
281 /// Move assignment operator.
│ │ │ - │ │ │ - │ │ │ -
284
│ │ │ -
285 /**
│ │ │ -
286 * @brief %Unordered_map list assignment operator.
│ │ │ -
287 * @param __l An initializer_list.
│ │ │ -
288 *
│ │ │ -
289 * This function fills an %unordered_map with copies of the elements in
│ │ │ -
290 * the initializer list @a __l.
│ │ │ -
291 *
│ │ │ -
292 * Note that the assignment completely changes the %unordered_map and
│ │ │ -
293 * that the resulting %unordered_map's size is the same as the number
│ │ │ -
294 * of elements assigned.
│ │ │ -
295 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
298 {
│ │ │ -
299 _M_h = __l;
│ │ │ -
300 return *this;
│ │ │ -
301 }
│ │ │ -
│ │ │ -
302
│ │ │ -
303 /// Returns the allocator object used by the %unordered_map.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
306 { return _M_h.get_allocator(); }
│ │ │ -
│ │ │ -
307
│ │ │ -
308 // size and capacity:
│ │ │ -
309
│ │ │ -
310 /// Returns true if the %unordered_map is empty.
│ │ │ -
311 _GLIBCXX_NODISCARD bool
│ │ │ -
│ │ │ -
312 empty() const noexcept
│ │ │ -
313 { return _M_h.empty(); }
│ │ │ -
│ │ │ -
314
│ │ │ -
315 /// Returns the size of the %unordered_map.
│ │ │ - │ │ │ -
│ │ │ -
317 size() const noexcept
│ │ │ -
318 { return _M_h.size(); }
│ │ │ -
│ │ │ -
319
│ │ │ -
320 /// Returns the maximum size of the %unordered_map.
│ │ │ - │ │ │ -
│ │ │ -
322 max_size() const noexcept
│ │ │ -
323 { return _M_h.max_size(); }
│ │ │ -
│ │ │ +
242 [[__nodiscard__]]
│ │ │ +
243 pointer
│ │ │ +
244 operator->() const noexcept
│ │ │ +
245 { return static_cast<_Node*>(this->_M_node)->_M_valptr(); }
│ │ │ +
246
│ │ │ +
247 _Self&
│ │ │ +
248 operator++() noexcept
│ │ │ +
249 {
│ │ │ +
250 _M_node = _M_node->_M_next;
│ │ │ +
251 return *this;
│ │ │ +
252 }
│ │ │ +
253
│ │ │ +
254 _Self
│ │ │ +
255 operator++(int) noexcept
│ │ │ +
256 {
│ │ │ +
257 _Self __tmp(*this);
│ │ │ +
258 _M_node = _M_node->_M_next;
│ │ │ +
259 return __tmp;
│ │ │ +
260 }
│ │ │ +
261
│ │ │ +
262 /**
│ │ │ +
263 * @brief Forward list const_iterator equality comparison.
│ │ │ +
264 */
│ │ │ +
265 [[__nodiscard__]]
│ │ │ +
266 friend bool
│ │ │ +
│ │ │ +
267 operator==(const _Self& __x, const _Self& __y) noexcept
│ │ │ +
268 { return __x._M_node == __y._M_node; }
│ │ │ +
│ │ │ +
269
│ │ │ +
270#if __cpp_impl_three_way_comparison < 201907L
│ │ │ +
271 /**
│ │ │ +
272 * @brief Forward list const_iterator inequality comparison.
│ │ │ +
273 */
│ │ │ +
274 [[__nodiscard__]]
│ │ │ +
275 friend bool
│ │ │ +
276 operator!=(const _Self& __x, const _Self& __y) noexcept
│ │ │ +
277 { return __x._M_node != __y._M_node; }
│ │ │ +
278#endif
│ │ │ +
279
│ │ │ +
280 _Self
│ │ │ +
281 _M_next() const noexcept
│ │ │ +
282 {
│ │ │ +
283 if (this->_M_node)
│ │ │ +
284 return _Fwd_list_const_iterator(_M_node->_M_next);
│ │ │ +
285 else
│ │ │ +
286 return _Fwd_list_const_iterator(nullptr);
│ │ │ +
287 }
│ │ │ +
288
│ │ │ +
289 const _Fwd_list_node_base* _M_node;
│ │ │ +
290 };
│ │ │ +
│ │ │ +
291
│ │ │ +
292 /**
│ │ │ +
293 * @brief Base class for %forward_list.
│ │ │ +
294 */
│ │ │ +
295 template<typename _Tp, typename _Alloc>
│ │ │ +
│ │ │ + │ │ │ +
297 {
│ │ │ +
298 protected:
│ │ │ +
299 typedef __alloc_rebind<_Alloc, _Fwd_list_node<_Tp>> _Node_alloc_type;
│ │ │ + │ │ │ +
301
│ │ │ +
302 struct _Fwd_list_impl
│ │ │ +
303 : public _Node_alloc_type
│ │ │ +
304 {
│ │ │ +
305 _Fwd_list_node_base _M_head;
│ │ │ +
306
│ │ │ +
307 _Fwd_list_impl()
│ │ │ + │ │ │ +
309 : _Node_alloc_type(), _M_head()
│ │ │ +
310 { }
│ │ │ +
311
│ │ │ +
312 _Fwd_list_impl(_Fwd_list_impl&&) = default;
│ │ │ +
313
│ │ │ +
314 _Fwd_list_impl(_Fwd_list_impl&& __fl, _Node_alloc_type&& __a)
│ │ │ +
315 : _Node_alloc_type(std::move(__a)), _M_head(std::move(__fl._M_head))
│ │ │ +
316 { }
│ │ │ +
317
│ │ │ +
318 _Fwd_list_impl(_Node_alloc_type&& __a)
│ │ │ +
319 : _Node_alloc_type(std::move(__a)), _M_head()
│ │ │ +
320 { }
│ │ │ +
321 };
│ │ │ +
322
│ │ │ +
323 _Fwd_list_impl _M_impl;
│ │ │
324
│ │ │ -
325 // iterators.
│ │ │ -
326
│ │ │ -
327 /**
│ │ │ -
328 * Returns a read/write iterator that points to the first element in the
│ │ │ -
329 * %unordered_map.
│ │ │ -
330 */
│ │ │ - │ │ │ -
│ │ │ -
332 begin() noexcept
│ │ │ -
333 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
334
│ │ │ -
335 ///@{
│ │ │ -
336 /**
│ │ │ -
337 * Returns a read-only (constant) iterator that points to the first
│ │ │ -
338 * element in the %unordered_map.
│ │ │ -
339 */
│ │ │ - │ │ │ -
│ │ │ -
341 begin() const noexcept
│ │ │ -
342 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
343
│ │ │ - │ │ │ -
│ │ │ -
345 cbegin() const noexcept
│ │ │ -
346 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
347 ///@}
│ │ │ -
348
│ │ │ -
349 /**
│ │ │ -
350 * Returns a read/write iterator that points one past the last element in
│ │ │ -
351 * the %unordered_map.
│ │ │ -
352 */
│ │ │ - │ │ │ -
│ │ │ -
354 end() noexcept
│ │ │ -
355 { return _M_h.end(); }
│ │ │ -
│ │ │ -
356
│ │ │ -
357 ///@{
│ │ │ -
358 /**
│ │ │ -
359 * Returns a read-only (constant) iterator that points one past the last
│ │ │ -
360 * element in the %unordered_map.
│ │ │ -
361 */
│ │ │ - │ │ │ -
│ │ │ -
363 end() const noexcept
│ │ │ -
364 { return _M_h.end(); }
│ │ │ -
│ │ │ -
365
│ │ │ - │ │ │ -
│ │ │ -
367 cend() const noexcept
│ │ │ -
368 { return _M_h.end(); }
│ │ │ -
│ │ │ -
369 ///@}
│ │ │ -
370
│ │ │ -
371 // modifiers.
│ │ │ -
372
│ │ │ -
373 /**
│ │ │ -
374 * @brief Attempts to build and insert a std::pair into the
│ │ │ -
375 * %unordered_map.
│ │ │ -
376 *
│ │ │ -
377 * @param __args Arguments used to generate a new pair instance (see
│ │ │ -
378 * std::piecewise_contruct for passing arguments to each
│ │ │ -
379 * part of the pair constructor).
│ │ │ -
380 *
│ │ │ -
381 * @return A pair, of which the first element is an iterator that points
│ │ │ -
382 * to the possibly inserted pair, and the second is a bool that
│ │ │ -
383 * is true if the pair was actually inserted.
│ │ │ -
384 *
│ │ │ -
385 * This function attempts to build and insert a (key, value) %pair into
│ │ │ -
386 * the %unordered_map.
│ │ │ -
387 * An %unordered_map relies on unique keys and thus a %pair is only
│ │ │ -
388 * inserted if its first element (the key) is not already present in the
│ │ │ -
389 * %unordered_map.
│ │ │ -
390 *
│ │ │ -
391 * Insertion requires amortized constant time.
│ │ │ -
392 */
│ │ │ -
393 template<typename... _Args>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
396 { return _M_h.emplace(std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
397
│ │ │ -
398 /**
│ │ │ -
399 * @brief Attempts to build and insert a std::pair into the
│ │ │ -
400 * %unordered_map.
│ │ │ -
401 *
│ │ │ -
402 * @param __pos An iterator that serves as a hint as to where the pair
│ │ │ -
403 * should be inserted.
│ │ │ -
404 * @param __args Arguments used to generate a new pair instance (see
│ │ │ -
405 * std::piecewise_contruct for passing arguments to each
│ │ │ -
406 * part of the pair constructor).
│ │ │ -
407 * @return An iterator that points to the element with key of the
│ │ │ -
408 * std::pair built from @a __args (may or may not be that
│ │ │ -
409 * std::pair).
│ │ │ -
410 *
│ │ │ -
411 * This function is not concerned about whether the insertion took place,
│ │ │ -
412 * and thus does not return a boolean like the single-argument emplace()
│ │ │ -
413 * does.
│ │ │ -
414 * Note that the first parameter is only a hint and can potentially
│ │ │ -
415 * improve the performance of the insertion process. A bad hint would
│ │ │ -
416 * cause no gains in efficiency.
│ │ │ -
417 *
│ │ │ -
418 * See
│ │ │ -
419 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
420 * for more on @a hinting.
│ │ │ -
421 *
│ │ │ -
422 * Insertion requires amortized constant time.
│ │ │ -
423 */
│ │ │ -
424 template<typename... _Args>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
427 { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
428
│ │ │ -
429#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
430 /// Extract a node.
│ │ │ -
431 node_type
│ │ │ -
│ │ │ - │ │ │ -
433 {
│ │ │ -
434 __glibcxx_assert(__pos != end());
│ │ │ -
435 return _M_h.extract(__pos);
│ │ │ -
436 }
│ │ │ -
│ │ │ -
437
│ │ │ -
438 /// Extract a node.
│ │ │ -
439 node_type
│ │ │ -
│ │ │ - │ │ │ -
441 { return _M_h.extract(__key); }
│ │ │ -
│ │ │ -
442
│ │ │ -
443 /// Re-insert an extracted node.
│ │ │ -
444 insert_return_type
│ │ │ -
│ │ │ -
445 insert(node_type&& __nh)
│ │ │ -
446 { return _M_h._M_reinsert_node(std::move(__nh)); }
│ │ │ -
│ │ │ -
447
│ │ │ -
448 /// Re-insert an extracted node.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
451 { return _M_h._M_reinsert_node(std::move(__nh)).position; }
│ │ │ -
│ │ │ -
452#endif // node_extract
│ │ │ -
453
│ │ │ -
454#ifdef __glibcxx_unordered_map_try_emplace // C++ >= 17 && HOSTED
│ │ │ -
455 /**
│ │ │ -
456 * @brief Attempts to build and insert a std::pair into the
│ │ │ -
457 * %unordered_map.
│ │ │ -
458 *
│ │ │ -
459 * @param __k Key to use for finding a possibly existing pair in
│ │ │ -
460 * the unordered_map.
│ │ │ -
461 * @param __args Arguments used to generate the .second for a
│ │ │ -
462 * new pair instance.
│ │ │ -
463 *
│ │ │ -
464 * @return A pair, of which the first element is an iterator that points
│ │ │ -
465 * to the possibly inserted pair, and the second is a bool that
│ │ │ -
466 * is true if the pair was actually inserted.
│ │ │ -
467 *
│ │ │ -
468 * This function attempts to build and insert a (key, value) %pair into
│ │ │ -
469 * the %unordered_map.
│ │ │ -
470 * An %unordered_map relies on unique keys and thus a %pair is only
│ │ │ -
471 * inserted if its first element (the key) is not already present in the
│ │ │ -
472 * %unordered_map.
│ │ │ -
473 * If a %pair is not inserted, this function has no effect.
│ │ │ -
474 *
│ │ │ -
475 * Insertion requires amortized constant time.
│ │ │ -
476 */
│ │ │ -
477 template <typename... _Args>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
480 {
│ │ │ -
481 return _M_h.try_emplace(cend(), __k, std::forward<_Args>(__args)...);
│ │ │ -
482 }
│ │ │ -
│ │ │ -
483
│ │ │ -
484 // move-capable overload
│ │ │ -
485 template <typename... _Args>
│ │ │ - │ │ │ - │ │ │ -
488 {
│ │ │ -
489 return _M_h.try_emplace(cend(), std::move(__k),
│ │ │ - │ │ │ -
491 }
│ │ │ -
492
│ │ │ -
493 /**
│ │ │ -
494 * @brief Attempts to build and insert a std::pair into the
│ │ │ -
495 * %unordered_map.
│ │ │ -
496 *
│ │ │ -
497 * @param __hint An iterator that serves as a hint as to where the pair
│ │ │ -
498 * should be inserted.
│ │ │ -
499 * @param __k Key to use for finding a possibly existing pair in
│ │ │ -
500 * the unordered_map.
│ │ │ -
501 * @param __args Arguments used to generate the .second for a
│ │ │ -
502 * new pair instance.
│ │ │ -
503 * @return An iterator that points to the element with key of the
│ │ │ -
504 * std::pair built from @a __args (may or may not be that
│ │ │ -
505 * std::pair).
│ │ │ -
506 *
│ │ │ -
507 * This function is not concerned about whether the insertion took place,
│ │ │ -
508 * and thus does not return a boolean like the single-argument emplace()
│ │ │ -
509 * does. However, if insertion did not take place,
│ │ │ -
510 * this function has no effect.
│ │ │ -
511 * Note that the first parameter is only a hint and can potentially
│ │ │ -
512 * improve the performance of the insertion process. A bad hint would
│ │ │ -
513 * cause no gains in efficiency.
│ │ │ -
514 *
│ │ │ -
515 * See
│ │ │ -
516 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
517 * for more on @a hinting.
│ │ │ -
518 *
│ │ │ -
519 * Insertion requires amortized constant time.
│ │ │ -
520 */
│ │ │ -
521 template <typename... _Args>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
524 _Args&&... __args)
│ │ │ -
525 {
│ │ │ -
526 return _M_h.try_emplace(__hint, __k,
│ │ │ -
527 std::forward<_Args>(__args)...).first;
│ │ │ -
528 }
│ │ │ -
│ │ │ -
529
│ │ │ -
530 // move-capable overload
│ │ │ -
531 template <typename... _Args>
│ │ │ - │ │ │ - │ │ │ -
534 {
│ │ │ -
535 return _M_h.try_emplace(__hint, std::move(__k),
│ │ │ -
536 std::forward<_Args>(__args)...).first;
│ │ │ -
537 }
│ │ │ -
538#endif // __glibcxx_unordered_map_try_emplace
│ │ │ -
539
│ │ │ -
540 ///@{
│ │ │ -
541 /**
│ │ │ -
542 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ -
543
│ │ │ -
544 * @param __x Pair to be inserted (see std::make_pair for easy
│ │ │ -
545 * creation of pairs).
│ │ │ -
546 *
│ │ │ -
547 * @return A pair, of which the first element is an iterator that
│ │ │ -
548 * points to the possibly inserted pair, and the second is
│ │ │ -
549 * a bool that is true if the pair was actually inserted.
│ │ │ -
550 *
│ │ │ -
551 * This function attempts to insert a (key, value) %pair into the
│ │ │ -
552 * %unordered_map. An %unordered_map relies on unique keys and thus a
│ │ │ -
553 * %pair is only inserted if its first element (the key) is not already
│ │ │ -
554 * present in the %unordered_map.
│ │ │ -
555 *
│ │ │ -
556 * Insertion requires amortized constant time.
│ │ │ -
557 */
│ │ │ - │ │ │ -
│ │ │ -
559 insert(const value_type& __x)
│ │ │ -
560 { return _M_h.insert(__x); }
│ │ │ -
│ │ │ -
561
│ │ │ -
562 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
563 // 2354. Unnecessary copying when inserting into maps with braced-init
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
566 { return _M_h.insert(std::move(__x)); }
│ │ │ -
│ │ │ -
567
│ │ │ -
568 template<typename _Pair>
│ │ │ - │ │ │ - │ │ │ +
325 public:
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
329
│ │ │ +
330 _Node_alloc_type&
│ │ │ +
331 _M_get_Node_allocator() noexcept
│ │ │ +
332 { return this->_M_impl; }
│ │ │ +
333
│ │ │ +
334 const _Node_alloc_type&
│ │ │ +
335 _M_get_Node_allocator() const noexcept
│ │ │ +
336 { return this->_M_impl; }
│ │ │ +
337
│ │ │ +
338 _Fwd_list_base() = default;
│ │ │ +
339
│ │ │ +
340 _Fwd_list_base(_Node_alloc_type&& __a)
│ │ │ +
341 : _M_impl(std::move(__a)) { }
│ │ │ +
342
│ │ │ +
343 // When allocators are always equal.
│ │ │ +
344 _Fwd_list_base(_Fwd_list_base&& __lst, _Node_alloc_type&& __a,
│ │ │ + │ │ │ +
346 : _M_impl(std::move(__lst._M_impl), std::move(__a))
│ │ │ +
347 { }
│ │ │ +
348
│ │ │ +
349 // When allocators are not always equal.
│ │ │ +
350 _Fwd_list_base(_Fwd_list_base&& __lst, _Node_alloc_type&& __a);
│ │ │ +
351
│ │ │ +
352 _Fwd_list_base(_Fwd_list_base&&) = default;
│ │ │ +
353
│ │ │ + │ │ │ +
355 { _M_erase_after(&_M_impl._M_head, nullptr); }
│ │ │ +
356
│ │ │ +
357 protected:
│ │ │ +
358 _Node*
│ │ │ +
359 _M_get_node()
│ │ │ +
360 {
│ │ │ +
361 auto __ptr = _Node_alloc_traits::allocate(_M_get_Node_allocator(), 1);
│ │ │ +
362 return std::__to_address(__ptr);
│ │ │ +
363 }
│ │ │ +
364
│ │ │ +
365 template<typename... _Args>
│ │ │ +
366 _Node*
│ │ │ +
367 _M_create_node(_Args&&... __args)
│ │ │ +
368 {
│ │ │ +
369 _Node* __node = this->_M_get_node();
│ │ │ +
370 __try
│ │ │ +
371 {
│ │ │ +
372 ::new ((void*)__node) _Node;
│ │ │ +
373 _Node_alloc_traits::construct(_M_get_Node_allocator(),
│ │ │ +
374 __node->_M_valptr(),
│ │ │ + │ │ │ +
376 }
│ │ │ +
377 __catch(...)
│ │ │ +
378 {
│ │ │ +
379 this->_M_put_node(__node);
│ │ │ +
380 __throw_exception_again;
│ │ │ +
381 }
│ │ │ +
382 return __node;
│ │ │ +
383 }
│ │ │ +
384
│ │ │ +
385 template<typename... _Args>
│ │ │ + │ │ │ +
387 _M_insert_after(const_iterator __pos, _Args&&... __args);
│ │ │ +
388
│ │ │ +
389 void
│ │ │ +
390 _M_put_node(_Node* __p)
│ │ │ +
391 {
│ │ │ +
392 typedef typename _Node_alloc_traits::pointer _Ptr;
│ │ │ + │ │ │ +
394 _Node_alloc_traits::deallocate(_M_get_Node_allocator(), __ptr, 1);
│ │ │ +
395 }
│ │ │ +
396
│ │ │ + │ │ │ +
398 _M_erase_after(_Fwd_list_node_base* __pos);
│ │ │ +
399
│ │ │ + │ │ │ +
401 _M_erase_after(_Fwd_list_node_base* __pos,
│ │ │ +
402 _Fwd_list_node_base* __last);
│ │ │ +
403 };
│ │ │ +
│ │ │ +
404
│ │ │ +
405 /**
│ │ │ +
406 * @brief A standard container with linear time access to elements,
│ │ │ +
407 * and fixed time insertion/deletion at any point in the sequence.
│ │ │ +
408 *
│ │ │ +
409 * @ingroup sequences
│ │ │ +
410 * @headerfile forward_list
│ │ │ +
411 * @since C++11
│ │ │ +
412 *
│ │ │ +
413 * @tparam _Tp Type of element.
│ │ │ +
414 * @tparam _Alloc Allocator type, defaults to allocator<_Tp>.
│ │ │ +
415 *
│ │ │ +
416 * Meets the requirements of a <a href="tables.html#65">container</a>, a
│ │ │ +
417 * <a href="tables.html#67">sequence</a>, including the
│ │ │ +
418 * <a href="tables.html#68">optional sequence requirements</a> with the
│ │ │ +
419 * %exception of @c at and @c operator[].
│ │ │ +
420 *
│ │ │ +
421 * This is a @e singly @e linked %list. Traversal up the
│ │ │ +
422 * %list requires linear time, but adding and removing elements (or
│ │ │ +
423 * @e nodes) is done in constant time, regardless of where the
│ │ │ +
424 * change takes place. Unlike std::vector and std::deque,
│ │ │ +
425 * random-access iterators are not provided, so subscripting ( @c
│ │ │ +
426 * [] ) access is not allowed. For algorithms which only need
│ │ │ +
427 * sequential access, this lack makes no difference.
│ │ │ +
428 *
│ │ │ +
429 * Also unlike the other standard containers, std::forward_list provides
│ │ │ +
430 * specialized algorithms %unique to linked lists, such as
│ │ │ +
431 * splicing, sorting, and in-place reversal.
│ │ │ +
432 */
│ │ │ +
433 template<typename _Tp, typename _Alloc = allocator<_Tp>>
│ │ │ +
│ │ │ +
434 class forward_list : private _Fwd_list_base<_Tp, _Alloc>
│ │ │ +
435 {
│ │ │ +
436 static_assert(is_same<typename remove_cv<_Tp>::type, _Tp>::value,
│ │ │ +
437 "std::forward_list must have a non-const, non-volatile value_type");
│ │ │ +
438#if __cplusplus > 201703L || defined __STRICT_ANSI__
│ │ │ + │ │ │ +
440 "std::forward_list must have the same value_type as its allocator");
│ │ │ +
441#endif
│ │ │ +
442
│ │ │ +
443 private:
│ │ │ + │ │ │ + │ │ │ +
446 typedef typename _Base::_Node _Node;
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
450
│ │ │ +
451 public:
│ │ │ +
452 // types:
│ │ │ +
453 typedef _Tp value_type;
│ │ │ +
454 typedef typename _Alloc_traits::pointer pointer;
│ │ │ +
455 typedef typename _Alloc_traits::const_pointer const_pointer;
│ │ │ +
456 typedef value_type& reference;
│ │ │ +
457 typedef const value_type& const_reference;
│ │ │ +
458
│ │ │ +
459 typedef typename _Base::iterator iterator;
│ │ │ +
460 typedef typename _Base::const_iterator const_iterator;
│ │ │ +
461 typedef std::size_t size_type;
│ │ │ + │ │ │ +
463 typedef _Alloc allocator_type;
│ │ │ +
464
│ │ │ +
465 // 23.3.4.2 construct/copy/destroy:
│ │ │ +
466
│ │ │ +
467 /**
│ │ │ +
468 * @brief Creates a %forward_list with no elements.
│ │ │ +
469 */
│ │ │ +
470 forward_list() = default;
│ │ │ +
471
│ │ │ +
472 /**
│ │ │ +
473 * @brief Creates a %forward_list with no elements.
│ │ │ +
474 * @param __al An allocator object.
│ │ │ +
475 */
│ │ │ +
476 explicit
│ │ │ +
│ │ │ +
477 forward_list(const _Alloc& __al) noexcept
│ │ │ + │ │ │ +
479 { }
│ │ │ +
│ │ │ +
480
│ │ │ +
481 /**
│ │ │ +
482 * @brief Copy constructor with allocator argument.
│ │ │ +
483 * @param __list Input list to copy.
│ │ │ +
484 * @param __al An allocator object.
│ │ │ +
485 */
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
489 { _M_range_initialize(__list.begin(), __list.end()); }
│ │ │ +
│ │ │ +
490
│ │ │ +
491 private:
│ │ │ +
492 forward_list(forward_list&& __list, _Node_alloc_type&& __al,
│ │ │ + │ │ │ +
494 : _Base(std::move(__list), std::move(__al))
│ │ │ +
495 {
│ │ │ +
496 // If __list is not empty it means its allocator is not equal to __a,
│ │ │ +
497 // so we need to move from each element individually.
│ │ │ + │ │ │ +
499 std::__make_move_if_noexcept_iterator(__list.begin()),
│ │ │ +
500 std::__make_move_if_noexcept_iterator(__list.end()));
│ │ │ +
501 }
│ │ │ +
502
│ │ │ +
503 forward_list(forward_list&& __list, _Node_alloc_type&& __al,
│ │ │ +
504 true_type)
│ │ │ +
505 noexcept
│ │ │ +
506 : _Base(std::move(__list), _Node_alloc_type(__al), true_type{})
│ │ │ +
507 { }
│ │ │ +
508
│ │ │ +
509 public:
│ │ │ +
510 /**
│ │ │ +
511 * @brief Move constructor with allocator argument.
│ │ │ +
512 * @param __list Input list to move.
│ │ │ +
513 * @param __al An allocator object.
│ │ │ +
514 */
│ │ │ +
│ │ │ + │ │ │ + │ │ │ +
517 noexcept(_Node_alloc_traits::_S_always_equal())
│ │ │ + │ │ │ +
519 typename _Node_alloc_traits::is_always_equal{})
│ │ │ +
520 { }
│ │ │ +
│ │ │ +
521
│ │ │ +
522 /**
│ │ │ +
523 * @brief Creates a %forward_list with default constructed elements.
│ │ │ +
524 * @param __n The number of elements to initially create.
│ │ │ +
525 * @param __al An allocator object.
│ │ │ +
526 *
│ │ │ +
527 * This constructor creates the %forward_list with @a __n default
│ │ │ +
528 * constructed elements.
│ │ │ +
529 */
│ │ │ +
530 explicit
│ │ │ +
│ │ │ +
531 forward_list(size_type __n, const _Alloc& __al = _Alloc())
│ │ │ + │ │ │ +
533 { _M_default_initialize(__n); }
│ │ │ +
│ │ │ +
534
│ │ │ +
535 /**
│ │ │ +
536 * @brief Creates a %forward_list with copies of an exemplar element.
│ │ │ +
537 * @param __n The number of elements to initially create.
│ │ │ +
538 * @param __value An element to copy.
│ │ │ +
539 * @param __al An allocator object.
│ │ │ +
540 *
│ │ │ +
541 * This constructor fills the %forward_list with @a __n copies of
│ │ │ +
542 * @a __value.
│ │ │ +
543 */
│ │ │ +
│ │ │ +
544 forward_list(size_type __n, const _Tp& __value,
│ │ │ +
545 const _Alloc& __al = _Alloc())
│ │ │ + │ │ │ +
547 { _M_fill_initialize(__n, __value); }
│ │ │ +
│ │ │ +
548
│ │ │ +
549 /**
│ │ │ +
550 * @brief Builds a %forward_list from a range.
│ │ │ +
551 * @param __first An input iterator.
│ │ │ +
552 * @param __last An input iterator.
│ │ │ +
553 * @param __al An allocator object.
│ │ │ +
554 *
│ │ │ +
555 * Create a %forward_list consisting of copies of the elements from
│ │ │ +
556 * [@a __first,@a __last). This is linear in N (where N is
│ │ │ +
557 * distance(@a __first,@a __last)).
│ │ │ +
558 */
│ │ │ +
559 template<typename _InputIterator,
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
562 const _Alloc& __al = _Alloc())
│ │ │ + │ │ │ +
564 { _M_range_initialize(__first, __last); }
│ │ │ +
│ │ │ +
565
│ │ │ +
566 /**
│ │ │ +
567 * @brief The %forward_list copy constructor.
│ │ │ +
568 * @param __list A %forward_list of identical element and allocator
│ │ │ +
569 * types.
│ │ │ +
570 */
│ │ │
│ │ │ - │ │ │ -
572 { return _M_h.emplace(std::forward<_Pair>(__x)); }
│ │ │ -
│ │ │ -
573 ///@}
│ │ │ -
574
│ │ │ -
575 ///@{
│ │ │ -
576 /**
│ │ │ -
577 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ -
578 * @param __hint An iterator that serves as a hint as to where the
│ │ │ -
579 * pair should be inserted.
│ │ │ -
580 * @param __x Pair to be inserted (see std::make_pair for easy creation
│ │ │ -
581 * of pairs).
│ │ │ -
582 * @return An iterator that points to the element with key of
│ │ │ -
583 * @a __x (may or may not be the %pair passed in).
│ │ │ -
584 *
│ │ │ -
585 * This function is not concerned about whether the insertion took place,
│ │ │ -
586 * and thus does not return a boolean like the single-argument insert()
│ │ │ -
587 * does. Note that the first parameter is only a hint and can
│ │ │ -
588 * potentially improve the performance of the insertion process. A bad
│ │ │ -
589 * hint would cause no gains in efficiency.
│ │ │ -
590 *
│ │ │ -
591 * See
│ │ │ -
592 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
593 * for more on @a hinting.
│ │ │ -
594 *
│ │ │ -
595 * Insertion requires amortized constant time.
│ │ │ -
596 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
599 { return _M_h.insert(__hint, __x); }
│ │ │ -
│ │ │ -
600
│ │ │ -
601 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
602 // 2354. Unnecessary copying when inserting into maps with braced-init
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
605 { return _M_h.insert(__hint, std::move(__x)); }
│ │ │ -
│ │ │ -
606
│ │ │ -
607 template<typename _Pair>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
610 { return _M_h.emplace_hint(__hint, std::forward<_Pair>(__x)); }
│ │ │ -
│ │ │ -
611 ///@}
│ │ │ -
612
│ │ │ -
613 /**
│ │ │ -
614 * @brief A template function that attempts to insert a range of
│ │ │ -
615 * elements.
│ │ │ -
616 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
617 * inserted.
│ │ │ -
618 * @param __last Iterator pointing to the end of the range.
│ │ │ -
619 *
│ │ │ -
620 * Complexity similar to that of the range constructor.
│ │ │ -
621 */
│ │ │ -
622 template<typename _InputIterator>
│ │ │ -
623 void
│ │ │ -
│ │ │ - │ │ │ -
625 { _M_h.insert(__first, __last); }
│ │ │ -
│ │ │ -
626
│ │ │ -
627 /**
│ │ │ -
628 * @brief Attempts to insert a list of elements into the %unordered_map.
│ │ │ -
629 * @param __l A std::initializer_list<value_type> of elements
│ │ │ -
630 * to be inserted.
│ │ │ -
631 *
│ │ │ -
632 * Complexity similar to that of the range constructor.
│ │ │ -
633 */
│ │ │ -
634 void
│ │ │ -
│ │ │ - │ │ │ -
636 { _M_h.insert(__l); }
│ │ │ -
│ │ │ -
637
│ │ │ -
638
│ │ │ -
639#ifdef __glibcxx_unordered_map_try_emplace // >= C++17 && HOSTED
│ │ │ -
640 /**
│ │ │ -
641 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ -
642 * @param __k Key to use for finding a possibly existing pair in
│ │ │ -
643 * the map.
│ │ │ -
644 * @param __obj Argument used to generate the .second for a pair
│ │ │ -
645 * instance.
│ │ │ -
646 *
│ │ │ -
647 * @return A pair, of which the first element is an iterator that
│ │ │ -
648 * points to the possibly inserted pair, and the second is
│ │ │ -
649 * a bool that is true if the pair was actually inserted.
│ │ │ -
650 *
│ │ │ -
651 * This function attempts to insert a (key, value) %pair into the
│ │ │ -
652 * %unordered_map. An %unordered_map relies on unique keys and thus a
│ │ │ -
653 * %pair is only inserted if its first element (the key) is not already
│ │ │ -
654 * present in the %unordered_map.
│ │ │ -
655 * If the %pair was already in the %unordered_map, the .second of
│ │ │ -
656 * the %pair is assigned from __obj.
│ │ │ -
657 *
│ │ │ -
658 * Insertion requires amortized constant time.
│ │ │ -
659 */
│ │ │ -
660 template <typename _Obj>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
663 {
│ │ │ -
664 auto __ret = _M_h.try_emplace(cend(), __k,
│ │ │ - │ │ │ -
666 if (!__ret.second)
│ │ │ -
667 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ -
668 return __ret;
│ │ │ -
669 }
│ │ │ -
│ │ │ -
670
│ │ │ -
671 // move-capable overload
│ │ │ -
672 template <typename _Obj>
│ │ │ - │ │ │ - │ │ │ -
675 {
│ │ │ -
676 auto __ret = _M_h.try_emplace(cend(), std::move(__k),
│ │ │ - │ │ │ -
678 if (!__ret.second)
│ │ │ -
679 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ -
680 return __ret;
│ │ │ -
681 }
│ │ │ -
682
│ │ │ -
683 /**
│ │ │ -
684 * @brief Attempts to insert a std::pair into the %unordered_map.
│ │ │ -
685 * @param __hint An iterator that serves as a hint as to where the
│ │ │ -
686 * pair should be inserted.
│ │ │ -
687 * @param __k Key to use for finding a possibly existing pair in
│ │ │ -
688 * the unordered_map.
│ │ │ -
689 * @param __obj Argument used to generate the .second for a pair
│ │ │ -
690 * instance.
│ │ │ -
691 * @return An iterator that points to the element with key of
│ │ │ -
692 * @a __x (may or may not be the %pair passed in).
│ │ │ -
693 *
│ │ │ -
694 * This function is not concerned about whether the insertion took place,
│ │ │ -
695 * and thus does not return a boolean like the single-argument insert()
│ │ │ -
696 * does.
│ │ │ -
697 * If the %pair was already in the %unordered map, the .second of
│ │ │ -
698 * the %pair is assigned from __obj.
│ │ │ -
699 * Note that the first parameter is only a hint and can
│ │ │ -
700 * potentially improve the performance of the insertion process. A bad
│ │ │ -
701 * hint would cause no gains in efficiency.
│ │ │ -
702 *
│ │ │ -
703 * See
│ │ │ -
704 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
705 * for more on @a hinting.
│ │ │ -
706 *
│ │ │ -
707 * Insertion requires amortized constant time.
│ │ │ -
708 */
│ │ │ -
709 template <typename _Obj>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
712 _Obj&& __obj)
│ │ │ -
713 {
│ │ │ -
714 auto __ret = _M_h.try_emplace(__hint, __k, std::forward<_Obj>(__obj));
│ │ │ -
715 if (!__ret.second)
│ │ │ -
716 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ -
717 return __ret.first;
│ │ │ -
718 }
│ │ │ -
│ │ │ -
719
│ │ │ -
720 // move-capable overload
│ │ │ -
721 template <typename _Obj>
│ │ │ - │ │ │ - │ │ │ -
724 {
│ │ │ -
725 auto __ret = _M_h.try_emplace(__hint, std::move(__k),
│ │ │ - │ │ │ -
727 if (!__ret.second)
│ │ │ -
728 __ret.first->second = std::forward<_Obj>(__obj);
│ │ │ -
729 return __ret.first;
│ │ │ -
730 }
│ │ │ -
731#endif // unordered_map_try_emplace
│ │ │ -
732
│ │ │ -
733 ///@{
│ │ │ -
734 /**
│ │ │ -
735 * @brief Erases an element from an %unordered_map.
│ │ │ -
736 * @param __position An iterator pointing to the element to be erased.
│ │ │ -
737 * @return An iterator pointing to the element immediately following
│ │ │ -
738 * @a __position prior to the element being erased. If no such
│ │ │ -
739 * element exists, end() is returned.
│ │ │ -
740 *
│ │ │ -
741 * This function erases an element, pointed to by the given iterator,
│ │ │ -
742 * from an %unordered_map.
│ │ │ -
743 * Note that this function only erases the element, and that if the
│ │ │ -
744 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ -
745 * any way. Managing the pointer is the user's responsibility.
│ │ │ -
746 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
749 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
750
│ │ │ -
751 // LWG 2059.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
754 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
755 ///@}
│ │ │ -
756
│ │ │ -
757 /**
│ │ │ -
758 * @brief Erases elements according to the provided key.
│ │ │ -
759 * @param __x Key of element to be erased.
│ │ │ -
760 * @return The number of elements erased.
│ │ │ -
761 *
│ │ │ -
762 * This function erases all the elements located by the given key from
│ │ │ -
763 * an %unordered_map. For an %unordered_map the result of this function
│ │ │ -
764 * can only be 0 (not present) or 1 (present).
│ │ │ -
765 * Note that this function only erases the element, and that if the
│ │ │ -
766 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ -
767 * any way. Managing the pointer is the user's responsibility.
│ │ │ -
768 */
│ │ │ - │ │ │ -
│ │ │ -
770 erase(const key_type& __x)
│ │ │ -
771 { return _M_h.erase(__x); }
│ │ │ -
│ │ │ -
772
│ │ │ -
773 /**
│ │ │ -
774 * @brief Erases a [__first,__last) range of elements from an
│ │ │ -
775 * %unordered_map.
│ │ │ -
776 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
777 * erased.
│ │ │ -
778 * @param __last Iterator pointing to the end of the range to
│ │ │ -
779 * be erased.
│ │ │ -
780 * @return The iterator @a __last.
│ │ │ -
781 *
│ │ │ -
782 * This function erases a sequence of elements from an %unordered_map.
│ │ │ -
783 * Note that this function only erases the elements, and that if
│ │ │ -
784 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ -
785 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
786 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
789 { return _M_h.erase(__first, __last); }
│ │ │ -
│ │ │ -
790
│ │ │ -
791 /**
│ │ │ -
792 * Erases all elements in an %unordered_map.
│ │ │ -
793 * Note that this function only erases the elements, and that if the
│ │ │ -
794 * elements themselves are pointers, the pointed-to memory is not touched
│ │ │ -
795 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
796 */
│ │ │ -
797 void
│ │ │ -
│ │ │ -
798 clear() noexcept
│ │ │ -
799 { _M_h.clear(); }
│ │ │ -
│ │ │ -
800
│ │ │ -
801 /**
│ │ │ -
802 * @brief Swaps data with another %unordered_map.
│ │ │ -
803 * @param __x An %unordered_map of the same element and allocator
│ │ │ -
804 * types.
│ │ │ -
805 *
│ │ │ -
806 * This exchanges the elements between two %unordered_map in constant
│ │ │ -
807 * time.
│ │ │ -
808 * Note that the global std::swap() function is specialized such that
│ │ │ -
809 * std::swap(m1,m2) will feed to this function.
│ │ │ -
810 */
│ │ │ -
811 void
│ │ │ + │ │ │ +
572 : _Base(_Node_alloc_traits::_S_select_on_copy(
│ │ │ +
573 __list._M_get_Node_allocator()))
│ │ │ +
574 { _M_range_initialize(__list.begin(), __list.end()); }
│ │ │ +
│ │ │ +
575
│ │ │ +
576 /**
│ │ │ +
577 * @brief The %forward_list move constructor.
│ │ │ +
578 * @param __list A %forward_list of identical element and allocator
│ │ │ +
579 * types.
│ │ │ +
580 *
│ │ │ +
581 * The newly-created %forward_list contains the exact contents of the
│ │ │ +
582 * moved instance. The contents of the moved instance are a valid, but
│ │ │ +
583 * unspecified %forward_list.
│ │ │ +
584 */
│ │ │ + │ │ │ +
586
│ │ │ +
587 /**
│ │ │ +
588 * @brief Builds a %forward_list from an initializer_list
│ │ │ +
589 * @param __il An initializer_list of value_type.
│ │ │ +
590 * @param __al An allocator object.
│ │ │ +
591 *
│ │ │ +
592 * Create a %forward_list consisting of copies of the elements
│ │ │ +
593 * in the initializer_list @a __il. This is linear in __il.size().
│ │ │ +
594 */
│ │ │ +
│ │ │ + │ │ │ +
596 const _Alloc& __al = _Alloc())
│ │ │ + │ │ │ +
598 { _M_range_initialize(__il.begin(), __il.end()); }
│ │ │ +
│ │ │ +
599
│ │ │ +
600 /**
│ │ │ +
601 * @brief The forward_list dtor.
│ │ │ +
602 */
│ │ │ +
│ │ │ +
603 ~forward_list() noexcept
│ │ │ +
604 { }
│ │ │ +
│ │ │ +
605
│ │ │ +
606 /**
│ │ │ +
607 * @brief The %forward_list assignment operator.
│ │ │ +
608 * @param __list A %forward_list of identical element and allocator
│ │ │ +
609 * types.
│ │ │ +
610 *
│ │ │ +
611 * All the elements of @a __list are copied.
│ │ │ +
612 *
│ │ │ +
613 * Whether the allocator is copied depends on the allocator traits.
│ │ │ +
614 */
│ │ │ + │ │ │ + │ │ │ +
617
│ │ │ +
618 /**
│ │ │ +
619 * @brief The %forward_list move assignment operator.
│ │ │ +
620 * @param __list A %forward_list of identical element and allocator
│ │ │ +
621 * types.
│ │ │ +
622 *
│ │ │ +
623 * The contents of @a __list are moved into this %forward_list
│ │ │ +
624 * (without copying, if the allocators permit it).
│ │ │ +
625 *
│ │ │ +
626 * Afterwards @a __list is a valid, but unspecified %forward_list
│ │ │ +
627 *
│ │ │ +
628 * Whether the allocator is moved depends on the allocator traits.
│ │ │ +
629 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
632 noexcept(_Node_alloc_traits::_S_nothrow_move())
│ │ │ +
633 {
│ │ │ +
634 constexpr bool __move_storage =
│ │ │ +
635 _Node_alloc_traits::_S_propagate_on_move_assign()
│ │ │ +
636 || _Node_alloc_traits::_S_always_equal();
│ │ │ + │ │ │ +
638 return *this;
│ │ │ +
639 }
│ │ │ +
│ │ │ +
640
│ │ │ +
641 /**
│ │ │ +
642 * @brief The %forward_list initializer list assignment operator.
│ │ │ +
643 * @param __il An initializer_list of value_type.
│ │ │ +
644 *
│ │ │ +
645 * Replace the contents of the %forward_list with copies of the
│ │ │ +
646 * elements in the initializer_list @a __il. This is linear in
│ │ │ +
647 * __il.size().
│ │ │ +
648 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
651 {
│ │ │ +
652 assign(__il);
│ │ │ +
653 return *this;
│ │ │ +
654 }
│ │ │ +
│ │ │ +
655
│ │ │ +
656 /**
│ │ │ +
657 * @brief Assigns a range to a %forward_list.
│ │ │ +
658 * @param __first An input iterator.
│ │ │ +
659 * @param __last An input iterator.
│ │ │ +
660 *
│ │ │ +
661 * This function fills a %forward_list with copies of the elements
│ │ │ +
662 * in the range [@a __first,@a __last).
│ │ │ +
663 *
│ │ │ +
664 * Note that the assignment completely changes the %forward_list and
│ │ │ +
665 * that the number of elements of the resulting %forward_list is the
│ │ │ +
666 * same as the number of elements assigned.
│ │ │ +
667 */
│ │ │ +
668 template<typename _InputIterator,
│ │ │ + │ │ │ +
670 void
│ │ │ +
│ │ │ + │ │ │ +
672 {
│ │ │ +
673 typedef is_assignable<_Tp, decltype(*__first)> __assignable;
│ │ │ +
674 _M_assign(__first, __last, __assignable());
│ │ │ +
675 }
│ │ │ +
│ │ │ +
676
│ │ │ +
677 /**
│ │ │ +
678 * @brief Assigns a given value to a %forward_list.
│ │ │ +
679 * @param __n Number of elements to be assigned.
│ │ │ +
680 * @param __val Value to be assigned.
│ │ │ +
681 *
│ │ │ +
682 * This function fills a %forward_list with @a __n copies of the
│ │ │ +
683 * given value. Note that the assignment completely changes the
│ │ │ +
684 * %forward_list, and that the resulting %forward_list has __n
│ │ │ +
685 * elements.
│ │ │ +
686 */
│ │ │ +
687 void
│ │ │ +
│ │ │ +
688 assign(size_type __n, const _Tp& __val)
│ │ │ +
689 { _M_assign_n(__n, __val, is_copy_assignable<_Tp>()); }
│ │ │ +
│ │ │ +
690
│ │ │ +
691 /**
│ │ │ +
692 * @brief Assigns an initializer_list to a %forward_list.
│ │ │ +
693 * @param __il An initializer_list of value_type.
│ │ │ +
694 *
│ │ │ +
695 * Replace the contents of the %forward_list with copies of the
│ │ │ +
696 * elements in the initializer_list @a __il. This is linear in
│ │ │ +
697 * il.size().
│ │ │ +
698 */
│ │ │ +
699 void
│ │ │ +
│ │ │ + │ │ │ +
701 { assign(__il.begin(), __il.end()); }
│ │ │ +
│ │ │ +
702
│ │ │ +
703 /// Get a copy of the memory allocation object.
│ │ │ +
704 allocator_type
│ │ │ +
│ │ │ + │ │ │ +
706 { return allocator_type(this->_M_get_Node_allocator()); }
│ │ │ +
│ │ │ +
707
│ │ │ +
708 // 23.3.4.3 iterators:
│ │ │ +
709
│ │ │ +
710 /**
│ │ │ +
711 * Returns a read/write iterator that points before the first element
│ │ │ +
712 * in the %forward_list. Iteration is done in ordinary element order.
│ │ │ +
713 */
│ │ │ +
714 [[__nodiscard__]]
│ │ │ + │ │ │ +
│ │ │ +
716 before_begin() noexcept
│ │ │ +
717 { return iterator(&this->_M_impl._M_head); }
│ │ │ +
│ │ │ +
718
│ │ │ +
719 /**
│ │ │ +
720 * Returns a read-only (constant) iterator that points before the
│ │ │ +
721 * first element in the %forward_list. Iteration is done in ordinary
│ │ │ +
722 * element order.
│ │ │ +
723 */
│ │ │ +
724 [[__nodiscard__]]
│ │ │ +
725 const_iterator
│ │ │ +
│ │ │ + │ │ │ +
727 { return const_iterator(&this->_M_impl._M_head); }
│ │ │ +
│ │ │ +
728
│ │ │ +
729 /**
│ │ │ +
730 * Returns a read/write iterator that points to the first element
│ │ │ +
731 * in the %forward_list. Iteration is done in ordinary element order.
│ │ │ +
732 */
│ │ │ +
733 [[__nodiscard__]]
│ │ │ + │ │ │ +
│ │ │ +
735 begin() noexcept
│ │ │ +
736 { return iterator(this->_M_impl._M_head._M_next); }
│ │ │ +
│ │ │ +
737
│ │ │ +
738 /**
│ │ │ +
739 * Returns a read-only (constant) iterator that points to the first
│ │ │ +
740 * element in the %forward_list. Iteration is done in ordinary
│ │ │ +
741 * element order.
│ │ │ +
742 */
│ │ │ +
743 [[__nodiscard__]]
│ │ │ +
744 const_iterator
│ │ │ +
│ │ │ +
745 begin() const noexcept
│ │ │ +
746 { return const_iterator(this->_M_impl._M_head._M_next); }
│ │ │ +
│ │ │ +
747
│ │ │ +
748 /**
│ │ │ +
749 * Returns a read/write iterator that points one past the last
│ │ │ +
750 * element in the %forward_list. Iteration is done in ordinary
│ │ │ +
751 * element order.
│ │ │ +
752 */
│ │ │ +
753 [[__nodiscard__]]
│ │ │ + │ │ │ +
│ │ │ +
755 end() noexcept
│ │ │ +
756 { return iterator(nullptr); }
│ │ │ +
│ │ │ +
757
│ │ │ +
758 /**
│ │ │ +
759 * Returns a read-only iterator that points one past the last
│ │ │ +
760 * element in the %forward_list. Iteration is done in ordinary
│ │ │ +
761 * element order.
│ │ │ +
762 */
│ │ │ +
763 [[__nodiscard__]]
│ │ │ +
764 const_iterator
│ │ │ +
│ │ │ +
765 end() const noexcept
│ │ │ +
766 { return const_iterator(nullptr); }
│ │ │ +
│ │ │ +
767
│ │ │ +
768 /**
│ │ │ +
769 * Returns a read-only (constant) iterator that points to the
│ │ │ +
770 * first element in the %forward_list. Iteration is done in ordinary
│ │ │ +
771 * element order.
│ │ │ +
772 */
│ │ │ +
773 [[__nodiscard__]]
│ │ │ +
774 const_iterator
│ │ │ +
│ │ │ +
775 cbegin() const noexcept
│ │ │ +
776 { return const_iterator(this->_M_impl._M_head._M_next); }
│ │ │ +
│ │ │ +
777
│ │ │ +
778 /**
│ │ │ +
779 * Returns a read-only (constant) iterator that points before the
│ │ │ +
780 * first element in the %forward_list. Iteration is done in ordinary
│ │ │ +
781 * element order.
│ │ │ +
782 */
│ │ │ +
783 [[__nodiscard__]]
│ │ │ +
784 const_iterator
│ │ │ +
│ │ │ + │ │ │ +
786 { return const_iterator(&this->_M_impl._M_head); }
│ │ │ +
│ │ │ +
787
│ │ │ +
788 /**
│ │ │ +
789 * Returns a read-only (constant) iterator that points one past
│ │ │ +
790 * the last element in the %forward_list. Iteration is done in
│ │ │ +
791 * ordinary element order.
│ │ │ +
792 */
│ │ │ +
793 [[__nodiscard__]]
│ │ │ +
794 const_iterator
│ │ │ +
│ │ │ +
795 cend() const noexcept
│ │ │ +
796 { return const_iterator(nullptr); }
│ │ │ +
│ │ │ +
797
│ │ │ +
798 /**
│ │ │ +
799 * Returns true if the %forward_list is empty. (Thus begin() would
│ │ │ +
800 * equal end().)
│ │ │ +
801 */
│ │ │ +
802 [[__nodiscard__]]
│ │ │ +
803 bool
│ │ │ +
│ │ │ +
804 empty() const noexcept
│ │ │ +
805 { return this->_M_impl._M_head._M_next == nullptr; }
│ │ │ +
│ │ │ +
806
│ │ │ +
807 /**
│ │ │ +
808 * Returns the largest possible number of elements of %forward_list.
│ │ │ +
809 */
│ │ │ +
810 [[__nodiscard__]]
│ │ │ +
811 size_type
│ │ │
│ │ │ - │ │ │ -
813 noexcept( noexcept(_M_h.swap(__x._M_h)) )
│ │ │ -
814 { _M_h.swap(__x._M_h); }
│ │ │ -
│ │ │ -
815
│ │ │ -
816#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
817 template<typename, typename, typename>
│ │ │ -
818 friend class std::_Hash_merge_helper;
│ │ │ -
819
│ │ │ -
820 template<typename _H2, typename _P2>
│ │ │ -
821 void
│ │ │ - │ │ │ -
823 {
│ │ │ - │ │ │ -
825 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ -
826 }
│ │ │ -
827
│ │ │ -
828 template<typename _H2, typename _P2>
│ │ │ -
829 void
│ │ │ -
830 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ -
831 { merge(__source); }
│ │ │ -
832
│ │ │ -
833 template<typename _H2, typename _P2>
│ │ │ -
834 void
│ │ │ -
835 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>& __source)
│ │ │ -
836 {
│ │ │ -
837 using _Merge_helper = _Hash_merge_helper<unordered_map, _H2, _P2>;
│ │ │ -
838 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
│ │ │ -
839 }
│ │ │ -
840
│ │ │ -
841 template<typename _H2, typename _P2>
│ │ │ -
842 void
│ │ │ -
843 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ -
844 { merge(__source); }
│ │ │ -
845#endif // node_extract
│ │ │ -
846
│ │ │ -
847 // observers.
│ │ │ -
848
│ │ │ -
849 /// Returns the hash functor object with which the %unordered_map was
│ │ │ -
850 /// constructed.
│ │ │ -
851 hasher
│ │ │ -
│ │ │ - │ │ │ -
853 { return _M_h.hash_function(); }
│ │ │ -
│ │ │ -
854
│ │ │ -
855 /// Returns the key comparison object with which the %unordered_map was
│ │ │ -
856 /// constructed.
│ │ │ - │ │ │ -
│ │ │ -
858 key_eq() const
│ │ │ -
859 { return _M_h.key_eq(); }
│ │ │ -
│ │ │ -
860
│ │ │ -
861 // lookup.
│ │ │ -
862
│ │ │ -
863 ///@{
│ │ │ -
864 /**
│ │ │ -
865 * @brief Tries to locate an element in an %unordered_map.
│ │ │ -
866 * @param __x Key to be located.
│ │ │ -
867 * @return Iterator pointing to sought-after element, or end() if not
│ │ │ -
868 * found.
│ │ │ -
869 *
│ │ │ -
870 * This function takes a key and tries to locate the element with which
│ │ │ -
871 * the key matches. If successful the function returns an iterator
│ │ │ -
872 * pointing to the sought after element. If unsuccessful it returns the
│ │ │ -
873 * past-the-end ( @c end() ) iterator.
│ │ │ -
874 */
│ │ │ - │ │ │ -
│ │ │ -
876 find(const key_type& __x)
│ │ │ -
877 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
878
│ │ │ -
879#if __cplusplus > 201703L
│ │ │ -
880 template<typename _Kt>
│ │ │ -
881 auto
│ │ │ +
812 max_size() const noexcept
│ │ │ +
813 { return _Node_alloc_traits::max_size(this->_M_get_Node_allocator()); }
│ │ │ +
│ │ │ +
814
│ │ │ +
815 // 23.3.4.4 element access:
│ │ │ +
816
│ │ │ +
817 /**
│ │ │ +
818 * Returns a read/write reference to the data at the first
│ │ │ +
819 * element of the %forward_list.
│ │ │ +
820 */
│ │ │ +
821 [[__nodiscard__]]
│ │ │ +
822 reference
│ │ │ +
│ │ │ + │ │ │ +
824 {
│ │ │ +
825 __glibcxx_requires_nonempty();
│ │ │ +
826 _Node* __front = static_cast<_Node*>(this->_M_impl._M_head._M_next);
│ │ │ +
827 return *__front->_M_valptr();
│ │ │ +
828 }
│ │ │ +
│ │ │ +
829
│ │ │ +
830 /**
│ │ │ +
831 * Returns a read-only (constant) reference to the data at the first
│ │ │ +
832 * element of the %forward_list.
│ │ │ +
833 */
│ │ │ +
834 [[__nodiscard__]]
│ │ │ +
835 const_reference
│ │ │ +
│ │ │ +
836 front() const
│ │ │ +
837 {
│ │ │ +
838 __glibcxx_requires_nonempty();
│ │ │ +
839 _Node* __front = static_cast<_Node*>(this->_M_impl._M_head._M_next);
│ │ │ +
840 return *__front->_M_valptr();
│ │ │ +
841 }
│ │ │ +
│ │ │ +
842
│ │ │ +
843 // 23.3.4.5 modifiers:
│ │ │ +
844
│ │ │ +
845 /**
│ │ │ +
846 * @brief Constructs object in %forward_list at the front of the
│ │ │ +
847 * list.
│ │ │ +
848 * @param __args Arguments.
│ │ │ +
849 *
│ │ │ +
850 * This function will insert an object of type Tp constructed
│ │ │ +
851 * with Tp(std::forward<Args>(args)...) at the front of the list
│ │ │ +
852 * Due to the nature of a %forward_list this operation can
│ │ │ +
853 * be done in constant time, and does not invalidate iterators
│ │ │ +
854 * and references.
│ │ │ +
855 */
│ │ │ +
856 template<typename... _Args>
│ │ │ +
857#if __cplusplus > 201402L
│ │ │ +
858 reference
│ │ │ +
859#else
│ │ │ +
860 void
│ │ │ +
861#endif
│ │ │ +
│ │ │ + │ │ │ +
863 {
│ │ │ +
864 this->_M_insert_after(cbefore_begin(),
│ │ │ + │ │ │ +
866#if __cplusplus > 201402L
│ │ │ +
867 return front();
│ │ │ +
868#endif
│ │ │ +
869 }
│ │ │ +
│ │ │ +
870
│ │ │ +
871 /**
│ │ │ +
872 * @brief Add data to the front of the %forward_list.
│ │ │ +
873 * @param __val Data to be added.
│ │ │ +
874 *
│ │ │ +
875 * This is a typical stack operation. The function creates an
│ │ │ +
876 * element at the front of the %forward_list and assigns the given
│ │ │ +
877 * data to it. Due to the nature of a %forward_list this operation
│ │ │ +
878 * can be done in constant time, and does not invalidate iterators
│ │ │ +
879 * and references.
│ │ │ +
880 */
│ │ │ +
881 void
│ │ │
│ │ │ -
882 find(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x))
│ │ │ -
883 { return _M_h._M_find_tr(__x); }
│ │ │ +
882 push_front(const _Tp& __val)
│ │ │ +
883 { this->_M_insert_after(cbefore_begin(), __val); }
│ │ │
│ │ │ -
884#endif
│ │ │ -
885
│ │ │ - │ │ │ -
│ │ │ -
887 find(const key_type& __x) const
│ │ │ -
888 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
889
│ │ │ -
890#if __cplusplus > 201703L
│ │ │ -
891 template<typename _Kt>
│ │ │ -
892 auto
│ │ │ -
│ │ │ -
893 find(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x))
│ │ │ -
894 { return _M_h._M_find_tr(__x); }
│ │ │ -
│ │ │ -
895#endif
│ │ │ -
896 ///@}
│ │ │ -
897
│ │ │ -
898 ///@{
│ │ │ -
899 /**
│ │ │ -
900 * @brief Finds the number of elements.
│ │ │ -
901 * @param __x Key to count.
│ │ │ -
902 * @return Number of elements with specified key.
│ │ │ -
903 *
│ │ │ -
904 * This function only makes sense for %unordered_multimap; for
│ │ │ -
905 * %unordered_map the result will either be 0 (not present) or 1
│ │ │ -
906 * (present).
│ │ │ -
907 */
│ │ │ - │ │ │ -
│ │ │ -
909 count(const key_type& __x) const
│ │ │ -
910 { return _M_h.count(__x); }
│ │ │ -
│ │ │ -
911
│ │ │ -
912#if __cplusplus > 201703L
│ │ │ -
913 template<typename _Kt>
│ │ │ -
914 auto
│ │ │ -
│ │ │ -
915 count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x))
│ │ │ -
916 { return _M_h._M_count_tr(__x); }
│ │ │ -
│ │ │ -
917#endif
│ │ │ -
918 ///@}
│ │ │ -
919
│ │ │ -
920#if __cplusplus > 201703L
│ │ │ -
921 ///@{
│ │ │ -
922 /**
│ │ │ -
923 * @brief Finds whether an element with the given key exists.
│ │ │ -
924 * @param __x Key of elements to be located.
│ │ │ -
925 * @return True if there is any element with the specified key.
│ │ │ -
926 */
│ │ │ -
927 bool
│ │ │ -
│ │ │ -
928 contains(const key_type& __x) const
│ │ │ -
929 { return _M_h.find(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
930
│ │ │ -
931 template<typename _Kt>
│ │ │ -
932 auto
│ │ │ -
│ │ │ -
933 contains(const _Kt& __x) const
│ │ │ -
934 -> decltype(_M_h._M_find_tr(__x), void(), true)
│ │ │ -
935 { return _M_h._M_find_tr(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
936 ///@}
│ │ │ -
937#endif
│ │ │ -
938
│ │ │ -
939 ///@{
│ │ │ -
940 /**
│ │ │ -
941 * @brief Finds a subsequence matching given key.
│ │ │ -
942 * @param __x Key to be located.
│ │ │ -
943 * @return Pair of iterators that possibly points to the subsequence
│ │ │ -
944 * matching given key.
│ │ │ -
945 *
│ │ │ -
946 * This function probably only makes sense for %unordered_multimap.
│ │ │ -
947 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
950 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
951
│ │ │ -
952#if __cplusplus > 201703L
│ │ │ -
953 template<typename _Kt>
│ │ │ -
954 auto
│ │ │ -
│ │ │ -
955 equal_range(const _Kt& __x)
│ │ │ -
956 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ -
957 { return _M_h._M_equal_range_tr(__x); }
│ │ │ -
│ │ │ -
958#endif
│ │ │ -
959
│ │ │ - │ │ │ -
│ │ │ -
961 equal_range(const key_type& __x) const
│ │ │ -
962 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
963
│ │ │ -
964#if __cplusplus > 201703L
│ │ │ -
965 template<typename _Kt>
│ │ │ -
966 auto
│ │ │ -
│ │ │ -
967 equal_range(const _Kt& __x) const
│ │ │ -
968 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ -
969 { return _M_h._M_equal_range_tr(__x); }
│ │ │ -
│ │ │ -
970#endif
│ │ │ -
971 ///@}
│ │ │ -
972
│ │ │ -
973 ///@{
│ │ │ -
974 /**
│ │ │ -
975 * @brief Subscript ( @c [] ) access to %unordered_map data.
│ │ │ -
976 * @param __k The key for which data should be retrieved.
│ │ │ -
977 * @return A reference to the data of the (key,data) %pair.
│ │ │ -
978 *
│ │ │ -
979 * Allows for easy lookup with the subscript ( @c [] )operator. Returns
│ │ │ -
980 * data associated with the key specified in subscript. If the key does
│ │ │ -
981 * not exist, a pair with that key is created using default values, which
│ │ │ -
982 * is then returned.
│ │ │ -
983 *
│ │ │ -
984 * Lookup requires constant time.
│ │ │ -
985 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
988 { return _M_h[__k]; }
│ │ │ -
│ │ │ -
989
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
992 { return _M_h[std::move(__k)]; }
│ │ │ -
│ │ │ -
993 ///@}
│ │ │ -
994
│ │ │ -
995 ///@{
│ │ │ -
996 /**
│ │ │ -
997 * @brief Access to %unordered_map data.
│ │ │ -
998 * @param __k The key for which data should be retrieved.
│ │ │ -
999 * @return A reference to the data whose key is equal to @a __k, if
│ │ │ -
1000 * such a data is present in the %unordered_map.
│ │ │ -
1001 * @throw std::out_of_range If no such data is present.
│ │ │ -
1002 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1005 { return _M_h.at(__k); }
│ │ │ -
│ │ │ -
1006
│ │ │ -
1007 const mapped_type&
│ │ │ -
│ │ │ -
1008 at(const key_type& __k) const
│ │ │ -
1009 { return _M_h.at(__k); }
│ │ │ -
│ │ │ -
1010 ///@}
│ │ │ -
1011
│ │ │ -
1012 // bucket interface.
│ │ │ -
1013
│ │ │ -
1014 /// Returns the number of buckets of the %unordered_map.
│ │ │ -
1015 size_type
│ │ │ -
│ │ │ - │ │ │ -
1017 { return _M_h.bucket_count(); }
│ │ │ -
│ │ │ -
1018
│ │ │ -
1019 /// Returns the maximum number of buckets of the %unordered_map.
│ │ │ -
1020 size_type
│ │ │ -
│ │ │ - │ │ │ -
1022 { return _M_h.max_bucket_count(); }
│ │ │ -
│ │ │ -
1023
│ │ │ -
1024 /*
│ │ │ -
1025 * @brief Returns the number of elements in a given bucket.
│ │ │ -
1026 * @param __n A bucket index.
│ │ │ -
1027 * @return The number of elements in the bucket.
│ │ │ -
1028 */
│ │ │ -
1029 size_type
│ │ │ -
1030 bucket_size(size_type __n) const
│ │ │ -
1031 { return _M_h.bucket_size(__n); }
│ │ │ -
1032
│ │ │ -
1033 /*
│ │ │ -
1034 * @brief Returns the bucket index of a given element.
│ │ │ -
1035 * @param __key A key instance.
│ │ │ -
1036 * @return The key bucket index.
│ │ │ -
1037 */
│ │ │ -
1038 size_type
│ │ │ -
1039 bucket(const key_type& __key) const
│ │ │ -
1040 { return _M_h.bucket(__key); }
│ │ │ -
1041
│ │ │ -
1042 /**
│ │ │ -
1043 * @brief Returns a read/write iterator pointing to the first bucket
│ │ │ -
1044 * element.
│ │ │ -
1045 * @param __n The bucket index.
│ │ │ -
1046 * @return A read/write local iterator.
│ │ │ +
884
│ │ │ +
885 /**
│ │ │ +
886 *
│ │ │ +
887 */
│ │ │ +
888 void
│ │ │ +
889 push_front(_Tp&& __val)
│ │ │ +
890 { this->_M_insert_after(cbefore_begin(), std::move(__val)); }
│ │ │ +
891
│ │ │ +
892 /**
│ │ │ +
893 * @brief Removes first element.
│ │ │ +
894 *
│ │ │ +
895 * This is a typical stack operation. It shrinks the %forward_list
│ │ │ +
896 * by one. Due to the nature of a %forward_list this operation can
│ │ │ +
897 * be done in constant time, and only invalidates iterators/references
│ │ │ +
898 * to the element being removed.
│ │ │ +
899 *
│ │ │ +
900 * Note that no data is returned, and if the first element's data
│ │ │ +
901 * is needed, it should be retrieved before pop_front() is
│ │ │ +
902 * called.
│ │ │ +
903 */
│ │ │ +
904 void
│ │ │ +
│ │ │ + │ │ │ +
906 { this->_M_erase_after(&this->_M_impl._M_head); }
│ │ │ +
│ │ │ +
907
│ │ │ +
908 /**
│ │ │ +
909 * @brief Constructs object in %forward_list after the specified
│ │ │ +
910 * iterator.
│ │ │ +
911 * @param __pos A const_iterator into the %forward_list.
│ │ │ +
912 * @param __args Arguments.
│ │ │ +
913 * @return An iterator that points to the inserted data.
│ │ │ +
914 *
│ │ │ +
915 * This function will insert an object of type T constructed
│ │ │ +
916 * with T(std::forward<Args>(args)...) after the specified
│ │ │ +
917 * location. Due to the nature of a %forward_list this operation can
│ │ │ +
918 * be done in constant time, and does not invalidate iterators
│ │ │ +
919 * and references.
│ │ │ +
920 */
│ │ │ +
921 template<typename... _Args>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
924 { return iterator(this->_M_insert_after(__pos,
│ │ │ + │ │ │ +
│ │ │ +
926
│ │ │ +
927 /**
│ │ │ +
928 * @brief Inserts given value into %forward_list after specified
│ │ │ +
929 * iterator.
│ │ │ +
930 * @param __pos An iterator into the %forward_list.
│ │ │ +
931 * @param __val Data to be inserted.
│ │ │ +
932 * @return An iterator that points to the inserted data.
│ │ │ +
933 *
│ │ │ +
934 * This function will insert a copy of the given value after
│ │ │ +
935 * the specified location. Due to the nature of a %forward_list this
│ │ │ +
936 * operation can be done in constant time, and does not
│ │ │ +
937 * invalidate iterators and references.
│ │ │ +
938 */
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
941 { return iterator(this->_M_insert_after(__pos, __val)); }
│ │ │ +
│ │ │ +
942
│ │ │ +
943 /**
│ │ │ +
944 *
│ │ │ +
945 */
│ │ │ + │ │ │ +
947 insert_after(const_iterator __pos, _Tp&& __val)
│ │ │ +
948 { return iterator(this->_M_insert_after(__pos, std::move(__val))); }
│ │ │ +
949
│ │ │ +
950 /**
│ │ │ +
951 * @brief Inserts a number of copies of given data into the
│ │ │ +
952 * %forward_list.
│ │ │ +
953 * @param __pos An iterator into the %forward_list.
│ │ │ +
954 * @param __n Number of elements to be inserted.
│ │ │ +
955 * @param __val Data to be inserted.
│ │ │ +
956 * @return An iterator pointing to the last inserted copy of
│ │ │ +
957 * @a val or @a pos if @a n == 0.
│ │ │ +
958 *
│ │ │ +
959 * This function will insert a specified number of copies of the
│ │ │ +
960 * given data after the location specified by @a pos.
│ │ │ +
961 *
│ │ │ +
962 * This operation is linear in the number of elements inserted and
│ │ │ +
963 * does not invalidate iterators and references.
│ │ │ +
964 */
│ │ │ +
965 iterator
│ │ │ +
966 insert_after(const_iterator __pos, size_type __n, const _Tp& __val);
│ │ │ +
967
│ │ │ +
968 /**
│ │ │ +
969 * @brief Inserts a range into the %forward_list.
│ │ │ +
970 * @param __pos An iterator into the %forward_list.
│ │ │ +
971 * @param __first An input iterator.
│ │ │ +
972 * @param __last An input iterator.
│ │ │ +
973 * @return An iterator pointing to the last inserted element or
│ │ │ +
974 * @a __pos if @a __first == @a __last.
│ │ │ +
975 *
│ │ │ +
976 * This function will insert copies of the data in the range
│ │ │ +
977 * [@a __first,@a __last) into the %forward_list after the
│ │ │ +
978 * location specified by @a __pos.
│ │ │ +
979 *
│ │ │ +
980 * This operation is linear in the number of elements inserted and
│ │ │ +
981 * does not invalidate iterators and references.
│ │ │ +
982 */
│ │ │ +
983 template<typename _InputIterator,
│ │ │ + │ │ │ +
985 iterator
│ │ │ +
986 insert_after(const_iterator __pos,
│ │ │ +
987 _InputIterator __first, _InputIterator __last);
│ │ │ +
988
│ │ │ +
989 /**
│ │ │ +
990 * @brief Inserts the contents of an initializer_list into
│ │ │ +
991 * %forward_list after the specified iterator.
│ │ │ +
992 * @param __pos An iterator into the %forward_list.
│ │ │ +
993 * @param __il An initializer_list of value_type.
│ │ │ +
994 * @return An iterator pointing to the last inserted element
│ │ │ +
995 * or @a __pos if @a __il is empty.
│ │ │ +
996 *
│ │ │ +
997 * This function will insert copies of the data in the
│ │ │ +
998 * initializer_list @a __il into the %forward_list before the location
│ │ │ +
999 * specified by @a __pos.
│ │ │ +
1000 *
│ │ │ +
1001 * This operation is linear in the number of elements inserted and
│ │ │ +
1002 * does not invalidate iterators and references.
│ │ │ +
1003 */
│ │ │ +
1004 iterator
│ │ │ +
│ │ │ + │ │ │ +
1006 { return insert_after(__pos, __il.begin(), __il.end()); }
│ │ │ +
│ │ │ +
1007
│ │ │ +
1008 /**
│ │ │ +
1009 * @brief Removes the element pointed to by the iterator following
│ │ │ +
1010 * @c pos.
│ │ │ +
1011 * @param __pos Iterator pointing before element to be erased.
│ │ │ +
1012 * @return An iterator pointing to the element following the one
│ │ │ +
1013 * that was erased, or end() if no such element exists.
│ │ │ +
1014 *
│ │ │ +
1015 * This function will erase the element at the given position and
│ │ │ +
1016 * thus shorten the %forward_list by one.
│ │ │ +
1017 *
│ │ │ +
1018 * Due to the nature of a %forward_list this operation can be done
│ │ │ +
1019 * in constant time, and only invalidates iterators/references to
│ │ │ +
1020 * the element being removed. The user is also cautioned that
│ │ │ +
1021 * this function only erases the element, and that if the element
│ │ │ +
1022 * is itself a pointer, the pointed-to memory is not touched in
│ │ │ +
1023 * any way. Managing the pointer is the user's responsibility.
│ │ │ +
1024 */
│ │ │ +
1025 iterator
│ │ │ +
│ │ │ + │ │ │ +
1027 { return iterator(this->_M_erase_after(const_cast<_Node_base*>
│ │ │ +
1028 (__pos._M_node))); }
│ │ │ +
│ │ │ +
1029
│ │ │ +
1030 /**
│ │ │ +
1031 * @brief Remove a range of elements.
│ │ │ +
1032 * @param __pos Iterator pointing before the first element to be
│ │ │ +
1033 * erased.
│ │ │ +
1034 * @param __last Iterator pointing to one past the last element to be
│ │ │ +
1035 * erased.
│ │ │ +
1036 * @return @ __last.
│ │ │ +
1037 *
│ │ │ +
1038 * This function will erase the elements in the range
│ │ │ +
1039 * @a (__pos,__last) and shorten the %forward_list accordingly.
│ │ │ +
1040 *
│ │ │ +
1041 * This operation is linear time in the size of the range and only
│ │ │ +
1042 * invalidates iterators/references to the element being removed.
│ │ │ +
1043 * The user is also cautioned that this function only erases the
│ │ │ +
1044 * elements, and that if the elements themselves are pointers, the
│ │ │ +
1045 * pointed-to memory is not touched in any way. Managing the pointer
│ │ │ +
1046 * is the user's responsibility.
│ │ │
1047 */
│ │ │ - │ │ │ +
1048 iterator
│ │ │
│ │ │ - │ │ │ -
1050 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
1051
│ │ │ -
1052 ///@{
│ │ │ -
1053 /**
│ │ │ -
1054 * @brief Returns a read-only (constant) iterator pointing to the first
│ │ │ -
1055 * bucket element.
│ │ │ -
1056 * @param __n The bucket index.
│ │ │ -
1057 * @return A read-only local iterator.
│ │ │ -
1058 */
│ │ │ - │ │ │ -
│ │ │ -
1060 begin(size_type __n) const
│ │ │ -
1061 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
1062
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1065 { return _M_h.cbegin(__n); }
│ │ │ -
│ │ │ -
1066 ///@}
│ │ │ -
1067
│ │ │ -
1068 /**
│ │ │ -
1069 * @brief Returns a read/write iterator pointing to one past the last
│ │ │ -
1070 * bucket elements.
│ │ │ -
1071 * @param __n The bucket index.
│ │ │ -
1072 * @return A read/write local iterator.
│ │ │ -
1073 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1076 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
1077
│ │ │ -
1078 ///@{
│ │ │ -
1079 /**
│ │ │ -
1080 * @brief Returns a read-only (constant) iterator pointing to one past
│ │ │ -
1081 * the last bucket elements.
│ │ │ -
1082 * @param __n The bucket index.
│ │ │ -
1083 * @return A read-only local iterator.
│ │ │ -
1084 */
│ │ │ - │ │ │ -
│ │ │ -
1086 end(size_type __n) const
│ │ │ -
1087 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
1088
│ │ │ - │ │ │ -
│ │ │ -
1090 cend(size_type __n) const
│ │ │ -
1091 { return _M_h.cend(__n); }
│ │ │ -
│ │ │ -
1092 ///@}
│ │ │ -
1093
│ │ │ -
1094 // hash policy.
│ │ │ -
1095
│ │ │ -
1096 /// Returns the average number of elements per bucket.
│ │ │ -
1097 float
│ │ │ -
│ │ │ - │ │ │ -
1099 { return _M_h.load_factor(); }
│ │ │ -
│ │ │ -
1100
│ │ │ -
1101 /// Returns a positive number that the %unordered_map tries to keep the
│ │ │ -
1102 /// load factor less than or equal to.
│ │ │ -
1103 float
│ │ │ -
│ │ │ - │ │ │ -
1105 { return _M_h.max_load_factor(); }
│ │ │ -
│ │ │ -
1106
│ │ │ -
1107 /**
│ │ │ -
1108 * @brief Change the %unordered_map maximum load factor.
│ │ │ -
1109 * @param __z The new maximum load factor.
│ │ │ -
1110 */
│ │ │ -
1111 void
│ │ │ -
│ │ │ - │ │ │ -
1113 { _M_h.max_load_factor(__z); }
│ │ │ -
│ │ │ -
1114
│ │ │ -
1115 /**
│ │ │ -
1116 * @brief May rehash the %unordered_map.
│ │ │ -
1117 * @param __n The new number of buckets.
│ │ │ -
1118 *
│ │ │ -
1119 * Rehash will occur only if the new number of buckets respect the
│ │ │ -
1120 * %unordered_map maximum load factor.
│ │ │ -
1121 */
│ │ │ -
1122 void
│ │ │ -
│ │ │ - │ │ │ -
1124 { _M_h.rehash(__n); }
│ │ │ -
│ │ │ -
1125
│ │ │ -
1126 /**
│ │ │ -
1127 * @brief Prepare the %unordered_map for a specified number of
│ │ │ -
1128 * elements.
│ │ │ -
1129 * @param __n Number of elements required.
│ │ │ -
1130 *
│ │ │ -
1131 * Same as rehash(ceil(n / max_load_factor())).
│ │ │ -
1132 */
│ │ │ -
1133 void
│ │ │ -
│ │ │ - │ │ │ -
1135 { _M_h.reserve(__n); }
│ │ │ + │ │ │ +
1050 { return iterator(this->_M_erase_after(const_cast<_Node_base*>
│ │ │ +
1051 (__pos._M_node),
│ │ │ +
1052 const_cast<_Node_base*>
│ │ │ +
1053 (__last._M_node))); }
│ │ │ +
│ │ │ +
1054
│ │ │ +
1055 /**
│ │ │ +
1056 * @brief Swaps data with another %forward_list.
│ │ │ +
1057 * @param __list A %forward_list of the same element and allocator
│ │ │ +
1058 * types.
│ │ │ +
1059 *
│ │ │ +
1060 * This exchanges the elements between two lists in constant
│ │ │ +
1061 * time. Note that the global std::swap() function is
│ │ │ +
1062 * specialized such that std::swap(l1,l2) will feed to this
│ │ │ +
1063 * function.
│ │ │ +
1064 *
│ │ │ +
1065 * Whether the allocators are swapped depends on the allocator traits.
│ │ │ +
1066 */
│ │ │ +
1067 void
│ │ │ +
│ │ │ + │ │ │ +
1069 {
│ │ │ +
1070 std::swap(this->_M_impl._M_head._M_next,
│ │ │ +
1071 __list._M_impl._M_head._M_next);
│ │ │ +
1072 _Node_alloc_traits::_S_on_swap(this->_M_get_Node_allocator(),
│ │ │ +
1073 __list._M_get_Node_allocator());
│ │ │ +
1074 }
│ │ │ +
│ │ │ +
1075
│ │ │ +
1076 /**
│ │ │ +
1077 * @brief Resizes the %forward_list to the specified number of
│ │ │ +
1078 * elements.
│ │ │ +
1079 * @param __sz Number of elements the %forward_list should contain.
│ │ │ +
1080 *
│ │ │ +
1081 * This function will %resize the %forward_list to the specified
│ │ │ +
1082 * number of elements. If the number is smaller than the
│ │ │ +
1083 * %forward_list's current number of elements the %forward_list
│ │ │ +
1084 * is truncated, otherwise the %forward_list is extended and the
│ │ │ +
1085 * new elements are default constructed.
│ │ │ +
1086 */
│ │ │ +
1087 void
│ │ │ +
1088 resize(size_type __sz);
│ │ │ +
1089
│ │ │ +
1090 /**
│ │ │ +
1091 * @brief Resizes the %forward_list to the specified number of
│ │ │ +
1092 * elements.
│ │ │ +
1093 * @param __sz Number of elements the %forward_list should contain.
│ │ │ +
1094 * @param __val Data with which new elements should be populated.
│ │ │ +
1095 *
│ │ │ +
1096 * This function will %resize the %forward_list to the specified
│ │ │ +
1097 * number of elements. If the number is smaller than the
│ │ │ +
1098 * %forward_list's current number of elements the %forward_list
│ │ │ +
1099 * is truncated, otherwise the %forward_list is extended and new
│ │ │ +
1100 * elements are populated with given data.
│ │ │ +
1101 */
│ │ │ +
1102 void
│ │ │ +
1103 resize(size_type __sz, const value_type& __val);
│ │ │ +
1104
│ │ │ +
1105 /**
│ │ │ +
1106 * @brief Erases all the elements.
│ │ │ +
1107 *
│ │ │ +
1108 * Note that this function only erases
│ │ │ +
1109 * the elements, and that if the elements themselves are
│ │ │ +
1110 * pointers, the pointed-to memory is not touched in any way.
│ │ │ +
1111 * Managing the pointer is the user's responsibility.
│ │ │ +
1112 */
│ │ │ +
1113 void
│ │ │ +
│ │ │ +
1114 clear() noexcept
│ │ │ +
1115 { this->_M_erase_after(&this->_M_impl._M_head, nullptr); }
│ │ │ +
│ │ │ +
1116
│ │ │ +
1117 // 23.3.4.6 forward_list operations:
│ │ │ +
1118
│ │ │ +
1119 /**
│ │ │ +
1120 * @brief Insert contents of another %forward_list.
│ │ │ +
1121 * @param __pos Iterator referencing the element to insert after.
│ │ │ +
1122 * @param __list Source list.
│ │ │ +
1123 *
│ │ │ +
1124 * The elements of @a list are inserted in constant time after
│ │ │ +
1125 * the element referenced by @a pos. @a list becomes an empty
│ │ │ +
1126 * list.
│ │ │ +
1127 *
│ │ │ +
1128 * Requires this != @a x.
│ │ │ +
1129 */
│ │ │ +
1130 void
│ │ │ +
│ │ │ + │ │ │ +
1132 {
│ │ │ +
1133 if (!__list.empty())
│ │ │ +
1134 _M_splice_after(__pos, __list.before_begin(), __list.end());
│ │ │ +
1135 }
│ │ │
│ │ │
1136
│ │ │ -
1137 template<typename _Key1, typename _Tp1, typename _Hash1, typename _Pred1,
│ │ │ -
1138 typename _Alloc1>
│ │ │ -
1139 friend bool
│ │ │ - │ │ │ - │ │ │ -
1142 };
│ │ │ -
│ │ │ -
1143
│ │ │ -
1144#if __cpp_deduction_guides >= 201606
│ │ │ -
1145
│ │ │ -
1146 template<typename _InputIterator,
│ │ │ -
1147 typename _Hash = hash<__iter_key_t<_InputIterator>>,
│ │ │ -
1148 typename _Pred = equal_to<__iter_key_t<_InputIterator>>,
│ │ │ -
1149 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>,
│ │ │ -
1150 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1151 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1152 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
1153 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1154 unordered_map(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
1156 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ -
1157 -> unordered_map<__iter_key_t<_InputIterator>,
│ │ │ -
1158 __iter_val_t<_InputIterator>,
│ │ │ -
1159 _Hash, _Pred, _Allocator>;
│ │ │ -
1160
│ │ │ -
1161 template<typename _Key, typename _Tp, typename _Hash = hash<_Key>,
│ │ │ -
1162 typename _Pred = equal_to<_Key>,
│ │ │ -
1163 typename _Allocator = allocator<pair<const _Key, _Tp>>,
│ │ │ -
1164 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1165 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
1166 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1167 unordered_map(initializer_list<pair<_Key, _Tp>>,
│ │ │ - │ │ │ -
1169 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ -
1170 -> unordered_map<_Key, _Tp, _Hash, _Pred, _Allocator>;
│ │ │ -
1171
│ │ │ -
1172 template<typename _InputIterator, typename _Allocator,
│ │ │ -
1173 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1174 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1175 unordered_map(_InputIterator, _InputIterator,
│ │ │ -
1176 typename unordered_map<int, int>::size_type, _Allocator)
│ │ │ -
1177 -> unordered_map<__iter_key_t<_InputIterator>,
│ │ │ -
1178 __iter_val_t<_InputIterator>,
│ │ │ -
1179 hash<__iter_key_t<_InputIterator>>,
│ │ │ -
1180 equal_to<__iter_key_t<_InputIterator>>,
│ │ │ -
1181 _Allocator>;
│ │ │ -
1182
│ │ │ -
1183 template<typename _InputIterator, typename _Allocator,
│ │ │ -
1184 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1185 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1186 unordered_map(_InputIterator, _InputIterator, _Allocator)
│ │ │ -
1187 -> unordered_map<__iter_key_t<_InputIterator>,
│ │ │ -
1188 __iter_val_t<_InputIterator>,
│ │ │ -
1189 hash<__iter_key_t<_InputIterator>>,
│ │ │ -
1190 equal_to<__iter_key_t<_InputIterator>>,
│ │ │ -
1191 _Allocator>;
│ │ │ -
1192
│ │ │ -
1193 template<typename _InputIterator, typename _Hash, typename _Allocator,
│ │ │ -
1194 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1195 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1196 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1197 unordered_map(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
1199 _Hash, _Allocator)
│ │ │ -
1200 -> unordered_map<__iter_key_t<_InputIterator>,
│ │ │ -
1201 __iter_val_t<_InputIterator>, _Hash,
│ │ │ -
1202 equal_to<__iter_key_t<_InputIterator>>, _Allocator>;
│ │ │ -
1203
│ │ │ -
1204 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ -
1205 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1206 unordered_map(initializer_list<pair<_Key, _Tp>>,
│ │ │ - │ │ │ -
1208 _Allocator)
│ │ │ -
1209 -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
│ │ │ -
1210
│ │ │ -
1211 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ -
1212 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1213 unordered_map(initializer_list<pair<_Key, _Tp>>, _Allocator)
│ │ │ -
1214 -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
│ │ │ -
1215
│ │ │ -
1216 template<typename _Key, typename _Tp, typename _Hash, typename _Allocator,
│ │ │ -
1217 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1218 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1219 unordered_map(initializer_list<pair<_Key, _Tp>>,
│ │ │ - │ │ │ -
1221 _Hash, _Allocator)
│ │ │ -
1222 -> unordered_map<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>;
│ │ │ -
1223
│ │ │ -
1224#endif
│ │ │ +
1137 void
│ │ │ +
1138 splice_after(const_iterator __pos, forward_list& __list) noexcept
│ │ │ + │ │ │ +
1140
│ │ │ +
1141 /**
│ │ │ +
1142 * @brief Insert element from another %forward_list.
│ │ │ +
1143 * @param __pos Iterator referencing the element to insert after.
│ │ │ +
1144 * @param __list Source list.
│ │ │ +
1145 * @param __i Iterator referencing the element before the element
│ │ │ +
1146 * to move.
│ │ │ +
1147 *
│ │ │ +
1148 * Removes the element in list @a list referenced by @a i and
│ │ │ +
1149 * inserts it into the current list after @a pos.
│ │ │ +
1150 */
│ │ │ +
1151 void
│ │ │ +
1152 splice_after(const_iterator __pos, forward_list&& __list,
│ │ │ +
1153 const_iterator __i) noexcept;
│ │ │ +
1154
│ │ │ +
1155 void
│ │ │ +
1156 splice_after(const_iterator __pos, forward_list& __list,
│ │ │ +
1157 const_iterator __i) noexcept
│ │ │ +
1158 { splice_after(__pos, std::move(__list), __i); }
│ │ │ +
1159
│ │ │ +
1160 /**
│ │ │ +
1161 * @brief Insert range from another %forward_list.
│ │ │ +
1162 * @param __pos Iterator referencing the element to insert after.
│ │ │ +
1163 * @param __list Source list.
│ │ │ +
1164 * @param __before Iterator referencing before the start of range
│ │ │ +
1165 * in list.
│ │ │ +
1166 * @param __last Iterator referencing the end of range in list.
│ │ │ +
1167 *
│ │ │ +
1168 * Removes elements in the range (__before,__last) and inserts them
│ │ │ +
1169 * after @a __pos in constant time.
│ │ │ +
1170 *
│ │ │ +
1171 * Undefined if @a __pos is in (__before,__last).
│ │ │ +
1172 * @{
│ │ │ +
1173 */
│ │ │ +
1174 void
│ │ │ +
│ │ │ + │ │ │ +
1176 const_iterator __before, const_iterator __last) noexcept
│ │ │ +
1177 { _M_splice_after(__pos, __before, __last); }
│ │ │ +
│ │ │ +
1178
│ │ │ +
1179 void
│ │ │ +
│ │ │ + │ │ │ +
1181 const_iterator __before, const_iterator __last) noexcept
│ │ │ +
1182 { _M_splice_after(__pos, __before, __last); }
│ │ │ +
│ │ │ +
1183 /// @}
│ │ │ +
1184
│ │ │ +
1185 private:
│ │ │ +
1186#ifdef __glibcxx_list_remove_return_type // C++20 && HOSTED
│ │ │ +
1187 using __remove_return_type = size_type;
│ │ │ +
1188# define _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG \
│ │ │ +
1189 __attribute__((__abi_tag__("__cxx20")))
│ │ │ +
1190#else
│ │ │ +
1191 using __remove_return_type = void;
│ │ │ +
1192# define _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG
│ │ │ +
1193#endif
│ │ │ +
1194 public:
│ │ │ +
1195
│ │ │ +
1196 /**
│ │ │ +
1197 * @brief Remove all elements equal to value.
│ │ │ +
1198 * @param __val The value to remove.
│ │ │ +
1199 *
│ │ │ +
1200 * Removes every element in the list equal to @a __val.
│ │ │ +
1201 * Remaining elements stay in list order. Note that this
│ │ │ +
1202 * function only erases the elements, and that if the elements
│ │ │ +
1203 * themselves are pointers, the pointed-to memory is not
│ │ │ +
1204 * touched in any way. Managing the pointer is the user's
│ │ │ +
1205 * responsibility.
│ │ │ +
1206 */
│ │ │ +
1207 _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG
│ │ │ +
1208 __remove_return_type
│ │ │ +
1209 remove(const _Tp& __val);
│ │ │ +
1210
│ │ │ +
1211 /**
│ │ │ +
1212 * @brief Remove all elements satisfying a predicate.
│ │ │ +
1213 * @param __pred Unary predicate function or object.
│ │ │ +
1214 *
│ │ │ +
1215 * Removes every element in the list for which the predicate
│ │ │ +
1216 * returns true. Remaining elements stay in list order. Note
│ │ │ +
1217 * that this function only erases the elements, and that if the
│ │ │ +
1218 * elements themselves are pointers, the pointed-to memory is
│ │ │ +
1219 * not touched in any way. Managing the pointer is the user's
│ │ │ +
1220 * responsibility.
│ │ │ +
1221 */
│ │ │ +
1222 template<typename _Pred>
│ │ │ +
1223 __remove_return_type
│ │ │ + │ │ │
1225
│ │ │ -
1226 /**
│ │ │ -
1227 * @brief A standard container composed of equivalent keys
│ │ │ -
1228 * (possibly containing multiple of each key value) that associates
│ │ │ -
1229 * values of another type with the keys.
│ │ │ -
1230 *
│ │ │ -
1231 * @ingroup unordered_associative_containers
│ │ │ -
1232 * @headerfile unordered_map
│ │ │ -
1233 * @since C++11
│ │ │ -
1234 *
│ │ │ -
1235 * @tparam _Key Type of key objects.
│ │ │ -
1236 * @tparam _Tp Type of mapped objects.
│ │ │ -
1237 * @tparam _Hash Hashing function object type, defaults to hash<_Value>.
│ │ │ -
1238 * @tparam _Pred Predicate function object type, defaults
│ │ │ -
1239 * to equal_to<_Value>.
│ │ │ -
1240 * @tparam _Alloc Allocator type, defaults to
│ │ │ -
1241 * std::allocator<std::pair<const _Key, _Tp>>.
│ │ │ -
1242 *
│ │ │ -
1243 * Meets the requirements of a <a href="tables.html#65">container</a>, and
│ │ │ -
1244 * <a href="tables.html#xx">unordered associative container</a>
│ │ │ -
1245 *
│ │ │ -
1246 * The resulting value type of the container is std::pair<const _Key, _Tp>.
│ │ │ -
1247 *
│ │ │ -
1248 * Base is _Hashtable, dispatched at compile time via template
│ │ │ -
1249 * alias __ummap_hashtable.
│ │ │ -
1250 */
│ │ │ -
1251 template<typename _Key, typename _Tp,
│ │ │ -
1252 typename _Hash = hash<_Key>,
│ │ │ -
1253 typename _Pred = equal_to<_Key>,
│ │ │ -
1254 typename _Alloc = allocator<std::pair<const _Key, _Tp>>>
│ │ │ -
│ │ │ - │ │ │ -
1256 {
│ │ │ - │ │ │ -
1258 _Hashtable _M_h;
│ │ │ -
1259
│ │ │ -
1260 public:
│ │ │ -
1261 // typedefs:
│ │ │ -
1262 ///@{
│ │ │ -
1263 /// Public typedefs.
│ │ │ -
1264 typedef typename _Hashtable::key_type key_type;
│ │ │ -
1265 typedef typename _Hashtable::value_type value_type;
│ │ │ -
1266 typedef typename _Hashtable::mapped_type mapped_type;
│ │ │ -
1267 typedef typename _Hashtable::hasher hasher;
│ │ │ -
1268 typedef typename _Hashtable::key_equal key_equal;
│ │ │ -
1269 typedef typename _Hashtable::allocator_type allocator_type;
│ │ │ -
1270 ///@}
│ │ │ -
1271
│ │ │ -
1272 ///@{
│ │ │ -
1273 /// Iterator-related typedefs.
│ │ │ -
1274 typedef typename _Hashtable::pointer pointer;
│ │ │ -
1275 typedef typename _Hashtable::const_pointer const_pointer;
│ │ │ -
1276 typedef typename _Hashtable::reference reference;
│ │ │ -
1277 typedef typename _Hashtable::const_reference const_reference;
│ │ │ -
1278 typedef typename _Hashtable::iterator iterator;
│ │ │ -
1279 typedef typename _Hashtable::const_iterator const_iterator;
│ │ │ -
1280 typedef typename _Hashtable::local_iterator local_iterator;
│ │ │ -
1281 typedef typename _Hashtable::const_local_iterator const_local_iterator;
│ │ │ -
1282 typedef typename _Hashtable::size_type size_type;
│ │ │ -
1283 typedef typename _Hashtable::difference_type difference_type;
│ │ │ -
1284 ///@}
│ │ │ -
1285
│ │ │ -
1286#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
1287 using node_type = typename _Hashtable::node_type;
│ │ │ -
1288#endif
│ │ │ -
1289
│ │ │ -
1290 //construct/destroy/copy
│ │ │ -
1291
│ │ │ -
1292 /// Default constructor.
│ │ │ - │ │ │ -
1294
│ │ │ -
1295 /**
│ │ │ -
1296 * @brief Default constructor creates no elements.
│ │ │ -
1297 * @param __n Mnimal initial number of buckets.
│ │ │ -
1298 * @param __hf A hash functor.
│ │ │ -
1299 * @param __eql A key equality functor.
│ │ │ -
1300 * @param __a An allocator object.
│ │ │ +
1226 /**
│ │ │ +
1227 * @brief Remove consecutive duplicate elements.
│ │ │ +
1228 *
│ │ │ +
1229 * For each consecutive set of elements with the same value,
│ │ │ +
1230 * remove all but the first one. Remaining elements stay in
│ │ │ +
1231 * list order. Note that this function only erases the
│ │ │ +
1232 * elements, and that if the elements themselves are pointers,
│ │ │ +
1233 * the pointed-to memory is not touched in any way. Managing
│ │ │ +
1234 * the pointer is the user's responsibility.
│ │ │ +
1235 */
│ │ │ +
1236 _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG
│ │ │ +
1237 __remove_return_type
│ │ │ +
│ │ │ + │ │ │ +
1239 { return unique(std::equal_to<_Tp>()); }
│ │ │ +
│ │ │ +
1240
│ │ │ +
1241#undef _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG
│ │ │ +
1242
│ │ │ +
1243 /**
│ │ │ +
1244 * @brief Remove consecutive elements satisfying a predicate.
│ │ │ +
1245 * @param __binary_pred Binary predicate function or object.
│ │ │ +
1246 *
│ │ │ +
1247 * For each consecutive set of elements [first,last) that
│ │ │ +
1248 * satisfy predicate(first,i) where i is an iterator in
│ │ │ +
1249 * [first,last), remove all but the first one. Remaining
│ │ │ +
1250 * elements stay in list order. Note that this function only
│ │ │ +
1251 * erases the elements, and that if the elements themselves are
│ │ │ +
1252 * pointers, the pointed-to memory is not touched in any way.
│ │ │ +
1253 * Managing the pointer is the user's responsibility.
│ │ │ +
1254 */
│ │ │ +
1255 template<typename _BinPred>
│ │ │ +
1256 __remove_return_type
│ │ │ + │ │ │ +
1258
│ │ │ +
1259 /**
│ │ │ +
1260 * @brief Merge sorted lists.
│ │ │ +
1261 * @param __list Sorted list to merge.
│ │ │ +
1262 *
│ │ │ +
1263 * Assumes that both @a list and this list are sorted according to
│ │ │ +
1264 * operator<(). Merges elements of @a __list into this list in
│ │ │ +
1265 * sorted order, leaving @a __list empty when complete. Elements in
│ │ │ +
1266 * this list precede elements in @a __list that are equal.
│ │ │ +
1267 */
│ │ │ +
1268 void
│ │ │ +
│ │ │ + │ │ │ + │ │ │ +
│ │ │ +
1271
│ │ │ +
1272 void
│ │ │ + │ │ │ +
1274 { merge(std::move(__list)); }
│ │ │ +
1275
│ │ │ +
1276 /**
│ │ │ +
1277 * @brief Merge sorted lists according to comparison function.
│ │ │ +
1278 * @param __list Sorted list to merge.
│ │ │ +
1279 * @param __comp Comparison function defining sort order.
│ │ │ +
1280 *
│ │ │ +
1281 * Assumes that both @a __list and this list are sorted according to
│ │ │ +
1282 * comp. Merges elements of @a __list into this list
│ │ │ +
1283 * in sorted order, leaving @a __list empty when complete. Elements
│ │ │ +
1284 * in this list precede elements in @a __list that are equivalent
│ │ │ +
1285 * according to comp().
│ │ │ +
1286 */
│ │ │ +
1287 template<typename _Comp>
│ │ │ +
1288 void
│ │ │ +
1289 merge(forward_list&& __list, _Comp __comp);
│ │ │ +
1290
│ │ │ +
1291 template<typename _Comp>
│ │ │ +
1292 void
│ │ │ +
1293 merge(forward_list& __list, _Comp __comp)
│ │ │ +
1294 { merge(std::move(__list), __comp); }
│ │ │ +
1295
│ │ │ +
1296 /**
│ │ │ +
1297 * @brief Sort the elements of the list.
│ │ │ +
1298 *
│ │ │ +
1299 * Sorts the elements of this list in NlogN time. Equivalent
│ │ │ +
1300 * elements remain in list order.
│ │ │
1301 */
│ │ │ -
1302 explicit
│ │ │ +
1302 void
│ │ │
│ │ │ - │ │ │ -
1304 const hasher& __hf = hasher(),
│ │ │ -
1305 const key_equal& __eql = key_equal(),
│ │ │ -
1306 const allocator_type& __a = allocator_type())
│ │ │ -
1307 : _M_h(__n, __hf, __eql, __a)
│ │ │ -
1308 { }
│ │ │ -
│ │ │ -
1309
│ │ │ -
1310 /**
│ │ │ -
1311 * @brief Builds an %unordered_multimap from a range.
│ │ │ -
1312 * @param __first An input iterator.
│ │ │ -
1313 * @param __last An input iterator.
│ │ │ -
1314 * @param __n Minimal initial number of buckets.
│ │ │ -
1315 * @param __hf A hash functor.
│ │ │ -
1316 * @param __eql A key equality functor.
│ │ │ -
1317 * @param __a An allocator object.
│ │ │ + │ │ │ +
1304 { sort(std::less<_Tp>()); }
│ │ │ +
│ │ │ +
1305
│ │ │ +
1306 /**
│ │ │ +
1307 * @brief Sort the forward_list using a comparison function.
│ │ │ +
1308 *
│ │ │ +
1309 * Sorts the elements of this list in NlogN time. Equivalent
│ │ │ +
1310 * elements remain in list order.
│ │ │ +
1311 */
│ │ │ +
1312 template<typename _Comp>
│ │ │ +
1313 void
│ │ │ +
1314 sort(_Comp __comp);
│ │ │ +
1315
│ │ │ +
1316 /**
│ │ │ +
1317 * @brief Reverse the elements in list.
│ │ │
1318 *
│ │ │ -
1319 * Create an %unordered_multimap consisting of copies of the elements
│ │ │ -
1320 * from [__first,__last). This is linear in N (where N is
│ │ │ -
1321 * distance(__first,__last)).
│ │ │ -
1322 */
│ │ │ -
1323 template<typename _InputIterator>
│ │ │ -
│ │ │ - │ │ │ -
1325 size_type __n = 0,
│ │ │ -
1326 const hasher& __hf = hasher(),
│ │ │ -
1327 const key_equal& __eql = key_equal(),
│ │ │ -
1328 const allocator_type& __a = allocator_type())
│ │ │ -
1329 : _M_h(__first, __last, __n, __hf, __eql, __a)
│ │ │ -
1330 { }
│ │ │ -
│ │ │ -
1331
│ │ │ -
1332 /// Copy constructor.
│ │ │ - │ │ │ -
1334
│ │ │ -
1335 /// Move constructor.
│ │ │ - │ │ │ -
1337
│ │ │ -
1338 /**
│ │ │ -
1339 * @brief Creates an %unordered_multimap with no elements.
│ │ │ -
1340 * @param __a An allocator object.
│ │ │ -
1341 */
│ │ │ -
1342 explicit
│ │ │ -
│ │ │ - │ │ │ -
1344 : _M_h(__a)
│ │ │ -
1345 { }
│ │ │ -
│ │ │ -
1346
│ │ │ -
1347 /*
│ │ │ -
1348 * @brief Copy constructor with allocator argument.
│ │ │ -
1349 * @param __uset Input %unordered_multimap to copy.
│ │ │ -
1350 * @param __a An allocator object.
│ │ │ -
1351 */
│ │ │ - │ │ │ -
1353 const allocator_type& __a)
│ │ │ -
1354 : _M_h(__ummap._M_h, __a)
│ │ │ -
1355 { }
│ │ │ -
1356
│ │ │ -
1357 /*
│ │ │ -
1358 * @brief Move constructor with allocator argument.
│ │ │ -
1359 * @param __uset Input %unordered_multimap to move.
│ │ │ -
1360 * @param __a An allocator object.
│ │ │ -
1361 */
│ │ │ - │ │ │ -
1363 const allocator_type& __a)
│ │ │ -
1364 noexcept( noexcept(_Hashtable(std::move(__ummap._M_h), __a)) )
│ │ │ -
1365 : _M_h(std::move(__ummap._M_h), __a)
│ │ │ -
1366 { }
│ │ │ -
1367
│ │ │ -
1368 /**
│ │ │ -
1369 * @brief Builds an %unordered_multimap from an initializer_list.
│ │ │ -
1370 * @param __l An initializer_list.
│ │ │ -
1371 * @param __n Minimal initial number of buckets.
│ │ │ -
1372 * @param __hf A hash functor.
│ │ │ -
1373 * @param __eql A key equality functor.
│ │ │ -
1374 * @param __a An allocator object.
│ │ │ -
1375 *
│ │ │ -
1376 * Create an %unordered_multimap consisting of copies of the elements in
│ │ │ -
1377 * the list. This is linear in N (where N is @a __l.size()).
│ │ │ -
1378 */
│ │ │ -
│ │ │ - │ │ │ -
1380 size_type __n = 0,
│ │ │ -
1381 const hasher& __hf = hasher(),
│ │ │ -
1382 const key_equal& __eql = key_equal(),
│ │ │ -
1383 const allocator_type& __a = allocator_type())
│ │ │ -
1384 : _M_h(__l, __n, __hf, __eql, __a)
│ │ │ -
1385 { }
│ │ │ -
│ │ │ -
1386
│ │ │ - │ │ │ -
1388 : unordered_multimap(__n, hasher(), key_equal(), __a)
│ │ │ -
1389 { }
│ │ │ -
1390
│ │ │ -
1391 unordered_multimap(size_type __n, const hasher& __hf,
│ │ │ -
1392 const allocator_type& __a)
│ │ │ -
1393 : unordered_multimap(__n, __hf, key_equal(), __a)
│ │ │ -
1394 { }
│ │ │ -
1395
│ │ │ -
1396 template<typename _InputIterator>
│ │ │ -
1397 unordered_multimap(_InputIterator __first, _InputIterator __last,
│ │ │ -
1398 size_type __n,
│ │ │ -
1399 const allocator_type& __a)
│ │ │ -
1400 : unordered_multimap(__first, __last, __n, hasher(), key_equal(), __a)
│ │ │ -
1401 { }
│ │ │ -
1402
│ │ │ -
1403 template<typename _InputIterator>
│ │ │ -
1404 unordered_multimap(_InputIterator __first, _InputIterator __last,
│ │ │ -
1405 size_type __n, const hasher& __hf,
│ │ │ -
1406 const allocator_type& __a)
│ │ │ -
1407 : unordered_multimap(__first, __last, __n, __hf, key_equal(), __a)
│ │ │ -
1408 { }
│ │ │ -
1409
│ │ │ -
1410 unordered_multimap(initializer_list<value_type> __l,
│ │ │ -
1411 size_type __n,
│ │ │ -
1412 const allocator_type& __a)
│ │ │ -
1413 : unordered_multimap(__l, __n, hasher(), key_equal(), __a)
│ │ │ -
1414 { }
│ │ │ -
1415
│ │ │ -
1416 unordered_multimap(initializer_list<value_type> __l,
│ │ │ -
1417 size_type __n, const hasher& __hf,
│ │ │ -
1418 const allocator_type& __a)
│ │ │ -
1419 : unordered_multimap(__l, __n, __hf, key_equal(), __a)
│ │ │ -
1420 { }
│ │ │ -
1421
│ │ │ -
1422 /// Copy assignment operator.
│ │ │ - │ │ │ - │ │ │ -
1425
│ │ │ -
1426 /// Move assignment operator.
│ │ │ - │ │ │ - │ │ │ -
1429
│ │ │ -
1430 /**
│ │ │ -
1431 * @brief %Unordered_multimap list assignment operator.
│ │ │ -
1432 * @param __l An initializer_list.
│ │ │ -
1433 *
│ │ │ -
1434 * This function fills an %unordered_multimap with copies of the
│ │ │ -
1435 * elements in the initializer list @a __l.
│ │ │ -
1436 *
│ │ │ -
1437 * Note that the assignment completely changes the %unordered_multimap
│ │ │ -
1438 * and that the resulting %unordered_multimap's size is the same as the
│ │ │ -
1439 * number of elements assigned.
│ │ │ -
1440 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1443 {
│ │ │ -
1444 _M_h = __l;
│ │ │ -
1445 return *this;
│ │ │ -
1446 }
│ │ │ -
│ │ │ -
1447
│ │ │ -
1448 /// Returns the allocator object used by the %unordered_multimap.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1451 { return _M_h.get_allocator(); }
│ │ │ -
│ │ │ -
1452
│ │ │ -
1453 // size and capacity:
│ │ │ -
1454
│ │ │ -
1455 /// Returns true if the %unordered_multimap is empty.
│ │ │ -
1456 _GLIBCXX_NODISCARD bool
│ │ │ +
1319 * Reverse the order of elements in the list in linear time.
│ │ │ +
1320 */
│ │ │ +
1321 void
│ │ │ +
│ │ │ +
1322 reverse() noexcept
│ │ │ +
1323 { this->_M_impl._M_head._M_reverse_after(); }
│ │ │ +
│ │ │ +
1324
│ │ │ +
1325 private:
│ │ │ +
1326 // Called by the range constructor to implement [23.3.4.2]/9
│ │ │ +
1327 template<typename _InputIterator>
│ │ │ +
1328 void
│ │ │ +
1329 _M_range_initialize(_InputIterator __first, _InputIterator __last);
│ │ │ +
1330
│ │ │ +
1331 // Called by forward_list(n,v,a), and the range constructor when it
│ │ │ +
1332 // turns out to be the same thing.
│ │ │ +
1333 void
│ │ │ +
1334 _M_fill_initialize(size_type __n, const value_type& __value);
│ │ │ +
1335
│ │ │ +
1336 // Called by splice_after and insert_after.
│ │ │ +
1337 iterator
│ │ │ +
1338 _M_splice_after(const_iterator __pos, const_iterator __before,
│ │ │ +
1339 const_iterator __last);
│ │ │ +
1340
│ │ │ +
1341 // Called by forward_list(n).
│ │ │ +
1342 void
│ │ │ +
1343 _M_default_initialize(size_type __n);
│ │ │ +
1344
│ │ │ +
1345 // Called by resize(sz).
│ │ │ +
1346 void
│ │ │ +
1347 _M_default_insert_after(const_iterator __pos, size_type __n);
│ │ │ +
1348
│ │ │ +
1349 // Called by operator=(forward_list&&)
│ │ │ +
1350 void
│ │ │ +
1351 _M_move_assign(forward_list&& __list, true_type) noexcept
│ │ │ +
1352 {
│ │ │ +
1353 clear();
│ │ │ +
1354 this->_M_impl._M_head._M_next = __list._M_impl._M_head._M_next;
│ │ │ +
1355 __list._M_impl._M_head._M_next = nullptr;
│ │ │ +
1356 std::__alloc_on_move(this->_M_get_Node_allocator(),
│ │ │ +
1357 __list._M_get_Node_allocator());
│ │ │ +
1358 }
│ │ │ +
1359
│ │ │ +
1360 // Called by operator=(forward_list&&)
│ │ │ +
1361 void
│ │ │ +
1362 _M_move_assign(forward_list&& __list, false_type)
│ │ │ +
1363 {
│ │ │ +
1364 if (__list._M_get_Node_allocator() == this->_M_get_Node_allocator())
│ │ │ +
1365 _M_move_assign(std::move(__list), true_type());
│ │ │ +
1366 else
│ │ │ +
1367 // The rvalue's allocator cannot be moved, or is not equal,
│ │ │ +
1368 // so we need to individually move each element.
│ │ │ +
1369 this->assign(std::make_move_iterator(__list.begin()),
│ │ │ +
1370 std::make_move_iterator(__list.end()));
│ │ │ +
1371 }
│ │ │ +
1372
│ │ │ +
1373 // Called by assign(_InputIterator, _InputIterator) if _Tp is
│ │ │ +
1374 // CopyAssignable.
│ │ │ +
1375 template<typename _InputIterator>
│ │ │ +
1376 void
│ │ │ +
1377 _M_assign(_InputIterator __first, _InputIterator __last, true_type)
│ │ │ +
1378 {
│ │ │ +
1379 auto __prev = before_begin();
│ │ │ +
1380 auto __curr = begin();
│ │ │ +
1381 auto __end = end();
│ │ │ +
1382 while (__curr != __end && __first != __last)
│ │ │ +
1383 {
│ │ │ +
1384 *__curr = *__first;
│ │ │ +
1385 ++__prev;
│ │ │ +
1386 ++__curr;
│ │ │ +
1387 ++__first;
│ │ │ +
1388 }
│ │ │ +
1389 if (__first != __last)
│ │ │ +
1390 insert_after(__prev, __first, __last);
│ │ │ +
1391 else if (__curr != __end)
│ │ │ +
1392 erase_after(__prev, __end);
│ │ │ +
1393 }
│ │ │ +
1394
│ │ │ +
1395 // Called by assign(_InputIterator, _InputIterator) if _Tp is not
│ │ │ +
1396 // CopyAssignable.
│ │ │ +
1397 template<typename _InputIterator>
│ │ │ +
1398 void
│ │ │ +
1399 _M_assign(_InputIterator __first, _InputIterator __last, false_type)
│ │ │ +
1400 {
│ │ │ +
1401 clear();
│ │ │ +
1402 insert_after(cbefore_begin(), __first, __last);
│ │ │ +
1403 }
│ │ │ +
1404
│ │ │ +
1405 // Called by assign(size_type, const _Tp&) if Tp is CopyAssignable
│ │ │ +
1406 void
│ │ │ +
1407 _M_assign_n(size_type __n, const _Tp& __val, true_type)
│ │ │ +
1408 {
│ │ │ +
1409 auto __prev = before_begin();
│ │ │ +
1410 auto __curr = begin();
│ │ │ +
1411 auto __end = end();
│ │ │ +
1412 while (__curr != __end && __n > 0)
│ │ │ +
1413 {
│ │ │ +
1414 *__curr = __val;
│ │ │ +
1415 ++__prev;
│ │ │ +
1416 ++__curr;
│ │ │ +
1417 --__n;
│ │ │ +
1418 }
│ │ │ +
1419 if (__n > 0)
│ │ │ +
1420 insert_after(__prev, __n, __val);
│ │ │ +
1421 else if (__curr != __end)
│ │ │ +
1422 erase_after(__prev, __end);
│ │ │ +
1423 }
│ │ │ +
1424
│ │ │ +
1425 // Called by assign(size_type, const _Tp&) if Tp is non-CopyAssignable
│ │ │ +
1426 void
│ │ │ +
1427 _M_assign_n(size_type __n, const _Tp& __val, false_type)
│ │ │ +
1428 {
│ │ │ +
1429 clear();
│ │ │ +
1430 insert_after(cbefore_begin(), __n, __val);
│ │ │ +
1431 }
│ │ │ +
1432 };
│ │ │ +
│ │ │ +
1433
│ │ │ +
1434#if __cpp_deduction_guides >= 201606
│ │ │ +
1435 template<typename _InputIterator, typename _ValT
│ │ │ +
1436 = typename iterator_traits<_InputIterator>::value_type,
│ │ │ +
1437 typename _Allocator = allocator<_ValT>,
│ │ │ +
1438 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
1439 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1440 forward_list(_InputIterator, _InputIterator, _Allocator = _Allocator())
│ │ │ +
1441 -> forward_list<_ValT, _Allocator>;
│ │ │ +
1442#endif
│ │ │ +
1443
│ │ │ +
1444 /**
│ │ │ +
1445 * @brief Forward list equality comparison.
│ │ │ +
1446 * @param __lx A %forward_list
│ │ │ +
1447 * @param __ly A %forward_list of the same type as @a __lx.
│ │ │ +
1448 * @return True iff the elements of the forward lists are equal.
│ │ │ +
1449 *
│ │ │ +
1450 * This is an equivalence relation. It is linear in the number of
│ │ │ +
1451 * elements of the forward lists. Deques are considered equivalent
│ │ │ +
1452 * if corresponding elements compare equal.
│ │ │ +
1453 */
│ │ │ +
1454 template<typename _Tp, typename _Alloc>
│ │ │ +
1455 [[__nodiscard__]]
│ │ │ +
1456 bool
│ │ │
│ │ │ -
1457 empty() const noexcept
│ │ │ -
1458 { return _M_h.empty(); }
│ │ │ -
│ │ │ -
1459
│ │ │ -
1460 /// Returns the size of the %unordered_multimap.
│ │ │ -
1461 size_type
│ │ │ -
│ │ │ -
1462 size() const noexcept
│ │ │ -
1463 { return _M_h.size(); }
│ │ │ -
│ │ │ -
1464
│ │ │ -
1465 /// Returns the maximum size of the %unordered_multimap.
│ │ │ -
1466 size_type
│ │ │ -
│ │ │ -
1467 max_size() const noexcept
│ │ │ -
1468 { return _M_h.max_size(); }
│ │ │ -
│ │ │ -
1469
│ │ │ -
1470 // iterators.
│ │ │ -
1471
│ │ │ -
1472 /**
│ │ │ -
1473 * Returns a read/write iterator that points to the first element in the
│ │ │ -
1474 * %unordered_multimap.
│ │ │ -
1475 */
│ │ │ -
1476 iterator
│ │ │ -
│ │ │ -
1477 begin() noexcept
│ │ │ -
1478 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
1479
│ │ │ -
1480 ///@{
│ │ │ -
1481 /**
│ │ │ -
1482 * Returns a read-only (constant) iterator that points to the first
│ │ │ -
1483 * element in the %unordered_multimap.
│ │ │ -
1484 */
│ │ │ - │ │ │ -
│ │ │ -
1486 begin() const noexcept
│ │ │ -
1487 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
1488
│ │ │ - │ │ │ -
│ │ │ -
1490 cbegin() const noexcept
│ │ │ -
1491 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
1492 ///@}
│ │ │ -
1493
│ │ │ -
1494 /**
│ │ │ -
1495 * Returns a read/write iterator that points one past the last element in
│ │ │ -
1496 * the %unordered_multimap.
│ │ │ -
1497 */
│ │ │ -
1498 iterator
│ │ │ -
│ │ │ -
1499 end() noexcept
│ │ │ -
1500 { return _M_h.end(); }
│ │ │ -
│ │ │ -
1501
│ │ │ -
1502 ///@{
│ │ │ -
1503 /**
│ │ │ -
1504 * Returns a read-only (constant) iterator that points one past the last
│ │ │ -
1505 * element in the %unordered_multimap.
│ │ │ -
1506 */
│ │ │ - │ │ │ -
│ │ │ -
1508 end() const noexcept
│ │ │ -
1509 { return _M_h.end(); }
│ │ │ -
│ │ │ -
1510
│ │ │ - │ │ │ -
│ │ │ -
1512 cend() const noexcept
│ │ │ -
1513 { return _M_h.end(); }
│ │ │ -
│ │ │ -
1514 ///@}
│ │ │ -
1515
│ │ │ -
1516 // modifiers.
│ │ │ -
1517
│ │ │ -
1518 /**
│ │ │ -
1519 * @brief Attempts to build and insert a std::pair into the
│ │ │ -
1520 * %unordered_multimap.
│ │ │ -
1521 *
│ │ │ -
1522 * @param __args Arguments used to generate a new pair instance (see
│ │ │ -
1523 * std::piecewise_contruct for passing arguments to each
│ │ │ -
1524 * part of the pair constructor).
│ │ │ -
1525 *
│ │ │ -
1526 * @return An iterator that points to the inserted pair.
│ │ │ -
1527 *
│ │ │ -
1528 * This function attempts to build and insert a (key, value) %pair into
│ │ │ -
1529 * the %unordered_multimap.
│ │ │ -
1530 *
│ │ │ -
1531 * Insertion requires amortized constant time.
│ │ │ -
1532 */
│ │ │ -
1533 template<typename... _Args>
│ │ │ -
1534 iterator
│ │ │ -
│ │ │ - │ │ │ -
1536 { return _M_h.emplace(std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
1537
│ │ │ -
1538 /**
│ │ │ -
1539 * @brief Attempts to build and insert a std::pair into the
│ │ │ -
1540 * %unordered_multimap.
│ │ │ -
1541 *
│ │ │ -
1542 * @param __pos An iterator that serves as a hint as to where the pair
│ │ │ -
1543 * should be inserted.
│ │ │ -
1544 * @param __args Arguments used to generate a new pair instance (see
│ │ │ -
1545 * std::piecewise_contruct for passing arguments to each
│ │ │ -
1546 * part of the pair constructor).
│ │ │ -
1547 * @return An iterator that points to the element with key of the
│ │ │ -
1548 * std::pair built from @a __args.
│ │ │ -
1549 *
│ │ │ -
1550 * Note that the first parameter is only a hint and can potentially
│ │ │ -
1551 * improve the performance of the insertion process. A bad hint would
│ │ │ -
1552 * cause no gains in efficiency.
│ │ │ -
1553 *
│ │ │ -
1554 * See
│ │ │ -
1555 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
1556 * for more on @a hinting.
│ │ │ -
1557 *
│ │ │ -
1558 * Insertion requires amortized constant time.
│ │ │ -
1559 */
│ │ │ -
1560 template<typename... _Args>
│ │ │ -
1561 iterator
│ │ │ -
│ │ │ - │ │ │ -
1563 { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
1564
│ │ │ -
1565 ///@{
│ │ │ -
1566 /**
│ │ │ -
1567 * @brief Inserts a std::pair into the %unordered_multimap.
│ │ │ -
1568 * @param __x Pair to be inserted (see std::make_pair for easy
│ │ │ -
1569 * creation of pairs).
│ │ │ -
1570 *
│ │ │ -
1571 * @return An iterator that points to the inserted pair.
│ │ │ -
1572 *
│ │ │ -
1573 * Insertion requires amortized constant time.
│ │ │ -
1574 */
│ │ │ -
1575 iterator
│ │ │ -
│ │ │ -
1576 insert(const value_type& __x)
│ │ │ -
1577 { return _M_h.insert(__x); }
│ │ │ -
│ │ │ -
1578
│ │ │ -
1579 iterator
│ │ │ -
│ │ │ - │ │ │ -
1581 { return _M_h.insert(std::move(__x)); }
│ │ │ -
│ │ │ -
1582
│ │ │ -
1583 template<typename _Pair>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1586 { return _M_h.emplace(std::forward<_Pair>(__x)); }
│ │ │ -
│ │ │ -
1587 ///@}
│ │ │ -
1588
│ │ │ -
1589 ///@{
│ │ │ -
1590 /**
│ │ │ -
1591 * @brief Inserts a std::pair into the %unordered_multimap.
│ │ │ -
1592 * @param __hint An iterator that serves as a hint as to where the
│ │ │ -
1593 * pair should be inserted.
│ │ │ -
1594 * @param __x Pair to be inserted (see std::make_pair for easy creation
│ │ │ -
1595 * of pairs).
│ │ │ -
1596 * @return An iterator that points to the element with key of
│ │ │ -
1597 * @a __x (may or may not be the %pair passed in).
│ │ │ -
1598 *
│ │ │ -
1599 * Note that the first parameter is only a hint and can potentially
│ │ │ -
1600 * improve the performance of the insertion process. A bad hint would
│ │ │ -
1601 * cause no gains in efficiency.
│ │ │ -
1602 *
│ │ │ -
1603 * See
│ │ │ -
1604 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
│ │ │ -
1605 * for more on @a hinting.
│ │ │ -
1606 *
│ │ │ -
1607 * Insertion requires amortized constant time.
│ │ │ -
1608 */
│ │ │ -
1609 iterator
│ │ │ -
│ │ │ - │ │ │ -
1611 { return _M_h.insert(__hint, __x); }
│ │ │ -
│ │ │ -
1612
│ │ │ -
1613 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1614 // 2354. Unnecessary copying when inserting into maps with braced-init
│ │ │ -
1615 iterator
│ │ │ -
│ │ │ - │ │ │ -
1617 { return _M_h.insert(__hint, std::move(__x)); }
│ │ │ -
│ │ │ -
1618
│ │ │ -
1619 template<typename _Pair>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1622 { return _M_h.emplace_hint(__hint, std::forward<_Pair>(__x)); }
│ │ │ -
│ │ │ -
1623 ///@}
│ │ │ -
1624
│ │ │ -
1625 /**
│ │ │ -
1626 * @brief A template function that attempts to insert a range of
│ │ │ -
1627 * elements.
│ │ │ -
1628 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
1629 * inserted.
│ │ │ -
1630 * @param __last Iterator pointing to the end of the range.
│ │ │ -
1631 *
│ │ │ -
1632 * Complexity similar to that of the range constructor.
│ │ │ -
1633 */
│ │ │ -
1634 template<typename _InputIterator>
│ │ │ -
1635 void
│ │ │ -
│ │ │ - │ │ │ -
1637 { _M_h.insert(__first, __last); }
│ │ │ -
│ │ │ -
1638
│ │ │ -
1639 /**
│ │ │ -
1640 * @brief Attempts to insert a list of elements into the
│ │ │ -
1641 * %unordered_multimap.
│ │ │ -
1642 * @param __l A std::initializer_list<value_type> of elements
│ │ │ -
1643 * to be inserted.
│ │ │ -
1644 *
│ │ │ -
1645 * Complexity similar to that of the range constructor.
│ │ │ -
1646 */
│ │ │ -
1647 void
│ │ │ -
│ │ │ - │ │ │ -
1649 { _M_h.insert(__l); }
│ │ │ -
│ │ │ -
1650
│ │ │ -
1651#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
1652 /// Extract a node.
│ │ │ -
1653 node_type
│ │ │ -
│ │ │ - │ │ │ -
1655 {
│ │ │ -
1656 __glibcxx_assert(__pos != end());
│ │ │ -
1657 return _M_h.extract(__pos);
│ │ │ -
1658 }
│ │ │ -
│ │ │ -
1659
│ │ │ -
1660 /// Extract a node.
│ │ │ -
1661 node_type
│ │ │ -
│ │ │ - │ │ │ -
1663 { return _M_h.extract(__key); }
│ │ │ -
│ │ │ -
1664
│ │ │ -
1665 /// Re-insert an extracted node.
│ │ │ -
1666 iterator
│ │ │ -
│ │ │ -
1667 insert(node_type&& __nh)
│ │ │ -
1668 { return _M_h._M_reinsert_node_multi(cend(), std::move(__nh)); }
│ │ │ -
│ │ │ -
1669
│ │ │ -
1670 /// Re-insert an extracted node.
│ │ │ -
1671 iterator
│ │ │ -
│ │ │ - │ │ │ -
1673 { return _M_h._M_reinsert_node_multi(__hint, std::move(__nh)); }
│ │ │ -
│ │ │ -
1674#endif // node_extract
│ │ │ -
1675
│ │ │ -
1676 ///@{
│ │ │ -
1677 /**
│ │ │ -
1678 * @brief Erases an element from an %unordered_multimap.
│ │ │ -
1679 * @param __position An iterator pointing to the element to be erased.
│ │ │ -
1680 * @return An iterator pointing to the element immediately following
│ │ │ -
1681 * @a __position prior to the element being erased. If no such
│ │ │ -
1682 * element exists, end() is returned.
│ │ │ -
1683 *
│ │ │ -
1684 * This function erases an element, pointed to by the given iterator,
│ │ │ -
1685 * from an %unordered_multimap.
│ │ │ -
1686 * Note that this function only erases the element, and that if the
│ │ │ -
1687 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ -
1688 * any way. Managing the pointer is the user's responsibility.
│ │ │ -
1689 */
│ │ │ -
1690 iterator
│ │ │ -
│ │ │ - │ │ │ -
1692 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
1693
│ │ │ -
1694 // LWG 2059.
│ │ │ -
1695 iterator
│ │ │ -
│ │ │ - │ │ │ -
1697 { return _M_h.erase(__position); }
│ │ │ -
│ │ │ -
1698 ///@}
│ │ │ -
1699
│ │ │ -
1700 /**
│ │ │ -
1701 * @brief Erases elements according to the provided key.
│ │ │ -
1702 * @param __x Key of elements to be erased.
│ │ │ -
1703 * @return The number of elements erased.
│ │ │ -
1704 *
│ │ │ -
1705 * This function erases all the elements located by the given key from
│ │ │ -
1706 * an %unordered_multimap.
│ │ │ -
1707 * Note that this function only erases the element, and that if the
│ │ │ -
1708 * element is itself a pointer, the pointed-to memory is not touched in
│ │ │ -
1709 * any way. Managing the pointer is the user's responsibility.
│ │ │ -
1710 */
│ │ │ -
1711 size_type
│ │ │ -
│ │ │ -
1712 erase(const key_type& __x)
│ │ │ -
1713 { return _M_h.erase(__x); }
│ │ │ -
│ │ │ -
1714
│ │ │ -
1715 /**
│ │ │ -
1716 * @brief Erases a [__first,__last) range of elements from an
│ │ │ -
1717 * %unordered_multimap.
│ │ │ -
1718 * @param __first Iterator pointing to the start of the range to be
│ │ │ -
1719 * erased.
│ │ │ -
1720 * @param __last Iterator pointing to the end of the range to
│ │ │ -
1721 * be erased.
│ │ │ -
1722 * @return The iterator @a __last.
│ │ │ -
1723 *
│ │ │ -
1724 * This function erases a sequence of elements from an
│ │ │ -
1725 * %unordered_multimap.
│ │ │ -
1726 * Note that this function only erases the elements, and that if
│ │ │ -
1727 * the element is itself a pointer, the pointed-to memory is not touched
│ │ │ -
1728 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
1729 */
│ │ │ -
1730 iterator
│ │ │ -
│ │ │ - │ │ │ -
1732 { return _M_h.erase(__first, __last); }
│ │ │ -
│ │ │ -
1733
│ │ │ -
1734 /**
│ │ │ -
1735 * Erases all elements in an %unordered_multimap.
│ │ │ -
1736 * Note that this function only erases the elements, and that if the
│ │ │ -
1737 * elements themselves are pointers, the pointed-to memory is not touched
│ │ │ -
1738 * in any way. Managing the pointer is the user's responsibility.
│ │ │ -
1739 */
│ │ │ -
1740 void
│ │ │ -
│ │ │ -
1741 clear() noexcept
│ │ │ -
1742 { _M_h.clear(); }
│ │ │ -
│ │ │ -
1743
│ │ │ -
1744 /**
│ │ │ -
1745 * @brief Swaps data with another %unordered_multimap.
│ │ │ -
1746 * @param __x An %unordered_multimap of the same element and allocator
│ │ │ -
1747 * types.
│ │ │ -
1748 *
│ │ │ -
1749 * This exchanges the elements between two %unordered_multimap in
│ │ │ -
1750 * constant time.
│ │ │ -
1751 * Note that the global std::swap() function is specialized such that
│ │ │ -
1752 * std::swap(m1,m2) will feed to this function.
│ │ │ -
1753 */
│ │ │ -
1754 void
│ │ │ -
│ │ │ - │ │ │ -
1756 noexcept( noexcept(_M_h.swap(__x._M_h)) )
│ │ │ -
1757 { _M_h.swap(__x._M_h); }
│ │ │ -
│ │ │ -
1758
│ │ │ -
1759#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
1760 template<typename, typename, typename>
│ │ │ -
1761 friend class std::_Hash_merge_helper;
│ │ │ -
1762
│ │ │ -
1763 template<typename _H2, typename _P2>
│ │ │ -
1764 void
│ │ │ - │ │ │ -
1766 {
│ │ │ -
1767 using _Merge_helper
│ │ │ - │ │ │ -
1769 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ -
1770 }
│ │ │ -
1771
│ │ │ -
1772 template<typename _H2, typename _P2>
│ │ │ -
1773 void
│ │ │ -
1774 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ -
1775 { merge(__source); }
│ │ │ -
1776
│ │ │ -
1777 template<typename _H2, typename _P2>
│ │ │ -
1778 void
│ │ │ -
1779 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>& __source)
│ │ │ -
1780 {
│ │ │ -
1781 using _Merge_helper
│ │ │ -
1782 = _Hash_merge_helper<unordered_multimap, _H2, _P2>;
│ │ │ -
1783 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
│ │ │ -
1784 }
│ │ │ -
1785
│ │ │ -
1786 template<typename _H2, typename _P2>
│ │ │ -
1787 void
│ │ │ -
1788 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
│ │ │ -
1789 { merge(__source); }
│ │ │ -
1790#endif // node_extract
│ │ │ -
1791
│ │ │ -
1792 // observers.
│ │ │ -
1793
│ │ │ -
1794 /// Returns the hash functor object with which the %unordered_multimap
│ │ │ -
1795 /// was constructed.
│ │ │ -
1796 hasher
│ │ │ -
│ │ │ - │ │ │ -
1798 { return _M_h.hash_function(); }
│ │ │ -
│ │ │ -
1799
│ │ │ -
1800 /// Returns the key comparison object with which the %unordered_multimap
│ │ │ -
1801 /// was constructed.
│ │ │ -
1802 key_equal
│ │ │ -
│ │ │ -
1803 key_eq() const
│ │ │ -
1804 { return _M_h.key_eq(); }
│ │ │ -
│ │ │ -
1805
│ │ │ -
1806 // lookup.
│ │ │ -
1807
│ │ │ -
1808 ///@{
│ │ │ -
1809 /**
│ │ │ -
1810 * @brief Tries to locate an element in an %unordered_multimap.
│ │ │ -
1811 * @param __x Key to be located.
│ │ │ -
1812 * @return Iterator pointing to sought-after element, or end() if not
│ │ │ -
1813 * found.
│ │ │ -
1814 *
│ │ │ -
1815 * This function takes a key and tries to locate the element with which
│ │ │ -
1816 * the key matches. If successful the function returns an iterator
│ │ │ -
1817 * pointing to the sought after element. If unsuccessful it returns the
│ │ │ -
1818 * past-the-end ( @c end() ) iterator.
│ │ │ -
1819 */
│ │ │ -
1820 iterator
│ │ │ -
│ │ │ -
1821 find(const key_type& __x)
│ │ │ -
1822 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
1823
│ │ │ -
1824#if __cplusplus > 201703L
│ │ │ -
1825 template<typename _Kt>
│ │ │ -
1826 auto
│ │ │ -
│ │ │ -
1827 find(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x))
│ │ │ -
1828 { return _M_h._M_find_tr(__x); }
│ │ │ -
│ │ │ -
1829#endif
│ │ │ -
1830
│ │ │ - │ │ │ -
│ │ │ -
1832 find(const key_type& __x) const
│ │ │ -
1833 { return _M_h.find(__x); }
│ │ │ -
│ │ │ -
1834
│ │ │ -
1835#if __cplusplus > 201703L
│ │ │ -
1836 template<typename _Kt>
│ │ │ -
1837 auto
│ │ │ -
│ │ │ -
1838 find(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x))
│ │ │ -
1839 { return _M_h._M_find_tr(__x); }
│ │ │ -
│ │ │ -
1840#endif
│ │ │ -
1841 ///@}
│ │ │ -
1842
│ │ │ -
1843 ///@{
│ │ │ -
1844 /**
│ │ │ -
1845 * @brief Finds the number of elements.
│ │ │ -
1846 * @param __x Key to count.
│ │ │ -
1847 * @return Number of elements with specified key.
│ │ │ -
1848 */
│ │ │ -
1849 size_type
│ │ │ -
│ │ │ -
1850 count(const key_type& __x) const
│ │ │ -
1851 { return _M_h.count(__x); }
│ │ │ -
│ │ │ -
1852
│ │ │ -
1853#if __cplusplus > 201703L
│ │ │ -
1854 template<typename _Kt>
│ │ │ -
1855 auto
│ │ │ -
│ │ │ -
1856 count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x))
│ │ │ -
1857 { return _M_h._M_count_tr(__x); }
│ │ │ -
│ │ │ -
1858#endif
│ │ │ -
1859 ///@}
│ │ │ -
1860
│ │ │ -
1861#if __cplusplus > 201703L
│ │ │ -
1862 ///@{
│ │ │ -
1863 /**
│ │ │ -
1864 * @brief Finds whether an element with the given key exists.
│ │ │ -
1865 * @param __x Key of elements to be located.
│ │ │ -
1866 * @return True if there is any element with the specified key.
│ │ │ -
1867 */
│ │ │ -
1868 bool
│ │ │ -
│ │ │ -
1869 contains(const key_type& __x) const
│ │ │ -
1870 { return _M_h.find(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
1871
│ │ │ -
1872 template<typename _Kt>
│ │ │ -
1873 auto
│ │ │ -
│ │ │ -
1874 contains(const _Kt& __x) const
│ │ │ -
1875 -> decltype(_M_h._M_find_tr(__x), void(), true)
│ │ │ -
1876 { return _M_h._M_find_tr(__x) != _M_h.end(); }
│ │ │ -
│ │ │ -
1877 ///@}
│ │ │ -
1878#endif
│ │ │ -
1879
│ │ │ -
1880 ///@{
│ │ │ -
1881 /**
│ │ │ -
1882 * @brief Finds a subsequence matching given key.
│ │ │ -
1883 * @param __x Key to be located.
│ │ │ -
1884 * @return Pair of iterators that possibly points to the subsequence
│ │ │ -
1885 * matching given key.
│ │ │ -
1886 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1889 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
1890
│ │ │ -
1891#if __cplusplus > 201703L
│ │ │ -
1892 template<typename _Kt>
│ │ │ -
1893 auto
│ │ │ -
│ │ │ -
1894 equal_range(const _Kt& __x)
│ │ │ -
1895 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ -
1896 { return _M_h._M_equal_range_tr(__x); }
│ │ │ -
│ │ │ -
1897#endif
│ │ │ -
1898
│ │ │ - │ │ │ -
│ │ │ -
1900 equal_range(const key_type& __x) const
│ │ │ -
1901 { return _M_h.equal_range(__x); }
│ │ │ -
│ │ │ -
1902
│ │ │ -
1903#if __cplusplus > 201703L
│ │ │ -
1904 template<typename _Kt>
│ │ │ -
1905 auto
│ │ │ -
│ │ │ -
1906 equal_range(const _Kt& __x) const
│ │ │ -
1907 -> decltype(_M_h._M_equal_range_tr(__x))
│ │ │ -
1908 { return _M_h._M_equal_range_tr(__x); }
│ │ │ -
│ │ │ -
1909#endif
│ │ │ -
1910 ///@}
│ │ │ -
1911
│ │ │ -
1912 // bucket interface.
│ │ │ -
1913
│ │ │ -
1914 /// Returns the number of buckets of the %unordered_multimap.
│ │ │ -
1915 size_type
│ │ │ -
│ │ │ - │ │ │ -
1917 { return _M_h.bucket_count(); }
│ │ │ -
│ │ │ -
1918
│ │ │ -
1919 /// Returns the maximum number of buckets of the %unordered_multimap.
│ │ │ -
1920 size_type
│ │ │ -
│ │ │ - │ │ │ -
1922 { return _M_h.max_bucket_count(); }
│ │ │ -
│ │ │ -
1923
│ │ │ -
1924 /*
│ │ │ -
1925 * @brief Returns the number of elements in a given bucket.
│ │ │ -
1926 * @param __n A bucket index.
│ │ │ -
1927 * @return The number of elements in the bucket.
│ │ │ -
1928 */
│ │ │ -
1929 size_type
│ │ │ -
1930 bucket_size(size_type __n) const
│ │ │ -
1931 { return _M_h.bucket_size(__n); }
│ │ │ -
1932
│ │ │ -
1933 /*
│ │ │ -
1934 * @brief Returns the bucket index of a given element.
│ │ │ -
1935 * @param __key A key instance.
│ │ │ -
1936 * @return The key bucket index.
│ │ │ -
1937 */
│ │ │ -
1938 size_type
│ │ │ -
1939 bucket(const key_type& __key) const
│ │ │ -
1940 { return _M_h.bucket(__key); }
│ │ │ -
1941
│ │ │ -
1942 /**
│ │ │ -
1943 * @brief Returns a read/write iterator pointing to the first bucket
│ │ │ -
1944 * element.
│ │ │ -
1945 * @param __n The bucket index.
│ │ │ -
1946 * @return A read/write local iterator.
│ │ │ -
1947 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1950 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
1951
│ │ │ -
1952 ///@{
│ │ │ -
1953 /**
│ │ │ -
1954 * @brief Returns a read-only (constant) iterator pointing to the first
│ │ │ -
1955 * bucket element.
│ │ │ -
1956 * @param __n The bucket index.
│ │ │ -
1957 * @return A read-only local iterator.
│ │ │ -
1958 */
│ │ │ - │ │ │ -
│ │ │ -
1960 begin(size_type __n) const
│ │ │ -
1961 { return _M_h.begin(__n); }
│ │ │ -
│ │ │ -
1962
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1965 { return _M_h.cbegin(__n); }
│ │ │ -
│ │ │ -
1966 ///@}
│ │ │ -
1967
│ │ │ -
1968 /**
│ │ │ -
1969 * @brief Returns a read/write iterator pointing to one past the last
│ │ │ -
1970 * bucket elements.
│ │ │ -
1971 * @param __n The bucket index.
│ │ │ -
1972 * @return A read/write local iterator.
│ │ │ -
1973 */
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
1976 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
1977
│ │ │ -
1978 ///@{
│ │ │ -
1979 /**
│ │ │ -
1980 * @brief Returns a read-only (constant) iterator pointing to one past
│ │ │ -
1981 * the last bucket elements.
│ │ │ -
1982 * @param __n The bucket index.
│ │ │ -
1983 * @return A read-only local iterator.
│ │ │ -
1984 */
│ │ │ - │ │ │ -
│ │ │ -
1986 end(size_type __n) const
│ │ │ -
1987 { return _M_h.end(__n); }
│ │ │ -
│ │ │ -
1988
│ │ │ - │ │ │ -
│ │ │ -
1990 cend(size_type __n) const
│ │ │ -
1991 { return _M_h.cend(__n); }
│ │ │ -
│ │ │ -
1992 ///@}
│ │ │ -
1993
│ │ │ -
1994 // hash policy.
│ │ │ -
1995
│ │ │ -
1996 /// Returns the average number of elements per bucket.
│ │ │ -
1997 float
│ │ │ -
│ │ │ - │ │ │ -
1999 { return _M_h.load_factor(); }
│ │ │ -
│ │ │ -
2000
│ │ │ -
2001 /// Returns a positive number that the %unordered_multimap tries to keep
│ │ │ -
2002 /// the load factor less than or equal to.
│ │ │ -
2003 float
│ │ │ -
│ │ │ - │ │ │ -
2005 { return _M_h.max_load_factor(); }
│ │ │ -
│ │ │ -
2006
│ │ │ -
2007 /**
│ │ │ -
2008 * @brief Change the %unordered_multimap maximum load factor.
│ │ │ -
2009 * @param __z The new maximum load factor.
│ │ │ -
2010 */
│ │ │ -
2011 void
│ │ │ -
│ │ │ - │ │ │ -
2013 { _M_h.max_load_factor(__z); }
│ │ │ -
│ │ │ -
2014
│ │ │ -
2015 /**
│ │ │ -
2016 * @brief May rehash the %unordered_multimap.
│ │ │ -
2017 * @param __n The new number of buckets.
│ │ │ -
2018 *
│ │ │ -
2019 * Rehash will occur only if the new number of buckets respect the
│ │ │ -
2020 * %unordered_multimap maximum load factor.
│ │ │ -
2021 */
│ │ │ -
2022 void
│ │ │ -
│ │ │ - │ │ │ -
2024 { _M_h.rehash(__n); }
│ │ │ -
│ │ │ -
2025
│ │ │ -
2026 /**
│ │ │ -
2027 * @brief Prepare the %unordered_multimap for a specified number of
│ │ │ -
2028 * elements.
│ │ │ -
2029 * @param __n Number of elements required.
│ │ │ -
2030 *
│ │ │ -
2031 * Same as rehash(ceil(n / max_load_factor())).
│ │ │ -
2032 */
│ │ │ -
2033 void
│ │ │ -
│ │ │ - │ │ │ -
2035 { _M_h.reserve(__n); }
│ │ │ -
│ │ │ -
2036
│ │ │ -
2037 template<typename _Key1, typename _Tp1, typename _Hash1, typename _Pred1,
│ │ │ -
2038 typename _Alloc1>
│ │ │ -
2039 friend bool
│ │ │ -
2040 operator==(const unordered_multimap<_Key1, _Tp1,
│ │ │ -
2041 _Hash1, _Pred1, _Alloc1>&,
│ │ │ - │ │ │ -
2043 _Hash1, _Pred1, _Alloc1>&);
│ │ │ -
2044 };
│ │ │ -
│ │ │ -
2045
│ │ │ -
2046#if __cpp_deduction_guides >= 201606
│ │ │ -
2047
│ │ │ -
2048 template<typename _InputIterator,
│ │ │ -
2049 typename _Hash = hash<__iter_key_t<_InputIterator>>,
│ │ │ -
2050 typename _Pred = equal_to<__iter_key_t<_InputIterator>>,
│ │ │ -
2051 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>,
│ │ │ -
2052 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
2053 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
2054 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
2055 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2056 unordered_multimap(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
2058 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ -
2059 _Allocator = _Allocator())
│ │ │ -
2060 -> unordered_multimap<__iter_key_t<_InputIterator>,
│ │ │ -
2061 __iter_val_t<_InputIterator>, _Hash, _Pred,
│ │ │ -
2062 _Allocator>;
│ │ │ -
2063
│ │ │ -
2064 template<typename _Key, typename _Tp, typename _Hash = hash<_Key>,
│ │ │ -
2065 typename _Pred = equal_to<_Key>,
│ │ │ -
2066 typename _Allocator = allocator<pair<const _Key, _Tp>>,
│ │ │ -
2067 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
2068 typename = _RequireNotAllocator<_Pred>,
│ │ │ -
2069 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2070 unordered_multimap(initializer_list<pair<_Key, _Tp>>,
│ │ │ - │ │ │ -
2072 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ -
2073 _Allocator = _Allocator())
│ │ │ -
2074 -> unordered_multimap<_Key, _Tp, _Hash, _Pred, _Allocator>;
│ │ │ -
2075
│ │ │ -
2076 template<typename _InputIterator, typename _Allocator,
│ │ │ -
2077 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
2078 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2079 unordered_multimap(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
2081 -> unordered_multimap<__iter_key_t<_InputIterator>,
│ │ │ -
2082 __iter_val_t<_InputIterator>,
│ │ │ -
2083 hash<__iter_key_t<_InputIterator>>,
│ │ │ -
2084 equal_to<__iter_key_t<_InputIterator>>, _Allocator>;
│ │ │ -
2085
│ │ │ -
2086 template<typename _InputIterator, typename _Allocator,
│ │ │ -
2087 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
2088 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2089 unordered_multimap(_InputIterator, _InputIterator, _Allocator)
│ │ │ -
2090 -> unordered_multimap<__iter_key_t<_InputIterator>,
│ │ │ -
2091 __iter_val_t<_InputIterator>,
│ │ │ -
2092 hash<__iter_key_t<_InputIterator>>,
│ │ │ -
2093 equal_to<__iter_key_t<_InputIterator>>, _Allocator>;
│ │ │ -
2094
│ │ │ -
2095 template<typename _InputIterator, typename _Hash, typename _Allocator,
│ │ │ -
2096 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
2097 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
2098 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2099 unordered_multimap(_InputIterator, _InputIterator,
│ │ │ - │ │ │ -
2101 _Allocator)
│ │ │ -
2102 -> unordered_multimap<__iter_key_t<_InputIterator>,
│ │ │ -
2103 __iter_val_t<_InputIterator>, _Hash,
│ │ │ -
2104 equal_to<__iter_key_t<_InputIterator>>, _Allocator>;
│ │ │ -
2105
│ │ │ -
2106 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ -
2107 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2108 unordered_multimap(initializer_list<pair<_Key, _Tp>>,
│ │ │ - │ │ │ -
2110 _Allocator)
│ │ │ -
2111 -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
│ │ │ -
2112
│ │ │ -
2113 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ -
2114 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2115 unordered_multimap(initializer_list<pair<_Key, _Tp>>, _Allocator)
│ │ │ -
2116 -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
│ │ │ -
2117
│ │ │ -
2118 template<typename _Key, typename _Tp, typename _Hash, typename _Allocator,
│ │ │ -
2119 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
2120 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2121 unordered_multimap(initializer_list<pair<_Key, _Tp>>,
│ │ │ - │ │ │ -
2123 _Hash, _Allocator)
│ │ │ -
2124 -> unordered_multimap<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>;
│ │ │ -
2125
│ │ │ -
2126#endif
│ │ │ -
2127
│ │ │ -
2128 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2129 inline void
│ │ │ -
2130 swap(unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
2131 unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
2132 noexcept(noexcept(__x.swap(__y)))
│ │ │ -
2133 { __x.swap(__y); }
│ │ │ -
2134
│ │ │ -
2135 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2136 inline void
│ │ │ -
2137 swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
2138 unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
2139 noexcept(noexcept(__x.swap(__y)))
│ │ │ -
2140 { __x.swap(__y); }
│ │ │ -
2141
│ │ │ -
2142 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2143 inline bool
│ │ │ -
2144 operator==(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
2145 const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
2146 { return __x._M_h._M_equal(__y._M_h); }
│ │ │ -
2147
│ │ │ -
2148#if __cpp_impl_three_way_comparison < 201907L
│ │ │ -
2149 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2150 inline bool
│ │ │ -
2151 operator!=(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
2152 const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
2153 { return !(__x == __y); }
│ │ │ -
2154#endif
│ │ │ -
2155
│ │ │ -
2156 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2157 inline bool
│ │ │ -
2158 operator==(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
2159 const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
2160 { return __x._M_h._M_equal(__y._M_h); }
│ │ │ -
2161
│ │ │ -
2162#if __cpp_impl_three_way_comparison < 201907L
│ │ │ -
2163 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2164 inline bool
│ │ │ -
2165 operator!=(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
│ │ │ -
2166 const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
│ │ │ -
2167 { return !(__x == __y); }
│ │ │ -
2168#endif
│ │ │ -
2169
│ │ │ -
2170_GLIBCXX_END_NAMESPACE_CONTAINER
│ │ │ -
2171
│ │ │ -
2172#ifdef __glibcxx_node_extract // >= C++17 && HOSTED
│ │ │ -
2173 // Allow std::unordered_map access to internals of compatible maps.
│ │ │ -
2174 template<typename _Key, typename _Val, typename _Hash1, typename _Eq1,
│ │ │ -
2175 typename _Alloc, typename _Hash2, typename _Eq2>
│ │ │ -
2176 struct _Hash_merge_helper<
│ │ │ -
2177 _GLIBCXX_STD_C::unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>,
│ │ │ -
2178 _Hash2, _Eq2>
│ │ │ -
2179 {
│ │ │ -
2180 private:
│ │ │ -
2181 template<typename... _Tp>
│ │ │ -
2182 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>;
│ │ │ -
2183 template<typename... _Tp>
│ │ │ -
2184 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>;
│ │ │ -
2185
│ │ │ -
2186 friend unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>;
│ │ │ -
2187
│ │ │ -
2188 static auto&
│ │ │ -
2189 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ -
2190 { return __map._M_h; }
│ │ │ -
2191
│ │ │ -
2192 static auto&
│ │ │ -
2193 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ -
2194 { return __map._M_h; }
│ │ │ -
2195 };
│ │ │ -
2196
│ │ │ -
2197 // Allow std::unordered_multimap access to internals of compatible maps.
│ │ │ -
2198 template<typename _Key, typename _Val, typename _Hash1, typename _Eq1,
│ │ │ -
2199 typename _Alloc, typename _Hash2, typename _Eq2>
│ │ │ -
2200 struct _Hash_merge_helper<
│ │ │ -
2201 _GLIBCXX_STD_C::unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>,
│ │ │ -
2202 _Hash2, _Eq2>
│ │ │ -
2203 {
│ │ │ -
2204 private:
│ │ │ -
2205 template<typename... _Tp>
│ │ │ -
2206 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>;
│ │ │ -
2207 template<typename... _Tp>
│ │ │ -
2208 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>;
│ │ │ -
2209
│ │ │ -
2210 friend unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>;
│ │ │ -
2211
│ │ │ -
2212 static auto&
│ │ │ -
2213 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ -
2214 { return __map._M_h; }
│ │ │ -
2215
│ │ │ -
2216 static auto&
│ │ │ -
2217 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
│ │ │ -
2218 { return __map._M_h; }
│ │ │ -
2219 };
│ │ │ -
2220#endif // node_extract
│ │ │ -
2221
│ │ │ -
2222_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
2223} // namespace std
│ │ │ -
2224
│ │ │ -
2225#endif /* _UNORDERED_MAP_H */
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │ + │ │ │ + │ │ │ +
1459
│ │ │ +
1460#if __cpp_lib_three_way_comparison
│ │ │ +
1461 /**
│ │ │ +
1462 * @brief Forward list ordering relation.
│ │ │ +
1463 * @param __x A `forward_list`.
│ │ │ +
1464 * @param __y A `forward_list` of the same type as `__x`.
│ │ │ +
1465 * @return A value indicating whether `__x` is less than, equal to,
│ │ │ +
1466 * greater than, or incomparable with `__y`.
│ │ │ +
1467 *
│ │ │ +
1468 * See `std::lexicographical_compare_three_way()` for how the determination
│ │ │ +
1469 * is made. This operator is used to synthesize relational operators like
│ │ │ +
1470 * `<` and `>=` etc.
│ │ │ +
1471 */
│ │ │ +
1472 template<typename _Tp, typename _Alloc>
│ │ │ +
1473 [[nodiscard]]
│ │ │ +
1474 inline __detail::__synth3way_t<_Tp>
│ │ │ +
1475 operator<=>(const forward_list<_Tp, _Alloc>& __x,
│ │ │ +
1476 const forward_list<_Tp, _Alloc>& __y)
│ │ │ +
1477 {
│ │ │ +
1478 return std::lexicographical_compare_three_way(__x.begin(), __x.end(),
│ │ │ +
1479 __y.begin(), __y.end(),
│ │ │ +
1480 __detail::__synth3way);
│ │ │ +
1481 }
│ │ │ +
│ │ │ +
1482#else
│ │ │ +
1483 /**
│ │ │ +
1484 * @brief Forward list ordering relation.
│ │ │ +
1485 * @param __lx A %forward_list.
│ │ │ +
1486 * @param __ly A %forward_list of the same type as @a __lx.
│ │ │ +
1487 * @return True iff @a __lx is lexicographically less than @a __ly.
│ │ │ +
1488 *
│ │ │ +
1489 * This is a total ordering relation. It is linear in the number of
│ │ │ +
1490 * elements of the forward lists. The elements must be comparable
│ │ │ +
1491 * with @c <.
│ │ │ +
1492 *
│ │ │ +
1493 * See std::lexicographical_compare() for how the determination is made.
│ │ │ +
1494 */
│ │ │ +
1495 template<typename _Tp, typename _Alloc>
│ │ │ +
1496 [[__nodiscard__]]
│ │ │ +
1497 inline bool
│ │ │ +
1498 operator<(const forward_list<_Tp, _Alloc>& __lx,
│ │ │ +
1499 const forward_list<_Tp, _Alloc>& __ly)
│ │ │ +
1500 { return std::lexicographical_compare(__lx.cbegin(), __lx.cend(),
│ │ │ +
1501 __ly.cbegin(), __ly.cend()); }
│ │ │ +
1502
│ │ │ +
1503 /// Based on operator==
│ │ │ +
1504 template<typename _Tp, typename _Alloc>
│ │ │ +
1505 [[__nodiscard__]]
│ │ │ +
1506 inline bool
│ │ │ +
1507 operator!=(const forward_list<_Tp, _Alloc>& __lx,
│ │ │ +
1508 const forward_list<_Tp, _Alloc>& __ly)
│ │ │ +
1509 { return !(__lx == __ly); }
│ │ │ +
1510
│ │ │ +
1511 /// Based on operator<
│ │ │ +
1512 template<typename _Tp, typename _Alloc>
│ │ │ +
1513 [[__nodiscard__]]
│ │ │ +
1514 inline bool
│ │ │ +
1515 operator>(const forward_list<_Tp, _Alloc>& __lx,
│ │ │ +
1516 const forward_list<_Tp, _Alloc>& __ly)
│ │ │ +
1517 { return (__ly < __lx); }
│ │ │ +
1518
│ │ │ +
1519 /// Based on operator<
│ │ │ +
1520 template<typename _Tp, typename _Alloc>
│ │ │ +
1521 [[__nodiscard__]]
│ │ │ +
1522 inline bool
│ │ │ +
1523 operator>=(const forward_list<_Tp, _Alloc>& __lx,
│ │ │ +
1524 const forward_list<_Tp, _Alloc>& __ly)
│ │ │ +
1525 { return !(__lx < __ly); }
│ │ │ +
1526
│ │ │ +
1527 /// Based on operator<
│ │ │ +
1528 template<typename _Tp, typename _Alloc>
│ │ │ +
1529 [[__nodiscard__]]
│ │ │ +
1530 inline bool
│ │ │ +
1531 operator<=(const forward_list<_Tp, _Alloc>& __lx,
│ │ │ +
1532 const forward_list<_Tp, _Alloc>& __ly)
│ │ │ +
1533 { return !(__ly < __lx); }
│ │ │ +
1534#endif // three-way comparison
│ │ │ +
1535
│ │ │ +
1536 /// See std::forward_list::swap().
│ │ │ +
1537 template<typename _Tp, typename _Alloc>
│ │ │ +
1538 inline void
│ │ │ +
│ │ │ + │ │ │ + │ │ │ +
1541 noexcept(noexcept(__lx.swap(__ly)))
│ │ │ +
1542 { __lx.swap(__ly); }
│ │ │ +
│ │ │ +
1543
│ │ │ +
1544_GLIBCXX_END_NAMESPACE_CONTAINER
│ │ │ +
1545_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
1546} // namespace std
│ │ │ +
1547
│ │ │ +
1548#endif // _FORWARD_LIST_H
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
constexpr bool operator<=(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:855
│ │ │ +
constexpr bool operator>=(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:869
│ │ │ +
constexpr bool operator>(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:862
│ │ │ +
__bool_constant< true > true_type
The type used as a compile-time boolean with true value.
Definition type_traits:111
│ │ │ +
__bool_constant< false > false_type
The type used as a compile-time boolean with false value.
Definition type_traits:114
│ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │ +
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:1194
│ │ │ +
is_assignable
Definition type_traits:1226
│ │ │ +
A helper basic node class for forward_list. This is just a linked list with nothing inside it....
│ │ │ +
A helper node class for forward_list. This is just a linked list with uninitialized storage for a dat...
│ │ │ +
A forward_list::iterator.
│ │ │ +
friend bool operator==(const _Self &__x, const _Self &__y) noexcept
Forward list iterator equality comparison.
│ │ │ +
A forward_list::const_iterator.
│ │ │ +
friend bool operator==(const _Self &__x, const _Self &__y) noexcept
Forward list const_iterator equality comparison.
│ │ │ +
Base class for forward_list.
│ │ │ +
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.
│ │ │ +
reference front()
│ │ │ +
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
│ │ │ +
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-2024 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2008-2024 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,2948 +21,1837 @@ │ │ │ │ 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 │ │ │ │ -38namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -39{ │ │ │ │ -40_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -41_GLIBCXX_BEGIN_NAMESPACE_CONTAINER │ │ │ │ -42 │ │ │ │ -43 /// Base types for unordered_map. │ │ │ │ -44 template │ │ │ │ -_4_5 using _____u_m_a_p___t_r_a_i_t_s = __detail::_Hashtable_traits<_Cache, false, true>; │ │ │ │ -46 │ │ │ │ -47 template, │ │ │ │ -50 typename ___P_r_e_d = _s_t_d_:_:_e_q_u_a_l___t_o_<___K_e_y_>, │ │ │ │ -51 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_> >, │ │ │ │ -52 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>> │ │ │ │ -53 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_>, │ │ │ │ -54 _Alloc, __detail::_Select1st, │ │ │ │ -55 ___P_r_e_d, ___H_a_s_h, │ │ │ │ -56 __detail::_Mod_range_hashing, │ │ │ │ -57 __detail::_Default_ranged_hash, │ │ │ │ -58 __detail::_Prime_rehash_policy, ___T_r>; │ │ │ │ -59 │ │ │ │ -60 /// Base types for unordered_multimap. │ │ │ │ -61 template │ │ │ │ -_6_2 using _____u_m_m_a_p___t_r_a_i_t_s = __detail::_Hashtable_traits<_Cache, false, false>; │ │ │ │ -63 │ │ │ │ -64 template, │ │ │ │ -67 typename ___P_r_e_d = _s_t_d_:_:_e_q_u_a_l___t_o_<___K_e_y_>, │ │ │ │ -68 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_> >, │ │ │ │ -69 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>> │ │ │ │ -70 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_>, │ │ │ │ -71 _Alloc, __detail::_Select1st, │ │ │ │ -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_m_a_p; │ │ │ │ -79 │ │ │ │ -80 /** │ │ │ │ -81 * @brief A standard container composed of unique keys (containing │ │ │ │ -82 * at most one of each key value) that associates values of another type │ │ │ │ -83 * with the keys. │ │ │ │ -84 * │ │ │ │ -85 * @ingroup unordered_associative_containers │ │ │ │ -86 * @headerfile unordered_map │ │ │ │ -87 * @since C++11 │ │ │ │ -88 * │ │ │ │ -89 * @tparam _Key Type of key objects. │ │ │ │ -90 * @tparam _Tp Type of mapped objects. │ │ │ │ -91 * @tparam _Hash Hashing function object type, defaults to hash<_Value>. │ │ │ │ -92 * @tparam _Pred Predicate function object type, defaults │ │ │ │ -93 * to equal_to<_Value>. │ │ │ │ -94 * @tparam _Alloc Allocator type, defaults to │ │ │ │ -95 * std::allocator>. │ │ │ │ -96 * │ │ │ │ -97 * Meets the requirements of a container, and │ │ │ │ -98 * unordered associative container │ │ │ │ -99 * │ │ │ │ -100 * The resulting value type of the container is std::pair. │ │ │ │ -101 * │ │ │ │ -102 * Base is _Hashtable, dispatched at compile time via template │ │ │ │ -103 * alias __umap_hashtable. │ │ │ │ -104 */ │ │ │ │ -105 template, │ │ │ │ -107 typename ___P_r_e_d = _e_q_u_a_l___t_o_<___K_e_y_>, │ │ │ │ -108 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_0_9 class _u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ -110 { │ │ │ │ -111 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; │ │ │ │ -112 ___H_a_s_h_t_a_b_l_e _M_h; │ │ │ │ -113 │ │ │ │ -114 public: │ │ │ │ -115 // typedefs: │ │ │ │ -116 ///@{ │ │ │ │ -117 /// Public typedefs. │ │ │ │ -_1_1_8 typedef typename _Hashtable::key_type _k_e_y___t_y_p_e; │ │ │ │ -_1_1_9 typedef typename _Hashtable::value_type _v_a_l_u_e___t_y_p_e; │ │ │ │ -_1_2_0 typedef typename _Hashtable::mapped_type _m_a_p_p_e_d___t_y_p_e; │ │ │ │ -_1_2_1 typedef typename _Hashtable::hasher _h_a_s_h_e_r; │ │ │ │ -_1_2_2 typedef typename _Hashtable::key_equal _k_e_y___e_q_u_a_l; │ │ │ │ -_1_2_3 typedef typename _Hashtable::allocator_type _a_l_l_o_c_a_t_o_r___t_y_p_e; │ │ │ │ -124 ///@} │ │ │ │ -125 │ │ │ │ -126 ///@{ │ │ │ │ -127 /// Iterator-related typedefs. │ │ │ │ -_1_2_8 typedef typename _Hashtable::pointer _p_o_i_n_t_e_r; │ │ │ │ -_1_2_9 typedef typename _Hashtable::const_pointer _c_o_n_s_t___p_o_i_n_t_e_r; │ │ │ │ -_1_3_0 typedef typename _Hashtable::reference _r_e_f_e_r_e_n_c_e; │ │ │ │ -_1_3_1 typedef typename _Hashtable::const_reference _c_o_n_s_t___r_e_f_e_r_e_n_c_e; │ │ │ │ -_1_3_2 typedef typename _Hashtable::iterator _i_t_e_r_a_t_o_r; │ │ │ │ -_1_3_3 typedef typename _Hashtable::const_iterator _c_o_n_s_t___i_t_e_r_a_t_o_r; │ │ │ │ -_1_3_4 typedef typename _Hashtable::local_iterator _l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ -_1_3_5 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_6 typedef typename _Hashtable::size_type _s_i_z_e___t_y_p_e; │ │ │ │ -_1_3_7 typedef typename _Hashtable::difference_type _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ -138 ///@} │ │ │ │ -139 │ │ │ │ -140#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -141 using node_type = typename _Hashtable::node_type; │ │ │ │ -142 using insert_return_type = typename _Hashtable::insert_return_type; │ │ │ │ -143#endif │ │ │ │ -144 │ │ │ │ -145 //construct/destroy/copy │ │ │ │ +33#pragma GCC system_header │ │ │ │ +34 │ │ │ │ +35#include <_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t> │ │ │ │ +36#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> │ │ │ │ +37#include <_b_i_t_s_/_s_t_l___i_t_e_r_a_t_o_r_._h> │ │ │ │ +38#include <_b_i_t_s_/_s_t_l___a_l_g_o_b_a_s_e_._h> │ │ │ │ +39#include <_b_i_t_s_/_s_t_l___f_u_n_c_t_i_o_n_._h> │ │ │ │ +40#include <_b_i_t_s_/_a_l_l_o_c_a_t_o_r_._h> │ │ │ │ +41#include <_e_x_t_/_a_l_l_o_c___t_r_a_i_t_s_._h> │ │ │ │ +42#include <_e_x_t_/_a_l_i_g_n_e_d___b_u_f_f_e_r_._h> │ │ │ │ +43#include <_d_e_b_u_g_/_a_s_s_e_r_t_i_o_n_s_._h> │ │ │ │ +44 │ │ │ │ +45namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +46{ │ │ │ │ +47_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +48_GLIBCXX_BEGIN_NAMESPACE_CONTAINER │ │ │ │ +49 │ │ │ │ +50 /** │ │ │ │ +51 * @brief A helper basic node class for %forward_list. │ │ │ │ +52 * This is just a linked list with nothing inside it. │ │ │ │ +53 * There are purely list shuffling utility methods here. │ │ │ │ +54 */ │ │ │ │ +_5_5 struct ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e │ │ │ │ +56 { │ │ │ │ +57 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e() = default; │ │ │ │ +58 ___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 │ │ │ │ +59 : _M_next(__x._M_next) │ │ │ │ +60 { __x._M_next = nullptr; } │ │ │ │ +61 │ │ │ │ +62 ___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; │ │ │ │ +63 ___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; │ │ │ │ +64 │ │ │ │ +65 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e& │ │ │ │ +66 operator=(___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e&& __x) noexcept │ │ │ │ +67 { │ │ │ │ +68 _M_next = __x._M_next; │ │ │ │ +69 __x._M_next = nullptr; │ │ │ │ +70 return *this; │ │ │ │ +71 } │ │ │ │ +72 │ │ │ │ +73 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* _M_next = nullptr; │ │ │ │ +74 │ │ │ │ +75 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* │ │ │ │ +76 _M_transfer_after(___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* __begin, │ │ │ │ +77 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* __end) noexcept │ │ │ │ +78 { │ │ │ │ +79 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* _____k_e_e_p = __begin->_M_next; │ │ │ │ +80 if (__end) │ │ │ │ +81 { │ │ │ │ +82 __begin->_M_next = __end->_M_next; │ │ │ │ +83 __end->_M_next = _M_next; │ │ │ │ +84 } │ │ │ │ +85 else │ │ │ │ +86 __begin->_M_next = nullptr; │ │ │ │ +87 _M_next = _____k_e_e_p; │ │ │ │ +88 return __end; │ │ │ │ +89 } │ │ │ │ +90 │ │ │ │ +91 void │ │ │ │ +92 _M_reverse_after() noexcept │ │ │ │ +93 { │ │ │ │ +94 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* _____t_a_i_l = _M_next; │ │ │ │ +95 if (!_____t_a_i_l) │ │ │ │ +96 return; │ │ │ │ +97 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) │ │ │ │ +98 { │ │ │ │ +99 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* _____k_e_e_p = _M_next; │ │ │ │ +100 _M_next = _____t_e_m_p; │ │ │ │ +101 _____t_a_i_l->_M_next = _____t_e_m_p->_M_next; │ │ │ │ +102 _M_next->_M_next = _____k_e_e_p; │ │ │ │ +103 } │ │ │ │ +104 } │ │ │ │ +105 }; │ │ │ │ +106 │ │ │ │ +107 /** │ │ │ │ +108 * @brief A helper node class for %forward_list. │ │ │ │ +109 * This is just a linked list with uninitialized storage for a │ │ │ │ +110 * data value in each node. │ │ │ │ +111 * There is a sorting utility method. │ │ │ │ +112 */ │ │ │ │ +113 template │ │ │ │ +_1_1_4 struct ___F_w_d___l_i_s_t___n_o_d_e │ │ │ │ +115 : public ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e │ │ │ │ +116 { │ │ │ │ +117 ___F_w_d___l_i_s_t___n_o_d_e() = default; │ │ │ │ +118 │ │ │ │ +119 __gnu_cxx::__aligned_buffer<_Tp> _M_storage; │ │ │ │ +120 │ │ │ │ +121 _Tp* │ │ │ │ +122 _M_valptr() noexcept │ │ │ │ +123 { return _M_storage._M_ptr(); } │ │ │ │ +124 │ │ │ │ +125 const _Tp* │ │ │ │ +126 _M_valptr() const noexcept │ │ │ │ +127 { return _M_storage._M_ptr(); } │ │ │ │ +128 }; │ │ │ │ +129 │ │ │ │ +130 /** │ │ │ │ +131 * @brief A forward_list::iterator. │ │ │ │ +132 * │ │ │ │ +133 * All the functions are op overloads. │ │ │ │ +134 */ │ │ │ │ +135 template │ │ │ │ +_1_3_6 struct ___F_w_d___l_i_s_t___i_t_e_r_a_t_o_r │ │ │ │ +137 { │ │ │ │ +138 typedef ___F_w_d___l_i_s_t___i_t_e_r_a_t_o_r_<___T_p_> ___S_e_l_f; │ │ │ │ +139 typedef ___F_w_d___l_i_s_t___n_o_d_e_<___T_p_> ___N_o_d_e; │ │ │ │ +140 │ │ │ │ +141 typedef _Tp value_type; │ │ │ │ +142 typedef _Tp* pointer; │ │ │ │ +143 typedef _Tp& reference; │ │ │ │ +144 typedef _p_t_r_d_i_f_f___t _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ +145 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; │ │ │ │ 146 │ │ │ │ -147 /// Default constructor. │ │ │ │ -_1_4_8 _u_n_o_r_d_e_r_e_d___m_a_p() = default; │ │ │ │ +147 ___F_w_d___l_i_s_t___i_t_e_r_a_t_o_r() noexcept │ │ │ │ +148 : _M_node() { } │ │ │ │ 149 │ │ │ │ -150 /** │ │ │ │ -151 * @brief Default constructor creates no elements. │ │ │ │ -152 * @param __n Minimal initial number of buckets. │ │ │ │ -153 * @param __hf A hash functor. │ │ │ │ -154 * @param __eql A key equality functor. │ │ │ │ -155 * @param __a An allocator object. │ │ │ │ -156 */ │ │ │ │ -157 explicit │ │ │ │ -_1_5_8 _u_n_o_r_d_e_r_e_d___m_a_p(_s_i_z_e___t_y_p_e __n, │ │ │ │ -159 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -160 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ -161 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()) │ │ │ │ -162 : _M_h(__n, _____h_f, _____e_q_l, __a) │ │ │ │ -163 { } │ │ │ │ -164 │ │ │ │ -165 /** │ │ │ │ -166 * @brief Builds an %unordered_map from a range. │ │ │ │ -167 * @param __first An input iterator. │ │ │ │ -168 * @param __last An input iterator. │ │ │ │ -169 * @param __n Minimal initial number of buckets. │ │ │ │ -170 * @param __hf A hash functor. │ │ │ │ -171 * @param __eql A key equality functor. │ │ │ │ -172 * @param __a An allocator object. │ │ │ │ -173 * │ │ │ │ -174 * Create an %unordered_map consisting of copies of the elements from │ │ │ │ -175 * [__first,__last). This is linear in N (where N is │ │ │ │ -176 * distance(__first,__last)). │ │ │ │ -177 */ │ │ │ │ -178 template │ │ │ │ -_1_7_9 _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, │ │ │ │ -180 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -181 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -182 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ -183 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()) │ │ │ │ -184 : _M_h(__first, __last, __n, _____h_f, _____e_q_l, __a) │ │ │ │ -185 { } │ │ │ │ +150 explicit │ │ │ │ +151 ___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 │ │ │ │ +152 : _M_node(__n) { } │ │ │ │ +153 │ │ │ │ +154 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +155 reference │ │ │ │ +156 operator*() const noexcept │ │ │ │ +157 { return *static_cast<___N_o_d_e*>(this->_M_node)->_M_valptr(); } │ │ │ │ +158 │ │ │ │ +159 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +160 pointer │ │ │ │ +161 operator->() const noexcept │ │ │ │ +162 { return static_cast<___N_o_d_e*>(this->_M_node)->_M_valptr(); } │ │ │ │ +163 │ │ │ │ +164 ___S_e_l_f& │ │ │ │ +165 operator++() noexcept │ │ │ │ +166 { │ │ │ │ +167 _M_node = _M_node->_M_next; │ │ │ │ +168 return *this; │ │ │ │ +169 } │ │ │ │ +170 │ │ │ │ +171 ___S_e_l_f │ │ │ │ +172 operator++(int) noexcept │ │ │ │ +173 { │ │ │ │ +174 ___S_e_l_f _____t_m_p(*this); │ │ │ │ +175 _M_node = _M_node->_M_next; │ │ │ │ +176 return _____t_m_p; │ │ │ │ +177 } │ │ │ │ +178 │ │ │ │ +179 /** │ │ │ │ +180 * @brief Forward list iterator equality comparison. │ │ │ │ +181 */ │ │ │ │ +182 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +183 friend bool │ │ │ │ +_1_8_4 _o_p_e_r_a_t_o_r_=_=(const ___S_e_l_f& __x, const ___S_e_l_f& __y) noexcept │ │ │ │ +185 { return __x._M_node == __y._M_node; } │ │ │ │ 186 │ │ │ │ -187 /// Copy constructor. │ │ │ │ -_1_8_8 _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; │ │ │ │ -189 │ │ │ │ -190 /// Move constructor. │ │ │ │ -_1_9_1 _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; │ │ │ │ -192 │ │ │ │ -193 /** │ │ │ │ -194 * @brief Creates an %unordered_map with no elements. │ │ │ │ -195 * @param __a An allocator object. │ │ │ │ -196 */ │ │ │ │ -197 explicit │ │ │ │ -_1_9_8 _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) │ │ │ │ -199 : _M_h(__a) │ │ │ │ -200 { } │ │ │ │ -201 │ │ │ │ -202 /* │ │ │ │ -203 * @brief Copy constructor with allocator argument. │ │ │ │ -204 * @param __uset Input %unordered_map to copy. │ │ │ │ -205 * @param __a An allocator object. │ │ │ │ -206 */ │ │ │ │ -207 _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, │ │ │ │ -208 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -209 : _M_h(_____u_m_a_p._M_h, __a) │ │ │ │ -210 { } │ │ │ │ -211 │ │ │ │ -212 /* │ │ │ │ -213 * @brief Move constructor with allocator argument. │ │ │ │ -214 * @param __uset Input %unordered_map to move. │ │ │ │ -215 * @param __a An allocator object. │ │ │ │ -216 */ │ │ │ │ -217 _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, │ │ │ │ -218 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -219 noexcept( noexcept(_Hashtable(_s_t_d_:_:_m_o_v_e(__umap._M_h), __a)) ) │ │ │ │ -220 : _M_h(_s_t_d_:_:_m_o_v_e(__umap._M_h), __a) │ │ │ │ -221 { } │ │ │ │ -222 │ │ │ │ -223 /** │ │ │ │ -224 * @brief Builds an %unordered_map from an initializer_list. │ │ │ │ -225 * @param __l An initializer_list. │ │ │ │ -226 * @param __n Minimal initial number of buckets. │ │ │ │ -227 * @param __hf A hash functor. │ │ │ │ -228 * @param __eql A key equality functor. │ │ │ │ -229 * @param __a An allocator object. │ │ │ │ -230 * │ │ │ │ -231 * Create an %unordered_map consisting of copies of the elements in the │ │ │ │ -232 * list. This is linear in N (where N is @a __l.size()). │ │ │ │ -233 */ │ │ │ │ -_2_3_4 _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, │ │ │ │ -235 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -236 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -237 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ -238 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()) │ │ │ │ -239 : _M_h(_____l, __n, _____h_f, _____e_q_l, __a) │ │ │ │ -240 { } │ │ │ │ +187#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ +188 /** │ │ │ │ +189 * @brief Forward list iterator inequality comparison. │ │ │ │ +190 */ │ │ │ │ +191 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +192 friend bool │ │ │ │ +193 operator!=(const _Self& __x, const _Self& __y) noexcept │ │ │ │ +194 { return __x._M_node != __y._M_node; } │ │ │ │ +195#endif │ │ │ │ +196 │ │ │ │ +197 _Self │ │ │ │ +198 _M_next() const noexcept │ │ │ │ +199 { │ │ │ │ +200 if (_M_node) │ │ │ │ +201 return _Fwd_list_iterator(_M_node->_M_next); │ │ │ │ +202 else │ │ │ │ +203 return _Fwd_list_iterator(nullptr); │ │ │ │ +204 } │ │ │ │ +205 │ │ │ │ +206 _Fwd_list_node_base* _M_node; │ │ │ │ +207 }; │ │ │ │ +208 │ │ │ │ +209 /** │ │ │ │ +210 * @brief A forward_list::const_iterator. │ │ │ │ +211 * │ │ │ │ +212 * All the functions are op overloads. │ │ │ │ +213 */ │ │ │ │ +214 template │ │ │ │ +_2_1_5 struct ___F_w_d___l_i_s_t___c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +216 { │ │ │ │ +217 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; │ │ │ │ +218 typedef const ___F_w_d___l_i_s_t___n_o_d_e_<___T_p_> ___N_o_d_e; │ │ │ │ +219 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; │ │ │ │ +220 │ │ │ │ +221 typedef _Tp value_type; │ │ │ │ +222 typedef const _Tp* pointer; │ │ │ │ +223 typedef const _Tp& reference; │ │ │ │ +224 typedef _p_t_r_d_i_f_f___t _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ +225 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; │ │ │ │ +226 │ │ │ │ +227 ___F_w_d___l_i_s_t___c_o_n_s_t___i_t_e_r_a_t_o_r() noexcept │ │ │ │ +228 : _M_node() { } │ │ │ │ +229 │ │ │ │ +230 explicit │ │ │ │ +231 ___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 │ │ │ │ +232 : _M_node(__n) { } │ │ │ │ +233 │ │ │ │ +234 ___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 │ │ │ │ +235 : _M_node(__iter._M_node) { } │ │ │ │ +236 │ │ │ │ +237 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +238 reference │ │ │ │ +239 operator*() const noexcept │ │ │ │ +240 { return *static_cast<___N_o_d_e*>(this->_M_node)->_M_valptr(); } │ │ │ │ 241 │ │ │ │ -242 _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) │ │ │ │ -243 : _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) │ │ │ │ -244 { } │ │ │ │ -245 │ │ │ │ -246 _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, │ │ │ │ -247 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -248 : _u_n_o_r_d_e_r_e_d___m_a_p(__n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -249 { } │ │ │ │ -250 │ │ │ │ -251 template │ │ │ │ -252 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ -253 _s_i_z_e___t_y_p_e __n, │ │ │ │ -254 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -255 : _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) │ │ │ │ -256 { } │ │ │ │ -257 │ │ │ │ -258 template │ │ │ │ -259 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ -260 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -261 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -262 : _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) │ │ │ │ -263 { } │ │ │ │ -264 │ │ │ │ -265 _u_n_o_r_d_e_r_e_d___m_a_p(initializer_list __l, │ │ │ │ -266 _s_i_z_e___t_y_p_e __n, │ │ │ │ -267 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -268 : _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) │ │ │ │ -269 { } │ │ │ │ -270 │ │ │ │ -271 _u_n_o_r_d_e_r_e_d___m_a_p(initializer_list __l, │ │ │ │ -272 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -273 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -274 : _u_n_o_r_d_e_r_e_d___m_a_p(__l, __n, __hf, _k_e_y___e_q_u_a_l(), __a) │ │ │ │ -275 { } │ │ │ │ -276 │ │ │ │ -277 /// Copy assignment operator. │ │ │ │ -278 _u_n_o_r_d_e_r_e_d___m_a_p& │ │ │ │ -_2_7_9 _o_p_e_r_a_t_o_r_=(const _u_n_o_r_d_e_r_e_d___m_a_p&) = default; │ │ │ │ -280 │ │ │ │ -281 /// Move assignment operator. │ │ │ │ -282 _u_n_o_r_d_e_r_e_d___m_a_p& │ │ │ │ -_2_8_3 _o_p_e_r_a_t_o_r_=(_u_n_o_r_d_e_r_e_d___m_a_p&&) = default; │ │ │ │ -284 │ │ │ │ -285 /** │ │ │ │ -286 * @brief %Unordered_map list assignment operator. │ │ │ │ -287 * @param __l An initializer_list. │ │ │ │ -288 * │ │ │ │ -289 * This function fills an %unordered_map with copies of the elements in │ │ │ │ -290 * the initializer list @a __l. │ │ │ │ -291 * │ │ │ │ -292 * Note that the assignment completely changes the %unordered_map and │ │ │ │ -293 * that the resulting %unordered_map's size is the same as the number │ │ │ │ -294 * of elements assigned. │ │ │ │ -295 */ │ │ │ │ -296 _u_n_o_r_d_e_r_e_d___m_a_p& │ │ │ │ -_2_9_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) │ │ │ │ -298 { │ │ │ │ -299 _M_h = _____l; │ │ │ │ -300 return *this; │ │ │ │ -301 } │ │ │ │ -302 │ │ │ │ -303 /// Returns the allocator object used by the %unordered_map. │ │ │ │ -304 _a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ -_3_0_5 _g_e_t___a_l_l_o_c_a_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -306 { return _M_h.get_allocator(); } │ │ │ │ -307 │ │ │ │ -308 // size and capacity: │ │ │ │ -309 │ │ │ │ -310 /// Returns true if the %unordered_map is empty. │ │ │ │ -311 _GLIBCXX_NODISCARD bool │ │ │ │ -_3_1_2 _e_m_p_t_y() _c_o_n_s_t noexcept │ │ │ │ -313 { return _M_h.empty(); } │ │ │ │ -314 │ │ │ │ -315 /// Returns the size of the %unordered_map. │ │ │ │ -316 _s_i_z_e___t_y_p_e │ │ │ │ -_3_1_7 _s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ -318 { return _M_h.size(); } │ │ │ │ -319 │ │ │ │ -320 /// Returns the maximum size of the %unordered_map. │ │ │ │ -321 _s_i_z_e___t_y_p_e │ │ │ │ -_3_2_2 _m_a_x___s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ -323 { return _M_h.max_size(); } │ │ │ │ +242 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +243 pointer │ │ │ │ +244 operator->() const noexcept │ │ │ │ +245 { return static_cast<___N_o_d_e*>(this->_M_node)->_M_valptr(); } │ │ │ │ +246 │ │ │ │ +247 ___S_e_l_f& │ │ │ │ +248 operator++() noexcept │ │ │ │ +249 { │ │ │ │ +250 _M_node = _M_node->_M_next; │ │ │ │ +251 return *this; │ │ │ │ +252 } │ │ │ │ +253 │ │ │ │ +254 ___S_e_l_f │ │ │ │ +255 operator++(int) noexcept │ │ │ │ +256 { │ │ │ │ +257 ___S_e_l_f _____t_m_p(*this); │ │ │ │ +258 _M_node = _M_node->_M_next; │ │ │ │ +259 return _____t_m_p; │ │ │ │ +260 } │ │ │ │ +261 │ │ │ │ +262 /** │ │ │ │ +263 * @brief Forward list const_iterator equality comparison. │ │ │ │ +264 */ │ │ │ │ +265 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +266 friend bool │ │ │ │ +_2_6_7 _o_p_e_r_a_t_o_r_=_=(const ___S_e_l_f& __x, const ___S_e_l_f& __y) noexcept │ │ │ │ +268 { return __x._M_node == __y._M_node; } │ │ │ │ +269 │ │ │ │ +270#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ +271 /** │ │ │ │ +272 * @brief Forward list const_iterator inequality comparison. │ │ │ │ +273 */ │ │ │ │ +274 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +275 friend bool │ │ │ │ +276 operator!=(const _Self& __x, const _Self& __y) noexcept │ │ │ │ +277 { return __x._M_node != __y._M_node; } │ │ │ │ +278#endif │ │ │ │ +279 │ │ │ │ +280 _Self │ │ │ │ +281 _M_next() const noexcept │ │ │ │ +282 { │ │ │ │ +283 if (this->_M_node) │ │ │ │ +284 return _Fwd_list_const_iterator(_M_node->_M_next); │ │ │ │ +285 else │ │ │ │ +286 return _Fwd_list_const_iterator(nullptr); │ │ │ │ +287 } │ │ │ │ +288 │ │ │ │ +289 const _Fwd_list_node_base* _M_node; │ │ │ │ +290 }; │ │ │ │ +291 │ │ │ │ +292 /** │ │ │ │ +293 * @brief Base class for %forward_list. │ │ │ │ +294 */ │ │ │ │ +295 template │ │ │ │ +_2_9_6 struct ___F_w_d___l_i_s_t___b_a_s_e │ │ │ │ +297 { │ │ │ │ +298 protected: │ │ │ │ +299 typedef _____a_l_l_o_c___r_e_b_i_n_d_<___A_l_l_o_c_,_ ___F_w_d___l_i_s_t___n_o_d_e_<___T_p_>> _Node_alloc_type; │ │ │ │ +300 typedef _____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_> ___N_o_d_e___a_l_l_o_c___t_r_a_i_t_s; │ │ │ │ +301 │ │ │ │ +302 struct _Fwd_list_impl │ │ │ │ +303 : public _Node_alloc_type │ │ │ │ +304 { │ │ │ │ +305 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e _M_head; │ │ │ │ +306 │ │ │ │ +307 _Fwd_list_impl() │ │ │ │ +308 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) │ │ │ │ +309 : _Node_alloc_type(), _M_head() │ │ │ │ +310 { } │ │ │ │ +311 │ │ │ │ +312 _Fwd_list_impl(_Fwd_list_impl&&) = default; │ │ │ │ +313 │ │ │ │ +314 _Fwd_list_impl(_Fwd_list_impl&& _____f_l, _Node_alloc_type&& __a) │ │ │ │ +315 : _Node_alloc_type(_s_t_d_:_:_m_o_v_e(__a)), _M_head(_s_t_d_:_:_m_o_v_e(_____f_l._M_head)) │ │ │ │ +316 { } │ │ │ │ +317 │ │ │ │ +318 _Fwd_list_impl(_Node_alloc_type&& __a) │ │ │ │ +319 : _Node_alloc_type(_s_t_d_:_:_m_o_v_e(__a)), _M_head() │ │ │ │ +320 { } │ │ │ │ +321 }; │ │ │ │ +322 │ │ │ │ +323 _Fwd_list_impl _M_impl; │ │ │ │ 324 │ │ │ │ -325 // iterators. │ │ │ │ -326 │ │ │ │ -327 /** │ │ │ │ -328 * Returns a read/write iterator that points to the first element in the │ │ │ │ -329 * %unordered_map. │ │ │ │ -330 */ │ │ │ │ -331 _i_t_e_r_a_t_o_r │ │ │ │ -_3_3_2 _b_e_g_i_n() noexcept │ │ │ │ -333 { return _M_h.begin(); } │ │ │ │ -334 │ │ │ │ -335 ///@{ │ │ │ │ -336 /** │ │ │ │ -337 * Returns a read-only (constant) iterator that points to the first │ │ │ │ -338 * element in the %unordered_map. │ │ │ │ -339 */ │ │ │ │ -340 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_3_4_1 _b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ -342 { return _M_h.begin(); } │ │ │ │ -343 │ │ │ │ -344 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_3_4_5 _c_b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ -346 { return _M_h.begin(); } │ │ │ │ -347 ///@} │ │ │ │ +325 public: │ │ │ │ +326 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; │ │ │ │ +327 typedef ___F_w_d___l_i_s_t___c_o_n_s_t___i_t_e_r_a_t_o_r_<___T_p_> _c_o_n_s_t___i_t_e_r_a_t_o_r; │ │ │ │ +328 typedef ___F_w_d___l_i_s_t___n_o_d_e_<___T_p_> ___N_o_d_e; │ │ │ │ +329 │ │ │ │ +330 _Node_alloc_type& │ │ │ │ +331 _M_get_Node_allocator() noexcept │ │ │ │ +332 { return this->_M_impl; } │ │ │ │ +333 │ │ │ │ +334 const _Node_alloc_type& │ │ │ │ +335 _M_get_Node_allocator() const noexcept │ │ │ │ +336 { return this->_M_impl; } │ │ │ │ +337 │ │ │ │ +338 ___F_w_d___l_i_s_t___b_a_s_e() = default; │ │ │ │ +339 │ │ │ │ +340 ___F_w_d___l_i_s_t___b_a_s_e(_Node_alloc_type&& __a) │ │ │ │ +341 : _M_impl(_s_t_d_:_:_m_o_v_e(__a)) { } │ │ │ │ +342 │ │ │ │ +343 // When allocators are always equal. │ │ │ │ +344 ___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, │ │ │ │ +345 _s_t_d_:_:_t_r_u_e___t_y_p_e) │ │ │ │ +346 : _M_impl(_s_t_d_:_:_m_o_v_e(_____l_s_t._M_impl), _s_t_d_:_:_m_o_v_e(__a)) │ │ │ │ +347 { } │ │ │ │ 348 │ │ │ │ -349 /** │ │ │ │ -350 * Returns a read/write iterator that points one past the last element in │ │ │ │ -351 * the %unordered_map. │ │ │ │ -352 */ │ │ │ │ -353 _i_t_e_r_a_t_o_r │ │ │ │ -_3_5_4 _e_n_d() noexcept │ │ │ │ -355 { return _M_h.end(); } │ │ │ │ +349 // When allocators are not always equal. │ │ │ │ +350 ___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); │ │ │ │ +351 │ │ │ │ +352 ___F_w_d___l_i_s_t___b_a_s_e(___F_w_d___l_i_s_t___b_a_s_e&&) = default; │ │ │ │ +353 │ │ │ │ +354 _~___F_w_d___l_i_s_t___b_a_s_e() │ │ │ │ +355 { _M_erase_after(&_M_impl._M_head, nullptr); } │ │ │ │ 356 │ │ │ │ -357 ///@{ │ │ │ │ -358 /** │ │ │ │ -359 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ -360 * element in the %unordered_map. │ │ │ │ -361 */ │ │ │ │ -362 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_3_6_3 _e_n_d() _c_o_n_s_t noexcept │ │ │ │ -364 { return _M_h.end(); } │ │ │ │ -365 │ │ │ │ -366 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_3_6_7 _c_e_n_d() _c_o_n_s_t noexcept │ │ │ │ -368 { return _M_h.end(); } │ │ │ │ -369 ///@} │ │ │ │ -370 │ │ │ │ -371 // modifiers. │ │ │ │ -372 │ │ │ │ -373 /** │ │ │ │ -374 * @brief Attempts to build and insert a std::pair into the │ │ │ │ -375 * %unordered_map. │ │ │ │ -376 * │ │ │ │ -377 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ -378 * std::piecewise_contruct for passing arguments to each │ │ │ │ -379 * part of the pair constructor). │ │ │ │ -380 * │ │ │ │ -381 * @return A pair, of which the first element is an iterator that points │ │ │ │ -382 * to the possibly inserted pair, and the second is a bool that │ │ │ │ -383 * is true if the pair was actually inserted. │ │ │ │ -384 * │ │ │ │ -385 * This function attempts to build and insert a (key, value) %pair into │ │ │ │ -386 * the %unordered_map. │ │ │ │ -387 * An %unordered_map relies on unique keys and thus a %pair is only │ │ │ │ -388 * inserted if its first element (the key) is not already present in the │ │ │ │ -389 * %unordered_map. │ │ │ │ -390 * │ │ │ │ -391 * Insertion requires amortized constant time. │ │ │ │ -392 */ │ │ │ │ -393 template │ │ │ │ -394 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_3_9_5 _e_m_p_l_a_c_e(___A_r_g_s&&... _____a_r_g_s) │ │ │ │ -396 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); } │ │ │ │ -397 │ │ │ │ -398 /** │ │ │ │ -399 * @brief Attempts to build and insert a std::pair into the │ │ │ │ -400 * %unordered_map. │ │ │ │ -401 * │ │ │ │ -402 * @param __pos An iterator that serves as a hint as to where the pair │ │ │ │ -403 * should be inserted. │ │ │ │ -404 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ -405 * std::piecewise_contruct for passing arguments to each │ │ │ │ -406 * part of the pair constructor). │ │ │ │ -407 * @return An iterator that points to the element with key of the │ │ │ │ -408 * std::pair built from @a __args (may or may not be that │ │ │ │ -409 * std::pair). │ │ │ │ -410 * │ │ │ │ -411 * This function is not concerned about whether the insertion took place, │ │ │ │ -412 * and thus does not return a boolean like the single-argument emplace() │ │ │ │ -413 * does. │ │ │ │ -414 * Note that the first parameter is only a hint and can potentially │ │ │ │ -415 * improve the performance of the insertion process. A bad hint would │ │ │ │ -416 * cause no gains in efficiency. │ │ │ │ -417 * │ │ │ │ -418 * See │ │ │ │ -419 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -420 * for more on @a hinting. │ │ │ │ -421 * │ │ │ │ -422 * Insertion requires amortized constant time. │ │ │ │ -423 */ │ │ │ │ -424 template │ │ │ │ -425 _i_t_e_r_a_t_o_r │ │ │ │ -_4_2_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) │ │ │ │ -427 { 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)...); } │ │ │ │ -428 │ │ │ │ -429#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -430 /// Extract a node. │ │ │ │ -431 node_type │ │ │ │ -_4_3_2 _e_x_t_r_a_c_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s) │ │ │ │ -433 { │ │ │ │ -434 __glibcxx_assert(_____p_o_s != _e_n_d()); │ │ │ │ -435 return _M_h.extract(_____p_o_s); │ │ │ │ -436 } │ │ │ │ -437 │ │ │ │ -438 /// Extract a node. │ │ │ │ -439 node_type │ │ │ │ -_4_4_0 _e_x_t_r_a_c_t(const _k_e_y___t_y_p_e& _____k_e_y) │ │ │ │ -441 { return _M_h.extract(_____k_e_y); } │ │ │ │ +357 protected: │ │ │ │ +358 ___N_o_d_e* │ │ │ │ +359 _M_get_node() │ │ │ │ +360 { │ │ │ │ +361 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); │ │ │ │ +362 return std::__to_address(_____p_t_r); │ │ │ │ +363 } │ │ │ │ +364 │ │ │ │ +365 template │ │ │ │ +366 ___N_o_d_e* │ │ │ │ +367 _M_create_node(___A_r_g_s&&... _____a_r_g_s) │ │ │ │ +368 { │ │ │ │ +369 ___N_o_d_e* _____n_o_d_e = this->_M_get_node(); │ │ │ │ +370 __try │ │ │ │ +371 { │ │ │ │ +372 ::new ((void*)_____n_o_d_e) ___N_o_d_e; │ │ │ │ +373 _Node_alloc_traits::construct(_M_get_Node_allocator(), │ │ │ │ +374 _____n_o_d_e->_M_valptr(), │ │ │ │ +375 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); │ │ │ │ +376 } │ │ │ │ +377 __catch(...) │ │ │ │ +378 { │ │ │ │ +379 this->_M_put_node(_____n_o_d_e); │ │ │ │ +380 __throw_exception_again; │ │ │ │ +381 } │ │ │ │ +382 return _____n_o_d_e; │ │ │ │ +383 } │ │ │ │ +384 │ │ │ │ +385 template │ │ │ │ +386 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* │ │ │ │ +387 _M_insert_after(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s, ___A_r_g_s&&... _____a_r_g_s); │ │ │ │ +388 │ │ │ │ +389 void │ │ │ │ +390 _M_put_node(___N_o_d_e* __p) │ │ │ │ +391 { │ │ │ │ +392 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; │ │ │ │ +393 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); │ │ │ │ +394 ___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); │ │ │ │ +395 } │ │ │ │ +396 │ │ │ │ +397 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* │ │ │ │ +398 _M_erase_after(___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* _____p_o_s); │ │ │ │ +399 │ │ │ │ +400 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* │ │ │ │ +401 _M_erase_after(___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* _____p_o_s, │ │ │ │ +402 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* __last); │ │ │ │ +403 }; │ │ │ │ +404 │ │ │ │ +405 /** │ │ │ │ +406 * @brief A standard container with linear time access to elements, │ │ │ │ +407 * and fixed time insertion/deletion at any point in the sequence. │ │ │ │ +408 * │ │ │ │ +409 * @ingroup sequences │ │ │ │ +410 * @headerfile forward_list │ │ │ │ +411 * @since C++11 │ │ │ │ +412 * │ │ │ │ +413 * @tparam _Tp Type of element. │ │ │ │ +414 * @tparam _Alloc Allocator type, defaults to allocator<_Tp>. │ │ │ │ +415 * │ │ │ │ +416 * Meets the requirements of a container, a │ │ │ │ +417 * sequence, including the │ │ │ │ +418 * optional sequence requirements with the │ │ │ │ +419 * %exception of @c at and @c operator[]. │ │ │ │ +420 * │ │ │ │ +421 * This is a @e singly @e linked %list. Traversal up the │ │ │ │ +422 * %list requires linear time, but adding and removing elements (or │ │ │ │ +423 * @e nodes) is done in constant time, regardless of where the │ │ │ │ +424 * change takes place. Unlike std::vector and std::deque, │ │ │ │ +425 * random-access iterators are not provided, so subscripting ( @c │ │ │ │ +426 * [] ) access is not allowed. For algorithms which only need │ │ │ │ +427 * sequential access, this lack makes no difference. │ │ │ │ +428 * │ │ │ │ +429 * Also unlike the other standard containers, std::forward_list provides │ │ │ │ +430 * specialized algorithms %unique to linked lists, such as │ │ │ │ +431 * splicing, sorting, and in-place reversal. │ │ │ │ +432 */ │ │ │ │ +433 template> │ │ │ │ +_4_3_4 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> │ │ │ │ +435 { │ │ │ │ +436 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, │ │ │ │ +437 "std::forward_list must have a non-const, non-volatile value_type"); │ │ │ │ +438#if __cplusplus > 201703L || defined __STRICT_ANSI__ │ │ │ │ +439 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, │ │ │ │ +440 "std::forward_list must have the same value_type as its allocator"); │ │ │ │ +441#endif │ │ │ │ 442 │ │ │ │ -443 /// Re-insert an extracted node. │ │ │ │ -444 insert_return_type │ │ │ │ -_4_4_5 _i_n_s_e_r_t(node_type&& _____n_h) │ │ │ │ -446 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(_____n_h)); } │ │ │ │ -447 │ │ │ │ -448 /// Re-insert an extracted node. │ │ │ │ -449 _i_t_e_r_a_t_o_r │ │ │ │ -_4_5_0 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r, node_type&& _____n_h) │ │ │ │ -451 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(_____n_h)).position; } │ │ │ │ -452#endif // node_extract │ │ │ │ -453 │ │ │ │ -454#ifdef __glibcxx_unordered_map_try_emplace // C++ >= 17 && HOSTED │ │ │ │ -455 /** │ │ │ │ -456 * @brief Attempts to build and insert a std::pair into the │ │ │ │ -457 * %unordered_map. │ │ │ │ -458 * │ │ │ │ -459 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ -460 * the unordered_map. │ │ │ │ -461 * @param __args Arguments used to generate the .second for a │ │ │ │ -462 * new pair instance. │ │ │ │ -463 * │ │ │ │ -464 * @return A pair, of which the first element is an iterator that points │ │ │ │ -465 * to the possibly inserted pair, and the second is a bool that │ │ │ │ -466 * is true if the pair was actually inserted. │ │ │ │ -467 * │ │ │ │ -468 * This function attempts to build and insert a (key, value) %pair into │ │ │ │ -469 * the %unordered_map. │ │ │ │ -470 * An %unordered_map relies on unique keys and thus a %pair is only │ │ │ │ -471 * inserted if its first element (the key) is not already present in the │ │ │ │ -472 * %unordered_map. │ │ │ │ -473 * If a %pair is not inserted, this function has no effect. │ │ │ │ -474 * │ │ │ │ -475 * Insertion requires amortized constant time. │ │ │ │ -476 */ │ │ │ │ -477 template │ │ │ │ -478 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_4_7_9 _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) │ │ │ │ -480 { │ │ │ │ -481 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)...); │ │ │ │ -482 } │ │ │ │ -483 │ │ │ │ -484 // move-capable overload │ │ │ │ -485 template │ │ │ │ -486 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -487 _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) │ │ │ │ -488 { │ │ │ │ -489 return _M_h.try_emplace(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(_____k), │ │ │ │ -490 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); │ │ │ │ -491 } │ │ │ │ -492 │ │ │ │ -493 /** │ │ │ │ -494 * @brief Attempts to build and insert a std::pair into the │ │ │ │ -495 * %unordered_map. │ │ │ │ -496 * │ │ │ │ -497 * @param __hint An iterator that serves as a hint as to where the pair │ │ │ │ -498 * should be inserted. │ │ │ │ -499 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ -500 * the unordered_map. │ │ │ │ -501 * @param __args Arguments used to generate the .second for a │ │ │ │ -502 * new pair instance. │ │ │ │ -503 * @return An iterator that points to the element with key of the │ │ │ │ -504 * std::pair built from @a __args (may or may not be that │ │ │ │ -505 * std::pair). │ │ │ │ -506 * │ │ │ │ -507 * This function is not concerned about whether the insertion took place, │ │ │ │ -508 * and thus does not return a boolean like the single-argument emplace() │ │ │ │ -509 * does. However, if insertion did not take place, │ │ │ │ -510 * this function has no effect. │ │ │ │ -511 * Note that the first parameter is only a hint and can potentially │ │ │ │ -512 * improve the performance of the insertion process. A bad hint would │ │ │ │ -513 * cause no gains in efficiency. │ │ │ │ -514 * │ │ │ │ -515 * See │ │ │ │ -516 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -517 * for more on @a hinting. │ │ │ │ -518 * │ │ │ │ -519 * Insertion requires amortized constant time. │ │ │ │ -520 */ │ │ │ │ -521 template │ │ │ │ -522 _i_t_e_r_a_t_o_r │ │ │ │ -_5_2_3 _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, │ │ │ │ -524 ___A_r_g_s&&... _____a_r_g_s) │ │ │ │ -525 { │ │ │ │ -526 return _M_h.try_emplace(_____h_i_n_t, _____k, │ │ │ │ -527 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...).first; │ │ │ │ -528 } │ │ │ │ -529 │ │ │ │ -530 // move-capable overload │ │ │ │ -531 template │ │ │ │ -532 _i_t_e_r_a_t_o_r │ │ │ │ -533 _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) │ │ │ │ -534 { │ │ │ │ -535 return _M_h.try_emplace(_____h_i_n_t, _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)...).first; │ │ │ │ -537 } │ │ │ │ -538#endif // __glibcxx_unordered_map_try_emplace │ │ │ │ -539 │ │ │ │ -540 ///@{ │ │ │ │ -541 /** │ │ │ │ -542 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ -543 │ │ │ │ -544 * @param __x Pair to be inserted (see std::make_pair for easy │ │ │ │ -545 * creation of pairs). │ │ │ │ -546 * │ │ │ │ -547 * @return A pair, of which the first element is an iterator that │ │ │ │ -548 * points to the possibly inserted pair, and the second is │ │ │ │ -549 * a bool that is true if the pair was actually inserted. │ │ │ │ -550 * │ │ │ │ -551 * This function attempts to insert a (key, value) %pair into the │ │ │ │ -552 * %unordered_map. An %unordered_map relies on unique keys and thus a │ │ │ │ -553 * %pair is only inserted if its first element (the key) is not already │ │ │ │ -554 * present in the %unordered_map. │ │ │ │ -555 * │ │ │ │ -556 * Insertion requires amortized constant time. │ │ │ │ -557 */ │ │ │ │ -558 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_5_5_9 _i_n_s_e_r_t(const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -560 { return _M_h.insert(__x); } │ │ │ │ -561 │ │ │ │ -562 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -563 // 2354. Unnecessary copying when inserting into maps with braced-init │ │ │ │ -564 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_5_6_5 _i_n_s_e_r_t(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -566 { return _M_h.insert(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -567 │ │ │ │ -568 template │ │ │ │ -569 _____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, │ │ │ │ -570 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_>> │ │ │ │ -_5_7_1 _i_n_s_e_r_t(___P_a_i_r&& __x) │ │ │ │ -572 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ -573 ///@} │ │ │ │ -574 │ │ │ │ -575 ///@{ │ │ │ │ +443 private: │ │ │ │ +444 typedef ___F_w_d___l_i_s_t___b_a_s_e_<___T_p_,_ ___A_l_l_o_c_> ___B_a_s_e; │ │ │ │ +445 typedef ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e ___N_o_d_e___b_a_s_e; │ │ │ │ +446 typedef typename ___B_a_s_e_:_:___N_o_d_e ___N_o_d_e; │ │ │ │ +447 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; │ │ │ │ +448 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; │ │ │ │ +449 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; │ │ │ │ +450 │ │ │ │ +451 public: │ │ │ │ +452 // types: │ │ │ │ +453 typedef _Tp value_type; │ │ │ │ +454 typedef typename _Alloc_traits::pointer pointer; │ │ │ │ +455 typedef typename _Alloc_traits::const_pointer const_pointer; │ │ │ │ +456 typedef value_type& reference; │ │ │ │ +457 typedef const value_type& const_reference; │ │ │ │ +458 │ │ │ │ +459 typedef typename ___B_a_s_e_:_:_i_t_e_r_a_t_o_r _i_t_e_r_a_t_o_r; │ │ │ │ +460 typedef typename ___B_a_s_e_:_:_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; │ │ │ │ +461 typedef std::size_t size_type; │ │ │ │ +462 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; │ │ │ │ +463 typedef _Alloc allocator_type; │ │ │ │ +464 │ │ │ │ +465 // 23.3.4.2 construct/copy/destroy: │ │ │ │ +466 │ │ │ │ +467 /** │ │ │ │ +468 * @brief Creates a %forward_list with no elements. │ │ │ │ +469 */ │ │ │ │ +_4_7_0 _f_o_r_w_a_r_d___l_i_s_t() = default; │ │ │ │ +471 │ │ │ │ +472 /** │ │ │ │ +473 * @brief Creates a %forward_list with no elements. │ │ │ │ +474 * @param __al An allocator object. │ │ │ │ +475 */ │ │ │ │ +476 explicit │ │ │ │ +_4_7_7 _f_o_r_w_a_r_d___l_i_s_t(const _Alloc& _____a_l) noexcept │ │ │ │ +478 : ___B_a_s_e(___N_o_d_e___a_l_l_o_c___t_y_p_e(_____a_l)) │ │ │ │ +479 { } │ │ │ │ +480 │ │ │ │ +481 /** │ │ │ │ +482 * @brief Copy constructor with allocator argument. │ │ │ │ +483 * @param __list Input list to copy. │ │ │ │ +484 * @param __al An allocator object. │ │ │ │ +485 */ │ │ │ │ +_4_8_6 _f_o_r_w_a_r_d___l_i_s_t(const _f_o_r_w_a_r_d___l_i_s_t& _____l_i_s_t, │ │ │ │ +487 const _____t_y_p_e___i_d_e_n_t_i_t_y___t_<___A_l_l_o_c_>& _____a_l) │ │ │ │ +488 : ___B_a_s_e(___N_o_d_e___a_l_l_o_c___t_y_p_e(_____a_l)) │ │ │ │ +489 { _M_range_initialize(_____l_i_s_t.begin(), _____l_i_s_t.end()); } │ │ │ │ +490 │ │ │ │ +491 private: │ │ │ │ +492 _f_o_r_w_a_r_d___l_i_s_t(_f_o_r_w_a_r_d___l_i_s_t&& _____l_i_s_t, _Node_alloc_type&& _____a_l, │ │ │ │ +493 _f_a_l_s_e___t_y_p_e) │ │ │ │ +494 : _Base(_s_t_d::_m_o_v_e(_____l_i_s_t), _s_t_d::_m_o_v_e(_____a_l)) │ │ │ │ +495 { │ │ │ │ +496 // If __list is not empty it means its allocator is not equal to __a, │ │ │ │ +497 // so we need to move from each element individually. │ │ │ │ +498 _i_n_s_e_r_t___a_f_t_e_r(_c_b_e_f_o_r_e___b_e_g_i_n(), │ │ │ │ +499 std::__make_move_if_noexcept_iterator(_____l_i_s_t.begin()), │ │ │ │ +500 std::__make_move_if_noexcept_iterator(_____l_i_s_t.end())); │ │ │ │ +501 } │ │ │ │ +502 │ │ │ │ +503 _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, │ │ │ │ +504 _t_r_u_e___t_y_p_e) │ │ │ │ +505 noexcept │ │ │ │ +506 : _Base(_s_t_d_:_:_m_o_v_e(__list), _Node_alloc_type(__al), _t_r_u_e___t_y_p_e{}) │ │ │ │ +507 { } │ │ │ │ +508 │ │ │ │ +509 public: │ │ │ │ +510 /** │ │ │ │ +511 * @brief Move constructor with allocator argument. │ │ │ │ +512 * @param __list Input list to move. │ │ │ │ +513 * @param __al An allocator object. │ │ │ │ +514 */ │ │ │ │ +_5_1_5 _f_o_r_w_a_r_d___l_i_s_t(_f_o_r_w_a_r_d___l_i_s_t&& _____l_i_s_t, │ │ │ │ +516 const _____t_y_p_e___i_d_e_n_t_i_t_y___t_<___A_l_l_o_c_>& _____a_l) │ │ │ │ +517 noexcept(_Node_alloc_traits::_S_always_equal()) │ │ │ │ +518 : _f_o_r_w_a_r_d___l_i_s_t(_s_t_d::_m_o_v_e(_____l_i_s_t), ___N_o_d_e___a_l_l_o_c___t_y_p_e(_____a_l), │ │ │ │ +519 _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{}) │ │ │ │ +520 { } │ │ │ │ +521 │ │ │ │ +522 /** │ │ │ │ +523 * @brief Creates a %forward_list with default constructed elements. │ │ │ │ +524 * @param __n The number of elements to initially create. │ │ │ │ +525 * @param __al An allocator object. │ │ │ │ +526 * │ │ │ │ +527 * This constructor creates the %forward_list with @a __n default │ │ │ │ +528 * constructed elements. │ │ │ │ +529 */ │ │ │ │ +530 explicit │ │ │ │ +_5_3_1 _f_o_r_w_a_r_d___l_i_s_t(size_type __n, const _Alloc& _____a_l = _Alloc()) │ │ │ │ +532 : ___B_a_s_e(___N_o_d_e___a_l_l_o_c___t_y_p_e(_____a_l)) │ │ │ │ +533 { _M_default_initialize(__n); } │ │ │ │ +534 │ │ │ │ +535 /** │ │ │ │ +536 * @brief Creates a %forward_list with copies of an exemplar element. │ │ │ │ +537 * @param __n The number of elements to initially create. │ │ │ │ +538 * @param __value An element to copy. │ │ │ │ +539 * @param __al An allocator object. │ │ │ │ +540 * │ │ │ │ +541 * This constructor fills the %forward_list with @a __n copies of │ │ │ │ +542 * @a __value. │ │ │ │ +543 */ │ │ │ │ +_5_4_4 _f_o_r_w_a_r_d___l_i_s_t(size_type __n, const _Tp& __value, │ │ │ │ +545 const _Alloc& _____a_l = _Alloc()) │ │ │ │ +546 : ___B_a_s_e(___N_o_d_e___a_l_l_o_c___t_y_p_e(_____a_l)) │ │ │ │ +547 { _M_fill_initialize(__n, __value); } │ │ │ │ +548 │ │ │ │ +549 /** │ │ │ │ +550 * @brief Builds a %forward_list from a range. │ │ │ │ +551 * @param __first An input iterator. │ │ │ │ +552 * @param __last An input iterator. │ │ │ │ +553 * @param __al An allocator object. │ │ │ │ +554 * │ │ │ │ +555 * Create a %forward_list consisting of copies of the elements from │ │ │ │ +556 * [@a __first,@a __last). This is linear in N (where N is │ │ │ │ +557 * distance(@a __first,@a __last)). │ │ │ │ +558 */ │ │ │ │ +559 template> │ │ │ │ +_5_6_1 _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, │ │ │ │ +562 const _Alloc& _____a_l = _Alloc()) │ │ │ │ +563 : ___B_a_s_e(___N_o_d_e___a_l_l_o_c___t_y_p_e(_____a_l)) │ │ │ │ +564 { _M_range_initialize(__first, __last); } │ │ │ │ +565 │ │ │ │ +566 /** │ │ │ │ +567 * @brief The %forward_list copy constructor. │ │ │ │ +568 * @param __list A %forward_list of identical element and allocator │ │ │ │ +569 * types. │ │ │ │ +570 */ │ │ │ │ +_5_7_1 _f_o_r_w_a_r_d___l_i_s_t(const _f_o_r_w_a_r_d___l_i_s_t& _____l_i_s_t) │ │ │ │ +572 : ___B_a_s_e(___N_o_d_e___a_l_l_o_c___t_r_a_i_t_s::_S_select_on_copy( │ │ │ │ +573 _____l_i_s_t._M_get_Node_allocator())) │ │ │ │ +574 { _M_range_initialize(_____l_i_s_t.begin(), _____l_i_s_t.end()); } │ │ │ │ +575 │ │ │ │ 576 /** │ │ │ │ -577 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ -578 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ -579 * pair should be inserted. │ │ │ │ -580 * @param __x Pair to be inserted (see std::make_pair for easy creation │ │ │ │ -581 * of pairs). │ │ │ │ -582 * @return An iterator that points to the element with key of │ │ │ │ -583 * @a __x (may or may not be the %pair passed in). │ │ │ │ -584 * │ │ │ │ -585 * This function is not concerned about whether the insertion took place, │ │ │ │ -586 * and thus does not return a boolean like the single-argument insert() │ │ │ │ -587 * does. Note that the first parameter is only a hint and can │ │ │ │ -588 * potentially improve the performance of the insertion process. A bad │ │ │ │ -589 * hint would cause no gains in efficiency. │ │ │ │ -590 * │ │ │ │ -591 * See │ │ │ │ -592 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -593 * for more on @a hinting. │ │ │ │ -594 * │ │ │ │ -595 * Insertion requires amortized constant time. │ │ │ │ -596 */ │ │ │ │ -597 _i_t_e_r_a_t_o_r │ │ │ │ -_5_9_8 _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) │ │ │ │ -599 { return _M_h.insert(_____h_i_n_t, __x); } │ │ │ │ -600 │ │ │ │ -601 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -602 // 2354. Unnecessary copying when inserting into maps with braced-init │ │ │ │ -603 _i_t_e_r_a_t_o_r │ │ │ │ -_6_0_4 _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) │ │ │ │ -605 { return _M_h.insert(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -606 │ │ │ │ -607 template │ │ │ │ -608 _____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_0_9 _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) │ │ │ │ -610 { return _M_h.emplace_hint(_____h_i_n_t, _s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ -611 ///@} │ │ │ │ -612 │ │ │ │ -613 /** │ │ │ │ -614 * @brief A template function that attempts to insert a range of │ │ │ │ -615 * elements. │ │ │ │ -616 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -617 * inserted. │ │ │ │ -618 * @param __last Iterator pointing to the end of the range. │ │ │ │ -619 * │ │ │ │ -620 * Complexity similar to that of the range constructor. │ │ │ │ -621 */ │ │ │ │ -622 template │ │ │ │ -623 void │ │ │ │ -_6_2_4 _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) │ │ │ │ -625 { _M_h.insert(__first, __last); } │ │ │ │ -626 │ │ │ │ -627 /** │ │ │ │ -628 * @brief Attempts to insert a list of elements into the %unordered_map. │ │ │ │ -629 * @param __l A std::initializer_list of elements │ │ │ │ -630 * to be inserted. │ │ │ │ -631 * │ │ │ │ -632 * Complexity similar to that of the range constructor. │ │ │ │ -633 */ │ │ │ │ -634 void │ │ │ │ -_6_3_5 _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) │ │ │ │ -636 { _M_h.insert(_____l); } │ │ │ │ -637 │ │ │ │ -638 │ │ │ │ -639#ifdef __glibcxx_unordered_map_try_emplace // >= C++17 && HOSTED │ │ │ │ -640 /** │ │ │ │ -641 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ -642 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ -643 * the map. │ │ │ │ -644 * @param __obj Argument used to generate the .second for a pair │ │ │ │ -645 * instance. │ │ │ │ -646 * │ │ │ │ -647 * @return A pair, of which the first element is an iterator that │ │ │ │ -648 * points to the possibly inserted pair, and the second is │ │ │ │ -649 * a bool that is true if the pair was actually inserted. │ │ │ │ -650 * │ │ │ │ -651 * This function attempts to insert a (key, value) %pair into the │ │ │ │ -652 * %unordered_map. An %unordered_map relies on unique keys and thus a │ │ │ │ -653 * %pair is only inserted if its first element (the key) is not already │ │ │ │ -654 * present in the %unordered_map. │ │ │ │ -655 * If the %pair was already in the %unordered_map, the .second of │ │ │ │ -656 * the %pair is assigned from __obj. │ │ │ │ -657 * │ │ │ │ -658 * Insertion requires amortized constant time. │ │ │ │ -659 */ │ │ │ │ -660 template │ │ │ │ -661 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -_6_6_2 _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) │ │ │ │ -663 { │ │ │ │ -664 auto _____r_e_t = _M_h.try_emplace(_c_e_n_d(), _____k, │ │ │ │ -665 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j)); │ │ │ │ -666 if (!_____r_e_t.second) │ │ │ │ -667 _____r_e_t.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j); │ │ │ │ -668 return _____r_e_t; │ │ │ │ -669 } │ │ │ │ -670 │ │ │ │ -671 // move-capable overload │ │ │ │ -672 template │ │ │ │ -673 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -674 _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) │ │ │ │ -675 { │ │ │ │ -676 auto _____r_e_t = _M_h.try_emplace(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(_____k), │ │ │ │ -677 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j)); │ │ │ │ -678 if (!_____r_e_t.second) │ │ │ │ -679 _____r_e_t.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j); │ │ │ │ -680 return _____r_e_t; │ │ │ │ -681 } │ │ │ │ -682 │ │ │ │ -683 /** │ │ │ │ -684 * @brief Attempts to insert a std::pair into the %unordered_map. │ │ │ │ -685 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ -686 * pair should be inserted. │ │ │ │ -687 * @param __k Key to use for finding a possibly existing pair in │ │ │ │ -688 * the unordered_map. │ │ │ │ -689 * @param __obj Argument used to generate the .second for a pair │ │ │ │ -690 * instance. │ │ │ │ -691 * @return An iterator that points to the element with key of │ │ │ │ -692 * @a __x (may or may not be the %pair passed in). │ │ │ │ -693 * │ │ │ │ -694 * This function is not concerned about whether the insertion took place, │ │ │ │ -695 * and thus does not return a boolean like the single-argument insert() │ │ │ │ -696 * does. │ │ │ │ -697 * If the %pair was already in the %unordered map, the .second of │ │ │ │ -698 * the %pair is assigned from __obj. │ │ │ │ -699 * Note that the first parameter is only a hint and can │ │ │ │ -700 * potentially improve the performance of the insertion process. A bad │ │ │ │ -701 * hint would cause no gains in efficiency. │ │ │ │ -702 * │ │ │ │ -703 * See │ │ │ │ -704 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -705 * for more on @a hinting. │ │ │ │ -706 * │ │ │ │ -707 * Insertion requires amortized constant time. │ │ │ │ -708 */ │ │ │ │ -709 template │ │ │ │ -710 _i_t_e_r_a_t_o_r │ │ │ │ -_7_1_1 _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, │ │ │ │ -712 _Obj&& _____o_b_j) │ │ │ │ -713 { │ │ │ │ -714 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)); │ │ │ │ -715 if (!_____r_e_t.second) │ │ │ │ -716 _____r_e_t.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j); │ │ │ │ -717 return _____r_e_t.first; │ │ │ │ -718 } │ │ │ │ -719 │ │ │ │ -720 // move-capable overload │ │ │ │ -721 template │ │ │ │ -722 _i_t_e_r_a_t_o_r │ │ │ │ -723 _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) │ │ │ │ -724 { │ │ │ │ -725 auto _____r_e_t = _M_h.try_emplace(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(_____k), │ │ │ │ -726 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j)); │ │ │ │ -727 if (!_____r_e_t.second) │ │ │ │ -728 _____r_e_t.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(_____o_b_j); │ │ │ │ -729 return _____r_e_t.first; │ │ │ │ -730 } │ │ │ │ -731#endif // unordered_map_try_emplace │ │ │ │ -732 │ │ │ │ -733 ///@{ │ │ │ │ -734 /** │ │ │ │ -735 * @brief Erases an element from an %unordered_map. │ │ │ │ -736 * @param __position An iterator pointing to the element to be erased. │ │ │ │ -737 * @return An iterator pointing to the element immediately following │ │ │ │ -738 * @a __position prior to the element being erased. If no such │ │ │ │ -739 * element exists, end() is returned. │ │ │ │ -740 * │ │ │ │ -741 * This function erases an element, pointed to by the given iterator, │ │ │ │ -742 * from an %unordered_map. │ │ │ │ -743 * Note that this function only erases the element, and that if the │ │ │ │ -744 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ -745 * any way. Managing the pointer is the user's responsibility. │ │ │ │ -746 */ │ │ │ │ -747 _i_t_e_r_a_t_o_r │ │ │ │ -_7_4_8 _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) │ │ │ │ -749 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ -750 │ │ │ │ -751 // LWG 2059. │ │ │ │ -752 _i_t_e_r_a_t_o_r │ │ │ │ -_7_5_3 _e_r_a_s_e(_i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n) │ │ │ │ -754 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ -755 ///@} │ │ │ │ -756 │ │ │ │ -757 /** │ │ │ │ -758 * @brief Erases elements according to the provided key. │ │ │ │ -759 * @param __x Key of element to be erased. │ │ │ │ -760 * @return The number of elements erased. │ │ │ │ -761 * │ │ │ │ -762 * This function erases all the elements located by the given key from │ │ │ │ -763 * an %unordered_map. For an %unordered_map the result of this function │ │ │ │ -764 * can only be 0 (not present) or 1 (present). │ │ │ │ -765 * Note that this function only erases the element, and that if the │ │ │ │ -766 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ -767 * any way. Managing the pointer is the user's responsibility. │ │ │ │ -768 */ │ │ │ │ -769 _s_i_z_e___t_y_p_e │ │ │ │ -_7_7_0 _e_r_a_s_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -771 { return _M_h.erase(__x); } │ │ │ │ -772 │ │ │ │ -773 /** │ │ │ │ -774 * @brief Erases a [__first,__last) range of elements from an │ │ │ │ -775 * %unordered_map. │ │ │ │ -776 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -777 * erased. │ │ │ │ -778 * @param __last Iterator pointing to the end of the range to │ │ │ │ -779 * be erased. │ │ │ │ -780 * @return The iterator @a __last. │ │ │ │ -781 * │ │ │ │ -782 * This function erases a sequence of elements from an %unordered_map. │ │ │ │ -783 * Note that this function only erases the elements, and that if │ │ │ │ -784 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ -785 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -786 */ │ │ │ │ -787 _i_t_e_r_a_t_o_r │ │ │ │ -_7_8_8 _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) │ │ │ │ -789 { return _M_h.erase(__first, __last); } │ │ │ │ -790 │ │ │ │ -791 /** │ │ │ │ -792 * Erases all elements in an %unordered_map. │ │ │ │ -793 * Note that this function only erases the elements, and that if the │ │ │ │ -794 * elements themselves are pointers, the pointed-to memory is not touched │ │ │ │ -795 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -796 */ │ │ │ │ -797 void │ │ │ │ -_7_9_8 _c_l_e_a_r() noexcept │ │ │ │ -799 { _M_h.clear(); } │ │ │ │ -800 │ │ │ │ -801 /** │ │ │ │ -802 * @brief Swaps data with another %unordered_map. │ │ │ │ -803 * @param __x An %unordered_map of the same element and allocator │ │ │ │ -804 * types. │ │ │ │ -805 * │ │ │ │ -806 * This exchanges the elements between two %unordered_map in constant │ │ │ │ -807 * time. │ │ │ │ -808 * Note that the global std::swap() function is specialized such that │ │ │ │ -809 * std::swap(m1,m2) will feed to this function. │ │ │ │ -810 */ │ │ │ │ -811 void │ │ │ │ -_8_1_2 _s_w_a_p(_u_n_o_r_d_e_r_e_d___m_a_p& __x) │ │ │ │ -813 noexcept( noexcept(_M_h.swap(__x._M_h)) ) │ │ │ │ -814 { _M_h.swap(__x._M_h); } │ │ │ │ -815 │ │ │ │ -816#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -817 template │ │ │ │ -818 friend class std::_Hash_merge_helper; │ │ │ │ -819 │ │ │ │ -820 template │ │ │ │ -821 void │ │ │ │ -822 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) │ │ │ │ -823 { │ │ │ │ -824 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_>; │ │ │ │ -825 _M_h._M_merge_unique(_Merge_helper::_S_get_table(_____s_o_u_r_c_e)); │ │ │ │ -826 } │ │ │ │ -827 │ │ │ │ -828 template │ │ │ │ -829 void │ │ │ │ -830 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ -831 { merge(__source); } │ │ │ │ -832 │ │ │ │ -833 template │ │ │ │ -834 void │ │ │ │ -835 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>& __source) │ │ │ │ -836 { │ │ │ │ -837 using _Merge_helper = _Hash_merge_helper; │ │ │ │ -838 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ -839 } │ │ │ │ -840 │ │ │ │ -841 template │ │ │ │ -842 void │ │ │ │ -843 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ -844 { merge(__source); } │ │ │ │ -845#endif // node_extract │ │ │ │ -846 │ │ │ │ -847 // observers. │ │ │ │ -848 │ │ │ │ -849 /// Returns the hash functor object with which the %unordered_map was │ │ │ │ -850 /// constructed. │ │ │ │ -851 _h_a_s_h_e_r │ │ │ │ -_8_5_2 _h_a_s_h___f_u_n_c_t_i_o_n() const │ │ │ │ -853 { return _M_h.hash_function(); } │ │ │ │ -854 │ │ │ │ -855 /// Returns the key comparison object with which the %unordered_map was │ │ │ │ -856 /// constructed. │ │ │ │ -857 _k_e_y___e_q_u_a_l │ │ │ │ -_8_5_8 _k_e_y___e_q() const │ │ │ │ -859 { return _M_h.key_eq(); } │ │ │ │ -860 │ │ │ │ -861 // lookup. │ │ │ │ -862 │ │ │ │ -863 ///@{ │ │ │ │ -864 /** │ │ │ │ -865 * @brief Tries to locate an element in an %unordered_map. │ │ │ │ -866 * @param __x Key to be located. │ │ │ │ -867 * @return Iterator pointing to sought-after element, or end() if not │ │ │ │ -868 * found. │ │ │ │ -869 * │ │ │ │ -870 * This function takes a key and tries to locate the element with which │ │ │ │ -871 * the key matches. If successful the function returns an iterator │ │ │ │ -872 * pointing to the sought after element. If unsuccessful it returns the │ │ │ │ -873 * past-the-end ( @c end() ) iterator. │ │ │ │ -874 */ │ │ │ │ -875 _i_t_e_r_a_t_o_r │ │ │ │ -_8_7_6 _f_i_n_d(const _k_e_y___t_y_p_e& __x) │ │ │ │ -877 { return _M_h.find(__x); } │ │ │ │ -878 │ │ │ │ -879#if __cplusplus > 201703L │ │ │ │ -880 template │ │ │ │ -881 auto │ │ │ │ -_8_8_2 _f_i_n_d(const ___K_t& __x) -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -883 { return _M_h._M_find_tr(__x); } │ │ │ │ -884#endif │ │ │ │ -885 │ │ │ │ -886 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_8_8_7 _f_i_n_d(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -888 { return _M_h.find(__x); } │ │ │ │ -889 │ │ │ │ -890#if __cplusplus > 201703L │ │ │ │ -891 template │ │ │ │ -892 auto │ │ │ │ -_8_9_3 _f_i_n_d(const ___K_t& __x) const -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -894 { return _M_h._M_find_tr(__x); } │ │ │ │ -895#endif │ │ │ │ -896 ///@} │ │ │ │ -897 │ │ │ │ -898 ///@{ │ │ │ │ -899 /** │ │ │ │ -900 * @brief Finds the number of elements. │ │ │ │ -901 * @param __x Key to count. │ │ │ │ -902 * @return Number of elements with specified key. │ │ │ │ -903 * │ │ │ │ -904 * This function only makes sense for %unordered_multimap; for │ │ │ │ -905 * %unordered_map the result will either be 0 (not present) or 1 │ │ │ │ -906 * (present). │ │ │ │ -907 */ │ │ │ │ -908 _s_i_z_e___t_y_p_e │ │ │ │ -_9_0_9 _c_o_u_n_t(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -910 { return _M_h.count(__x); } │ │ │ │ -911 │ │ │ │ -912#if __cplusplus > 201703L │ │ │ │ -913 template │ │ │ │ -914 auto │ │ │ │ -_9_1_5 _c_o_u_n_t(const ___K_t& __x) const -> decltype(_M_h._M_count_tr(__x)) │ │ │ │ -916 { return _M_h._M_count_tr(__x); } │ │ │ │ -917#endif │ │ │ │ -918 ///@} │ │ │ │ -919 │ │ │ │ -920#if __cplusplus > 201703L │ │ │ │ -921 ///@{ │ │ │ │ -922 /** │ │ │ │ -923 * @brief Finds whether an element with the given key exists. │ │ │ │ -924 * @param __x Key of elements to be located. │ │ │ │ -925 * @return True if there is any element with the specified key. │ │ │ │ -926 */ │ │ │ │ -927 bool │ │ │ │ -_9_2_8 _c_o_n_t_a_i_n_s(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -929 { return _M_h.find(__x) != _M_h.end(); } │ │ │ │ -930 │ │ │ │ -931 template │ │ │ │ -932 auto │ │ │ │ -_9_3_3 _c_o_n_t_a_i_n_s(const ___K_t& __x) const │ │ │ │ -934 -> decltype(_M_h._M_find_tr(__x), _v_o_i_d(), true) │ │ │ │ -935 { return _M_h._M_find_tr(__x) != _M_h.end(); } │ │ │ │ -936 ///@} │ │ │ │ -937#endif │ │ │ │ -938 │ │ │ │ -939 ///@{ │ │ │ │ -940 /** │ │ │ │ -941 * @brief Finds a subsequence matching given key. │ │ │ │ -942 * @param __x Key to be located. │ │ │ │ -943 * @return Pair of iterators that possibly points to the subsequence │ │ │ │ -944 * matching given key. │ │ │ │ -945 * │ │ │ │ -946 * This function probably only makes sense for %unordered_multimap. │ │ │ │ -947 */ │ │ │ │ -948 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _i_t_e_r_a_t_o_r_> │ │ │ │ -_9_4_9 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -950 { return _M_h.equal_range(__x); } │ │ │ │ -951 │ │ │ │ -952#if __cplusplus > 201703L │ │ │ │ -953 template │ │ │ │ -954 auto │ │ │ │ -_9_5_5 _e_q_u_a_l___r_a_n_g_e(const ___K_t& __x) │ │ │ │ -956 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -957 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ -958#endif │ │ │ │ -959 │ │ │ │ -960 _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_> │ │ │ │ -_9_6_1 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -962 { return _M_h.equal_range(__x); } │ │ │ │ -963 │ │ │ │ -964#if __cplusplus > 201703L │ │ │ │ -965 template │ │ │ │ -966 auto │ │ │ │ -_9_6_7 _e_q_u_a_l___r_a_n_g_e(const ___K_t& __x) const │ │ │ │ -968 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -969 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ -970#endif │ │ │ │ -971 ///@} │ │ │ │ -972 │ │ │ │ -973 ///@{ │ │ │ │ -974 /** │ │ │ │ -975 * @brief Subscript ( @c [] ) access to %unordered_map data. │ │ │ │ -976 * @param __k The key for which data should be retrieved. │ │ │ │ -977 * @return A reference to the data of the (key,data) %pair. │ │ │ │ -978 * │ │ │ │ -979 * Allows for easy lookup with the subscript ( @c [] )operator. Returns │ │ │ │ -980 * data associated with the key specified in subscript. If the key does │ │ │ │ -981 * not exist, a pair with that key is created using default values, which │ │ │ │ -982 * is then returned. │ │ │ │ -983 * │ │ │ │ -984 * Lookup requires constant time. │ │ │ │ -985 */ │ │ │ │ -986 _m_a_p_p_e_d___t_y_p_e& │ │ │ │ -_9_8_7 _o_p_e_r_a_t_o_r_[_](const _k_e_y___t_y_p_e& _____k) │ │ │ │ -988 { return _M_h[_____k]; } │ │ │ │ -989 │ │ │ │ -990 _m_a_p_p_e_d___t_y_p_e& │ │ │ │ -_9_9_1 _o_p_e_r_a_t_o_r_[_](_k_e_y___t_y_p_e&& _____k) │ │ │ │ -992 { return _M_h[_s_t_d_:_:_m_o_v_e(_____k)]; } │ │ │ │ -993 ///@} │ │ │ │ -994 │ │ │ │ -995 ///@{ │ │ │ │ -996 /** │ │ │ │ -997 * @brief Access to %unordered_map data. │ │ │ │ -998 * @param __k The key for which data should be retrieved. │ │ │ │ -999 * @return A reference to the data whose key is equal to @a __k, if │ │ │ │ -1000 * such a data is present in the %unordered_map. │ │ │ │ -1001 * @throw std::out_of_range If no such data is present. │ │ │ │ -1002 */ │ │ │ │ -1003 _m_a_p_p_e_d___t_y_p_e& │ │ │ │ -_1_0_0_4 _a_t(const _k_e_y___t_y_p_e& _____k) │ │ │ │ -1005 { return _M_h.at(_____k); } │ │ │ │ -1006 │ │ │ │ -1007 const _m_a_p_p_e_d___t_y_p_e& │ │ │ │ -_1_0_0_8 _a_t(const _k_e_y___t_y_p_e& _____k) const │ │ │ │ -1009 { return _M_h.at(_____k); } │ │ │ │ -1010 ///@} │ │ │ │ -1011 │ │ │ │ -1012 // bucket interface. │ │ │ │ -1013 │ │ │ │ -1014 /// Returns the number of buckets of the %unordered_map. │ │ │ │ -1015 _s_i_z_e___t_y_p_e │ │ │ │ -_1_0_1_6 _b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ -1017 { return _M_h.bucket_count(); } │ │ │ │ -1018 │ │ │ │ -1019 /// Returns the maximum number of buckets of the %unordered_map. │ │ │ │ -1020 _s_i_z_e___t_y_p_e │ │ │ │ -_1_0_2_1 _m_a_x___b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ -1022 { return _M_h.max_bucket_count(); } │ │ │ │ -1023 │ │ │ │ -1024 /* │ │ │ │ -1025 * @brief Returns the number of elements in a given bucket. │ │ │ │ -1026 * @param __n A bucket index. │ │ │ │ -1027 * @return The number of elements in the bucket. │ │ │ │ -1028 */ │ │ │ │ -1029 _s_i_z_e___t_y_p_e │ │ │ │ -1030 bucket_size(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1031 { return _M_h.bucket_size(__n); } │ │ │ │ -1032 │ │ │ │ -1033 /* │ │ │ │ -1034 * @brief Returns the bucket index of a given element. │ │ │ │ -1035 * @param __key A key instance. │ │ │ │ -1036 * @return The key bucket index. │ │ │ │ -1037 */ │ │ │ │ -1038 _s_i_z_e___t_y_p_e │ │ │ │ -1039 bucket(const _k_e_y___t_y_p_e& __key) const │ │ │ │ -1040 { return _M_h.bucket(__key); } │ │ │ │ -1041 │ │ │ │ -1042 /** │ │ │ │ -1043 * @brief Returns a read/write iterator pointing to the first bucket │ │ │ │ -1044 * element. │ │ │ │ -1045 * @param __n The bucket index. │ │ │ │ -1046 * @return A read/write local iterator. │ │ │ │ +577 * @brief The %forward_list move constructor. │ │ │ │ +578 * @param __list A %forward_list of identical element and allocator │ │ │ │ +579 * types. │ │ │ │ +580 * │ │ │ │ +581 * The newly-created %forward_list contains the exact contents of the │ │ │ │ +582 * moved instance. The contents of the moved instance are a valid, but │ │ │ │ +583 * unspecified %forward_list. │ │ │ │ +584 */ │ │ │ │ +_5_8_5 _f_o_r_w_a_r_d___l_i_s_t(_f_o_r_w_a_r_d___l_i_s_t&&) = default; │ │ │ │ +586 │ │ │ │ +587 /** │ │ │ │ +588 * @brief Builds a %forward_list from an initializer_list │ │ │ │ +589 * @param __il An initializer_list of value_type. │ │ │ │ +590 * @param __al An allocator object. │ │ │ │ +591 * │ │ │ │ +592 * Create a %forward_list consisting of copies of the elements │ │ │ │ +593 * in the initializer_list @a __il. This is linear in __il.size(). │ │ │ │ +594 */ │ │ │ │ +_5_9_5 _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, │ │ │ │ +596 const _Alloc& _____a_l = _Alloc()) │ │ │ │ +597 : ___B_a_s_e(___N_o_d_e___a_l_l_o_c___t_y_p_e(_____a_l)) │ │ │ │ +598 { _M_range_initialize(_____i_l.begin(), _____i_l.end()); } │ │ │ │ +599 │ │ │ │ +600 /** │ │ │ │ +601 * @brief The forward_list dtor. │ │ │ │ +602 */ │ │ │ │ +_6_0_3 _~_f_o_r_w_a_r_d___l_i_s_t() noexcept │ │ │ │ +604 { } │ │ │ │ +605 │ │ │ │ +606 /** │ │ │ │ +607 * @brief The %forward_list assignment operator. │ │ │ │ +608 * @param __list A %forward_list of identical element and allocator │ │ │ │ +609 * types. │ │ │ │ +610 * │ │ │ │ +611 * All the elements of @a __list are copied. │ │ │ │ +612 * │ │ │ │ +613 * Whether the allocator is copied depends on the allocator traits. │ │ │ │ +614 */ │ │ │ │ +615 _f_o_r_w_a_r_d___l_i_s_t& │ │ │ │ +616 _o_p_e_r_a_t_o_r_=(const _f_o_r_w_a_r_d___l_i_s_t& _____l_i_s_t); │ │ │ │ +617 │ │ │ │ +618 /** │ │ │ │ +619 * @brief The %forward_list move assignment operator. │ │ │ │ +620 * @param __list A %forward_list of identical element and allocator │ │ │ │ +621 * types. │ │ │ │ +622 * │ │ │ │ +623 * The contents of @a __list are moved into this %forward_list │ │ │ │ +624 * (without copying, if the allocators permit it). │ │ │ │ +625 * │ │ │ │ +626 * Afterwards @a __list is a valid, but unspecified %forward_list │ │ │ │ +627 * │ │ │ │ +628 * Whether the allocator is moved depends on the allocator traits. │ │ │ │ +629 */ │ │ │ │ +630 _f_o_r_w_a_r_d___l_i_s_t& │ │ │ │ +_6_3_1 _o_p_e_r_a_t_o_r_=(_f_o_r_w_a_r_d___l_i_s_t&& _____l_i_s_t) │ │ │ │ +632 noexcept(_Node_alloc_traits::_S_nothrow_move()) │ │ │ │ +633 { │ │ │ │ +634 constexpr bool _____m_o_v_e___s_t_o_r_a_g_e = │ │ │ │ +635 _Node_alloc_traits::_S_propagate_on_move_assign() │ │ │ │ +636 || _Node_alloc_traits::_S_always_equal(); │ │ │ │ +637 _M_move_assign(_s_t_d_:_:_m_o_v_e(_____l_i_s_t), _____b_o_o_l___c_o_n_s_t_a_n_t_<_____m_o_v_e___s_t_o_r_a_g_e_>()); │ │ │ │ +638 return *this; │ │ │ │ +639 } │ │ │ │ +640 │ │ │ │ +641 /** │ │ │ │ +642 * @brief The %forward_list initializer list assignment operator. │ │ │ │ +643 * @param __il An initializer_list of value_type. │ │ │ │ +644 * │ │ │ │ +645 * Replace the contents of the %forward_list with copies of the │ │ │ │ +646 * elements in the initializer_list @a __il. This is linear in │ │ │ │ +647 * __il.size(). │ │ │ │ +648 */ │ │ │ │ +649 _f_o_r_w_a_r_d___l_i_s_t& │ │ │ │ +_6_5_0 _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) │ │ │ │ +651 { │ │ │ │ +652 _a_s_s_i_g_n(_____i_l); │ │ │ │ +653 return *this; │ │ │ │ +654 } │ │ │ │ +655 │ │ │ │ +656 /** │ │ │ │ +657 * @brief Assigns a range to a %forward_list. │ │ │ │ +658 * @param __first An input iterator. │ │ │ │ +659 * @param __last An input iterator. │ │ │ │ +660 * │ │ │ │ +661 * This function fills a %forward_list with copies of the elements │ │ │ │ +662 * in the range [@a __first,@a __last). │ │ │ │ +663 * │ │ │ │ +664 * Note that the assignment completely changes the %forward_list and │ │ │ │ +665 * that the number of elements of the resulting %forward_list is the │ │ │ │ +666 * same as the number of elements assigned. │ │ │ │ +667 */ │ │ │ │ +668 template> │ │ │ │ +670 void │ │ │ │ +_6_7_1 _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) │ │ │ │ +672 { │ │ │ │ +673 typedef _i_s___a_s_s_i_g_n_a_b_l_e<_Tp, decltype(*__first)> __assignable; │ │ │ │ +674 _M_assign(__first, __last, __assignable()); │ │ │ │ +675 } │ │ │ │ +676 │ │ │ │ +677 /** │ │ │ │ +678 * @brief Assigns a given value to a %forward_list. │ │ │ │ +679 * @param __n Number of elements to be assigned. │ │ │ │ +680 * @param __val Value to be assigned. │ │ │ │ +681 * │ │ │ │ +682 * This function fills a %forward_list with @a __n copies of the │ │ │ │ +683 * given value. Note that the assignment completely changes the │ │ │ │ +684 * %forward_list, and that the resulting %forward_list has __n │ │ │ │ +685 * elements. │ │ │ │ +686 */ │ │ │ │ +687 void │ │ │ │ +_6_8_8 _a_s_s_i_g_n(size_type __n, const _Tp& __val) │ │ │ │ +689 { _M_assign_n(__n, __val, _i_s___c_o_p_y___a_s_s_i_g_n_a_b_l_e_<___T_p_>()); } │ │ │ │ +690 │ │ │ │ +691 /** │ │ │ │ +692 * @brief Assigns an initializer_list to a %forward_list. │ │ │ │ +693 * @param __il An initializer_list of value_type. │ │ │ │ +694 * │ │ │ │ +695 * Replace the contents of the %forward_list with copies of the │ │ │ │ +696 * elements in the initializer_list @a __il. This is linear in │ │ │ │ +697 * il.size(). │ │ │ │ +698 */ │ │ │ │ +699 void │ │ │ │ +_7_0_0 _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) │ │ │ │ +701 { _a_s_s_i_g_n(_____i_l.begin(), _____i_l.end()); } │ │ │ │ +702 │ │ │ │ +703 /// Get a copy of the memory allocation object. │ │ │ │ +704 allocator_type │ │ │ │ +_7_0_5 _g_e_t___a_l_l_o_c_a_t_o_r() _c_o_n_s_t noexcept │ │ │ │ +706 { return allocator_type(this->_M_get_Node_allocator()); } │ │ │ │ +707 │ │ │ │ +708 // 23.3.4.3 iterators: │ │ │ │ +709 │ │ │ │ +710 /** │ │ │ │ +711 * Returns a read/write iterator that points before the first element │ │ │ │ +712 * in the %forward_list. Iteration is done in ordinary element order. │ │ │ │ +713 */ │ │ │ │ +714 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +715 _i_t_e_r_a_t_o_r │ │ │ │ +_7_1_6 _b_e_f_o_r_e___b_e_g_i_n() noexcept │ │ │ │ +717 { return _i_t_e_r_a_t_o_r(&this->_M_impl._M_head); } │ │ │ │ +718 │ │ │ │ +719 /** │ │ │ │ +720 * Returns a read-only (constant) iterator that points before the │ │ │ │ +721 * first element in the %forward_list. Iteration is done in ordinary │ │ │ │ +722 * element order. │ │ │ │ +723 */ │ │ │ │ +724 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +725 const_iterator │ │ │ │ +_7_2_6 _b_e_f_o_r_e___b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ +727 { return _c_o_n_s_t___i_t_e_r_a_t_o_r(&this->_M_impl._M_head); } │ │ │ │ +728 │ │ │ │ +729 /** │ │ │ │ +730 * Returns a read/write iterator that points to the first element │ │ │ │ +731 * in the %forward_list. Iteration is done in ordinary element order. │ │ │ │ +732 */ │ │ │ │ +733 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +734 _i_t_e_r_a_t_o_r │ │ │ │ +_7_3_5 _b_e_g_i_n() noexcept │ │ │ │ +736 { return _i_t_e_r_a_t_o_r(this->_M_impl._M_head._M_next); } │ │ │ │ +737 │ │ │ │ +738 /** │ │ │ │ +739 * Returns a read-only (constant) iterator that points to the first │ │ │ │ +740 * element in the %forward_list. Iteration is done in ordinary │ │ │ │ +741 * element order. │ │ │ │ +742 */ │ │ │ │ +743 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +744 const_iterator │ │ │ │ +_7_4_5 _b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ +746 { return _c_o_n_s_t___i_t_e_r_a_t_o_r(this->_M_impl._M_head._M_next); } │ │ │ │ +747 │ │ │ │ +748 /** │ │ │ │ +749 * Returns a read/write iterator that points one past the last │ │ │ │ +750 * element in the %forward_list. Iteration is done in ordinary │ │ │ │ +751 * element order. │ │ │ │ +752 */ │ │ │ │ +753 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +754 _i_t_e_r_a_t_o_r │ │ │ │ +_7_5_5 _e_n_d() noexcept │ │ │ │ +756 { return _i_t_e_r_a_t_o_r(nullptr); } │ │ │ │ +757 │ │ │ │ +758 /** │ │ │ │ +759 * Returns a read-only iterator that points one past the last │ │ │ │ +760 * element in the %forward_list. Iteration is done in ordinary │ │ │ │ +761 * element order. │ │ │ │ +762 */ │ │ │ │ +763 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +764 const_iterator │ │ │ │ +_7_6_5 _e_n_d() _c_o_n_s_t noexcept │ │ │ │ +766 { return _c_o_n_s_t___i_t_e_r_a_t_o_r(nullptr); } │ │ │ │ +767 │ │ │ │ +768 /** │ │ │ │ +769 * Returns a read-only (constant) iterator that points to the │ │ │ │ +770 * first element in the %forward_list. Iteration is done in ordinary │ │ │ │ +771 * element order. │ │ │ │ +772 */ │ │ │ │ +773 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +774 const_iterator │ │ │ │ +_7_7_5 _c_b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ +776 { return _c_o_n_s_t___i_t_e_r_a_t_o_r(this->_M_impl._M_head._M_next); } │ │ │ │ +777 │ │ │ │ +778 /** │ │ │ │ +779 * Returns a read-only (constant) iterator that points before the │ │ │ │ +780 * first element in the %forward_list. Iteration is done in ordinary │ │ │ │ +781 * element order. │ │ │ │ +782 */ │ │ │ │ +783 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +784 const_iterator │ │ │ │ +_7_8_5 _c_b_e_f_o_r_e___b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ +786 { return _c_o_n_s_t___i_t_e_r_a_t_o_r(&this->_M_impl._M_head); } │ │ │ │ +787 │ │ │ │ +788 /** │ │ │ │ +789 * Returns a read-only (constant) iterator that points one past │ │ │ │ +790 * the last element in the %forward_list. Iteration is done in │ │ │ │ +791 * ordinary element order. │ │ │ │ +792 */ │ │ │ │ +793 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +794 const_iterator │ │ │ │ +_7_9_5 _c_e_n_d() _c_o_n_s_t noexcept │ │ │ │ +796 { return _c_o_n_s_t___i_t_e_r_a_t_o_r(nullptr); } │ │ │ │ +797 │ │ │ │ +798 /** │ │ │ │ +799 * Returns true if the %forward_list is empty. (Thus begin() would │ │ │ │ +800 * equal end().) │ │ │ │ +801 */ │ │ │ │ +802 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +803 bool │ │ │ │ +_8_0_4 _e_m_p_t_y() _c_o_n_s_t noexcept │ │ │ │ +805 { return this->_M_impl._M_head._M_next == nullptr; } │ │ │ │ +806 │ │ │ │ +807 /** │ │ │ │ +808 * Returns the largest possible number of elements of %forward_list. │ │ │ │ +809 */ │ │ │ │ +810 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +811 size_type │ │ │ │ +_8_1_2 _m_a_x___s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ +813 { 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()); } │ │ │ │ +814 │ │ │ │ +815 // 23.3.4.4 element access: │ │ │ │ +816 │ │ │ │ +817 /** │ │ │ │ +818 * Returns a read/write reference to the data at the first │ │ │ │ +819 * element of the %forward_list. │ │ │ │ +820 */ │ │ │ │ +821 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +822 reference │ │ │ │ +_8_2_3 _f_r_o_n_t() │ │ │ │ +824 { │ │ │ │ +825 __glibcxx_requires_nonempty(); │ │ │ │ +826 ___N_o_d_e* _____f_r_o_n_t = static_cast<___N_o_d_e*>(this->_M_impl._M_head._M_next); │ │ │ │ +827 return *_____f_r_o_n_t->_M_valptr(); │ │ │ │ +828 } │ │ │ │ +829 │ │ │ │ +830 /** │ │ │ │ +831 * Returns a read-only (constant) reference to the data at the first │ │ │ │ +832 * element of the %forward_list. │ │ │ │ +833 */ │ │ │ │ +834 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +835 const_reference │ │ │ │ +_8_3_6 _f_r_o_n_t() const │ │ │ │ +837 { │ │ │ │ +838 __glibcxx_requires_nonempty(); │ │ │ │ +839 ___N_o_d_e* _____f_r_o_n_t = static_cast<___N_o_d_e*>(this->_M_impl._M_head._M_next); │ │ │ │ +840 return *_____f_r_o_n_t->_M_valptr(); │ │ │ │ +841 } │ │ │ │ +842 │ │ │ │ +843 // 23.3.4.5 modifiers: │ │ │ │ +844 │ │ │ │ +845 /** │ │ │ │ +846 * @brief Constructs object in %forward_list at the front of the │ │ │ │ +847 * list. │ │ │ │ +848 * @param __args Arguments. │ │ │ │ +849 * │ │ │ │ +850 * This function will insert an object of type Tp constructed │ │ │ │ +851 * with Tp(std::forward(args)...) at the front of the list │ │ │ │ +852 * Due to the nature of a %forward_list this operation can │ │ │ │ +853 * be done in constant time, and does not invalidate iterators │ │ │ │ +854 * and references. │ │ │ │ +855 */ │ │ │ │ +856 template │ │ │ │ +857#if __cplusplus > 201402L │ │ │ │ +858 reference │ │ │ │ +859#else │ │ │ │ +860 void │ │ │ │ +861#endif │ │ │ │ +_8_6_2 _e_m_p_l_a_c_e___f_r_o_n_t(___A_r_g_s&&... _____a_r_g_s) │ │ │ │ +863 { │ │ │ │ +864 this->_M_insert_after(_c_b_e_f_o_r_e___b_e_g_i_n(), │ │ │ │ +865 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); │ │ │ │ +866#if __cplusplus > 201402L │ │ │ │ +867 return _f_r_o_n_t(); │ │ │ │ +868#endif │ │ │ │ +869 } │ │ │ │ +870 │ │ │ │ +871 /** │ │ │ │ +872 * @brief Add data to the front of the %forward_list. │ │ │ │ +873 * @param __val Data to be added. │ │ │ │ +874 * │ │ │ │ +875 * This is a typical stack operation. The function creates an │ │ │ │ +876 * element at the front of the %forward_list and assigns the given │ │ │ │ +877 * data to it. Due to the nature of a %forward_list this operation │ │ │ │ +878 * can be done in constant time, and does not invalidate iterators │ │ │ │ +879 * and references. │ │ │ │ +880 */ │ │ │ │ +881 void │ │ │ │ +_8_8_2 _p_u_s_h___f_r_o_n_t(const _Tp& __val) │ │ │ │ +883 { this->_M_insert_after(_c_b_e_f_o_r_e___b_e_g_i_n(), __val); } │ │ │ │ +884 │ │ │ │ +885 /** │ │ │ │ +886 * │ │ │ │ +887 */ │ │ │ │ +888 void │ │ │ │ +889 _p_u_s_h___f_r_o_n_t(_Tp&& __val) │ │ │ │ +890 { this->_M_insert_after(_c_b_e_f_o_r_e___b_e_g_i_n(), _s_t_d_:_:_m_o_v_e(__val)); } │ │ │ │ +891 │ │ │ │ +892 /** │ │ │ │ +893 * @brief Removes first element. │ │ │ │ +894 * │ │ │ │ +895 * This is a typical stack operation. It shrinks the %forward_list │ │ │ │ +896 * by one. Due to the nature of a %forward_list this operation can │ │ │ │ +897 * be done in constant time, and only invalidates iterators/references │ │ │ │ +898 * to the element being removed. │ │ │ │ +899 * │ │ │ │ +900 * Note that no data is returned, and if the first element's data │ │ │ │ +901 * is needed, it should be retrieved before pop_front() is │ │ │ │ +902 * called. │ │ │ │ +903 */ │ │ │ │ +904 void │ │ │ │ +_9_0_5 _p_o_p___f_r_o_n_t() │ │ │ │ +906 { this->_M_erase_after(&this->_M_impl._M_head); } │ │ │ │ +907 │ │ │ │ +908 /** │ │ │ │ +909 * @brief Constructs object in %forward_list after the specified │ │ │ │ +910 * iterator. │ │ │ │ +911 * @param __pos A const_iterator into the %forward_list. │ │ │ │ +912 * @param __args Arguments. │ │ │ │ +913 * @return An iterator that points to the inserted data. │ │ │ │ +914 * │ │ │ │ +915 * This function will insert an object of type T constructed │ │ │ │ +916 * with T(std::forward(args)...) after the specified │ │ │ │ +917 * location. Due to the nature of a %forward_list this operation can │ │ │ │ +918 * be done in constant time, and does not invalidate iterators │ │ │ │ +919 * and references. │ │ │ │ +920 */ │ │ │ │ +921 template │ │ │ │ +922 _i_t_e_r_a_t_o_r │ │ │ │ +_9_2_3 _e_m_p_l_a_c_e___a_f_t_e_r(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s, ___A_r_g_s&&... _____a_r_g_s) │ │ │ │ +924 { return _i_t_e_r_a_t_o_r(this->_M_insert_after(_____p_o_s, │ │ │ │ +925 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...)); } │ │ │ │ +926 │ │ │ │ +927 /** │ │ │ │ +928 * @brief Inserts given value into %forward_list after specified │ │ │ │ +929 * iterator. │ │ │ │ +930 * @param __pos An iterator into the %forward_list. │ │ │ │ +931 * @param __val Data to be inserted. │ │ │ │ +932 * @return An iterator that points to the inserted data. │ │ │ │ +933 * │ │ │ │ +934 * This function will insert a copy of the given value after │ │ │ │ +935 * the specified location. Due to the nature of a %forward_list this │ │ │ │ +936 * operation can be done in constant time, and does not │ │ │ │ +937 * invalidate iterators and references. │ │ │ │ +938 */ │ │ │ │ +939 _i_t_e_r_a_t_o_r │ │ │ │ +_9_4_0 _i_n_s_e_r_t___a_f_t_e_r(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s, const _Tp& __val) │ │ │ │ +941 { return _i_t_e_r_a_t_o_r(this->_M_insert_after(_____p_o_s, __val)); } │ │ │ │ +942 │ │ │ │ +943 /** │ │ │ │ +944 * │ │ │ │ +945 */ │ │ │ │ +946 _i_t_e_r_a_t_o_r │ │ │ │ +947 _i_n_s_e_r_t___a_f_t_e_r(const_iterator _____p_o_s, _Tp&& __val) │ │ │ │ +948 { return _i_t_e_r_a_t_o_r(this->_M_insert_after(_____p_o_s, _s_t_d_:_:_m_o_v_e(__val))); } │ │ │ │ +949 │ │ │ │ +950 /** │ │ │ │ +951 * @brief Inserts a number of copies of given data into the │ │ │ │ +952 * %forward_list. │ │ │ │ +953 * @param __pos An iterator into the %forward_list. │ │ │ │ +954 * @param __n Number of elements to be inserted. │ │ │ │ +955 * @param __val Data to be inserted. │ │ │ │ +956 * @return An iterator pointing to the last inserted copy of │ │ │ │ +957 * @a val or @a pos if @a n == 0. │ │ │ │ +958 * │ │ │ │ +959 * This function will insert a specified number of copies of the │ │ │ │ +960 * given data after the location specified by @a pos. │ │ │ │ +961 * │ │ │ │ +962 * This operation is linear in the number of elements inserted and │ │ │ │ +963 * does not invalidate iterators and references. │ │ │ │ +964 */ │ │ │ │ +965 iterator │ │ │ │ +966 _i_n_s_e_r_t___a_f_t_e_r(const_iterator __pos, size_type __n, const _Tp& __val); │ │ │ │ +967 │ │ │ │ +968 /** │ │ │ │ +969 * @brief Inserts a range into the %forward_list. │ │ │ │ +970 * @param __pos An iterator into the %forward_list. │ │ │ │ +971 * @param __first An input iterator. │ │ │ │ +972 * @param __last An input iterator. │ │ │ │ +973 * @return An iterator pointing to the last inserted element or │ │ │ │ +974 * @a __pos if @a __first == @a __last. │ │ │ │ +975 * │ │ │ │ +976 * This function will insert copies of the data in the range │ │ │ │ +977 * [@a __first,@a __last) into the %forward_list after the │ │ │ │ +978 * location specified by @a __pos. │ │ │ │ +979 * │ │ │ │ +980 * This operation is linear in the number of elements inserted and │ │ │ │ +981 * does not invalidate iterators and references. │ │ │ │ +982 */ │ │ │ │ +983 template> │ │ │ │ +985 iterator │ │ │ │ +986 _i_n_s_e_r_t___a_f_t_e_r(const_iterator __pos, │ │ │ │ +987 _InputIterator __first, _InputIterator __last); │ │ │ │ +988 │ │ │ │ +989 /** │ │ │ │ +990 * @brief Inserts the contents of an initializer_list into │ │ │ │ +991 * %forward_list after the specified iterator. │ │ │ │ +992 * @param __pos An iterator into the %forward_list. │ │ │ │ +993 * @param __il An initializer_list of value_type. │ │ │ │ +994 * @return An iterator pointing to the last inserted element │ │ │ │ +995 * or @a __pos if @a __il is empty. │ │ │ │ +996 * │ │ │ │ +997 * This function will insert copies of the data in the │ │ │ │ +998 * initializer_list @a __il into the %forward_list before the location │ │ │ │ +999 * specified by @a __pos. │ │ │ │ +1000 * │ │ │ │ +1001 * This operation is linear in the number of elements inserted and │ │ │ │ +1002 * does not invalidate iterators and references. │ │ │ │ +1003 */ │ │ │ │ +1004 iterator │ │ │ │ +_1_0_0_5 _i_n_s_e_r_t___a_f_t_e_r(_c_o_n_s_t___i_t_e_r_a_t_o_r _____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) │ │ │ │ +1006 { return _i_n_s_e_r_t___a_f_t_e_r(_____p_o_s, _____i_l.begin(), _____i_l.end()); } │ │ │ │ +1007 │ │ │ │ +1008 /** │ │ │ │ +1009 * @brief Removes the element pointed to by the iterator following │ │ │ │ +1010 * @c pos. │ │ │ │ +1011 * @param __pos Iterator pointing before element to be erased. │ │ │ │ +1012 * @return An iterator pointing to the element following the one │ │ │ │ +1013 * that was erased, or end() if no such element exists. │ │ │ │ +1014 * │ │ │ │ +1015 * This function will erase the element at the given position and │ │ │ │ +1016 * thus shorten the %forward_list by one. │ │ │ │ +1017 * │ │ │ │ +1018 * Due to the nature of a %forward_list this operation can be done │ │ │ │ +1019 * in constant time, and only invalidates iterators/references to │ │ │ │ +1020 * the element being removed. The user is also cautioned that │ │ │ │ +1021 * this function only erases the element, and that if the element │ │ │ │ +1022 * is itself a pointer, the pointed-to memory is not touched in │ │ │ │ +1023 * any way. Managing the pointer is the user's responsibility. │ │ │ │ +1024 */ │ │ │ │ +1025 _i_t_e_r_a_t_o_r │ │ │ │ +_1_0_2_6 _e_r_a_s_e___a_f_t_e_r(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s) │ │ │ │ +1027 { return _i_t_e_r_a_t_o_r(this->_M_erase_after(const_cast<___N_o_d_e___b_a_s_e*> │ │ │ │ +1028 (_____p_o_s._M_node))); } │ │ │ │ +1029 │ │ │ │ +1030 /** │ │ │ │ +1031 * @brief Remove a range of elements. │ │ │ │ +1032 * @param __pos Iterator pointing before the first element to be │ │ │ │ +1033 * erased. │ │ │ │ +1034 * @param __last Iterator pointing to one past the last element to be │ │ │ │ +1035 * erased. │ │ │ │ +1036 * @return @ __last. │ │ │ │ +1037 * │ │ │ │ +1038 * This function will erase the elements in the range │ │ │ │ +1039 * @a (__pos,__last) and shorten the %forward_list accordingly. │ │ │ │ +1040 * │ │ │ │ +1041 * This operation is linear time in the size of the range and only │ │ │ │ +1042 * invalidates iterators/references to the element being removed. │ │ │ │ +1043 * The user is also cautioned that this function only erases the │ │ │ │ +1044 * elements, and that if the elements themselves are pointers, the │ │ │ │ +1045 * pointed-to memory is not touched in any way. Managing the pointer │ │ │ │ +1046 * is the user's responsibility. │ │ │ │ 1047 */ │ │ │ │ -1048 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_0_4_9 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1050 { return _M_h.begin(__n); } │ │ │ │ -1051 │ │ │ │ -1052 ///@{ │ │ │ │ -1053 /** │ │ │ │ -1054 * @brief Returns a read-only (constant) iterator pointing to the first │ │ │ │ -1055 * bucket element. │ │ │ │ -1056 * @param __n The bucket index. │ │ │ │ -1057 * @return A read-only local iterator. │ │ │ │ -1058 */ │ │ │ │ -1059 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_0_6_0 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1061 { return _M_h.begin(__n); } │ │ │ │ -1062 │ │ │ │ -1063 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_0_6_4 _c_b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1065 { return _M_h.cbegin(__n); } │ │ │ │ -1066 ///@} │ │ │ │ -1067 │ │ │ │ -1068 /** │ │ │ │ -1069 * @brief Returns a read/write iterator pointing to one past the last │ │ │ │ -1070 * bucket elements. │ │ │ │ -1071 * @param __n The bucket index. │ │ │ │ -1072 * @return A read/write local iterator. │ │ │ │ -1073 */ │ │ │ │ -1074 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_0_7_5 _e_n_d(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1076 { return _M_h.end(__n); } │ │ │ │ -1077 │ │ │ │ -1078 ///@{ │ │ │ │ -1079 /** │ │ │ │ -1080 * @brief Returns a read-only (constant) iterator pointing to one past │ │ │ │ -1081 * the last bucket elements. │ │ │ │ -1082 * @param __n The bucket index. │ │ │ │ -1083 * @return A read-only local iterator. │ │ │ │ -1084 */ │ │ │ │ -1085 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_0_8_6 _e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1087 { return _M_h.end(__n); } │ │ │ │ -1088 │ │ │ │ -1089 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_0_9_0 _c_e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1091 { return _M_h.cend(__n); } │ │ │ │ -1092 ///@} │ │ │ │ -1093 │ │ │ │ -1094 // hash policy. │ │ │ │ -1095 │ │ │ │ -1096 /// Returns the average number of elements per bucket. │ │ │ │ -1097 float │ │ │ │ -_1_0_9_8 _l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -1099 { return _M_h.load_factor(); } │ │ │ │ -1100 │ │ │ │ -1101 /// Returns a positive number that the %unordered_map tries to keep the │ │ │ │ -1102 /// load factor less than or equal to. │ │ │ │ -1103 float │ │ │ │ -_1_1_0_4 _m_a_x___l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -1105 { return _M_h.max_load_factor(); } │ │ │ │ -1106 │ │ │ │ -1107 /** │ │ │ │ -1108 * @brief Change the %unordered_map maximum load factor. │ │ │ │ -1109 * @param __z The new maximum load factor. │ │ │ │ -1110 */ │ │ │ │ -1111 void │ │ │ │ -_1_1_1_2 _m_a_x___l_o_a_d___f_a_c_t_o_r(float _____z) │ │ │ │ -1113 { _M_h.max_load_factor(_____z); } │ │ │ │ -1114 │ │ │ │ -1115 /** │ │ │ │ -1116 * @brief May rehash the %unordered_map. │ │ │ │ -1117 * @param __n The new number of buckets. │ │ │ │ -1118 * │ │ │ │ -1119 * Rehash will occur only if the new number of buckets respect the │ │ │ │ -1120 * %unordered_map maximum load factor. │ │ │ │ -1121 */ │ │ │ │ -1122 void │ │ │ │ -_1_1_2_3 _r_e_h_a_s_h(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1124 { _M_h.rehash(__n); } │ │ │ │ -1125 │ │ │ │ -1126 /** │ │ │ │ -1127 * @brief Prepare the %unordered_map for a specified number of │ │ │ │ -1128 * elements. │ │ │ │ -1129 * @param __n Number of elements required. │ │ │ │ -1130 * │ │ │ │ -1131 * Same as rehash(ceil(n / max_load_factor())). │ │ │ │ -1132 */ │ │ │ │ -1133 void │ │ │ │ -_1_1_3_4 _r_e_s_e_r_v_e(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1135 { _M_h.reserve(__n); } │ │ │ │ +1048 _i_t_e_r_a_t_o_r │ │ │ │ +_1_0_4_9 _e_r_a_s_e___a_f_t_e_r(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s, _c_o_n_s_t___i_t_e_r_a_t_o_r __last) │ │ │ │ +1050 { return _i_t_e_r_a_t_o_r(this->_M_erase_after(const_cast<___N_o_d_e___b_a_s_e*> │ │ │ │ +1051 (_____p_o_s._M_node), │ │ │ │ +1052 const_cast<___N_o_d_e___b_a_s_e*> │ │ │ │ +1053 (__last._M_node))); } │ │ │ │ +1054 │ │ │ │ +1055 /** │ │ │ │ +1056 * @brief Swaps data with another %forward_list. │ │ │ │ +1057 * @param __list A %forward_list of the same element and allocator │ │ │ │ +1058 * types. │ │ │ │ +1059 * │ │ │ │ +1060 * This exchanges the elements between two lists in constant │ │ │ │ +1061 * time. Note that the global std::swap() function is │ │ │ │ +1062 * specialized such that std::swap(l1,l2) will feed to this │ │ │ │ +1063 * function. │ │ │ │ +1064 * │ │ │ │ +1065 * Whether the allocators are swapped depends on the allocator traits. │ │ │ │ +1066 */ │ │ │ │ +1067 void │ │ │ │ +_1_0_6_8 _s_w_a_p(_f_o_r_w_a_r_d___l_i_s_t& _____l_i_s_t) noexcept │ │ │ │ +1069 { │ │ │ │ +1070 std::swap(this->_M_impl._M_head._M_next, │ │ │ │ +1071 _____l_i_s_t._M_impl._M_head._M_next); │ │ │ │ +1072 _Node_alloc_traits::_S_on_swap(this->_M_get_Node_allocator(), │ │ │ │ +1073 _____l_i_s_t._M_get_Node_allocator()); │ │ │ │ +1074 } │ │ │ │ +1075 │ │ │ │ +1076 /** │ │ │ │ +1077 * @brief Resizes the %forward_list to the specified number of │ │ │ │ +1078 * elements. │ │ │ │ +1079 * @param __sz Number of elements the %forward_list should contain. │ │ │ │ +1080 * │ │ │ │ +1081 * This function will %resize the %forward_list to the specified │ │ │ │ +1082 * number of elements. If the number is smaller than the │ │ │ │ +1083 * %forward_list's current number of elements the %forward_list │ │ │ │ +1084 * is truncated, otherwise the %forward_list is extended and the │ │ │ │ +1085 * new elements are default constructed. │ │ │ │ +1086 */ │ │ │ │ +1087 void │ │ │ │ +1088 _r_e_s_i_z_e(size_type _____s_z); │ │ │ │ +1089 │ │ │ │ +1090 /** │ │ │ │ +1091 * @brief Resizes the %forward_list to the specified number of │ │ │ │ +1092 * elements. │ │ │ │ +1093 * @param __sz Number of elements the %forward_list should contain. │ │ │ │ +1094 * @param __val Data with which new elements should be populated. │ │ │ │ +1095 * │ │ │ │ +1096 * This function will %resize the %forward_list to the specified │ │ │ │ +1097 * number of elements. If the number is smaller than the │ │ │ │ +1098 * %forward_list's current number of elements the %forward_list │ │ │ │ +1099 * is truncated, otherwise the %forward_list is extended and new │ │ │ │ +1100 * elements are populated with given data. │ │ │ │ +1101 */ │ │ │ │ +1102 void │ │ │ │ +1103 _r_e_s_i_z_e(size_type _____s_z, const value_type& __val); │ │ │ │ +1104 │ │ │ │ +1105 /** │ │ │ │ +1106 * @brief Erases all the elements. │ │ │ │ +1107 * │ │ │ │ +1108 * Note that this function only erases │ │ │ │ +1109 * the elements, and that if the elements themselves are │ │ │ │ +1110 * pointers, the pointed-to memory is not touched in any way. │ │ │ │ +1111 * Managing the pointer is the user's responsibility. │ │ │ │ +1112 */ │ │ │ │ +1113 void │ │ │ │ +_1_1_1_4 _c_l_e_a_r() noexcept │ │ │ │ +1115 { this->_M_erase_after(&this->_M_impl._M_head, nullptr); } │ │ │ │ +1116 │ │ │ │ +1117 // 23.3.4.6 forward_list operations: │ │ │ │ +1118 │ │ │ │ +1119 /** │ │ │ │ +1120 * @brief Insert contents of another %forward_list. │ │ │ │ +1121 * @param __pos Iterator referencing the element to insert after. │ │ │ │ +1122 * @param __list Source list. │ │ │ │ +1123 * │ │ │ │ +1124 * The elements of @a list are inserted in constant time after │ │ │ │ +1125 * the element referenced by @a pos. @a list becomes an empty │ │ │ │ +1126 * list. │ │ │ │ +1127 * │ │ │ │ +1128 * Requires this != @a x. │ │ │ │ +1129 */ │ │ │ │ +1130 void │ │ │ │ +_1_1_3_1 _s_p_l_i_c_e___a_f_t_e_r(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s, _f_o_r_w_a_r_d___l_i_s_t&& _____l_i_s_t) noexcept │ │ │ │ +1132 { │ │ │ │ +1133 if (!_____l_i_s_t.empty()) │ │ │ │ +1134 _M_splice_after(_____p_o_s, _____l_i_s_t.before_begin(), _____l_i_s_t.end()); │ │ │ │ +1135 } │ │ │ │ 1136 │ │ │ │ -1137 template │ │ │ │ -1139 friend bool │ │ │ │ -1140 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_>&, │ │ │ │ -1141 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_>&); │ │ │ │ -1142 }; │ │ │ │ -1143 │ │ │ │ -1144#if __cpp_deduction_guides >= 201606 │ │ │ │ -1145 │ │ │ │ -1146 template>, │ │ │ │ -1148 typename _Pred = equal_to<__iter_key_t<_InputIterator>>, │ │ │ │ -1149 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, │ │ │ │ -1150 typename = _RequireInputIter<_InputIterator>, │ │ │ │ -1151 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -1152 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -1153 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1154 unordered_map(_InputIterator, _InputIterator, │ │ │ │ -1155 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 = {}, │ │ │ │ -1156 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ -1157 -> unordered_map<__iter_key_t<_InputIterator>, │ │ │ │ -1158 __iter_val_t<_InputIterator>, │ │ │ │ -1159 _Hash, _Pred, _Allocator>; │ │ │ │ -1160 │ │ │ │ -1161 template, │ │ │ │ -1162 typename _Pred = equal_to<_Key>, │ │ │ │ -1163 typename _Allocator = allocator>, │ │ │ │ -1164 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -1165 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -1166 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1167 unordered_map(initializer_list>, │ │ │ │ -1168 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 = {}, │ │ │ │ -1169 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ -1170 -> unordered_map<_Key, _Tp, _Hash, _Pred, _Allocator>; │ │ │ │ -1171 │ │ │ │ -1172 template, │ │ │ │ -1174 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1175 unordered_map(_InputIterator, _InputIterator, │ │ │ │ -1176 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) │ │ │ │ -1177 -> unordered_map<__iter_key_t<_InputIterator>, │ │ │ │ -1178 __iter_val_t<_InputIterator>, │ │ │ │ -1179 hash<__iter_key_t<_InputIterator>>, │ │ │ │ -1180 equal_to<__iter_key_t<_InputIterator>>, │ │ │ │ -1181 _Allocator>; │ │ │ │ -1182 │ │ │ │ -1183 template, │ │ │ │ -1185 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1186 unordered_map(_InputIterator, _InputIterator, _Allocator) │ │ │ │ -1187 -> unordered_map<__iter_key_t<_InputIterator>, │ │ │ │ -1188 __iter_val_t<_InputIterator>, │ │ │ │ -1189 hash<__iter_key_t<_InputIterator>>, │ │ │ │ -1190 equal_to<__iter_key_t<_InputIterator>>, │ │ │ │ -1191 _Allocator>; │ │ │ │ -1192 │ │ │ │ -1193 template, │ │ │ │ -1195 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -1196 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1197 unordered_map(_InputIterator, _InputIterator, │ │ │ │ -1198 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, │ │ │ │ -1199 _Hash, _Allocator) │ │ │ │ -1200 -> unordered_map<__iter_key_t<_InputIterator>, │ │ │ │ -1201 __iter_val_t<_InputIterator>, _Hash, │ │ │ │ -1202 equal_to<__iter_key_t<_InputIterator>>, _Allocator>; │ │ │ │ -1203 │ │ │ │ -1204 template> │ │ │ │ -1206 unordered_map(initializer_list>, │ │ │ │ -1207 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, │ │ │ │ -1208 _Allocator) │ │ │ │ -1209 -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; │ │ │ │ +1137 void │ │ │ │ +1138 _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& _____l_i_s_t) noexcept │ │ │ │ +1139 { _s_p_l_i_c_e___a_f_t_e_r(_____p_o_s, _s_t_d_:_:_m_o_v_e(_____l_i_s_t)); } │ │ │ │ +1140 │ │ │ │ +1141 /** │ │ │ │ +1142 * @brief Insert element from another %forward_list. │ │ │ │ +1143 * @param __pos Iterator referencing the element to insert after. │ │ │ │ +1144 * @param __list Source list. │ │ │ │ +1145 * @param __i Iterator referencing the element before the element │ │ │ │ +1146 * to move. │ │ │ │ +1147 * │ │ │ │ +1148 * Removes the element in list @a list referenced by @a i and │ │ │ │ +1149 * inserts it into the current list after @a pos. │ │ │ │ +1150 */ │ │ │ │ +1151 void │ │ │ │ +1152 _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, │ │ │ │ +1153 const_iterator __i) noexcept; │ │ │ │ +1154 │ │ │ │ +1155 void │ │ │ │ +1156 _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, │ │ │ │ +1157 const_iterator __i) noexcept │ │ │ │ +1158 { _s_p_l_i_c_e___a_f_t_e_r(__pos, _s_t_d_:_:_m_o_v_e(__list), __i); } │ │ │ │ +1159 │ │ │ │ +1160 /** │ │ │ │ +1161 * @brief Insert range from another %forward_list. │ │ │ │ +1162 * @param __pos Iterator referencing the element to insert after. │ │ │ │ +1163 * @param __list Source list. │ │ │ │ +1164 * @param __before Iterator referencing before the start of range │ │ │ │ +1165 * in list. │ │ │ │ +1166 * @param __last Iterator referencing the end of range in list. │ │ │ │ +1167 * │ │ │ │ +1168 * Removes elements in the range (__before,__last) and inserts them │ │ │ │ +1169 * after @a __pos in constant time. │ │ │ │ +1170 * │ │ │ │ +1171 * Undefined if @a __pos is in (__before,__last). │ │ │ │ +1172 * @{ │ │ │ │ +1173 */ │ │ │ │ +1174 void │ │ │ │ +_1_1_7_5 _s_p_l_i_c_e___a_f_t_e_r(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s, _f_o_r_w_a_r_d___l_i_s_t&&, │ │ │ │ +1176 _c_o_n_s_t___i_t_e_r_a_t_o_r _____b_e_f_o_r_e, _c_o_n_s_t___i_t_e_r_a_t_o_r __last) noexcept │ │ │ │ +1177 { _M_splice_after(_____p_o_s, _____b_e_f_o_r_e, __last); } │ │ │ │ +1178 │ │ │ │ +1179 void │ │ │ │ +_1_1_8_0 _s_p_l_i_c_e___a_f_t_e_r(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s, _f_o_r_w_a_r_d___l_i_s_t&, │ │ │ │ +1181 _c_o_n_s_t___i_t_e_r_a_t_o_r _____b_e_f_o_r_e, _c_o_n_s_t___i_t_e_r_a_t_o_r __last) noexcept │ │ │ │ +1182 { _M_splice_after(_____p_o_s, _____b_e_f_o_r_e, __last); } │ │ │ │ +1183 /// @} │ │ │ │ +1184 │ │ │ │ +1185 private: │ │ │ │ +1186#ifdef __glibcxx_list_remove_return_type // C++20 && HOSTED │ │ │ │ +1187 using __remove_return_type = size_type; │ │ │ │ +1188# define _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG \ │ │ │ │ +1189 __attribute__((__abi_tag__("__cxx20"))) │ │ │ │ +1190#else │ │ │ │ +1191 using __remove_return_type = _v_o_i_d; │ │ │ │ +1192# define _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG │ │ │ │ +1193#endif │ │ │ │ +1194 public: │ │ │ │ +1195 │ │ │ │ +1196 /** │ │ │ │ +1197 * @brief Remove all elements equal to value. │ │ │ │ +1198 * @param __val The value to remove. │ │ │ │ +1199 * │ │ │ │ +1200 * Removes every element in the list equal to @a __val. │ │ │ │ +1201 * Remaining elements stay in list order. Note that this │ │ │ │ +1202 * function only erases the elements, and that if the elements │ │ │ │ +1203 * themselves are pointers, the pointed-to memory is not │ │ │ │ +1204 * touched in any way. Managing the pointer is the user's │ │ │ │ +1205 * responsibility. │ │ │ │ +1206 */ │ │ │ │ +1207 _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG │ │ │ │ +1208 __remove_return_type │ │ │ │ +1209 _r_e_m_o_v_e(const _Tp& __val); │ │ │ │ 1210 │ │ │ │ -1211 template> │ │ │ │ -1213 unordered_map(initializer_list>, _Allocator) │ │ │ │ -1214 -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; │ │ │ │ -1215 │ │ │ │ -1216 template, │ │ │ │ -1218 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1219 unordered_map(initializer_list>, │ │ │ │ -1220 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, │ │ │ │ -1221 _Hash, _Allocator) │ │ │ │ -1222 -> unordered_map<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>; │ │ │ │ -1223 │ │ │ │ -1224#endif │ │ │ │ +1211 /** │ │ │ │ +1212 * @brief Remove all elements satisfying a predicate. │ │ │ │ +1213 * @param __pred Unary predicate function or object. │ │ │ │ +1214 * │ │ │ │ +1215 * Removes every element in the list for which the predicate │ │ │ │ +1216 * returns true. Remaining elements stay in list order. Note │ │ │ │ +1217 * that this function only erases the elements, and that if the │ │ │ │ +1218 * elements themselves are pointers, the pointed-to memory is │ │ │ │ +1219 * not touched in any way. Managing the pointer is the user's │ │ │ │ +1220 * responsibility. │ │ │ │ +1221 */ │ │ │ │ +1222 template │ │ │ │ +1223 __remove_return_type │ │ │ │ +_1_2_2_4 _r_e_m_o_v_e___i_f(___P_r_e_d _____p_r_e_d); │ │ │ │ 1225 │ │ │ │ 1226 /** │ │ │ │ -1227 * @brief A standard container composed of equivalent keys │ │ │ │ -1228 * (possibly containing multiple of each key value) that associates │ │ │ │ -1229 * values of another type with the keys. │ │ │ │ -1230 * │ │ │ │ -1231 * @ingroup unordered_associative_containers │ │ │ │ -1232 * @headerfile unordered_map │ │ │ │ -1233 * @since C++11 │ │ │ │ -1234 * │ │ │ │ -1235 * @tparam _Key Type of key objects. │ │ │ │ -1236 * @tparam _Tp Type of mapped objects. │ │ │ │ -1237 * @tparam _Hash Hashing function object type, defaults to hash<_Value>. │ │ │ │ -1238 * @tparam _Pred Predicate function object type, defaults │ │ │ │ -1239 * to equal_to<_Value>. │ │ │ │ -1240 * @tparam _Alloc Allocator type, defaults to │ │ │ │ -1241 * std::allocator>. │ │ │ │ -1242 * │ │ │ │ -1243 * Meets the requirements of a container, and │ │ │ │ -1244 * unordered associative container │ │ │ │ -1245 * │ │ │ │ -1246 * The resulting value type of the container is std::pair. │ │ │ │ -1247 * │ │ │ │ -1248 * Base is _Hashtable, dispatched at compile time via template │ │ │ │ -1249 * alias __ummap_hashtable. │ │ │ │ -1250 */ │ │ │ │ -1251 template, │ │ │ │ -1253 typename _Pred = equal_to<_Key>, │ │ │ │ -1254 typename _Alloc = allocator>> │ │ │ │ -_1_2_5_5 class _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ -1256 { │ │ │ │ -1257 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; │ │ │ │ -1258 ___H_a_s_h_t_a_b_l_e _M_h; │ │ │ │ -1259 │ │ │ │ -1260 public: │ │ │ │ -1261 // typedefs: │ │ │ │ -1262 ///@{ │ │ │ │ -1263 /// Public typedefs. │ │ │ │ -_1_2_6_4 typedef typename _Hashtable::key_type _k_e_y___t_y_p_e; │ │ │ │ -_1_2_6_5 typedef typename _Hashtable::value_type _v_a_l_u_e___t_y_p_e; │ │ │ │ -_1_2_6_6 typedef typename _Hashtable::mapped_type _m_a_p_p_e_d___t_y_p_e; │ │ │ │ -_1_2_6_7 typedef typename _Hashtable::hasher _h_a_s_h_e_r; │ │ │ │ -_1_2_6_8 typedef typename _Hashtable::key_equal _k_e_y___e_q_u_a_l; │ │ │ │ -_1_2_6_9 typedef typename _Hashtable::allocator_type _a_l_l_o_c_a_t_o_r___t_y_p_e; │ │ │ │ -1270 ///@} │ │ │ │ +1227 * @brief Remove consecutive duplicate elements. │ │ │ │ +1228 * │ │ │ │ +1229 * For each consecutive set of elements with the same value, │ │ │ │ +1230 * remove all but the first one. Remaining elements stay in │ │ │ │ +1231 * list order. Note that this function only erases the │ │ │ │ +1232 * elements, and that if the elements themselves are pointers, │ │ │ │ +1233 * the pointed-to memory is not touched in any way. Managing │ │ │ │ +1234 * the pointer is the user's responsibility. │ │ │ │ +1235 */ │ │ │ │ +1236 _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG │ │ │ │ +1237 __remove_return_type │ │ │ │ +_1_2_3_8 _u_n_i_q_u_e() │ │ │ │ +1239 { return _u_n_i_q_u_e(_s_t_d_:_:_e_q_u_a_l___t_o_<___T_p_>()); } │ │ │ │ +1240 │ │ │ │ +1241#undef _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG │ │ │ │ +1242 │ │ │ │ +1243 /** │ │ │ │ +1244 * @brief Remove consecutive elements satisfying a predicate. │ │ │ │ +1245 * @param __binary_pred Binary predicate function or object. │ │ │ │ +1246 * │ │ │ │ +1247 * For each consecutive set of elements [first,last) that │ │ │ │ +1248 * satisfy predicate(first,i) where i is an iterator in │ │ │ │ +1249 * [first,last), remove all but the first one. Remaining │ │ │ │ +1250 * elements stay in list order. Note that this function only │ │ │ │ +1251 * erases the elements, and that if the elements themselves are │ │ │ │ +1252 * pointers, the pointed-to memory is not touched in any way. │ │ │ │ +1253 * Managing the pointer is the user's responsibility. │ │ │ │ +1254 */ │ │ │ │ +1255 template │ │ │ │ +1256 __remove_return_type │ │ │ │ +_1_2_5_7 _u_n_i_q_u_e(___B_i_n_P_r_e_d _____b_i_n_a_r_y___p_r_e_d); │ │ │ │ +1258 │ │ │ │ +1259 /** │ │ │ │ +1260 * @brief Merge sorted lists. │ │ │ │ +1261 * @param __list Sorted list to merge. │ │ │ │ +1262 * │ │ │ │ +1263 * Assumes that both @a list and this list are sorted according to │ │ │ │ +1264 * operator<(). Merges elements of @a __list into this list in │ │ │ │ +1265 * sorted order, leaving @a __list empty when complete. Elements in │ │ │ │ +1266 * this list precede elements in @a __list that are equal. │ │ │ │ +1267 */ │ │ │ │ +1268 void │ │ │ │ +_1_2_6_9 _m_e_r_g_e(_f_o_r_w_a_r_d___l_i_s_t&& _____l_i_s_t) │ │ │ │ +1270 { _m_e_r_g_e(_s_t_d_:_:_m_o_v_e(_____l_i_s_t), _s_t_d_:_:_l_e_s_s_<___T_p_>()); } │ │ │ │ 1271 │ │ │ │ -1272 ///@{ │ │ │ │ -1273 /// Iterator-related typedefs. │ │ │ │ -_1_2_7_4 typedef typename _Hashtable::pointer _p_o_i_n_t_e_r; │ │ │ │ -_1_2_7_5 typedef typename _Hashtable::const_pointer _c_o_n_s_t___p_o_i_n_t_e_r; │ │ │ │ -_1_2_7_6 typedef typename _Hashtable::reference _r_e_f_e_r_e_n_c_e; │ │ │ │ -_1_2_7_7 typedef typename _Hashtable::const_reference _c_o_n_s_t___r_e_f_e_r_e_n_c_e; │ │ │ │ -_1_2_7_8 typedef typename _Hashtable::iterator _i_t_e_r_a_t_o_r; │ │ │ │ -_1_2_7_9 typedef typename _Hashtable::const_iterator _c_o_n_s_t___i_t_e_r_a_t_o_r; │ │ │ │ -_1_2_8_0 typedef typename _Hashtable::local_iterator _l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ -_1_2_8_1 typedef typename _Hashtable::const_local_iterator _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r; │ │ │ │ -_1_2_8_2 typedef typename _Hashtable::size_type _s_i_z_e___t_y_p_e; │ │ │ │ -_1_2_8_3 typedef typename _Hashtable::difference_type _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ -1284 ///@} │ │ │ │ -1285 │ │ │ │ -1286#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -1287 using node_type = typename _Hashtable::node_type; │ │ │ │ -1288#endif │ │ │ │ -1289 │ │ │ │ -1290 //construct/destroy/copy │ │ │ │ -1291 │ │ │ │ -1292 /// Default constructor. │ │ │ │ -_1_2_9_3 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p() = default; │ │ │ │ -1294 │ │ │ │ -1295 /** │ │ │ │ -1296 * @brief Default constructor creates no elements. │ │ │ │ -1297 * @param __n Mnimal initial number of buckets. │ │ │ │ -1298 * @param __hf A hash functor. │ │ │ │ -1299 * @param __eql A key equality functor. │ │ │ │ -1300 * @param __a An allocator object. │ │ │ │ +1272 void │ │ │ │ +1273 _m_e_r_g_e(_f_o_r_w_a_r_d___l_i_s_t& _____l_i_s_t) │ │ │ │ +1274 { _m_e_r_g_e(_s_t_d_:_:_m_o_v_e(_____l_i_s_t)); } │ │ │ │ +1275 │ │ │ │ +1276 /** │ │ │ │ +1277 * @brief Merge sorted lists according to comparison function. │ │ │ │ +1278 * @param __list Sorted list to merge. │ │ │ │ +1279 * @param __comp Comparison function defining sort order. │ │ │ │ +1280 * │ │ │ │ +1281 * Assumes that both @a __list and this list are sorted according to │ │ │ │ +1282 * comp. Merges elements of @a __list into this list │ │ │ │ +1283 * in sorted order, leaving @a __list empty when complete. Elements │ │ │ │ +1284 * in this list precede elements in @a __list that are equivalent │ │ │ │ +1285 * according to comp(). │ │ │ │ +1286 */ │ │ │ │ +1287 template │ │ │ │ +1288 void │ │ │ │ +1289 _m_e_r_g_e(_f_o_r_w_a_r_d___l_i_s_t&& __list, _Comp __comp); │ │ │ │ +1290 │ │ │ │ +1291 template │ │ │ │ +1292 void │ │ │ │ +1293 _m_e_r_g_e(_f_o_r_w_a_r_d___l_i_s_t& __list, _Comp __comp) │ │ │ │ +1294 { _m_e_r_g_e(_s_t_d_:_:_m_o_v_e(__list), __comp); } │ │ │ │ +1295 │ │ │ │ +1296 /** │ │ │ │ +1297 * @brief Sort the elements of the list. │ │ │ │ +1298 * │ │ │ │ +1299 * Sorts the elements of this list in NlogN time. Equivalent │ │ │ │ +1300 * elements remain in list order. │ │ │ │ 1301 */ │ │ │ │ -1302 explicit │ │ │ │ -_1_3_0_3 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_s_i_z_e___t_y_p_e __n, │ │ │ │ -1304 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -1305 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ -1306 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()) │ │ │ │ -1307 : _M_h(__n, _____h_f, _____e_q_l, __a) │ │ │ │ -1308 { } │ │ │ │ -1309 │ │ │ │ -1310 /** │ │ │ │ -1311 * @brief Builds an %unordered_multimap from a range. │ │ │ │ -1312 * @param __first An input iterator. │ │ │ │ -1313 * @param __last An input iterator. │ │ │ │ -1314 * @param __n Minimal initial number of buckets. │ │ │ │ -1315 * @param __hf A hash functor. │ │ │ │ -1316 * @param __eql A key equality functor. │ │ │ │ -1317 * @param __a An allocator object. │ │ │ │ +1302 void │ │ │ │ +_1_3_0_3 _s_o_r_t() │ │ │ │ +1304 { _s_o_r_t(_s_t_d_:_:_l_e_s_s_<___T_p_>()); } │ │ │ │ +1305 │ │ │ │ +1306 /** │ │ │ │ +1307 * @brief Sort the forward_list using a comparison function. │ │ │ │ +1308 * │ │ │ │ +1309 * Sorts the elements of this list in NlogN time. Equivalent │ │ │ │ +1310 * elements remain in list order. │ │ │ │ +1311 */ │ │ │ │ +1312 template │ │ │ │ +1313 void │ │ │ │ +1314 _s_o_r_t(___C_o_m_p __comp); │ │ │ │ +1315 │ │ │ │ +1316 /** │ │ │ │ +1317 * @brief Reverse the elements in list. │ │ │ │ 1318 * │ │ │ │ -1319 * Create an %unordered_multimap consisting of copies of the elements │ │ │ │ -1320 * from [__first,__last). This is linear in N (where N is │ │ │ │ -1321 * distance(__first,__last)). │ │ │ │ -1322 */ │ │ │ │ -1323 template │ │ │ │ -_1_3_2_4 _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, │ │ │ │ -1325 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -1326 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -1327 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ -1328 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()) │ │ │ │ -1329 : _M_h(__first, __last, __n, _____h_f, _____e_q_l, __a) │ │ │ │ -1330 { } │ │ │ │ -1331 │ │ │ │ -1332 /// Copy constructor. │ │ │ │ -_1_3_3_3 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p&) = default; │ │ │ │ -1334 │ │ │ │ -1335 /// Move constructor. │ │ │ │ -_1_3_3_6 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p&&) = default; │ │ │ │ -1337 │ │ │ │ -1338 /** │ │ │ │ -1339 * @brief Creates an %unordered_multimap with no elements. │ │ │ │ -1340 * @param __a An allocator object. │ │ │ │ -1341 */ │ │ │ │ -1342 explicit │ │ │ │ -_1_3_4_3 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1344 : _M_h(__a) │ │ │ │ -1345 { } │ │ │ │ -1346 │ │ │ │ -1347 /* │ │ │ │ -1348 * @brief Copy constructor with allocator argument. │ │ │ │ -1349 * @param __uset Input %unordered_multimap to copy. │ │ │ │ -1350 * @param __a An allocator object. │ │ │ │ -1351 */ │ │ │ │ -1352 _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, │ │ │ │ -1353 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1354 : _M_h(_____u_m_m_a_p._M_h, __a) │ │ │ │ -1355 { } │ │ │ │ -1356 │ │ │ │ -1357 /* │ │ │ │ -1358 * @brief Move constructor with allocator argument. │ │ │ │ -1359 * @param __uset Input %unordered_multimap to move. │ │ │ │ -1360 * @param __a An allocator object. │ │ │ │ -1361 */ │ │ │ │ -1362 _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, │ │ │ │ -1363 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1364 noexcept( noexcept(_Hashtable(_s_t_d_:_:_m_o_v_e(__ummap._M_h), __a)) ) │ │ │ │ -1365 : _M_h(_s_t_d_:_:_m_o_v_e(__ummap._M_h), __a) │ │ │ │ -1366 { } │ │ │ │ -1367 │ │ │ │ -1368 /** │ │ │ │ -1369 * @brief Builds an %unordered_multimap from an initializer_list. │ │ │ │ -1370 * @param __l An initializer_list. │ │ │ │ -1371 * @param __n Minimal initial number of buckets. │ │ │ │ -1372 * @param __hf A hash functor. │ │ │ │ -1373 * @param __eql A key equality functor. │ │ │ │ -1374 * @param __a An allocator object. │ │ │ │ -1375 * │ │ │ │ -1376 * Create an %unordered_multimap consisting of copies of the elements in │ │ │ │ -1377 * the list. This is linear in N (where N is @a __l.size()). │ │ │ │ -1378 */ │ │ │ │ -_1_3_7_9 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> _____l, │ │ │ │ -1380 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -1381 const _h_a_s_h_e_r& _____h_f = _h_a_s_h_e_r(), │ │ │ │ -1382 const _k_e_y___e_q_u_a_l& _____e_q_l = _k_e_y___e_q_u_a_l(), │ │ │ │ -1383 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()) │ │ │ │ -1384 : _M_h(_____l, __n, _____h_f, _____e_q_l, __a) │ │ │ │ -1385 { } │ │ │ │ -1386 │ │ │ │ -1387 _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) │ │ │ │ -1388 : _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) │ │ │ │ -1389 { } │ │ │ │ -1390 │ │ │ │ -1391 _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, │ │ │ │ -1392 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1393 : _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) │ │ │ │ -1394 { } │ │ │ │ -1395 │ │ │ │ -1396 template │ │ │ │ -1397 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ -1398 _s_i_z_e___t_y_p_e __n, │ │ │ │ -1399 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1400 : _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) │ │ │ │ -1401 { } │ │ │ │ -1402 │ │ │ │ -1403 template │ │ │ │ -1404 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ -1405 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -1406 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1407 : _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) │ │ │ │ -1408 { } │ │ │ │ -1409 │ │ │ │ -1410 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(initializer_list __l, │ │ │ │ -1411 _s_i_z_e___t_y_p_e __n, │ │ │ │ -1412 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1413 : _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) │ │ │ │ -1414 { } │ │ │ │ -1415 │ │ │ │ -1416 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(initializer_list __l, │ │ │ │ -1417 _s_i_z_e___t_y_p_e __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -1418 const _a_l_l_o_c_a_t_o_r___t_y_p_e& __a) │ │ │ │ -1419 : _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) │ │ │ │ -1420 { } │ │ │ │ -1421 │ │ │ │ -1422 /// Copy assignment operator. │ │ │ │ -1423 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& │ │ │ │ -_1_4_2_4 _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; │ │ │ │ -1425 │ │ │ │ -1426 /// Move assignment operator. │ │ │ │ -1427 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& │ │ │ │ -_1_4_2_8 _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; │ │ │ │ -1429 │ │ │ │ -1430 /** │ │ │ │ -1431 * @brief %Unordered_multimap list assignment operator. │ │ │ │ -1432 * @param __l An initializer_list. │ │ │ │ -1433 * │ │ │ │ -1434 * This function fills an %unordered_multimap with copies of the │ │ │ │ -1435 * elements in the initializer list @a __l. │ │ │ │ -1436 * │ │ │ │ -1437 * Note that the assignment completely changes the %unordered_multimap │ │ │ │ -1438 * and that the resulting %unordered_multimap's size is the same as the │ │ │ │ -1439 * number of elements assigned. │ │ │ │ -1440 */ │ │ │ │ -1441 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& │ │ │ │ -_1_4_4_2 _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) │ │ │ │ -1443 { │ │ │ │ -1444 _M_h = _____l; │ │ │ │ -1445 return *this; │ │ │ │ -1446 } │ │ │ │ -1447 │ │ │ │ -1448 /// Returns the allocator object used by the %unordered_multimap. │ │ │ │ -1449 _a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ -_1_4_5_0 _g_e_t___a_l_l_o_c_a_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -1451 { return _M_h.get_allocator(); } │ │ │ │ -1452 │ │ │ │ -1453 // size and capacity: │ │ │ │ -1454 │ │ │ │ -1455 /// Returns true if the %unordered_multimap is empty. │ │ │ │ -1456 _GLIBCXX_NODISCARD bool │ │ │ │ -_1_4_5_7 _e_m_p_t_y() _c_o_n_s_t noexcept │ │ │ │ -1458 { return _M_h.empty(); } │ │ │ │ +1319 * Reverse the order of elements in the list in linear time. │ │ │ │ +1320 */ │ │ │ │ +1321 void │ │ │ │ +_1_3_2_2 _r_e_v_e_r_s_e() noexcept │ │ │ │ +1323 { this->_M_impl._M_head._M_reverse_after(); } │ │ │ │ +1324 │ │ │ │ +1325 private: │ │ │ │ +1326 // Called by the range constructor to implement [23.3.4.2]/9 │ │ │ │ +1327 template │ │ │ │ +1328 void │ │ │ │ +1329 _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); │ │ │ │ +1330 │ │ │ │ +1331 // Called by forward_list(n,v,a), and the range constructor when it │ │ │ │ +1332 // turns out to be the same thing. │ │ │ │ +1333 void │ │ │ │ +1334 _M_fill_initialize(size_type __n, const value_type& __value); │ │ │ │ +1335 │ │ │ │ +1336 // Called by splice_after and insert_after. │ │ │ │ +1337 _i_t_e_r_a_t_o_r │ │ │ │ +1338 _M_splice_after(const_iterator _____p_o_s, const_iterator _____b_e_f_o_r_e, │ │ │ │ +1339 const_iterator __last); │ │ │ │ +1340 │ │ │ │ +1341 // Called by forward_list(n). │ │ │ │ +1342 void │ │ │ │ +1343 _M_default_initialize(size_type __n); │ │ │ │ +1344 │ │ │ │ +1345 // Called by resize(sz). │ │ │ │ +1346 void │ │ │ │ +1347 _M_default_insert_after(const_iterator _____p_o_s, size_type __n); │ │ │ │ +1348 │ │ │ │ +1349 // Called by operator=(forward_list&&) │ │ │ │ +1350 void │ │ │ │ +1351 _M_move_assign(_f_o_r_w_a_r_d___l_i_s_t&& _____l_i_s_t, _t_r_u_e___t_y_p_e) noexcept │ │ │ │ +1352 { │ │ │ │ +1353 _c_l_e_a_r(); │ │ │ │ +1354 this->_M_impl._M_head._M_next = _____l_i_s_t._M_impl._M_head._M_next; │ │ │ │ +1355 _____l_i_s_t._M_impl._M_head._M_next = nullptr; │ │ │ │ +1356 _s_t_d_:_:_____a_l_l_o_c___o_n___m_o_v_e(this->_M_get_Node_allocator(), │ │ │ │ +1357 _____l_i_s_t._M_get_Node_allocator()); │ │ │ │ +1358 } │ │ │ │ +1359 │ │ │ │ +1360 // Called by operator=(forward_list&&) │ │ │ │ +1361 void │ │ │ │ +1362 _M_move_assign(_f_o_r_w_a_r_d___l_i_s_t&& __list, _f_a_l_s_e___t_y_p_e) │ │ │ │ +1363 { │ │ │ │ +1364 if (__list._M_get_Node_allocator() == this->_M_get_Node_allocator()) │ │ │ │ +1365 _M_move_assign(_s_t_d_:_:_m_o_v_e(__list), _t_r_u_e___t_y_p_e()); │ │ │ │ +1366 else │ │ │ │ +1367 // The rvalue's allocator cannot be moved, or is not equal, │ │ │ │ +1368 // so we need to individually move each element. │ │ │ │ +1369 this->_a_s_s_i_g_n(std::make_move_iterator(__list.begin()), │ │ │ │ +1370 std::make_move_iterator(__list.end())); │ │ │ │ +1371 } │ │ │ │ +1372 │ │ │ │ +1373 // Called by assign(_InputIterator, _InputIterator) if _Tp is │ │ │ │ +1374 // CopyAssignable. │ │ │ │ +1375 template │ │ │ │ +1376 void │ │ │ │ +1377 _M_assign(_InputIterator __first, _InputIterator __last, _t_r_u_e___t_y_p_e) │ │ │ │ +1378 { │ │ │ │ +1379 auto __prev = _b_e_f_o_r_e___b_e_g_i_n(); │ │ │ │ +1380 auto __curr = _b_e_g_i_n(); │ │ │ │ +1381 auto __end = _e_n_d(); │ │ │ │ +1382 while (__curr != __end && __first != __last) │ │ │ │ +1383 { │ │ │ │ +1384 *__curr = *__first; │ │ │ │ +1385 ++__prev; │ │ │ │ +1386 ++__curr; │ │ │ │ +1387 ++__first; │ │ │ │ +1388 } │ │ │ │ +1389 if (__first != __last) │ │ │ │ +1390 _i_n_s_e_r_t___a_f_t_e_r(__prev, __first, __last); │ │ │ │ +1391 else if (__curr != __end) │ │ │ │ +1392 _e_r_a_s_e___a_f_t_e_r(__prev, __end); │ │ │ │ +1393 } │ │ │ │ +1394 │ │ │ │ +1395 // Called by assign(_InputIterator, _InputIterator) if _Tp is not │ │ │ │ +1396 // CopyAssignable. │ │ │ │ +1397 template │ │ │ │ +1398 void │ │ │ │ +1399 _M_assign(_InputIterator __first, _InputIterator __last, _f_a_l_s_e___t_y_p_e) │ │ │ │ +1400 { │ │ │ │ +1401 _c_l_e_a_r(); │ │ │ │ +1402 _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); │ │ │ │ +1403 } │ │ │ │ +1404 │ │ │ │ +1405 // Called by assign(size_type, const _Tp&) if Tp is CopyAssignable │ │ │ │ +1406 void │ │ │ │ +1407 _M_assign_n(size_type __n, const _Tp& __val, _t_r_u_e___t_y_p_e) │ │ │ │ +1408 { │ │ │ │ +1409 auto __prev = _b_e_f_o_r_e___b_e_g_i_n(); │ │ │ │ +1410 auto __curr = _b_e_g_i_n(); │ │ │ │ +1411 auto __end = _e_n_d(); │ │ │ │ +1412 while (__curr != __end && __n > 0) │ │ │ │ +1413 { │ │ │ │ +1414 *__curr = __val; │ │ │ │ +1415 ++__prev; │ │ │ │ +1416 ++__curr; │ │ │ │ +1417 --__n; │ │ │ │ +1418 } │ │ │ │ +1419 if (__n > 0) │ │ │ │ +1420 _i_n_s_e_r_t___a_f_t_e_r(__prev, __n, __val); │ │ │ │ +1421 else if (__curr != __end) │ │ │ │ +1422 _e_r_a_s_e___a_f_t_e_r(__prev, __end); │ │ │ │ +1423 } │ │ │ │ +1424 │ │ │ │ +1425 // Called by assign(size_type, const _Tp&) if Tp is non-CopyAssignable │ │ │ │ +1426 void │ │ │ │ +1427 _M_assign_n(size_type __n, const _Tp& __val, _f_a_l_s_e___t_y_p_e) │ │ │ │ +1428 { │ │ │ │ +1429 _c_l_e_a_r(); │ │ │ │ +1430 _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); │ │ │ │ +1431 } │ │ │ │ +1432 }; │ │ │ │ +1433 │ │ │ │ +1434#if __cpp_deduction_guides >= 201606 │ │ │ │ +1435 template::value_type, │ │ │ │ +1437 typename _Allocator = allocator<_ValT>, │ │ │ │ +1438 typename = _RequireInputIter<_InputIterator>, │ │ │ │ +1439 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1440 forward_list(_InputIterator, _InputIterator, _Allocator = _Allocator()) │ │ │ │ +1441 -> forward_list<_ValT, _Allocator>; │ │ │ │ +1442#endif │ │ │ │ +1443 │ │ │ │ +1444 /** │ │ │ │ +1445 * @brief Forward list equality comparison. │ │ │ │ +1446 * @param __lx A %forward_list │ │ │ │ +1447 * @param __ly A %forward_list of the same type as @a __lx. │ │ │ │ +1448 * @return True iff the elements of the forward lists are equal. │ │ │ │ +1449 * │ │ │ │ +1450 * This is an equivalence relation. It is linear in the number of │ │ │ │ +1451 * elements of the forward lists. Deques are considered equivalent │ │ │ │ +1452 * if corresponding elements compare equal. │ │ │ │ +1453 */ │ │ │ │ +1454 template │ │ │ │ +1455 [[__nodiscard__]] │ │ │ │ +1456 bool │ │ │ │ +_1_4_5_7 operator==(const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& _____l_x, │ │ │ │ +1458 const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& _____l_y); │ │ │ │ 1459 │ │ │ │ -1460 /// Returns the size of the %unordered_multimap. │ │ │ │ -1461 _s_i_z_e___t_y_p_e │ │ │ │ -_1_4_6_2 _s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ -1463 { return _M_h.size(); } │ │ │ │ -1464 │ │ │ │ -1465 /// Returns the maximum size of the %unordered_multimap. │ │ │ │ -1466 _s_i_z_e___t_y_p_e │ │ │ │ -_1_4_6_7 _m_a_x___s_i_z_e() _c_o_n_s_t noexcept │ │ │ │ -1468 { return _M_h.max_size(); } │ │ │ │ -1469 │ │ │ │ -1470 // iterators. │ │ │ │ -1471 │ │ │ │ -1472 /** │ │ │ │ -1473 * Returns a read/write iterator that points to the first element in the │ │ │ │ -1474 * %unordered_multimap. │ │ │ │ -1475 */ │ │ │ │ -1476 _i_t_e_r_a_t_o_r │ │ │ │ -_1_4_7_7 _b_e_g_i_n() noexcept │ │ │ │ -1478 { return _M_h.begin(); } │ │ │ │ -1479 │ │ │ │ -1480 ///@{ │ │ │ │ -1481 /** │ │ │ │ -1482 * Returns a read-only (constant) iterator that points to the first │ │ │ │ -1483 * element in the %unordered_multimap. │ │ │ │ -1484 */ │ │ │ │ -1485 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_1_4_8_6 _b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ -1487 { return _M_h.begin(); } │ │ │ │ -1488 │ │ │ │ -1489 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_1_4_9_0 _c_b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ -1491 { return _M_h.begin(); } │ │ │ │ -1492 ///@} │ │ │ │ -1493 │ │ │ │ -1494 /** │ │ │ │ -1495 * Returns a read/write iterator that points one past the last element in │ │ │ │ -1496 * the %unordered_multimap. │ │ │ │ -1497 */ │ │ │ │ -1498 _i_t_e_r_a_t_o_r │ │ │ │ -_1_4_9_9 _e_n_d() noexcept │ │ │ │ -1500 { return _M_h.end(); } │ │ │ │ -1501 │ │ │ │ -1502 ///@{ │ │ │ │ -1503 /** │ │ │ │ -1504 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ -1505 * element in the %unordered_multimap. │ │ │ │ -1506 */ │ │ │ │ -1507 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_1_5_0_8 _e_n_d() _c_o_n_s_t noexcept │ │ │ │ -1509 { return _M_h.end(); } │ │ │ │ +1460#if __cpp_lib_three_way_comparison │ │ │ │ +1461 /** │ │ │ │ +1462 * @brief Forward list ordering relation. │ │ │ │ +1463 * @param __x A `forward_list`. │ │ │ │ +1464 * @param __y A `forward_list` of the same type as `__x`. │ │ │ │ +1465 * @return A value indicating whether `__x` is less than, equal to, │ │ │ │ +1466 * greater than, or incomparable with `__y`. │ │ │ │ +1467 * │ │ │ │ +1468 * See `std::lexicographical_compare_three_way()` for how the determination │ │ │ │ +1469 * is made. This operator is used to synthesize relational operators like │ │ │ │ +1470 * `<` and `>=` etc. │ │ │ │ +1471 */ │ │ │ │ +1472 template │ │ │ │ +1473 [[_n_o_d_i_s_c_a_r_d]] │ │ │ │ +1474 inline __detail::__synth3way_t<_Tp> │ │ │ │ +1475 operator<=>(const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __x, │ │ │ │ +1476 const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __y) │ │ │ │ +1477 { │ │ │ │ +1478 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(), │ │ │ │ +1479 __y.begin(), __y.end(), │ │ │ │ +1480 __detail::__synth3way); │ │ │ │ +1481 } │ │ │ │ +1482#else │ │ │ │ +1483 /** │ │ │ │ +1484 * @brief Forward list ordering relation. │ │ │ │ +1485 * @param __lx A %forward_list. │ │ │ │ +1486 * @param __ly A %forward_list of the same type as @a __lx. │ │ │ │ +1487 * @return True iff @a __lx is lexicographically less than @a __ly. │ │ │ │ +1488 * │ │ │ │ +1489 * This is a total ordering relation. It is linear in the number of │ │ │ │ +1490 * elements of the forward lists. The elements must be comparable │ │ │ │ +1491 * with @c <. │ │ │ │ +1492 * │ │ │ │ +1493 * See std::lexicographical_compare() for how the determination is made. │ │ │ │ +1494 */ │ │ │ │ +1495 template │ │ │ │ +1496 [[__nodiscard__]] │ │ │ │ +1497 inline bool │ │ │ │ +1498 operator<(const forward_list<_Tp, _Alloc>& __lx, │ │ │ │ +1499 const forward_list<_Tp, _Alloc>& __ly) │ │ │ │ +1500 { return std::lexicographical_compare(__lx.cbegin(), __lx.cend(), │ │ │ │ +1501 __ly.cbegin(), __ly.cend()); } │ │ │ │ +1502 │ │ │ │ +1503 /// Based on operator== │ │ │ │ +1504 template │ │ │ │ +1505 [[__nodiscard__]] │ │ │ │ +1506 inline bool │ │ │ │ +1507 operator!=(const forward_list<_Tp, _Alloc>& __lx, │ │ │ │ +1508 const forward_list<_Tp, _Alloc>& __ly) │ │ │ │ +1509 { return !(__lx == __ly); } │ │ │ │ 1510 │ │ │ │ -1511 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_1_5_1_2 _c_e_n_d() _c_o_n_s_t noexcept │ │ │ │ -1513 { return _M_h.end(); } │ │ │ │ -1514 ///@} │ │ │ │ -1515 │ │ │ │ -1516 // modifiers. │ │ │ │ -1517 │ │ │ │ -1518 /** │ │ │ │ -1519 * @brief Attempts to build and insert a std::pair into the │ │ │ │ -1520 * %unordered_multimap. │ │ │ │ -1521 * │ │ │ │ -1522 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ -1523 * std::piecewise_contruct for passing arguments to each │ │ │ │ -1524 * part of the pair constructor). │ │ │ │ -1525 * │ │ │ │ -1526 * @return An iterator that points to the inserted pair. │ │ │ │ -1527 * │ │ │ │ -1528 * This function attempts to build and insert a (key, value) %pair into │ │ │ │ -1529 * the %unordered_multimap. │ │ │ │ -1530 * │ │ │ │ -1531 * Insertion requires amortized constant time. │ │ │ │ -1532 */ │ │ │ │ -1533 template │ │ │ │ -1534 _i_t_e_r_a_t_o_r │ │ │ │ -_1_5_3_5 _e_m_p_l_a_c_e(___A_r_g_s&&... _____a_r_g_s) │ │ │ │ -1536 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(_____a_r_g_s)...); } │ │ │ │ -1537 │ │ │ │ -1538 /** │ │ │ │ -1539 * @brief Attempts to build and insert a std::pair into the │ │ │ │ -1540 * %unordered_multimap. │ │ │ │ -1541 * │ │ │ │ -1542 * @param __pos An iterator that serves as a hint as to where the pair │ │ │ │ -1543 * should be inserted. │ │ │ │ -1544 * @param __args Arguments used to generate a new pair instance (see │ │ │ │ -1545 * std::piecewise_contruct for passing arguments to each │ │ │ │ -1546 * part of the pair constructor). │ │ │ │ -1547 * @return An iterator that points to the element with key of the │ │ │ │ -1548 * std::pair built from @a __args. │ │ │ │ -1549 * │ │ │ │ -1550 * Note that the first parameter is only a hint and can potentially │ │ │ │ -1551 * improve the performance of the insertion process. A bad hint would │ │ │ │ -1552 * cause no gains in efficiency. │ │ │ │ -1553 * │ │ │ │ -1554 * See │ │ │ │ -1555 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -1556 * for more on @a hinting. │ │ │ │ -1557 * │ │ │ │ -1558 * Insertion requires amortized constant time. │ │ │ │ -1559 */ │ │ │ │ -1560 template │ │ │ │ -1561 _i_t_e_r_a_t_o_r │ │ │ │ -_1_5_6_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) │ │ │ │ -1563 { 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)...); } │ │ │ │ -1564 │ │ │ │ -1565 ///@{ │ │ │ │ -1566 /** │ │ │ │ -1567 * @brief Inserts a std::pair into the %unordered_multimap. │ │ │ │ -1568 * @param __x Pair to be inserted (see std::make_pair for easy │ │ │ │ -1569 * creation of pairs). │ │ │ │ -1570 * │ │ │ │ -1571 * @return An iterator that points to the inserted pair. │ │ │ │ -1572 * │ │ │ │ -1573 * Insertion requires amortized constant time. │ │ │ │ -1574 */ │ │ │ │ -1575 _i_t_e_r_a_t_o_r │ │ │ │ -_1_5_7_6 _i_n_s_e_r_t(const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -1577 { return _M_h.insert(__x); } │ │ │ │ -1578 │ │ │ │ -1579 _i_t_e_r_a_t_o_r │ │ │ │ -_1_5_8_0 _i_n_s_e_r_t(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -1581 { return _M_h.insert(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -1582 │ │ │ │ -1583 template │ │ │ │ -1584 _____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_5_8_5 _i_n_s_e_r_t(___P_a_i_r&& __x) │ │ │ │ -1586 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ -1587 ///@} │ │ │ │ -1588 │ │ │ │ -1589 ///@{ │ │ │ │ -1590 /** │ │ │ │ -1591 * @brief Inserts a std::pair into the %unordered_multimap. │ │ │ │ -1592 * @param __hint An iterator that serves as a hint as to where the │ │ │ │ -1593 * pair should be inserted. │ │ │ │ -1594 * @param __x Pair to be inserted (see std::make_pair for easy creation │ │ │ │ -1595 * of pairs). │ │ │ │ -1596 * @return An iterator that points to the element with key of │ │ │ │ -1597 * @a __x (may or may not be the %pair passed in). │ │ │ │ -1598 * │ │ │ │ -1599 * Note that the first parameter is only a hint and can potentially │ │ │ │ -1600 * improve the performance of the insertion process. A bad hint would │ │ │ │ -1601 * cause no gains in efficiency. │ │ │ │ -1602 * │ │ │ │ -1603 * See │ │ │ │ -1604 * https://gcc.gnu.org/onlinedocs/libstdc++/manual/ │ │ │ │ -associative.html#containers.associative.insert_hints │ │ │ │ -1605 * for more on @a hinting. │ │ │ │ -1606 * │ │ │ │ -1607 * Insertion requires amortized constant time. │ │ │ │ -1608 */ │ │ │ │ -1609 _i_t_e_r_a_t_o_r │ │ │ │ -_1_6_1_0 _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) │ │ │ │ -1611 { return _M_h.insert(_____h_i_n_t, __x); } │ │ │ │ -1612 │ │ │ │ -1613 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1614 // 2354. Unnecessary copying when inserting into maps with braced-init │ │ │ │ -1615 _i_t_e_r_a_t_o_r │ │ │ │ -_1_6_1_6 _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) │ │ │ │ -1617 { return _M_h.insert(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -1618 │ │ │ │ -1619 template │ │ │ │ -1620 _____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_6_2_1 _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) │ │ │ │ -1622 { return _M_h.emplace_hint(_____h_i_n_t, _s_t_d_:_:_f_o_r_w_a_r_d_<___P_a_i_r_>(__x)); } │ │ │ │ -1623 ///@} │ │ │ │ -1624 │ │ │ │ -1625 /** │ │ │ │ -1626 * @brief A template function that attempts to insert a range of │ │ │ │ -1627 * elements. │ │ │ │ -1628 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -1629 * inserted. │ │ │ │ -1630 * @param __last Iterator pointing to the end of the range. │ │ │ │ -1631 * │ │ │ │ -1632 * Complexity similar to that of the range constructor. │ │ │ │ -1633 */ │ │ │ │ -1634 template │ │ │ │ -1635 void │ │ │ │ -_1_6_3_6 _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) │ │ │ │ -1637 { _M_h.insert(__first, __last); } │ │ │ │ -1638 │ │ │ │ -1639 /** │ │ │ │ -1640 * @brief Attempts to insert a list of elements into the │ │ │ │ -1641 * %unordered_multimap. │ │ │ │ -1642 * @param __l A std::initializer_list of elements │ │ │ │ -1643 * to be inserted. │ │ │ │ -1644 * │ │ │ │ -1645 * Complexity similar to that of the range constructor. │ │ │ │ -1646 */ │ │ │ │ -1647 void │ │ │ │ -_1_6_4_8 _i_n_s_e_r_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<_v_a_l_u_e___t_y_p_e_> _____l) │ │ │ │ -1649 { _M_h.insert(_____l); } │ │ │ │ -1650 │ │ │ │ -1651#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -1652 /// Extract a node. │ │ │ │ -1653 node_type │ │ │ │ -_1_6_5_4 _e_x_t_r_a_c_t(_c_o_n_s_t___i_t_e_r_a_t_o_r _____p_o_s) │ │ │ │ -1655 { │ │ │ │ -1656 __glibcxx_assert(_____p_o_s != _e_n_d()); │ │ │ │ -1657 return _M_h.extract(_____p_o_s); │ │ │ │ -1658 } │ │ │ │ -1659 │ │ │ │ -1660 /// Extract a node. │ │ │ │ -1661 node_type │ │ │ │ -_1_6_6_2 _e_x_t_r_a_c_t(const _k_e_y___t_y_p_e& _____k_e_y) │ │ │ │ -1663 { return _M_h.extract(_____k_e_y); } │ │ │ │ -1664 │ │ │ │ -1665 /// Re-insert an extracted node. │ │ │ │ -1666 _i_t_e_r_a_t_o_r │ │ │ │ -_1_6_6_7 _i_n_s_e_r_t(node_type&& _____n_h) │ │ │ │ -1668 { return _M_h._M_reinsert_node_multi(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(_____n_h)); } │ │ │ │ -1669 │ │ │ │ -1670 /// Re-insert an extracted node. │ │ │ │ -1671 _i_t_e_r_a_t_o_r │ │ │ │ -_1_6_7_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) │ │ │ │ -1673 { return _M_h._M_reinsert_node_multi(_____h_i_n_t, _s_t_d_:_:_m_o_v_e(_____n_h)); } │ │ │ │ -1674#endif // node_extract │ │ │ │ -1675 │ │ │ │ -1676 ///@{ │ │ │ │ -1677 /** │ │ │ │ -1678 * @brief Erases an element from an %unordered_multimap. │ │ │ │ -1679 * @param __position An iterator pointing to the element to be erased. │ │ │ │ -1680 * @return An iterator pointing to the element immediately following │ │ │ │ -1681 * @a __position prior to the element being erased. If no such │ │ │ │ -1682 * element exists, end() is returned. │ │ │ │ -1683 * │ │ │ │ -1684 * This function erases an element, pointed to by the given iterator, │ │ │ │ -1685 * from an %unordered_multimap. │ │ │ │ -1686 * Note that this function only erases the element, and that if the │ │ │ │ -1687 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ -1688 * any way. Managing the pointer is the user's responsibility. │ │ │ │ -1689 */ │ │ │ │ -1690 _i_t_e_r_a_t_o_r │ │ │ │ -_1_6_9_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) │ │ │ │ -1692 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ -1693 │ │ │ │ -1694 // LWG 2059. │ │ │ │ -1695 _i_t_e_r_a_t_o_r │ │ │ │ -_1_6_9_6 _e_r_a_s_e(_i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n) │ │ │ │ -1697 { return _M_h.erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ -1698 ///@} │ │ │ │ -1699 │ │ │ │ -1700 /** │ │ │ │ -1701 * @brief Erases elements according to the provided key. │ │ │ │ -1702 * @param __x Key of elements to be erased. │ │ │ │ -1703 * @return The number of elements erased. │ │ │ │ -1704 * │ │ │ │ -1705 * This function erases all the elements located by the given key from │ │ │ │ -1706 * an %unordered_multimap. │ │ │ │ -1707 * Note that this function only erases the element, and that if the │ │ │ │ -1708 * element is itself a pointer, the pointed-to memory is not touched in │ │ │ │ -1709 * any way. Managing the pointer is the user's responsibility. │ │ │ │ -1710 */ │ │ │ │ -1711 _s_i_z_e___t_y_p_e │ │ │ │ -_1_7_1_2 _e_r_a_s_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -1713 { return _M_h.erase(__x); } │ │ │ │ -1714 │ │ │ │ -1715 /** │ │ │ │ -1716 * @brief Erases a [__first,__last) range of elements from an │ │ │ │ -1717 * %unordered_multimap. │ │ │ │ -1718 * @param __first Iterator pointing to the start of the range to be │ │ │ │ -1719 * erased. │ │ │ │ -1720 * @param __last Iterator pointing to the end of the range to │ │ │ │ -1721 * be erased. │ │ │ │ -1722 * @return The iterator @a __last. │ │ │ │ -1723 * │ │ │ │ -1724 * This function erases a sequence of elements from an │ │ │ │ -1725 * %unordered_multimap. │ │ │ │ -1726 * Note that this function only erases the elements, and that if │ │ │ │ -1727 * the element is itself a pointer, the pointed-to memory is not touched │ │ │ │ -1728 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -1729 */ │ │ │ │ -1730 _i_t_e_r_a_t_o_r │ │ │ │ -_1_7_3_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) │ │ │ │ -1732 { return _M_h.erase(__first, __last); } │ │ │ │ -1733 │ │ │ │ -1734 /** │ │ │ │ -1735 * Erases all elements in an %unordered_multimap. │ │ │ │ -1736 * Note that this function only erases the elements, and that if the │ │ │ │ -1737 * elements themselves are pointers, the pointed-to memory is not touched │ │ │ │ -1738 * in any way. Managing the pointer is the user's responsibility. │ │ │ │ -1739 */ │ │ │ │ -1740 void │ │ │ │ -_1_7_4_1 _c_l_e_a_r() noexcept │ │ │ │ -1742 { _M_h.clear(); } │ │ │ │ -1743 │ │ │ │ -1744 /** │ │ │ │ -1745 * @brief Swaps data with another %unordered_multimap. │ │ │ │ -1746 * @param __x An %unordered_multimap of the same element and allocator │ │ │ │ -1747 * types. │ │ │ │ -1748 * │ │ │ │ -1749 * This exchanges the elements between two %unordered_multimap in │ │ │ │ -1750 * constant time. │ │ │ │ -1751 * Note that the global std::swap() function is specialized such that │ │ │ │ -1752 * std::swap(m1,m2) will feed to this function. │ │ │ │ -1753 */ │ │ │ │ -1754 void │ │ │ │ -_1_7_5_5 _s_w_a_p(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p& __x) │ │ │ │ -1756 noexcept( noexcept(_M_h.swap(__x._M_h)) ) │ │ │ │ -1757 { _M_h.swap(__x._M_h); } │ │ │ │ -1758 │ │ │ │ -1759#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -1760 template │ │ │ │ -1761 friend class std::_Hash_merge_helper; │ │ │ │ -1762 │ │ │ │ -1763 template │ │ │ │ -1764 void │ │ │ │ -1765 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) │ │ │ │ -1766 { │ │ │ │ -1767 using ___M_e_r_g_e___h_e_l_p_e_r │ │ │ │ -1768 = ___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_>; │ │ │ │ -1769 _M_h._M_merge_multi(_Merge_helper::_S_get_table(_____s_o_u_r_c_e)); │ │ │ │ -1770 } │ │ │ │ -1771 │ │ │ │ -1772 template │ │ │ │ -1773 void │ │ │ │ -1774 merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ -1775 { merge(__source); } │ │ │ │ -1776 │ │ │ │ -1777 template │ │ │ │ -1778 void │ │ │ │ -1779 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>& __source) │ │ │ │ -1780 { │ │ │ │ -1781 using _Merge_helper │ │ │ │ -1782 = _Hash_merge_helper; │ │ │ │ -1783 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ -1784 } │ │ │ │ -1785 │ │ │ │ -1786 template │ │ │ │ -1787 void │ │ │ │ -1788 merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source) │ │ │ │ -1789 { merge(__source); } │ │ │ │ -1790#endif // node_extract │ │ │ │ -1791 │ │ │ │ -1792 // observers. │ │ │ │ -1793 │ │ │ │ -1794 /// Returns the hash functor object with which the %unordered_multimap │ │ │ │ -1795 /// was constructed. │ │ │ │ -1796 _h_a_s_h_e_r │ │ │ │ -_1_7_9_7 _h_a_s_h___f_u_n_c_t_i_o_n() const │ │ │ │ -1798 { return _M_h.hash_function(); } │ │ │ │ -1799 │ │ │ │ -1800 /// Returns the key comparison object with which the %unordered_multimap │ │ │ │ -1801 /// was constructed. │ │ │ │ -1802 _k_e_y___e_q_u_a_l │ │ │ │ -_1_8_0_3 _k_e_y___e_q() const │ │ │ │ -1804 { return _M_h.key_eq(); } │ │ │ │ -1805 │ │ │ │ -1806 // lookup. │ │ │ │ -1807 │ │ │ │ -1808 ///@{ │ │ │ │ -1809 /** │ │ │ │ -1810 * @brief Tries to locate an element in an %unordered_multimap. │ │ │ │ -1811 * @param __x Key to be located. │ │ │ │ -1812 * @return Iterator pointing to sought-after element, or end() if not │ │ │ │ -1813 * found. │ │ │ │ -1814 * │ │ │ │ -1815 * This function takes a key and tries to locate the element with which │ │ │ │ -1816 * the key matches. If successful the function returns an iterator │ │ │ │ -1817 * pointing to the sought after element. If unsuccessful it returns the │ │ │ │ -1818 * past-the-end ( @c end() ) iterator. │ │ │ │ -1819 */ │ │ │ │ -1820 _i_t_e_r_a_t_o_r │ │ │ │ -_1_8_2_1 _f_i_n_d(const _k_e_y___t_y_p_e& __x) │ │ │ │ -1822 { return _M_h.find(__x); } │ │ │ │ -1823 │ │ │ │ -1824#if __cplusplus > 201703L │ │ │ │ -1825 template │ │ │ │ -1826 auto │ │ │ │ -_1_8_2_7 _f_i_n_d(const ___K_t& __x) -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -1828 { return _M_h._M_find_tr(__x); } │ │ │ │ -1829#endif │ │ │ │ -1830 │ │ │ │ -1831 _c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_1_8_3_2 _f_i_n_d(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -1833 { return _M_h.find(__x); } │ │ │ │ -1834 │ │ │ │ -1835#if __cplusplus > 201703L │ │ │ │ -1836 template │ │ │ │ -1837 auto │ │ │ │ -_1_8_3_8 _f_i_n_d(const ___K_t& __x) const -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -1839 { return _M_h._M_find_tr(__x); } │ │ │ │ -1840#endif │ │ │ │ -1841 ///@} │ │ │ │ -1842 │ │ │ │ -1843 ///@{ │ │ │ │ -1844 /** │ │ │ │ -1845 * @brief Finds the number of elements. │ │ │ │ -1846 * @param __x Key to count. │ │ │ │ -1847 * @return Number of elements with specified key. │ │ │ │ -1848 */ │ │ │ │ -1849 _s_i_z_e___t_y_p_e │ │ │ │ -_1_8_5_0 _c_o_u_n_t(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -1851 { return _M_h.count(__x); } │ │ │ │ -1852 │ │ │ │ -1853#if __cplusplus > 201703L │ │ │ │ -1854 template │ │ │ │ -1855 auto │ │ │ │ -_1_8_5_6 _c_o_u_n_t(const ___K_t& __x) const -> decltype(_M_h._M_count_tr(__x)) │ │ │ │ -1857 { return _M_h._M_count_tr(__x); } │ │ │ │ -1858#endif │ │ │ │ -1859 ///@} │ │ │ │ -1860 │ │ │ │ -1861#if __cplusplus > 201703L │ │ │ │ -1862 ///@{ │ │ │ │ -1863 /** │ │ │ │ -1864 * @brief Finds whether an element with the given key exists. │ │ │ │ -1865 * @param __x Key of elements to be located. │ │ │ │ -1866 * @return True if there is any element with the specified key. │ │ │ │ -1867 */ │ │ │ │ -1868 bool │ │ │ │ -_1_8_6_9 _c_o_n_t_a_i_n_s(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -1870 { return _M_h.find(__x) != _M_h.end(); } │ │ │ │ -1871 │ │ │ │ -1872 template │ │ │ │ -1873 auto │ │ │ │ -_1_8_7_4 _c_o_n_t_a_i_n_s(const ___K_t& __x) const │ │ │ │ -1875 -> decltype(_M_h._M_find_tr(__x), _v_o_i_d(), true) │ │ │ │ -1876 { return _M_h._M_find_tr(__x) != _M_h.end(); } │ │ │ │ -1877 ///@} │ │ │ │ -1878#endif │ │ │ │ -1879 │ │ │ │ -1880 ///@{ │ │ │ │ -1881 /** │ │ │ │ -1882 * @brief Finds a subsequence matching given key. │ │ │ │ -1883 * @param __x Key to be located. │ │ │ │ -1884 * @return Pair of iterators that possibly points to the subsequence │ │ │ │ -1885 * matching given key. │ │ │ │ -1886 */ │ │ │ │ -1887 _s_t_d_:_:_p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _i_t_e_r_a_t_o_r_> │ │ │ │ -_1_8_8_8 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) │ │ │ │ -1889 { return _M_h.equal_range(__x); } │ │ │ │ -1890 │ │ │ │ -1891#if __cplusplus > 201703L │ │ │ │ -1892 template │ │ │ │ -1893 auto │ │ │ │ -_1_8_9_4 _e_q_u_a_l___r_a_n_g_e(const ___K_t& __x) │ │ │ │ -1895 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -1896 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ -1897#endif │ │ │ │ -1898 │ │ │ │ -1899 _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_9_0_0 _e_q_u_a_l___r_a_n_g_e(const _k_e_y___t_y_p_e& __x) const │ │ │ │ -1901 { return _M_h.equal_range(__x); } │ │ │ │ -1902 │ │ │ │ -1903#if __cplusplus > 201703L │ │ │ │ -1904 template │ │ │ │ -1905 auto │ │ │ │ -_1_9_0_6 _e_q_u_a_l___r_a_n_g_e(const ___K_t& __x) const │ │ │ │ -1907 -> decltype(_M_h._M_equal_range_tr(__x)) │ │ │ │ -1908 { return _M_h._M_equal_range_tr(__x); } │ │ │ │ -1909#endif │ │ │ │ -1910 ///@} │ │ │ │ -1911 │ │ │ │ -1912 // bucket interface. │ │ │ │ -1913 │ │ │ │ -1914 /// Returns the number of buckets of the %unordered_multimap. │ │ │ │ -1915 _s_i_z_e___t_y_p_e │ │ │ │ -_1_9_1_6 _b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ -1917 { return _M_h.bucket_count(); } │ │ │ │ -1918 │ │ │ │ -1919 /// Returns the maximum number of buckets of the %unordered_multimap. │ │ │ │ -1920 _s_i_z_e___t_y_p_e │ │ │ │ -_1_9_2_1 _m_a_x___b_u_c_k_e_t___c_o_u_n_t() _c_o_n_s_t noexcept │ │ │ │ -1922 { return _M_h.max_bucket_count(); } │ │ │ │ -1923 │ │ │ │ -1924 /* │ │ │ │ -1925 * @brief Returns the number of elements in a given bucket. │ │ │ │ -1926 * @param __n A bucket index. │ │ │ │ -1927 * @return The number of elements in the bucket. │ │ │ │ -1928 */ │ │ │ │ -1929 _s_i_z_e___t_y_p_e │ │ │ │ -1930 bucket_size(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1931 { return _M_h.bucket_size(__n); } │ │ │ │ -1932 │ │ │ │ -1933 /* │ │ │ │ -1934 * @brief Returns the bucket index of a given element. │ │ │ │ -1935 * @param __key A key instance. │ │ │ │ -1936 * @return The key bucket index. │ │ │ │ -1937 */ │ │ │ │ -1938 _s_i_z_e___t_y_p_e │ │ │ │ -1939 bucket(const _k_e_y___t_y_p_e& __key) const │ │ │ │ -1940 { return _M_h.bucket(__key); } │ │ │ │ -1941 │ │ │ │ -1942 /** │ │ │ │ -1943 * @brief Returns a read/write iterator pointing to the first bucket │ │ │ │ -1944 * element. │ │ │ │ -1945 * @param __n The bucket index. │ │ │ │ -1946 * @return A read/write local iterator. │ │ │ │ -1947 */ │ │ │ │ -1948 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_9_4_9 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1950 { return _M_h.begin(__n); } │ │ │ │ -1951 │ │ │ │ -1952 ///@{ │ │ │ │ -1953 /** │ │ │ │ -1954 * @brief Returns a read-only (constant) iterator pointing to the first │ │ │ │ -1955 * bucket element. │ │ │ │ -1956 * @param __n The bucket index. │ │ │ │ -1957 * @return A read-only local iterator. │ │ │ │ -1958 */ │ │ │ │ -1959 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_9_6_0 _b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1961 { return _M_h.begin(__n); } │ │ │ │ -1962 │ │ │ │ -1963 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_9_6_4 _c_b_e_g_i_n(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1965 { return _M_h.cbegin(__n); } │ │ │ │ -1966 ///@} │ │ │ │ -1967 │ │ │ │ -1968 /** │ │ │ │ -1969 * @brief Returns a read/write iterator pointing to one past the last │ │ │ │ -1970 * bucket elements. │ │ │ │ -1971 * @param __n The bucket index. │ │ │ │ -1972 * @return A read/write local iterator. │ │ │ │ -1973 */ │ │ │ │ -1974 _l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_9_7_5 _e_n_d(_s_i_z_e___t_y_p_e __n) │ │ │ │ -1976 { return _M_h.end(__n); } │ │ │ │ -1977 │ │ │ │ -1978 ///@{ │ │ │ │ -1979 /** │ │ │ │ -1980 * @brief Returns a read-only (constant) iterator pointing to one past │ │ │ │ -1981 * the last bucket elements. │ │ │ │ -1982 * @param __n The bucket index. │ │ │ │ -1983 * @return A read-only local iterator. │ │ │ │ -1984 */ │ │ │ │ -1985 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_9_8_6 _e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1987 { return _M_h.end(__n); } │ │ │ │ -1988 │ │ │ │ -1989 _c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_1_9_9_0 _c_e_n_d(_s_i_z_e___t_y_p_e __n) const │ │ │ │ -1991 { return _M_h.cend(__n); } │ │ │ │ -1992 ///@} │ │ │ │ -1993 │ │ │ │ -1994 // hash policy. │ │ │ │ -1995 │ │ │ │ -1996 /// Returns the average number of elements per bucket. │ │ │ │ -1997 float │ │ │ │ -_1_9_9_8 _l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -1999 { return _M_h.load_factor(); } │ │ │ │ -2000 │ │ │ │ -2001 /// Returns a positive number that the %unordered_multimap tries to keep │ │ │ │ -2002 /// the load factor less than or equal to. │ │ │ │ -2003 float │ │ │ │ -_2_0_0_4 _m_a_x___l_o_a_d___f_a_c_t_o_r() _c_o_n_s_t noexcept │ │ │ │ -2005 { return _M_h.max_load_factor(); } │ │ │ │ -2006 │ │ │ │ -2007 /** │ │ │ │ -2008 * @brief Change the %unordered_multimap maximum load factor. │ │ │ │ -2009 * @param __z The new maximum load factor. │ │ │ │ -2010 */ │ │ │ │ -2011 void │ │ │ │ -_2_0_1_2 _m_a_x___l_o_a_d___f_a_c_t_o_r(float _____z) │ │ │ │ -2013 { _M_h.max_load_factor(_____z); } │ │ │ │ -2014 │ │ │ │ -2015 /** │ │ │ │ -2016 * @brief May rehash the %unordered_multimap. │ │ │ │ -2017 * @param __n The new number of buckets. │ │ │ │ -2018 * │ │ │ │ -2019 * Rehash will occur only if the new number of buckets respect the │ │ │ │ -2020 * %unordered_multimap maximum load factor. │ │ │ │ -2021 */ │ │ │ │ -2022 void │ │ │ │ -_2_0_2_3 _r_e_h_a_s_h(_s_i_z_e___t_y_p_e __n) │ │ │ │ -2024 { _M_h.rehash(__n); } │ │ │ │ -2025 │ │ │ │ -2026 /** │ │ │ │ -2027 * @brief Prepare the %unordered_multimap for a specified number of │ │ │ │ -2028 * elements. │ │ │ │ -2029 * @param __n Number of elements required. │ │ │ │ -2030 * │ │ │ │ -2031 * Same as rehash(ceil(n / max_load_factor())). │ │ │ │ -2032 */ │ │ │ │ -2033 void │ │ │ │ -_2_0_3_4 _r_e_s_e_r_v_e(_s_i_z_e___t_y_p_e __n) │ │ │ │ -2035 { _M_h.reserve(__n); } │ │ │ │ -2036 │ │ │ │ -2037 template │ │ │ │ -2039 friend bool │ │ │ │ -2040 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, │ │ │ │ -2041 ___H_a_s_h_1, ___P_r_e_d_1, _Alloc1>&, │ │ │ │ -2042 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, │ │ │ │ -2043 ___H_a_s_h_1, ___P_r_e_d_1, _Alloc1>&); │ │ │ │ -2044 }; │ │ │ │ -2045 │ │ │ │ -2046#if __cpp_deduction_guides >= 201606 │ │ │ │ -2047 │ │ │ │ -2048 template>, │ │ │ │ -2050 typename _Pred = equal_to<__iter_key_t<_InputIterator>>, │ │ │ │ -2051 typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, │ │ │ │ -2052 typename = _RequireInputIter<_InputIterator>, │ │ │ │ -2053 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -2054 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -2055 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2056 unordered_multimap(_InputIterator, _InputIterator, │ │ │ │ -2057 _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 = {}, │ │ │ │ -2058 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ -2059 _Allocator = _Allocator()) │ │ │ │ -2060 -> unordered_multimap<__iter_key_t<_InputIterator>, │ │ │ │ -2061 __iter_val_t<_InputIterator>, _Hash, _Pred, │ │ │ │ -2062 _Allocator>; │ │ │ │ -2063 │ │ │ │ -2064 template, │ │ │ │ -2065 typename _Pred = equal_to<_Key>, │ │ │ │ -2066 typename _Allocator = allocator>, │ │ │ │ -2067 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -2068 typename = _RequireNotAllocator<_Pred>, │ │ │ │ -2069 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2070 unordered_multimap(initializer_list>, │ │ │ │ -2071 _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 = {}, │ │ │ │ -2072 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ -2073 _Allocator = _Allocator()) │ │ │ │ -2074 -> unordered_multimap<_Key, _Tp, _Hash, _Pred, _Allocator>; │ │ │ │ -2075 │ │ │ │ -2076 template, │ │ │ │ -2078 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2079 unordered_multimap(_InputIterator, _InputIterator, │ │ │ │ -2080 _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) │ │ │ │ -2081 -> unordered_multimap<__iter_key_t<_InputIterator>, │ │ │ │ -2082 __iter_val_t<_InputIterator>, │ │ │ │ -2083 hash<__iter_key_t<_InputIterator>>, │ │ │ │ -2084 equal_to<__iter_key_t<_InputIterator>>, _Allocator>; │ │ │ │ -2085 │ │ │ │ -2086 template, │ │ │ │ -2088 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2089 unordered_multimap(_InputIterator, _InputIterator, _Allocator) │ │ │ │ -2090 -> unordered_multimap<__iter_key_t<_InputIterator>, │ │ │ │ -2091 __iter_val_t<_InputIterator>, │ │ │ │ -2092 hash<__iter_key_t<_InputIterator>>, │ │ │ │ -2093 equal_to<__iter_key_t<_InputIterator>>, _Allocator>; │ │ │ │ -2094 │ │ │ │ -2095 template, │ │ │ │ -2097 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -2098 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2099 unordered_multimap(_InputIterator, _InputIterator, │ │ │ │ -2100 _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, │ │ │ │ -2101 _Allocator) │ │ │ │ -2102 -> unordered_multimap<__iter_key_t<_InputIterator>, │ │ │ │ -2103 __iter_val_t<_InputIterator>, _Hash, │ │ │ │ -2104 equal_to<__iter_key_t<_InputIterator>>, _Allocator>; │ │ │ │ -2105 │ │ │ │ -2106 template> │ │ │ │ -2108 unordered_multimap(initializer_list>, │ │ │ │ -2109 _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, │ │ │ │ -2110 _Allocator) │ │ │ │ -2111 -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; │ │ │ │ -2112 │ │ │ │ -2113 template> │ │ │ │ -2115 unordered_multimap(initializer_list>, _Allocator) │ │ │ │ -2116 -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>; │ │ │ │ -2117 │ │ │ │ -2118 template, │ │ │ │ -2120 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2121 unordered_multimap(initializer_list>, │ │ │ │ -2122 _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, │ │ │ │ -2123 _Hash, _Allocator) │ │ │ │ -2124 -> unordered_multimap<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>; │ │ │ │ -2125 │ │ │ │ -2126#endif │ │ │ │ -2127 │ │ │ │ -2128 template │ │ │ │ -2129 inline void │ │ │ │ -2130 swap(unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -2131 unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -2132 noexcept(noexcept(__x.swap(__y))) │ │ │ │ -2133 { __x.swap(__y); } │ │ │ │ -2134 │ │ │ │ -2135 template │ │ │ │ -2136 inline void │ │ │ │ -2137 swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -2138 unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -2139 noexcept(noexcept(__x.swap(__y))) │ │ │ │ -2140 { __x.swap(__y); } │ │ │ │ -2141 │ │ │ │ -2142 template │ │ │ │ -2143 inline bool │ │ │ │ -2144 operator==(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -2145 const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -2146 { return __x._M_h._M_equal(__y._M_h); } │ │ │ │ -2147 │ │ │ │ -2148#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ -2149 template │ │ │ │ -2150 inline bool │ │ │ │ -2151 operator!=(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -2152 const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -2153 { return !(__x == __y); } │ │ │ │ -2154#endif │ │ │ │ -2155 │ │ │ │ -2156 template │ │ │ │ -2157 inline bool │ │ │ │ -2158 operator==(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -2159 const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -2160 { return __x._M_h._M_equal(__y._M_h); } │ │ │ │ -2161 │ │ │ │ -2162#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ -2163 template │ │ │ │ -2164 inline bool │ │ │ │ -2165 operator!=(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, │ │ │ │ -2166 const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y) │ │ │ │ -2167 { return !(__x == __y); } │ │ │ │ -2168#endif │ │ │ │ -2169 │ │ │ │ -2170_GLIBCXX_END_NAMESPACE_CONTAINER │ │ │ │ -2171 │ │ │ │ -2172#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -2173 // Allow std::unordered_map access to internals of compatible maps. │ │ │ │ -2174 template │ │ │ │ -2176 struct _Hash_merge_helper< │ │ │ │ -2177 _GLIBCXX_STD_C::unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>, │ │ │ │ -2178 _Hash2, _Eq2> │ │ │ │ -2179 { │ │ │ │ -2180 private: │ │ │ │ -2181 template │ │ │ │ -2182 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>; │ │ │ │ -2183 template │ │ │ │ -2184 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>; │ │ │ │ -2185 │ │ │ │ -2186 friend unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>; │ │ │ │ -2187 │ │ │ │ -2188 static auto& │ │ │ │ -2189 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ -2190 { return __map._M_h; } │ │ │ │ -2191 │ │ │ │ -2192 static auto& │ │ │ │ -2193 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ -2194 { return __map._M_h; } │ │ │ │ -2195 }; │ │ │ │ -2196 │ │ │ │ -2197 // Allow std::unordered_multimap access to internals of compatible maps. │ │ │ │ -2198 template │ │ │ │ -2200 struct _Hash_merge_helper< │ │ │ │ -2201 _GLIBCXX_STD_C::unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>, │ │ │ │ -2202 _Hash2, _Eq2> │ │ │ │ -2203 { │ │ │ │ -2204 private: │ │ │ │ -2205 template │ │ │ │ -2206 using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>; │ │ │ │ -2207 template │ │ │ │ -2208 using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>; │ │ │ │ -2209 │ │ │ │ -2210 friend unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>; │ │ │ │ -2211 │ │ │ │ -2212 static auto& │ │ │ │ -2213 _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ -2214 { return __map._M_h; } │ │ │ │ -2215 │ │ │ │ -2216 static auto& │ │ │ │ -2217 _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map) │ │ │ │ -2218 { return __map._M_h; } │ │ │ │ -2219 }; │ │ │ │ -2220#endif // node_extract │ │ │ │ -2221 │ │ │ │ -2222_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -2223} // namespace std │ │ │ │ -2224 │ │ │ │ -2225#endif /* _UNORDERED_MAP_H */ │ │ │ │ +1511 /// Based on operator< │ │ │ │ +1512 template │ │ │ │ +1513 [[__nodiscard__]] │ │ │ │ +1514 inline bool │ │ │ │ +1515 _o_p_e_r_a_t_o_r_>(const forward_list<_Tp, _Alloc>& __lx, │ │ │ │ +1516 const forward_list<_Tp, _Alloc>& __ly) │ │ │ │ +1517 { return (__ly < __lx); } │ │ │ │ +1518 │ │ │ │ +1519 /// Based on operator< │ │ │ │ +1520 template │ │ │ │ +1521 [[__nodiscard__]] │ │ │ │ +1522 inline bool │ │ │ │ +1523 _o_p_e_r_a_t_o_r_>_=(const forward_list<_Tp, _Alloc>& __lx, │ │ │ │ +1524 const forward_list<_Tp, _Alloc>& __ly) │ │ │ │ +1525 { return !(__lx < __ly); } │ │ │ │ +1526 │ │ │ │ +1527 /// Based on operator< │ │ │ │ +1528 template │ │ │ │ +1529 [[__nodiscard__]] │ │ │ │ +1530 inline bool │ │ │ │ +1531 _o_p_e_r_a_t_o_r_<_=(const forward_list<_Tp, _Alloc>& __lx, │ │ │ │ +1532 const forward_list<_Tp, _Alloc>& __ly) │ │ │ │ +1533 { return !(__ly < __lx); } │ │ │ │ +1534#endif // three-way comparison │ │ │ │ +1535 │ │ │ │ +1536 /// See std::forward_list::swap(). │ │ │ │ +1537 template │ │ │ │ +1538 inline void │ │ │ │ +_1_5_3_9 swap(_f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& _____l_x, │ │ │ │ +1540 _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& _____l_y) │ │ │ │ +1541 noexcept(noexcept(_____l_x.swap(_____l_y))) │ │ │ │ +1542 { _____l_x.swap(_____l_y); } │ │ │ │ +1543 │ │ │ │ +1544_GLIBCXX_END_NAMESPACE_CONTAINER │ │ │ │ +1545_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +1546} // namespace std │ │ │ │ +1547 │ │ │ │ +1548#endif // _FORWARD_LIST_H │ │ │ │ +_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t │ │ │ │ _s_t_l___f_u_n_c_t_i_o_n_._h │ │ │ │ -_f_u_n_c_t_i_o_n_a_l___h_a_s_h_._h │ │ │ │ +_s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h │ │ │ │ _a_l_l_o_c_a_t_o_r_._h │ │ │ │ +_s_t_l___a_l_g_o_b_a_s_e_._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_5 │ │ │ │ +_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_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_6_2 │ │ │ │ +_s_t_d_:_:_t_r_u_e___t_y_p_e │ │ │ │ +__bool_constant< true > true_type │ │ │ │ +The type used as a compile-time boolean with true value. │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_1_1 │ │ │ │ +_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_4 │ │ │ │ _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_7 │ │ │ │ +_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_5_7 │ │ │ │ _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_2 │ │ │ │ -_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_5 │ │ │ │ -_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_2_8 │ │ │ │ -_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_2_5_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_l_o_a_d___f_a_c_t_o_r │ │ │ │ -float load_factor() const noexcept │ │ │ │ -Returns the average number of elements per bucket. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_9_8 │ │ │ │ -_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_2_7_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_r_a_s_e │ │ │ │ -iterator erase(iterator __position) │ │ │ │ -Erases an element from an unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_9_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_5_0_8 │ │ │ │ -_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_7_1_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_:_1_8_8_8 │ │ │ │ -_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_:_1_9_1_6 │ │ │ │ -_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_2_7_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_m_a_x___b_u_c_k_e_t___c_o_u_n_t │ │ │ │ -size_type max_bucket_count() const noexcept │ │ │ │ -Returns the maximum number of buckets of the unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_2_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 │ │ │ │ +_s_t_d_:_:_i_s___s_a_m_e │ │ │ │ +is_same │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_4_8_2 │ │ │ │ +_s_t_d_:_:_i_s___n_o_t_h_r_o_w___d_e_f_a_u_l_t___c_o_n_s_t_r_u_c_t_i_b_l_e │ │ │ │ +is_nothrow_default_constructible │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_1_9_4 │ │ │ │ +_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_2_6 │ │ │ │ +_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. This is just a linked list with │ │ │ │ +nothing inside it.... │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_5_6 │ │ │ │ +_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_1_6 │ │ │ │ +_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_3_7 │ │ │ │ +_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_:_1_8_4 │ │ │ │ +_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_1_6 │ │ │ │ +_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_:_2_6_7 │ │ │ │ +_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_:_2_9_7 │ │ │ │ +_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_:_4_3_5 │ │ │ │ +_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_4_7_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_b_e_g_i_n │ │ │ │ -const_iterator begin() const noexcept │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_8_6 │ │ │ │ -_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_7_9_7 │ │ │ │ -_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_6_7_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_6_2_1 │ │ │ │ -_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_8_0_3 │ │ │ │ -_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_:_1_8_5_0 │ │ │ │ -_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_:_1_8_3_2 │ │ │ │ -_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_2_6_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_f_i_n_d │ │ │ │ -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_:_1_8_2_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_n_d │ │ │ │ -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_9_7_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 │ │ │ │ -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_6_3_6 │ │ │ │ -_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_4_4_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(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_3_0_3 │ │ │ │ -_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_2_6_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_m_p_l_a_c_e │ │ │ │ -iterator emplace(_Args &&... __args) │ │ │ │ -Attempts to build and insert a std::pair into the unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_5_3_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 key_type &__key) │ │ │ │ -Extract a node. │ │ │ │ -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_:_:_c_o_n_t_a_i_n_s │ │ │ │ -bool contains(const key_type &__x) const │ │ │ │ -Finds whether an element with the given key exists. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_8_6_9 │ │ │ │ -_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_2_7_7 │ │ │ │ -_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_6_6_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_6_9_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_:_7_3_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 │ │ │ │ +const_iterator before_begin() const noexcept │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_7_2_6 │ │ │ │ +_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_3_2_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()=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_:_6_0_3 │ │ │ │ +_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_0_2_6 │ │ │ │ +_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_0_6_8 │ │ │ │ +_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_:_8_3_6 │ │ │ │ +_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_2_6_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 _Alloc &__al) noexcept │ │ │ │ +Creates a forward_list with no elements. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_4_7_7 │ │ │ │ +_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_3_0_3 │ │ │ │ +_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_:_7_1_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(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_:_4_8_6 │ │ │ │ +_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_:_9_2_3 │ │ │ │ +_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_:_5_7_1 │ │ │ │ +_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_:_9_4_0 │ │ │ │ +_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_:_6_3_1 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_r_e_s_i_z_e │ │ │ │ +void resize(size_type __sz) │ │ │ │ +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_8_2 │ │ │ │ +_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_4_0 │ │ │ │ +_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_4_9_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 │ │ │ │ -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_9_4_9 │ │ │ │ -_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_0_0_4 │ │ │ │ -_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_5_8_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ -iterator insert(const 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_5_7_6 │ │ │ │ -_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_2_6_7 │ │ │ │ -_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_2_8_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_r_e_s_e_r_v_e │ │ │ │ -void reserve(size_type __n) │ │ │ │ -Prepare the unordered_multimap for a specified number of elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_2_0_3_4 │ │ │ │ -_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_:_1_9_0_0 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ -unordered_multimap(_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_3_2_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_l_e_a_r │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_7_5_5 │ │ │ │ +_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_:_5_4_4 │ │ │ │ +_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_:_6_8_8 │ │ │ │ +_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_:_7_4_5 │ │ │ │ +_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_1_3_1 │ │ │ │ +_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_:_7_8_5 │ │ │ │ +_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_:_6_5_0 │ │ │ │ +_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_:_5_9_5 │ │ │ │ +_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_:_8_6_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(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_:_5_3_1 │ │ │ │ +_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_0_0_5 │ │ │ │ +_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_:_7_6_5 │ │ │ │ +_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_1_7_5 │ │ │ │ +_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_:_8_2_3 │ │ │ │ +_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_:_5_1_5 │ │ │ │ +_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_0_4_9 │ │ │ │ +_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_2_3_8 │ │ │ │ +_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_7_4_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_:_1_8_2_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ -unordered_multimap(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_3_7_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_c_o_u_n_t │ │ │ │ -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_:_1_8_5_6 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_e_r_a_s_e │ │ │ │ -iterator erase(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_7_3_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_:_1_9_8_6 │ │ │ │ -_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_2_7_4 │ │ │ │ -_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_2_6_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_b_e_g_i_n │ │ │ │ -const_local_iterator begin(size_type __n) const │ │ │ │ -Returns a read-only (constant) iterator pointing to the first bucket element. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_6_0 │ │ │ │ -_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_:_1_8_3_8 │ │ │ │ -_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_2_8_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ -unordered_multimap(unordered_multimap &&)=default │ │ │ │ -Move constructor. │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ -unordered_multimap(const allocator_type &__a) │ │ │ │ -Creates an unordered_multimap with no elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_4_3 │ │ │ │ -_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_2_8_3 │ │ │ │ -_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_2_8_2 │ │ │ │ -_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_2_7_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ -__enable_if_t< is_constructible< value_type, _Pair && >::value, iterator > │ │ │ │ -insert(_Pair &&__x) │ │ │ │ -Inserts a std::pair into the unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_5_8_5 │ │ │ │ -_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_:_1_8_7_4 │ │ │ │ -_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_7_5_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_0_2_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___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_2_7_9 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_i_n_s_e_r_t │ │ │ │ -void insert(initializer_list< value_type > __l) │ │ │ │ -Attempts to insert a list of elements into the unordered_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_6_4_8 │ │ │ │ -_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_1_1_4 │ │ │ │ +_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_9_0 │ │ │ │ +_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_5_1_2 │ │ │ │ -_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_4_6_7 │ │ │ │ -_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_:_1_9_6_4 │ │ │ │ -_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_:_7_9_5 │ │ │ │ +_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_:_6_7_1 │ │ │ │ +_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_4_5_7 │ │ │ │ -_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_4_9_0 │ │ │ │ -_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_2_6_4 │ │ │ │ -_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_6_5_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_:_1_9_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 │ │ │ │ -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_6_1_0 │ │ │ │ -_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_4_6_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(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_5_6_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 │ │ │ │ -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_6_1_6 │ │ │ │ -_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_:_1_8_9_4 │ │ │ │ -_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_2_6_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_:_:_g_e_t___a_l_l_o_c_a_t_o_r │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_8_0_4 │ │ │ │ +_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_multimap. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_4_5_0 │ │ │ │ -_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_0_1_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 │ │ │ │ -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_9_0_6 │ │ │ │ -_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_0 │ │ │ │ -_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_0_4 │ │ │ │ -_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_2 │ │ │ │ -_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_1_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_0_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_2_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_4_0 │ │ │ │ -_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_2_4 │ │ │ │ -_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_0_5 │ │ │ │ -_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_:_8_8_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_:_2_9_7 │ │ │ │ -_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_2_9 │ │ │ │ -_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_:_8_9_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_3_5 │ │ │ │ -_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_0_9 │ │ │ │ -_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_:_9_4_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_0_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_:_7_8_8 │ │ │ │ -_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_2_3 │ │ │ │ -_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_3_2 │ │ │ │ -_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_:_5_5_9 │ │ │ │ -_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_1_3_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_0_6_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_:_9_6_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_5_0 │ │ │ │ -_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_0 │ │ │ │ -_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_:_5_9_8 │ │ │ │ -_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_:_3_5_4 │ │ │ │ -_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_3 │ │ │ │ -_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_0_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_1_2 │ │ │ │ -_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_:_7_7_0 │ │ │ │ -_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_:_8_8_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_0_8_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_:_9_5_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_:_9_3_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_2_2 │ │ │ │ -_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_:_3_6_3 │ │ │ │ -_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_0 │ │ │ │ -_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_0_6_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_5_8 │ │ │ │ -_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_:_3_9_5 │ │ │ │ -_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_0_9_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_1_7 │ │ │ │ -_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_:_5_7_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[](key_type &&__k) │ │ │ │ -Subscript ( [] ) access to unordered_map data. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_9_9_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_:_5_6_5 │ │ │ │ -_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_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 │ │ │ │ -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_:_6_6_2 │ │ │ │ -_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_7_9 │ │ │ │ -_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_:_7_9_8 │ │ │ │ -_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_:_9_8_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_:_4_7_9 │ │ │ │ -_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_4_1 │ │ │ │ -_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_:_8_5_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_1 │ │ │ │ -_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_2 │ │ │ │ -_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_4 │ │ │ │ -_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_:_7_5_3 │ │ │ │ -_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_:_3_6_7 │ │ │ │ -_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_0_7_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_2_8 │ │ │ │ -_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_1_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_:_:_u_n_o_r_d_e_r_e_d___m_a_p │ │ │ │ -unordered_map(const allocator_type &__a) │ │ │ │ -Creates an unordered_map with no elements. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_9_8 │ │ │ │ -_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_1_8 │ │ │ │ -_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_1_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_3_2 │ │ │ │ -_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_:_8_5_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_:_9_6_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_4 │ │ │ │ -_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_3 │ │ │ │ -_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_6 │ │ │ │ -_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_:_8_7_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_0_9_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_:_7_4_8 │ │ │ │ -_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_1_2 │ │ │ │ -_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_0_4_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_0_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_3_7 │ │ │ │ -_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_1_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_5 │ │ │ │ -_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_2_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_2_6 │ │ │ │ -_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_4_5 │ │ │ │ -_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_1_9 │ │ │ │ -_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_2_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_:_7_0_5 │ │ │ │ +_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_:_8_8_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(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_:_5_6_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_1_8_0 │ │ │ │ +_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_4_5 │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_7_7_5 │ │ │ │ +_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_:_9_0_5 │ │ │ │ +_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_:_7_0_0 │ │ │ │ +_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_:_8_1_2 │ │ │ │ +_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_:_9_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_2_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 │ │ │ │ -_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_:_4_9 │ │ │ │ +_____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_3_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_:_3_6_1 │ │ │ │ +_____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_1_0 │ │ │ │ +_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-14-base/libstdc++/user/a00380.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-14-base/libstdc++/user/a00380_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-2024 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 1997-2024 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,271 +72,241 @@ │ │ │
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#pragma GCC system_header
│ │ │ +
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#if __cplusplus < 201103L
│ │ │ -
36# include <bits/c++0x_warning.h>
│ │ │ -
37#else
│ │ │ -
38
│ │ │ -
39#include <bits/chrono.h>
│ │ │ -
40#include <bits/error_constants.h> // for std::errc
│ │ │ -
41#include <bits/move.h> // for std::swap
│ │ │ -
42#include <bits/std_mutex.h> // for std::defer_lock_t
│ │ │ -
43
│ │ │ -
44namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
45{
│ │ │ -
46_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
47
│ │ │ -
48 /** @brief A movable scoped lock type.
│ │ │ -
49 *
│ │ │ -
50 * A unique_lock controls mutex ownership within a scope. Ownership of the
│ │ │ -
51 * mutex can be delayed until after construction and can be transferred
│ │ │ -
52 * to another unique_lock by move construction or move assignment. If a
│ │ │ -
53 * mutex lock is owned when the destructor runs ownership will be released.
│ │ │ -
54 *
│ │ │ -
55 * @headerfile mutex
│ │ │ -
56 * @ingroup mutexes
│ │ │ -
57 * @since C++11
│ │ │ +
35#pragma GCC system_header
│ │ │ +
36
│ │ │ +
37namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
38{
│ │ │ +
39_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
40
│ │ │ +
41 /**
│ │ │ +
42 * @addtogroup numeric_arrays
│ │ │ +
43 * @{
│ │ │ +
44 */
│ │ │ +
45
│ │ │ +
46 /**
│ │ │ +
47 * @brief Reference to multi-dimensional subset of an array.
│ │ │ +
48 *
│ │ │ +
49 * A gslice_array is a reference to the actual elements of an array
│ │ │ +
50 * specified by a gslice. The way to get a gslice_array is to call
│ │ │ +
51 * operator[](gslice) on a valarray. The returned gslice_array then
│ │ │ +
52 * permits carrying operations out on the referenced subset of elements in
│ │ │ +
53 * the original valarray. For example, operator+=(valarray) will add
│ │ │ +
54 * values to the subset of elements in the underlying valarray this
│ │ │ +
55 * gslice_array refers to.
│ │ │ +
56 *
│ │ │ +
57 * @param Tp Element type.
│ │ │
58 */
│ │ │ -
59 template<typename _Mutex>
│ │ │ +
59 template<typename _Tp>
│ │ │
│ │ │ - │ │ │ + │ │ │
61 {
│ │ │
62 public:
│ │ │ -
63 typedef _Mutex mutex_type;
│ │ │ +
63 typedef _Tp value_type;
│ │ │
64
│ │ │ -
65 unique_lock() noexcept
│ │ │ -
66 : _M_device(0), _M_owns(false)
│ │ │ -
67 { }
│ │ │ -
68
│ │ │ - │ │ │ -
70 explicit unique_lock(mutex_type& __m)
│ │ │ -
71 : _M_device(std::__addressof(__m)), _M_owns(false)
│ │ │ -
72 {
│ │ │ -
73 lock();
│ │ │ -
74 _M_owns = true;
│ │ │ -
75 }
│ │ │ -
76
│ │ │ -
77 unique_lock(mutex_type& __m, defer_lock_t) noexcept
│ │ │ -
78 : _M_device(std::__addressof(__m)), _M_owns(false)
│ │ │ -
79 { }
│ │ │ -
80
│ │ │ - │ │ │ -
82 unique_lock(mutex_type& __m, try_to_lock_t)
│ │ │ -
83 : _M_device(std::__addressof(__m)), _M_owns(_M_device->try_lock())
│ │ │ -
84 { }
│ │ │ -
85
│ │ │ - │ │ │ -
87 unique_lock(mutex_type& __m, adopt_lock_t) noexcept
│ │ │ -
88 : _M_device(std::__addressof(__m)), _M_owns(true)
│ │ │ -
89 {
│ │ │ -
90 // XXX calling thread owns mutex
│ │ │ -
91 }
│ │ │ -
92
│ │ │ -
93 template<typename _Clock, typename _Duration>
│ │ │ - │ │ │ -
95 unique_lock(mutex_type& __m,
│ │ │ - │ │ │ -
97 : _M_device(std::__addressof(__m)),
│ │ │ -
98 _M_owns(_M_device->try_lock_until(__atime))
│ │ │ -
99 { }
│ │ │ -
100
│ │ │ -
101 template<typename _Rep, typename _Period>
│ │ │ -
102 [[__nodiscard__]]
│ │ │ -
103 unique_lock(mutex_type& __m,
│ │ │ - │ │ │ -
105 : _M_device(std::__addressof(__m)),
│ │ │ -
106 _M_owns(_M_device->try_lock_for(__rtime))
│ │ │ -
107 { }
│ │ │ -
108
│ │ │ - │ │ │ -
110 {
│ │ │ -
111 if (_M_owns)
│ │ │ -
112 unlock();
│ │ │ -
113 }
│ │ │ -
114
│ │ │ -
115 unique_lock(const unique_lock&) = delete;
│ │ │ -
116 unique_lock& operator=(const unique_lock&) = delete;
│ │ │ -
117
│ │ │ -
118 unique_lock(unique_lock&& __u) noexcept
│ │ │ -
119 : _M_device(__u._M_device), _M_owns(__u._M_owns)
│ │ │ -
120 {
│ │ │ -
121 __u._M_device = 0;
│ │ │ -
122 __u._M_owns = false;
│ │ │ -
123 }
│ │ │ -
124
│ │ │ -
125 unique_lock& operator=(unique_lock&& __u) noexcept
│ │ │ -
126 {
│ │ │ -
127 if(_M_owns)
│ │ │ -
128 unlock();
│ │ │ -
129
│ │ │ -
130 unique_lock(std::move(__u)).swap(*this);
│ │ │ -
131
│ │ │ -
132 __u._M_device = 0;
│ │ │ -
133 __u._M_owns = false;
│ │ │ -
134
│ │ │ -
135 return *this;
│ │ │ -
136 }
│ │ │ -
137
│ │ │ -
138 void
│ │ │ -
139 lock()
│ │ │ -
140 {
│ │ │ -
141 if (!_M_device)
│ │ │ -
142 __throw_system_error(int(errc::operation_not_permitted));
│ │ │ -
143 else if (_M_owns)
│ │ │ -
144 __throw_system_error(int(errc::resource_deadlock_would_occur));
│ │ │ -
145 else
│ │ │ -
146 {
│ │ │ -
147 _M_device->lock();
│ │ │ -
148 _M_owns = true;
│ │ │ -
149 }
│ │ │ -
150 }
│ │ │ -
151
│ │ │ -
152 _GLIBCXX_NODISCARD
│ │ │ -
153 bool
│ │ │ -
154 try_lock()
│ │ │ -
155 {
│ │ │ -
156 if (!_M_device)
│ │ │ -
157 __throw_system_error(int(errc::operation_not_permitted));
│ │ │ -
158 else if (_M_owns)
│ │ │ -
159 __throw_system_error(int(errc::resource_deadlock_would_occur));
│ │ │ -
160 else
│ │ │ -
161 {
│ │ │ -
162 _M_owns = _M_device->try_lock();
│ │ │ -
163 return _M_owns;
│ │ │ -
164 }
│ │ │ -
165 }
│ │ │ -
166
│ │ │ -
167 template<typename _Clock, typename _Duration>
│ │ │ -
168 _GLIBCXX_NODISCARD
│ │ │ -
169 bool
│ │ │ - │ │ │ -
171 {
│ │ │ -
172 if (!_M_device)
│ │ │ -
173 __throw_system_error(int(errc::operation_not_permitted));
│ │ │ -
174 else if (_M_owns)
│ │ │ -
175 __throw_system_error(int(errc::resource_deadlock_would_occur));
│ │ │ -
176 else
│ │ │ -
177 {
│ │ │ -
178 _M_owns = _M_device->try_lock_until(__atime);
│ │ │ -
179 return _M_owns;
│ │ │ -
180 }
│ │ │ -
181 }
│ │ │ -
182
│ │ │ -
183 template<typename _Rep, typename _Period>
│ │ │ -
184 _GLIBCXX_NODISCARD
│ │ │ -
185 bool
│ │ │ -
186 try_lock_for(const chrono::duration<_Rep, _Period>& __rtime)
│ │ │ -
187 {
│ │ │ -
188 if (!_M_device)
│ │ │ -
189 __throw_system_error(int(errc::operation_not_permitted));
│ │ │ -
190 else if (_M_owns)
│ │ │ -
191 __throw_system_error(int(errc::resource_deadlock_would_occur));
│ │ │ -
192 else
│ │ │ -
193 {
│ │ │ -
194 _M_owns = _M_device->try_lock_for(__rtime);
│ │ │ -
195 return _M_owns;
│ │ │ -
196 }
│ │ │ -
197 }
│ │ │ -
198
│ │ │ -
199 void
│ │ │ -
200 unlock()
│ │ │ -
201 {
│ │ │ -
202 if (!_M_owns)
│ │ │ -
203 __throw_system_error(int(errc::operation_not_permitted));
│ │ │ -
204 else if (_M_device)
│ │ │ -
205 {
│ │ │ -
206 _M_device->unlock();
│ │ │ -
207 _M_owns = false;
│ │ │ -
208 }
│ │ │ -
209 }
│ │ │ -
210
│ │ │ -
211 void
│ │ │ -
212 swap(unique_lock& __u) noexcept
│ │ │ -
213 {
│ │ │ -
214 std::swap(_M_device, __u._M_device);
│ │ │ -
215 std::swap(_M_owns, __u._M_owns);
│ │ │ -
216 }
│ │ │ -
217
│ │ │ -
218 mutex_type*
│ │ │ -
219 release() noexcept
│ │ │ -
220 {
│ │ │ -
221 mutex_type* __ret = _M_device;
│ │ │ -
222 _M_device = 0;
│ │ │ -
223 _M_owns = false;
│ │ │ -
224 return __ret;
│ │ │ -
225 }
│ │ │ -
226
│ │ │ -
227 _GLIBCXX_NODISCARD
│ │ │ -
228 bool
│ │ │ -
229 owns_lock() const noexcept
│ │ │ -
230 { return _M_owns; }
│ │ │ -
231
│ │ │ -
232 explicit operator bool() const noexcept
│ │ │ -
233 { return owns_lock(); }
│ │ │ -
234
│ │ │ -
235 _GLIBCXX_NODISCARD
│ │ │ -
236 mutex_type*
│ │ │ -
237 mutex() const noexcept
│ │ │ -
238 { return _M_device; }
│ │ │ -
239
│ │ │ -
240 private:
│ │ │ -
241 mutex_type* _M_device;
│ │ │ -
242 bool _M_owns;
│ │ │ -
243 };
│ │ │ +
65 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
66 // 253. valarray helper functions are almost entirely useless
│ │ │ +
67
│ │ │ +
68 /// Copy constructor. Both slices refer to the same underlying array.
│ │ │ + │ │ │ +
70
│ │ │ +
71 /// Assignment operator. Assigns slice elements to corresponding
│ │ │ +
72 /// elements of @a a.
│ │ │ + │ │ │ +
74
│ │ │ +
75 /// Assign slice elements to corresponding elements of @a v.
│ │ │ +
76 void operator=(const valarray<_Tp>&) const;
│ │ │ +
77 /// Multiply slice elements by corresponding elements of @a v.
│ │ │ +
78 void operator*=(const valarray<_Tp>&) const;
│ │ │ +
79 /// Divide slice elements by corresponding elements of @a v.
│ │ │ +
80 void operator/=(const valarray<_Tp>&) const;
│ │ │ +
81 /// Modulo slice elements by corresponding elements of @a v.
│ │ │ +
82 void operator%=(const valarray<_Tp>&) const;
│ │ │ +
83 /// Add corresponding elements of @a v to slice elements.
│ │ │ +
84 void operator+=(const valarray<_Tp>&) const;
│ │ │ +
85 /// Subtract corresponding elements of @a v from slice elements.
│ │ │ +
86 void operator-=(const valarray<_Tp>&) const;
│ │ │ +
87 /// Logical xor slice elements with corresponding elements of @a v.
│ │ │ +
88 void operator^=(const valarray<_Tp>&) const;
│ │ │ +
89 /// Logical and slice elements with corresponding elements of @a v.
│ │ │ +
90 void operator&=(const valarray<_Tp>&) const;
│ │ │ +
91 /// Logical or slice elements with corresponding elements of @a v.
│ │ │ +
92 void operator|=(const valarray<_Tp>&) const;
│ │ │ +
93 /// Left shift slice elements by corresponding elements of @a v.
│ │ │ +
94 void operator<<=(const valarray<_Tp>&) const;
│ │ │ +
95 /// Right shift slice elements by corresponding elements of @a v.
│ │ │ +
96 void operator>>=(const valarray<_Tp>&) const;
│ │ │ +
97 /// Assign all slice elements to @a t.
│ │ │ +
98 void operator=(const _Tp&) const;
│ │ │ +
99
│ │ │ +
100 template<class _Dom>
│ │ │ +
101 void operator=(const _Expr<_Dom, _Tp>&) const;
│ │ │ +
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
│ │ │ +
123 private:
│ │ │ +
124 _Array<_Tp> _M_array;
│ │ │ +
125 const valarray<size_t>& _M_index;
│ │ │ +
126
│ │ │ +
127 friend class valarray<_Tp>;
│ │ │ +
128
│ │ │ + │ │ │ +
130
│ │ │ +
131#if __cplusplus < 201103L
│ │ │ +
132 // not implemented
│ │ │ +
133 gslice_array();
│ │ │ +
134#else
│ │ │ +
135 public:
│ │ │ +
136 gslice_array() = delete;
│ │ │ +
137#endif
│ │ │ +
138 };
│ │ │
│ │ │ -
244
│ │ │ -
245 /// Swap overload for unique_lock objects.
│ │ │ -
246 /// @relates unique_lock
│ │ │ -
247 template<typename _Mutex>
│ │ │ -
248 inline void
│ │ │ -
│ │ │ - │ │ │ -
250 { __x.swap(__y); }
│ │ │ +
139
│ │ │ +
140 template<typename _Tp>
│ │ │ +
141 inline
│ │ │ + │ │ │ +
143 const valarray<size_t>& __i)
│ │ │ +
144 : _M_array(__a), _M_index(__i) {}
│ │ │ +
145
│ │ │ +
146 template<typename _Tp>
│ │ │ +
147 inline
│ │ │ +
148 gslice_array<_Tp>::gslice_array(const gslice_array<_Tp>& __a)
│ │ │ +
149 : _M_array(__a._M_array), _M_index(__a._M_index) {}
│ │ │ +
150
│ │ │ +
151 template<typename _Tp>
│ │ │ +
152 inline gslice_array<_Tp>&
│ │ │ +
153 gslice_array<_Tp>::operator=(const gslice_array<_Tp>& __a)
│ │ │ +
154 {
│ │ │ +
155 std::__valarray_copy(_Array<_Tp>(__a._M_array),
│ │ │ +
156 _Array<size_t>(__a._M_index), _M_index.size(),
│ │ │ +
157 _M_array, _Array<size_t>(_M_index));
│ │ │ +
158 return *this;
│ │ │ +
159 }
│ │ │ +
160
│ │ │ +
161 template<typename _Tp>
│ │ │ +
162 inline void
│ │ │ +
│ │ │ +
163 gslice_array<_Tp>::operator=(const _Tp& __t) const
│ │ │ +
164 {
│ │ │ +
165 std::__valarray_fill(_M_array, _Array<size_t>(_M_index),
│ │ │ +
166 _M_index.size(), __t);
│ │ │ +
167 }
│ │ │
│ │ │ -
251
│ │ │ -
252_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
253} // namespace
│ │ │ -
254
│ │ │ -
255#endif // C++11
│ │ │ -
256#endif // _GLIBCXX_UNIQUE_LOCK_H
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │ -
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:51
│ │ │ +
168
│ │ │ +
169 template<typename _Tp>
│ │ │ +
170 inline void
│ │ │ +
│ │ │ + │ │ │ +
172 {
│ │ │ +
173 std::__valarray_copy(_Array<_Tp>(__v), __v.size(),
│ │ │ +
174 _M_array, _Array<size_t>(_M_index));
│ │ │ +
175 }
│ │ │ +
│ │ │ +
176
│ │ │ +
177 template<typename _Tp>
│ │ │ +
178 template<class _Dom>
│ │ │ +
179 inline void
│ │ │ + │ │ │ +
181 {
│ │ │ +
182 std::__valarray_copy (__e, _M_index.size(), _M_array,
│ │ │ +
183 _Array<size_t>(_M_index));
│ │ │ +
184 }
│ │ │ +
185
│ │ │ +
186 /// @cond undocumented
│ │ │ +
187#undef _DEFINE_VALARRAY_OPERATOR
│ │ │ +
188#define _DEFINE_VALARRAY_OPERATOR(_Op, _Name) \
│ │ │ +
189 template<typename _Tp> \
│ │ │ +
190 inline void \
│ │ │ +
191 gslice_array<_Tp>::operator _Op##=(const valarray<_Tp>& __v) const \
│ │ │ +
192 { \
│ │ │ +
193 _Array_augmented_##_Name(_M_array, _Array<size_t>(_M_index), \
│ │ │ +
194 _Array<_Tp>(__v), __v.size()); \
│ │ │ +
195 } \
│ │ │ +
196 \
│ │ │ +
197 template<typename _Tp> \
│ │ │ +
198 template<class _Dom> \
│ │ │ +
199 inline void \
│ │ │ +
200 gslice_array<_Tp>::operator _Op##= (const _Expr<_Dom, _Tp>& __e) const\
│ │ │ +
201 { \
│ │ │ +
202 _Array_augmented_##_Name(_M_array, _Array<size_t>(_M_index), __e,\
│ │ │ +
203 _M_index.size()); \
│ │ │ +
204 }
│ │ │ +
205
│ │ │ +
206_DEFINE_VALARRAY_OPERATOR(*, __multiplies)
│ │ │ +
207_DEFINE_VALARRAY_OPERATOR(/, __divides)
│ │ │ +
208_DEFINE_VALARRAY_OPERATOR(%, __modulus)
│ │ │ +
209_DEFINE_VALARRAY_OPERATOR(+, __plus)
│ │ │ +
210_DEFINE_VALARRAY_OPERATOR(-, __minus)
│ │ │ +
211_DEFINE_VALARRAY_OPERATOR(^, __bitwise_xor)
│ │ │ +
212_DEFINE_VALARRAY_OPERATOR(&, __bitwise_and)
│ │ │ +
213_DEFINE_VALARRAY_OPERATOR(|, __bitwise_or)
│ │ │ +
214_DEFINE_VALARRAY_OPERATOR(<<, __shift_left)
│ │ │ +
215_DEFINE_VALARRAY_OPERATOR(>>, __shift_right)
│ │ │ +
216
│ │ │ +
217#undef _DEFINE_VALARRAY_OPERATOR
│ │ │ +
218 /// @endcond
│ │ │ +
219
│ │ │ +
220 /// @} group numeric_arrays
│ │ │ +
221
│ │ │ +
222_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
223} // namespace
│ │ │ +
224
│ │ │ +
225#endif /* _GSLICE_ARRAY_H */
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
chrono::duration represents a distance between two points in time
Definition chrono.h:512
│ │ │ -
chrono::time_point represents a point in time as measured by a clock
Definition chrono.h:923
│ │ │ - │ │ │ -
Do not acquire ownership of the mutex.
Definition std_mutex.h:216
│ │ │ -
Try to acquire ownership of the mutex without blocking.
Definition std_mutex.h:219
│ │ │ -
Assume the calling thread has already obtained mutex ownership and manage it.
Definition std_mutex.h:223
│ │ │ -
A movable scoped lock type.
Definition unique_lock.h:61
│ │ │ -
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:130
│ │ │ +
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-2024 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 1997-2024 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,283 +21,257 @@ │ │ │ │ 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#pragma GCC system_header │ │ │ │ +30// Written by Gabriel Dos Reis │ │ │ │ +31 │ │ │ │ +32#ifndef _GSLICE_ARRAY_H │ │ │ │ +33#define _GSLICE_ARRAY_H 1 │ │ │ │ 34 │ │ │ │ -35#if __cplusplus < 201103L │ │ │ │ -36# include <_b_i_t_s_/_c_+_+_0_x___w_a_r_n_i_n_g_._h> │ │ │ │ -37#else │ │ │ │ -38 │ │ │ │ -39#include <_b_i_t_s_/_c_h_r_o_n_o_._h> │ │ │ │ -40#include <_b_i_t_s_/_e_r_r_o_r___c_o_n_s_t_a_n_t_s_._h> // for std::errc │ │ │ │ -41#include <_b_i_t_s_/_m_o_v_e_._h> // for std::swap │ │ │ │ -42#include <_b_i_t_s_/_s_t_d___m_u_t_e_x_._h> // for std::defer_lock_t │ │ │ │ -43 │ │ │ │ -44namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -45{ │ │ │ │ -46_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -47 │ │ │ │ -48 /** @brief A movable scoped lock type. │ │ │ │ -49 * │ │ │ │ -50 * A unique_lock controls mutex ownership within a scope. Ownership of the │ │ │ │ -51 * mutex can be delayed until after construction and can be transferred │ │ │ │ -52 * to another unique_lock by move construction or move assignment. If a │ │ │ │ -53 * mutex lock is owned when the destructor runs ownership will be released. │ │ │ │ -54 * │ │ │ │ -55 * @headerfile mutex │ │ │ │ -56 * @ingroup mutexes │ │ │ │ -57 * @since C++11 │ │ │ │ +35#pragma GCC system_header │ │ │ │ +36 │ │ │ │ +37namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +38{ │ │ │ │ +39_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +40 │ │ │ │ +41 /** │ │ │ │ +42 * @addtogroup numeric_arrays │ │ │ │ +43 * @{ │ │ │ │ +44 */ │ │ │ │ +45 │ │ │ │ +46 /** │ │ │ │ +47 * @brief Reference to multi-dimensional subset of an array. │ │ │ │ +48 * │ │ │ │ +49 * A gslice_array is a reference to the actual elements of an array │ │ │ │ +50 * specified by a gslice. The way to get a gslice_array is to call │ │ │ │ +51 * operator[](gslice) on a valarray. The returned gslice_array then │ │ │ │ +52 * permits carrying operations out on the referenced subset of elements in │ │ │ │ +53 * the original valarray. For example, operator+=(valarray) will add │ │ │ │ +54 * values to the subset of elements in the underlying valarray this │ │ │ │ +55 * gslice_array refers to. │ │ │ │ +56 * │ │ │ │ +57 * @param Tp Element type. │ │ │ │ 58 */ │ │ │ │ -59 template │ │ │ │ -_6_0 class _u_n_i_q_u_e___l_o_c_k │ │ │ │ +59 template │ │ │ │ +_6_0 class _g_s_l_i_c_e___a_r_r_a_y │ │ │ │ 61 { │ │ │ │ 62 public: │ │ │ │ -63 typedef ___M_u_t_e_x mutex_type; │ │ │ │ +63 typedef _Tp value_type; │ │ │ │ 64 │ │ │ │ -65 _u_n_i_q_u_e___l_o_c_k() noexcept │ │ │ │ -66 : _M_device(0), _M_owns(false) │ │ │ │ -67 { } │ │ │ │ -68 │ │ │ │ -69 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ -70 explicit _u_n_i_q_u_e___l_o_c_k(mutex_type& _____m) │ │ │ │ -71 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____m)), _M_owns(false) │ │ │ │ -72 { │ │ │ │ -73 lock(); │ │ │ │ -74 _M_owns = true; │ │ │ │ -75 } │ │ │ │ -76 │ │ │ │ -77 _u_n_i_q_u_e___l_o_c_k(mutex_type& _____m, _d_e_f_e_r___l_o_c_k___t) noexcept │ │ │ │ -78 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____m)), _M_owns(false) │ │ │ │ -79 { } │ │ │ │ -80 │ │ │ │ -81 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ -82 _u_n_i_q_u_e___l_o_c_k(mutex_type& _____m, _t_r_y___t_o___l_o_c_k___t) │ │ │ │ -83 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____m)), _M_owns(_M_device->try_lock()) │ │ │ │ -84 { } │ │ │ │ -85 │ │ │ │ -86 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ -87 _u_n_i_q_u_e___l_o_c_k(mutex_type& _____m, _a_d_o_p_t___l_o_c_k___t) noexcept │ │ │ │ -88 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____m)), _M_owns(true) │ │ │ │ -89 { │ │ │ │ -90 // XXX calling thread owns mutex │ │ │ │ -91 } │ │ │ │ -92 │ │ │ │ -93 template │ │ │ │ -94 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ -95 _u_n_i_q_u_e___l_o_c_k(mutex_type& _____m, │ │ │ │ -96 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) │ │ │ │ -97 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____m)), │ │ │ │ -98 _M_owns(_M_device->try_lock_until(_____a_t_i_m_e)) │ │ │ │ -99 { } │ │ │ │ -100 │ │ │ │ -101 template │ │ │ │ -102 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ -103 _u_n_i_q_u_e___l_o_c_k(mutex_type& _____m, │ │ │ │ -104 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) │ │ │ │ -105 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____m)), │ │ │ │ -106 _M_owns(_M_device->try_lock_for(_____r_t_i_m_e)) │ │ │ │ -107 { } │ │ │ │ -108 │ │ │ │ -109 _~_u_n_i_q_u_e___l_o_c_k() │ │ │ │ -110 { │ │ │ │ -111 if (_M_owns) │ │ │ │ -112 unlock(); │ │ │ │ -113 } │ │ │ │ -114 │ │ │ │ -115 _u_n_i_q_u_e___l_o_c_k(const _u_n_i_q_u_e___l_o_c_k&) = delete; │ │ │ │ -116 _u_n_i_q_u_e___l_o_c_k& operator=(const _u_n_i_q_u_e___l_o_c_k&) = delete; │ │ │ │ -117 │ │ │ │ -118 _u_n_i_q_u_e___l_o_c_k(_u_n_i_q_u_e___l_o_c_k&& _____u) noexcept │ │ │ │ -119 : _M_device(_____u._M_device), _M_owns(_____u._M_owns) │ │ │ │ -120 { │ │ │ │ -121 _____u._M_device = 0; │ │ │ │ -122 _____u._M_owns = false; │ │ │ │ -123 } │ │ │ │ -124 │ │ │ │ -125 _u_n_i_q_u_e___l_o_c_k& operator=(_u_n_i_q_u_e___l_o_c_k&& _____u) noexcept │ │ │ │ -126 { │ │ │ │ -127 if(_M_owns) │ │ │ │ -128 unlock(); │ │ │ │ -129 │ │ │ │ -130 _u_n_i_q_u_e___l_o_c_k(_s_t_d_:_:_m_o_v_e(_____u)).swap(*this); │ │ │ │ -131 │ │ │ │ -132 _____u._M_device = 0; │ │ │ │ -133 _____u._M_owns = false; │ │ │ │ -134 │ │ │ │ -135 return *this; │ │ │ │ -136 } │ │ │ │ -137 │ │ │ │ -138 void │ │ │ │ -139 lock() │ │ │ │ -140 { │ │ │ │ -141 if (!_M_device) │ │ │ │ -142 __throw_system_error(int(errc::operation_not_permitted)); │ │ │ │ -143 else if (_M_owns) │ │ │ │ -144 __throw_system_error(int(errc::resource_deadlock_would_occur)); │ │ │ │ -145 else │ │ │ │ -146 { │ │ │ │ -147 _M_device->lock(); │ │ │ │ -148 _M_owns = true; │ │ │ │ -149 } │ │ │ │ -150 } │ │ │ │ -151 │ │ │ │ -152 _GLIBCXX_NODISCARD │ │ │ │ -153 bool │ │ │ │ -154 try_lock() │ │ │ │ -155 { │ │ │ │ -156 if (!_M_device) │ │ │ │ -157 __throw_system_error(int(errc::operation_not_permitted)); │ │ │ │ -158 else if (_M_owns) │ │ │ │ -159 __throw_system_error(int(errc::resource_deadlock_would_occur)); │ │ │ │ -160 else │ │ │ │ -161 { │ │ │ │ -162 _M_owns = _M_device->try_lock(); │ │ │ │ -163 return _M_owns; │ │ │ │ -164 } │ │ │ │ -165 } │ │ │ │ -166 │ │ │ │ -167 template │ │ │ │ -168 _GLIBCXX_NODISCARD │ │ │ │ -169 bool │ │ │ │ -170 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) │ │ │ │ -171 { │ │ │ │ -172 if (!_M_device) │ │ │ │ -173 __throw_system_error(int(errc::operation_not_permitted)); │ │ │ │ -174 else if (_M_owns) │ │ │ │ -175 __throw_system_error(int(errc::resource_deadlock_would_occur)); │ │ │ │ -176 else │ │ │ │ -177 { │ │ │ │ -178 _M_owns = _M_device->try_lock_until(_____a_t_i_m_e); │ │ │ │ -179 return _M_owns; │ │ │ │ -180 } │ │ │ │ -181 } │ │ │ │ -182 │ │ │ │ -183 template │ │ │ │ -184 _GLIBCXX_NODISCARD │ │ │ │ -185 bool │ │ │ │ -186 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) │ │ │ │ -187 { │ │ │ │ -188 if (!_M_device) │ │ │ │ -189 __throw_system_error(int(errc::operation_not_permitted)); │ │ │ │ -190 else if (_M_owns) │ │ │ │ -191 __throw_system_error(int(errc::resource_deadlock_would_occur)); │ │ │ │ -192 else │ │ │ │ -193 { │ │ │ │ -194 _M_owns = _M_device->try_lock_for(_____r_t_i_m_e); │ │ │ │ -195 return _M_owns; │ │ │ │ -196 } │ │ │ │ -197 } │ │ │ │ -198 │ │ │ │ -199 void │ │ │ │ -200 unlock() │ │ │ │ -201 { │ │ │ │ -202 if (!_M_owns) │ │ │ │ -203 __throw_system_error(int(errc::operation_not_permitted)); │ │ │ │ -204 else if (_M_device) │ │ │ │ -205 { │ │ │ │ -206 _M_device->unlock(); │ │ │ │ -207 _M_owns = false; │ │ │ │ -208 } │ │ │ │ -209 } │ │ │ │ -210 │ │ │ │ -211 void │ │ │ │ -212 swap(_u_n_i_q_u_e___l_o_c_k& _____u) noexcept │ │ │ │ -213 { │ │ │ │ -214 std::swap(_M_device, _____u._M_device); │ │ │ │ -215 std::swap(_M_owns, _____u._M_owns); │ │ │ │ -216 } │ │ │ │ -217 │ │ │ │ -218 mutex_type* │ │ │ │ -219 release() noexcept │ │ │ │ -220 { │ │ │ │ -221 mutex_type* _____r_e_t = _M_device; │ │ │ │ -222 _M_device = 0; │ │ │ │ -223 _M_owns = false; │ │ │ │ -224 return _____r_e_t; │ │ │ │ -225 } │ │ │ │ -226 │ │ │ │ -227 _GLIBCXX_NODISCARD │ │ │ │ -228 bool │ │ │ │ -229 owns_lock() const noexcept │ │ │ │ -230 { return _M_owns; } │ │ │ │ -231 │ │ │ │ -232 explicit operator bool() const noexcept │ │ │ │ -233 { return owns_lock(); } │ │ │ │ -234 │ │ │ │ -235 _GLIBCXX_NODISCARD │ │ │ │ -236 mutex_type* │ │ │ │ -237 _m_u_t_e_x() const noexcept │ │ │ │ -238 { return _M_device; } │ │ │ │ -239 │ │ │ │ -240 private: │ │ │ │ -241 mutex_type* _M_device; │ │ │ │ -242 bool _M_owns; │ │ │ │ -243 }; │ │ │ │ -244 │ │ │ │ -245 /// Swap overload for unique_lock objects. │ │ │ │ -246 /// @relates unique_lock │ │ │ │ -247 template │ │ │ │ -248 inline void │ │ │ │ -_2_4_9 _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 │ │ │ │ -250 { __x.swap(__y); } │ │ │ │ -251 │ │ │ │ -252_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -253} // namespace │ │ │ │ -254 │ │ │ │ -255#endif // C++11 │ │ │ │ -256#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_7 │ │ │ │ -_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_1 │ │ │ │ +65 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +66 // 253. valarray helper functions are almost entirely useless │ │ │ │ +67 │ │ │ │ +68 /// Copy constructor. Both slices refer to the same underlying array. │ │ │ │ +_6_9 _g_s_l_i_c_e___a_r_r_a_y(const _g_s_l_i_c_e___a_r_r_a_y&); │ │ │ │ +70 │ │ │ │ +71 /// Assignment operator. Assigns slice elements to corresponding │ │ │ │ +72 /// elements of @a a. │ │ │ │ +_7_3 _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&); │ │ │ │ +74 │ │ │ │ +75 /// Assign slice elements to corresponding elements of @a v. │ │ │ │ +76 void _o_p_e_r_a_t_o_r_=(const _v_a_l_a_r_r_a_y_<___T_p_>&) const; │ │ │ │ +77 /// Multiply slice elements by corresponding elements of @a v. │ │ │ │ +_7_8 void _o_p_e_r_a_t_o_r_*_=(const _v_a_l_a_r_r_a_y_<___T_p_>&) const; │ │ │ │ +79 /// Divide 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 /// Modulo 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 /// Add corresponding elements of @a v to slice elements. │ │ │ │ +_8_4 void _o_p_e_r_a_t_o_r_+_=(const _v_a_l_a_r_r_a_y_<___T_p_>&) const; │ │ │ │ +85 /// Subtract corresponding elements of @a v from 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 /// Logical xor slice elements with corresponding elements of @a v. │ │ │ │ +_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 and 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 or 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 /// Left shift slice elements by 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 /// Right 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 /// Assign all slice elements to @a t. │ │ │ │ +98 void _o_p_e_r_a_t_o_r_=(const _Tp&) const; │ │ │ │ +99 │ │ │ │ +100 template │ │ │ │ +101 void _o_p_e_r_a_t_o_r_=(const ___E_x_p_r_<___D_o_m_,_ ___T_p_>&) const; │ │ │ │ +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 │ │ │ │ +123 private: │ │ │ │ +124 ___A_r_r_a_y_<___T_p_> _M_array; │ │ │ │ +125 const _v_a_l_a_r_r_a_y_<_s_i_z_e___t_>& _M_index; │ │ │ │ +126 │ │ │ │ +127 friend class _v_a_l_a_r_r_a_y<_Tp>; │ │ │ │ +128 │ │ │ │ +129 _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_>&); │ │ │ │ +130 │ │ │ │ +131#if __cplusplus < 201103L │ │ │ │ +132 // not implemented │ │ │ │ +133 _g_s_l_i_c_e___a_r_r_a_y(); │ │ │ │ +134#else │ │ │ │ +135 public: │ │ │ │ +136 _g_s_l_i_c_e___a_r_r_a_y() = delete; │ │ │ │ +137#endif │ │ │ │ +138 }; │ │ │ │ +139 │ │ │ │ +140 template │ │ │ │ +141 inline │ │ │ │ +142 _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, │ │ │ │ +143 const _v_a_l_a_r_r_a_y_<_s_i_z_e___t_>& __i) │ │ │ │ +144 : _M_array(__a), _M_index(__i) {} │ │ │ │ +145 │ │ │ │ +146 template │ │ │ │ +147 inline │ │ │ │ +148 gslice_array<_Tp>::gslice_array(const gslice_array<_Tp>& __a) │ │ │ │ +149 : _M_array(__a._M_array), _M_index(__a._M_index) {} │ │ │ │ +150 │ │ │ │ +151 template │ │ │ │ +152 inline gslice_array<_Tp>& │ │ │ │ +153 _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) │ │ │ │ +154 { │ │ │ │ +155 std::__valarray_copy(_Array<_Tp>(__a._M_array), │ │ │ │ +156 _Array(__a._M_index), _M_index.size(), │ │ │ │ +157 _M_array, _Array(_M_index)); │ │ │ │ +158 return *this; │ │ │ │ +159 } │ │ │ │ +160 │ │ │ │ +161 template │ │ │ │ +162 inline void │ │ │ │ +_1_6_3 _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 │ │ │ │ +164 { │ │ │ │ +165 std::__valarray_fill(_M_array, ___A_r_r_a_y_<_s_i_z_e___t_>(_M_index), │ │ │ │ +166 _M_index.size(), __t); │ │ │ │ +167 } │ │ │ │ +168 │ │ │ │ +169 template │ │ │ │ +170 inline void │ │ │ │ +_1_7_1 _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 │ │ │ │ +172 { │ │ │ │ +173 std::__valarray_copy(___A_r_r_a_y_<___T_p_>(_____v), _____v.size(), │ │ │ │ +174 _M_array, ___A_r_r_a_y_<_s_i_z_e___t_>(_M_index)); │ │ │ │ +175 } │ │ │ │ +176 │ │ │ │ +177 template │ │ │ │ +178 template │ │ │ │ +179 inline void │ │ │ │ +180 _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 │ │ │ │ +181 { │ │ │ │ +182 std::__valarray_copy (__e, _M_index.size(), _M_array, │ │ │ │ +183 ___A_r_r_a_y_<_s_i_z_e___t_>(_M_index)); │ │ │ │ +184 } │ │ │ │ +185 │ │ │ │ +186 /// @cond undocumented │ │ │ │ +187#undef _DEFINE_VALARRAY_OPERATOR │ │ │ │ +188#define _DEFINE_VALARRAY_OPERATOR(_Op, _Name) \ │ │ │ │ +189 template \ │ │ │ │ +190 inline void \ │ │ │ │ +191 gslice_array<_Tp>::operator _Op##=(const valarray<_Tp>& __v) const \ │ │ │ │ +192 { \ │ │ │ │ +193 _Array_augmented_##_Name(_M_array, _Array(_M_index), \ │ │ │ │ +194 _Array<_Tp>(__v), __v.size()); \ │ │ │ │ +195 } \ │ │ │ │ +196 \ │ │ │ │ +197 template \ │ │ │ │ +198 template \ │ │ │ │ +199 inline void \ │ │ │ │ +200 gslice_array<_Tp>::operator _Op##= (const _Expr<_Dom, _Tp>& __e) const\ │ │ │ │ +201 { \ │ │ │ │ +202 _Array_augmented_##_Name(_M_array, _Array(_M_index), __e,\ │ │ │ │ +203 _M_index.size()); \ │ │ │ │ +204 } │ │ │ │ +205 │ │ │ │ +206_DEFINE_VALARRAY_OPERATOR(*, __multiplies) │ │ │ │ +207_DEFINE_VALARRAY_OPERATOR(/, __divides) │ │ │ │ +208_DEFINE_VALARRAY_OPERATOR(%, __modulus) │ │ │ │ +209_DEFINE_VALARRAY_OPERATOR(+, __plus) │ │ │ │ +210_DEFINE_VALARRAY_OPERATOR(-, __minus) │ │ │ │ +211_DEFINE_VALARRAY_OPERATOR(^, __bitwise_xor) │ │ │ │ +212_DEFINE_VALARRAY_OPERATOR(&, __bitwise_and) │ │ │ │ +213_DEFINE_VALARRAY_OPERATOR(|, __bitwise_or) │ │ │ │ +214_DEFINE_VALARRAY_OPERATOR(<<, __shift_left) │ │ │ │ +215_DEFINE_VALARRAY_OPERATOR(>>, __shift_right) │ │ │ │ +216 │ │ │ │ +217#undef _DEFINE_VALARRAY_OPERATOR │ │ │ │ +218 /// @endcond │ │ │ │ +219 │ │ │ │ +220 /// @} group numeric_arrays │ │ │ │ +221 │ │ │ │ +222_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +223} // namespace │ │ │ │ +224 │ │ │ │ +225#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_2 │ │ │ │ -_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_3 │ │ │ │ -_s_t_d_:_:_m_u_t_e_x │ │ │ │ -DDeeffiinniittiioonn _s_t_d___m_u_t_e_x_._h_:_9_7 │ │ │ │ -_s_t_d_:_:_d_e_f_e_r___l_o_c_k___t │ │ │ │ -Do not acquire ownership of the mutex. │ │ │ │ -DDeeffiinniittiioonn _s_t_d___m_u_t_e_x_._h_:_2_1_6 │ │ │ │ -_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_1_9 │ │ │ │ -_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_3 │ │ │ │ -_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_1 │ │ │ │ -_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_9 │ │ │ │ +_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_0 │ │ │ │ +_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_1 │ │ │ │ +_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-14-base/libstdc++/user/a00383.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('a00383.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-14-base/libstdc++/user/a00383_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-2024 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2001-2024 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,125 +72,308 @@ │ │ │
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#pragma GCC system_header
│ │ │
34
│ │ │ -
35#if __cplusplus >= 201103L
│ │ │ -
36#include <bits/chrono.h> // std::chrono::*
│ │ │ -
37
│ │ │ -
38#ifdef _GLIBCXX_USE_NANOSLEEP
│ │ │ -
39# include <cerrno> // errno, EINTR
│ │ │ -
40# include <time.h> // nanosleep
│ │ │ -
41#endif
│ │ │ -
42
│ │ │ -
43namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
44{
│ │ │ -
45_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
46
│ │ │ -
47 /** @addtogroup threads
│ │ │ -
48 * @{
│ │ │ -
49 */
│ │ │ -
50
│ │ │ -
51 /** @namespace std::this_thread
│ │ │ -
52 * @brief ISO C++ 2011 namespace for interacting with the current thread
│ │ │ -
53 *
│ │ │ -
54 * C++11 30.3.2 [thread.thread.this] Namespace this_thread.
│ │ │ -
55 */
│ │ │ -
56 namespace this_thread
│ │ │ -
57 {
│ │ │ -
58#ifndef _GLIBCXX_NO_SLEEP
│ │ │ -
59
│ │ │ -
60#ifndef _GLIBCXX_USE_NANOSLEEP
│ │ │ -
61 void
│ │ │ - │ │ │ -
63#endif
│ │ │ -
64
│ │ │ -
65 /// this_thread::sleep_for
│ │ │ -
66 template<typename _Rep, typename _Period>
│ │ │ -
67 inline void
│ │ │ -
│ │ │ - │ │ │ -
69 {
│ │ │ -
70 if (__rtime <= __rtime.zero())
│ │ │ -
71 return;
│ │ │ -
72 auto __s = chrono::duration_cast<chrono::seconds>(__rtime);
│ │ │ -
73 auto __ns = chrono::duration_cast<chrono::nanoseconds>(__rtime - __s);
│ │ │ -
74#ifdef _GLIBCXX_USE_NANOSLEEP
│ │ │ -
75 struct ::timespec __ts =
│ │ │ -
76 {
│ │ │ -
77 static_cast<std::time_t>(__s.count()),
│ │ │ -
78 static_cast<long>(__ns.count())
│ │ │ -
79 };
│ │ │ -
80 while (::nanosleep(&__ts, &__ts) == -1 && errno == EINTR)
│ │ │ -
81 { }
│ │ │ -
82#else
│ │ │ - │ │ │ -
84#endif
│ │ │ -
85 }
│ │ │ -
│ │ │ -
86
│ │ │ -
87 /// this_thread::sleep_until
│ │ │ -
88 template<typename _Clock, typename _Duration>
│ │ │ -
89 inline void
│ │ │ -
│ │ │ - │ │ │ -
91 {
│ │ │ -
92#if __cplusplus > 201703L
│ │ │ -
93 static_assert(chrono::is_clock_v<_Clock>);
│ │ │ -
94#endif
│ │ │ -
95 auto __now = _Clock::now();
│ │ │ -
96 if (_Clock::is_steady)
│ │ │ -
97 {
│ │ │ -
98 if (__now < __atime)
│ │ │ - │ │ │ -
100 return;
│ │ │ -
101 }
│ │ │ -
102 while (__now < __atime)
│ │ │ -
103 {
│ │ │ - │ │ │ -
105 __now = _Clock::now();
│ │ │ -
106 }
│ │ │ -
107 }
│ │ │ -
│ │ │ -
108#endif // ! NO_SLEEP
│ │ │ -
109 } // namespace this_thread
│ │ │ -
110
│ │ │ -
111 /// @}
│ │ │ -
112
│ │ │ -
113_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
114} // namespace
│ │ │ -
115#endif // C++11
│ │ │ +
35#include <iosfwd>
│ │ │ +
36#include <bits/move.h>
│ │ │ + │ │ │ +
38#include <debug/debug.h>
│ │ │ +
39
│ │ │ +
40namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
41{
│ │ │ +
42_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
43
│ │ │ +
44 /**
│ │ │ +
45 * @addtogroup iterators
│ │ │ +
46 * @{
│ │ │ +
47 */
│ │ │ +
48
│ │ │ +
49// Ignore warnings about std::iterator.
│ │ │ +
50#pragma GCC diagnostic push
│ │ │ +
51#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
│ │ │ +
52
│ │ │ +
53 /// Provides input iterator semantics for streams.
│ │ │ +
54 template<typename _Tp, typename _CharT = char,
│ │ │ +
55 typename _Traits = char_traits<_CharT>, typename _Dist = ptrdiff_t>
│ │ │ +
│ │ │ + │ │ │ +
57 : public iterator<input_iterator_tag, _Tp, _Dist, const _Tp*, const _Tp&>
│ │ │ +
58 {
│ │ │ +
59 public:
│ │ │ +
60 typedef _CharT char_type;
│ │ │ +
61 typedef _Traits traits_type;
│ │ │ + │ │ │ +
63
│ │ │ +
64 private:
│ │ │ +
65 istream_type* _M_stream;
│ │ │ +
66 _Tp _M_value;
│ │ │ +
67 // This bool becomes false at end-of-stream. It should be sufficient to
│ │ │ +
68 // check _M_stream != nullptr instead, but historically we did not set
│ │ │ +
69 // _M_stream to null when reaching the end, so we need to keep this flag.
│ │ │ +
70 bool _M_ok;
│ │ │ +
71
│ │ │ +
72 public:
│ │ │ +
73 /// Construct end of input stream iterator.
│ │ │ +
│ │ │ + │ │ │ + │ │ │ +
76 : _M_stream(0), _M_value(), _M_ok(false) {}
│ │ │ +
│ │ │ +
77
│ │ │ +
78 /// Construct start of input stream iterator.
│ │ │ +
│ │ │ + │ │ │ +
80 : _M_stream(std::__addressof(__s)), _M_ok(true)
│ │ │ +
81 { _M_read(); }
│ │ │ +
│ │ │ +
82
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
86 : _M_stream(__obj._M_stream), _M_value(__obj._M_value),
│ │ │ +
87 _M_ok(__obj._M_ok)
│ │ │ +
88 { }
│ │ │ +
89
│ │ │ +
90#if __cplusplus > 201703L && __cpp_lib_concepts
│ │ │ +
91 constexpr
│ │ │ +
92 istream_iterator(default_sentinel_t)
│ │ │ +
93 noexcept(is_nothrow_default_constructible_v<_Tp>)
│ │ │ +
94 : istream_iterator() { }
│ │ │ +
95#endif
│ │ │ +
96
│ │ │ +
97#if __cplusplus >= 201103L
│ │ │ +
98 istream_iterator& operator=(const istream_iterator&) = default;
│ │ │ +
99 ~istream_iterator() = default;
│ │ │ +
100#endif
│ │ │ +
101
│ │ │ +
102 _GLIBCXX_NODISCARD
│ │ │ +
103 const _Tp&
│ │ │ +
104 operator*() const _GLIBCXX_NOEXCEPT
│ │ │ +
105 {
│ │ │ +
106 __glibcxx_requires_cond(_M_ok,
│ │ │ +
107 _M_message(__gnu_debug::__msg_deref_istream)
│ │ │ +
108 ._M_iterator(*this));
│ │ │ +
109 return _M_value;
│ │ │ +
110 }
│ │ │ +
111
│ │ │ +
112 _GLIBCXX_NODISCARD
│ │ │ +
113 const _Tp*
│ │ │ +
114 operator->() const _GLIBCXX_NOEXCEPT
│ │ │ +
115 { return std::__addressof((operator*())); }
│ │ │
116
│ │ │ -
117#endif // _GLIBCXX_THIS_THREAD_SLEEP_H
│ │ │ - │ │ │ - │ │ │ -
duration< int64_t > seconds
seconds
Definition chrono.h:897
│ │ │ -
duration< int64_t, nano > nanoseconds
nanoseconds
Definition chrono.h:888
│ │ │ + │ │ │ +
118 operator++()
│ │ │ +
119 {
│ │ │ +
120 __glibcxx_requires_cond(_M_ok,
│ │ │ +
121 _M_message(__gnu_debug::__msg_inc_istream)
│ │ │ +
122 ._M_iterator(*this));
│ │ │ +
123 _M_read();
│ │ │ +
124 return *this;
│ │ │ +
125 }
│ │ │ +
126
│ │ │ + │ │ │ +
128 operator++(int)
│ │ │ +
129 {
│ │ │ +
130 __glibcxx_requires_cond(_M_ok,
│ │ │ +
131 _M_message(__gnu_debug::__msg_inc_istream)
│ │ │ +
132 ._M_iterator(*this));
│ │ │ +
133 istream_iterator __tmp = *this;
│ │ │ +
134 _M_read();
│ │ │ +
135 return __tmp;
│ │ │ +
136 }
│ │ │ +
137
│ │ │ +
138 private:
│ │ │ +
139 bool
│ │ │ +
140 _M_equal(const istream_iterator& __x) const _GLIBCXX_NOEXCEPT
│ │ │ +
141 {
│ │ │ +
142 // Ideally this would just return _M_stream == __x._M_stream,
│ │ │ +
143 // but code compiled with old versions never sets _M_stream to null.
│ │ │ +
144 return (_M_ok == __x._M_ok) && (!_M_ok || _M_stream == __x._M_stream);
│ │ │ +
145 }
│ │ │ +
146
│ │ │ +
147 void
│ │ │ +
148 _M_read()
│ │ │ +
149 {
│ │ │ +
150 if (_M_stream && !(*_M_stream >> _M_value))
│ │ │ +
151 {
│ │ │ +
152 _M_stream = 0;
│ │ │ +
153 _M_ok = false;
│ │ │ +
154 }
│ │ │ +
155 }
│ │ │ +
156
│ │ │ +
157 /// Return true if the iterators refer to the same stream,
│ │ │ +
158 /// or are both at end-of-stream.
│ │ │ +
159 _GLIBCXX_NODISCARD
│ │ │ +
160 friend bool
│ │ │ +
│ │ │ + │ │ │ + │ │ │ +
163 { return __x._M_equal(__y); }
│ │ │ +
│ │ │ +
164
│ │ │ +
165#if __cpp_impl_three_way_comparison < 201907L
│ │ │ +
166 /// Return true if the iterators refer to different streams,
│ │ │ +
167 /// or if one is at end-of-stream and the other is not.
│ │ │ +
168 _GLIBCXX_NODISCARD
│ │ │ +
169 friend bool
│ │ │ +
170 operator!=(const istream_iterator& __x, const istream_iterator& __y)
│ │ │ + │ │ │ +
172 { return !__x._M_equal(__y); }
│ │ │ +
173#endif
│ │ │ +
174
│ │ │ +
175#if __cplusplus > 201703L && __cpp_lib_concepts
│ │ │ +
176 [[nodiscard]]
│ │ │ +
177 friend bool
│ │ │ +
178 operator==(const istream_iterator& __i, default_sentinel_t) noexcept
│ │ │ +
179 { return !__i._M_stream; }
│ │ │ +
180#endif
│ │ │ +
181 };
│ │ │ +
│ │ │ +
182
│ │ │ +
183 /**
│ │ │ +
184 * @brief Provides output iterator semantics for streams.
│ │ │ +
185 *
│ │ │ +
186 * This class provides an iterator to write to an ostream. The type Tp is
│ │ │ +
187 * the only type written by this iterator and there must be an
│ │ │ +
188 * operator<<(Tp) defined.
│ │ │ +
189 *
│ │ │ +
190 * @tparam _Tp The type to write to the ostream.
│ │ │ +
191 * @tparam _CharT The ostream char_type.
│ │ │ +
192 * @tparam _Traits The ostream char_traits.
│ │ │ +
193 */
│ │ │ +
194 template<typename _Tp, typename _CharT = char,
│ │ │ +
195 typename _Traits = char_traits<_CharT> >
│ │ │ +
│ │ │ + │ │ │ +
197 : public iterator<output_iterator_tag, void, void, void, void>
│ │ │ +
198 {
│ │ │ +
199 public:
│ │ │ +
200 ///@{
│ │ │ +
201 /// Public typedef
│ │ │ +
202#if __cplusplus > 201703L
│ │ │ + │ │ │ +
204#endif
│ │ │ +
205 typedef _CharT char_type;
│ │ │ +
206 typedef _Traits traits_type;
│ │ │ + │ │ │ +
208 ///@}
│ │ │ +
209
│ │ │ +
210 private:
│ │ │ +
211 ostream_type* _M_stream;
│ │ │ +
212 const _CharT* _M_string;
│ │ │ +
213
│ │ │ +
214 public:
│ │ │ +
215 /// Construct from an ostream.
│ │ │ +
│ │ │ + │ │ │ +
217 : _M_stream(std::__addressof(__s)), _M_string(0) {}
│ │ │ +
│ │ │ +
218
│ │ │ +
219 /**
│ │ │ +
220 * Construct from an ostream.
│ │ │ +
221 *
│ │ │ +
222 * The delimiter string @a c is written to the stream after every Tp
│ │ │ +
223 * written to the stream. The delimiter is not copied, and thus must
│ │ │ +
224 * not be destroyed while this iterator is in use.
│ │ │ +
225 *
│ │ │ +
226 * @param __s Underlying ostream to write to.
│ │ │ +
227 * @param __c CharT delimiter string to insert.
│ │ │ +
228 */
│ │ │ +
│ │ │ + │ │ │ +
230 : _M_stream(std::__addressof(__s)), _M_string(__c) { }
│ │ │ +
│ │ │ +
231
│ │ │ +
232 /// Copy constructor.
│ │ │ +
│ │ │ + │ │ │ +
234 : _M_stream(__obj._M_stream), _M_string(__obj._M_string) { }
│ │ │ +
│ │ │ +
235
│ │ │ +
236#if __cplusplus >= 201103L
│ │ │ +
237 ostream_iterator& operator=(const ostream_iterator&) = default;
│ │ │ +
238#endif
│ │ │ +
239
│ │ │ +
240 /// Writes @a value to underlying ostream using operator<<. If
│ │ │ +
241 /// constructed with delimiter string, writes delimiter to ostream.
│ │ │ + │ │ │ +
│ │ │ +
243 operator=(const _Tp& __value)
│ │ │ +
244 {
│ │ │ +
245 __glibcxx_requires_cond(_M_stream != 0,
│ │ │ +
246 _M_message(__gnu_debug::__msg_output_ostream)
│ │ │ +
247 ._M_iterator(*this));
│ │ │ +
248 *_M_stream << __value;
│ │ │ +
249 if (_M_string)
│ │ │ +
250 *_M_stream << _M_string;
│ │ │ +
251 return *this;
│ │ │ +
252 }
│ │ │ +
│ │ │ +
253
│ │ │ +
254 _GLIBCXX_NODISCARD
│ │ │ + │ │ │ +
256 operator*() _GLIBCXX_NOEXCEPT
│ │ │ +
257 { return *this; }
│ │ │ +
258
│ │ │ +
259 ostream_iterator&
│ │ │ +
260 operator++() _GLIBCXX_NOEXCEPT
│ │ │ +
261 { return *this; }
│ │ │ +
262
│ │ │ + │ │ │ +
264 operator++(int) _GLIBCXX_NOEXCEPT
│ │ │ +
265 { return *this; }
│ │ │ +
266 };
│ │ │ +
│ │ │ +
267#pragma GCC diagnostic pop
│ │ │ +
268
│ │ │ +
269 /// @} group iterators
│ │ │ +
270
│ │ │ +
271_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
272} // namespace
│ │ │ +
273
│ │ │ +
274#endif
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:51
│ │ │
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:512
│ │ │ -
chrono::time_point represents a point in time as measured by a clock
Definition chrono.h:923
│ │ │ - │ │ │ +
is_nothrow_default_constructible
Definition type_traits:1194
│ │ │ +
is_nothrow_copy_constructible
Definition type_traits:1203
│ │ │ +
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-2024 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2001-2024 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,131 +21,329 @@ │ │ │ │ 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#pragma GCC system_header │ │ │ │ 34 │ │ │ │ -35#if __cplusplus >= 201103L │ │ │ │ -36#include <_b_i_t_s_/_c_h_r_o_n_o_._h> // std::chrono::* │ │ │ │ -37 │ │ │ │ -38#ifdef _GLIBCXX_USE_NANOSLEEP │ │ │ │ -39# include <_c_e_r_r_n_o> // errno, EINTR │ │ │ │ -40# include // nanosleep │ │ │ │ -41#endif │ │ │ │ -42 │ │ │ │ -43namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -44{ │ │ │ │ -45_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -46 │ │ │ │ -47 /** @addtogroup threads │ │ │ │ -48 * @{ │ │ │ │ -49 */ │ │ │ │ -50 │ │ │ │ -51 /** @namespace std::this_thread │ │ │ │ -52 * @brief ISO C++ 2011 namespace for interacting with the current thread │ │ │ │ -53 * │ │ │ │ -54 * C++11 30.3.2 [thread.thread.this] Namespace this_thread. │ │ │ │ -55 */ │ │ │ │ -56 namespace this_thread │ │ │ │ -57 { │ │ │ │ -58#ifndef _GLIBCXX_NO_SLEEP │ │ │ │ -59 │ │ │ │ -60#ifndef _GLIBCXX_USE_NANOSLEEP │ │ │ │ -61 void │ │ │ │ -62 __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); │ │ │ │ -63#endif │ │ │ │ -64 │ │ │ │ -65 /// this_thread::sleep_for │ │ │ │ -66 template │ │ │ │ -67 inline void │ │ │ │ -_6_8 _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) │ │ │ │ -69 { │ │ │ │ -70 if (_____r_t_i_m_e <= _____r_t_i_m_e.zero()) │ │ │ │ -71 return; │ │ │ │ -72 auto _____s = chrono::duration_cast(_____r_t_i_m_e); │ │ │ │ -73 auto _____n_s = chrono::duration_cast(_____r_t_i_m_e - _____s); │ │ │ │ -74#ifdef _GLIBCXX_USE_NANOSLEEP │ │ │ │ -75 struct ::timespec _____t_s = │ │ │ │ -76 { │ │ │ │ -77 static_cast<_s_t_d_:_:_t_i_m_e___t>(_____s.count()), │ │ │ │ -78 static_cast(_____n_s.count()) │ │ │ │ -79 }; │ │ │ │ -80 while (::nanosleep(&_____t_s, &_____t_s) == -1 && errno == _E_I_N_T_R) │ │ │ │ -81 { } │ │ │ │ -82#else │ │ │ │ -83 _____s_l_e_e_p___f_o_r(_____s, _____n_s); │ │ │ │ -84#endif │ │ │ │ -85 } │ │ │ │ -86 │ │ │ │ -87 /// this_thread::sleep_until │ │ │ │ -88 template │ │ │ │ -89 inline void │ │ │ │ -_9_0 _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) │ │ │ │ -91 { │ │ │ │ -92#if __cplusplus > 201703L │ │ │ │ -93 static_assert(chrono::is_clock_v<_Clock>); │ │ │ │ -94#endif │ │ │ │ -95 auto _____n_o_w = _Clock::now(); │ │ │ │ -96 if (_Clock::is_steady) │ │ │ │ -97 { │ │ │ │ -98 if (_____n_o_w < _____a_t_i_m_e) │ │ │ │ -99 _s_l_e_e_p___f_o_r(_____a_t_i_m_e - _____n_o_w); │ │ │ │ -100 return; │ │ │ │ -101 } │ │ │ │ -102 while (_____n_o_w < _____a_t_i_m_e) │ │ │ │ -103 { │ │ │ │ -104 _s_l_e_e_p___f_o_r(_____a_t_i_m_e - _____n_o_w); │ │ │ │ -105 _____n_o_w = _Clock::now(); │ │ │ │ -106 } │ │ │ │ -107 } │ │ │ │ -108#endif // ! NO_SLEEP │ │ │ │ -109 } // namespace this_thread │ │ │ │ -110 │ │ │ │ -111 /// @} │ │ │ │ -112 │ │ │ │ -113_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -114} // namespace │ │ │ │ -115#endif // C++11 │ │ │ │ +35#include <_i_o_s_f_w_d> │ │ │ │ +36#include <_b_i_t_s_/_m_o_v_e_._h> │ │ │ │ +37#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> │ │ │ │ +38#include <_d_e_b_u_g_/_d_e_b_u_g_._h> │ │ │ │ +39 │ │ │ │ +40namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +41{ │ │ │ │ +42_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +43 │ │ │ │ +44 /** │ │ │ │ +45 * @addtogroup iterators │ │ │ │ +46 * @{ │ │ │ │ +47 */ │ │ │ │ +48 │ │ │ │ +49// Ignore warnings about std::iterator. │ │ │ │ +50#pragma GCC diagnostic push │ │ │ │ +51#pragma GCC diagnostic ignored "-Wdeprecated-declarations" │ │ │ │ +52 │ │ │ │ +53 /// Provides input iterator semantics for streams. │ │ │ │ +54 template, typename _Dist = ptrdiff_t> │ │ │ │ +_5_6 class _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ +57 : public _i_t_e_r_a_t_o_r │ │ │ │ +58 { │ │ │ │ +59 public: │ │ │ │ +60 typedef _CharT char_type; │ │ │ │ +61 typedef _Traits traits_type; │ │ │ │ +62 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; │ │ │ │ +63 │ │ │ │ +64 private: │ │ │ │ +65 _i_s_t_r_e_a_m___t_y_p_e* _M_stream; │ │ │ │ +66 _Tp _M_value; │ │ │ │ +67 // This bool becomes false at end-of-stream. It should be sufficient to │ │ │ │ +68 // check _M_stream != nullptr instead, but historically we did not set │ │ │ │ +69 // _M_stream to null when reaching the end, so we need to keep this flag. │ │ │ │ +70 bool _M_ok; │ │ │ │ +71 │ │ │ │ +72 public: │ │ │ │ +73 /// Construct end of input stream iterator. │ │ │ │ +_7_4 ___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() │ │ │ │ +75 ___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) │ │ │ │ +76 : _M_stream(0), _M_value(), _M_ok(_f_a_l_s_e) {} │ │ │ │ +77 │ │ │ │ +78 /// Construct start of input stream iterator. │ │ │ │ +_7_9 _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) │ │ │ │ +80 : _M_stream(_s_t_d::_____a_d_d_r_e_s_s_o_f(_____s)), _M_ok(_t_r_u_e) │ │ │ │ +81 { _M_read(); } │ │ │ │ +82 │ │ │ │ +83 ___G_L_I_B_C_X_X___C_O_N_S_T_E_X_P_R │ │ │ │ +84 _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) │ │ │ │ +85 ___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) │ │ │ │ +86 : _M_stream(_____o_b_j._M_stream), _M_value(_____o_b_j._M_value), │ │ │ │ +87 _M_ok(_____o_b_j._M_ok) │ │ │ │ +88 { } │ │ │ │ +89 │ │ │ │ +90#if __cplusplus > 201703L && __cpp_lib_concepts │ │ │ │ +91 constexpr │ │ │ │ +92 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r(default_sentinel_t) │ │ │ │ +93 noexcept(is_nothrow_default_constructible_v<_Tp>) │ │ │ │ +94 : _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r() { } │ │ │ │ +95#endif │ │ │ │ +96 │ │ │ │ +97#if __cplusplus >= 201103L │ │ │ │ +98 _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; │ │ │ │ +99 ~istream_iterator() = default; │ │ │ │ +100#endif │ │ │ │ +101 │ │ │ │ +102 _GLIBCXX_NODISCARD │ │ │ │ +103 const _Tp& │ │ │ │ +104 operator*() const _GLIBCXX_NOEXCEPT │ │ │ │ +105 { │ │ │ │ +106 __glibcxx_requires_cond(_M_ok, │ │ │ │ +107 _M_message(__gnu_debug::__msg_deref_istream) │ │ │ │ +108 ._M_iterator(*this)); │ │ │ │ +109 return _M_value; │ │ │ │ +110 } │ │ │ │ +111 │ │ │ │ +112 _GLIBCXX_NODISCARD │ │ │ │ +113 const _Tp* │ │ │ │ +114 operator->() const _GLIBCXX_NOEXCEPT │ │ │ │ +115 { return _s_t_d_:_:_____a_d_d_r_e_s_s_o_f((operator*())); } │ │ │ │ 116 │ │ │ │ -117#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_:_8_9_7 │ │ │ │ -_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_8_8 │ │ │ │ +117 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& │ │ │ │ +118 operator++() │ │ │ │ +119 { │ │ │ │ +120 __glibcxx_requires_cond(_M_ok, │ │ │ │ +121 _M_message(__gnu_debug::__msg_inc_istream) │ │ │ │ +122 ._M_iterator(*this)); │ │ │ │ +123 _M_read(); │ │ │ │ +124 return *this; │ │ │ │ +125 } │ │ │ │ +126 │ │ │ │ +127 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ +128 operator++(int) │ │ │ │ +129 { │ │ │ │ +130 __glibcxx_requires_cond(_M_ok, │ │ │ │ +131 _M_message(__gnu_debug::__msg_inc_istream) │ │ │ │ +132 ._M_iterator(*this)); │ │ │ │ +133 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r __tmp = *this; │ │ │ │ +134 _M_read(); │ │ │ │ +135 return __tmp; │ │ │ │ +136 } │ │ │ │ +137 │ │ │ │ +138 private: │ │ │ │ +139 bool │ │ │ │ +140 _M_equal(const _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& __x) const _GLIBCXX_NOEXCEPT │ │ │ │ +141 { │ │ │ │ +142 // Ideally this would just return _M_stream == __x._M_stream, │ │ │ │ +143 // but code compiled with old versions never sets _M_stream to null. │ │ │ │ +144 return (_M_ok == __x._M_ok) && (!_M_ok || _M_stream == __x._M_stream); │ │ │ │ +145 } │ │ │ │ +146 │ │ │ │ +147 void │ │ │ │ +148 _M_read() │ │ │ │ +149 { │ │ │ │ +150 if (_M_stream && !(*_M_stream >> _M_value)) │ │ │ │ +151 { │ │ │ │ +152 _M_stream = 0; │ │ │ │ +153 _M_ok = false; │ │ │ │ +154 } │ │ │ │ +155 } │ │ │ │ +156 │ │ │ │ +157 /// Return true if the iterators refer to the same stream, │ │ │ │ +158 /// or are both at end-of-stream. │ │ │ │ +159 _GLIBCXX_NODISCARD │ │ │ │ +160 friend bool │ │ │ │ +_1_6_1 _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) │ │ │ │ +162 ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ +163 { return __x._M_equal(__y); } │ │ │ │ +164 │ │ │ │ +165#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ +166 /// Return true if the iterators refer to different streams, │ │ │ │ +167 /// or if one is at end-of-stream and the other is not. │ │ │ │ +168 _GLIBCXX_NODISCARD │ │ │ │ +169 friend bool │ │ │ │ +170 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) │ │ │ │ +171 ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ +172 { return !__x._M_equal(__y); } │ │ │ │ +173#endif │ │ │ │ +174 │ │ │ │ +175#if __cplusplus > 201703L && __cpp_lib_concepts │ │ │ │ +176 [[nodiscard]] │ │ │ │ +177 friend bool │ │ │ │ +178 _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 │ │ │ │ +179 { return !__i._M_stream; } │ │ │ │ +180#endif │ │ │ │ +181 }; │ │ │ │ +182 │ │ │ │ +183 /** │ │ │ │ +184 * @brief Provides output iterator semantics for streams. │ │ │ │ +185 * │ │ │ │ +186 * This class provides an iterator to write to an ostream. The type Tp is │ │ │ │ +187 * the only type written by this iterator and there must be an │ │ │ │ +188 * operator<<(Tp) defined. │ │ │ │ +189 * │ │ │ │ +190 * @tparam _Tp The type to write to the ostream. │ │ │ │ +191 * @tparam _CharT The ostream char_type. │ │ │ │ +192 * @tparam _Traits The ostream char_traits. │ │ │ │ +193 */ │ │ │ │ +194 template > │ │ │ │ +_1_9_6 class _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ +197 : public _i_t_e_r_a_t_o_r │ │ │ │ +198 { │ │ │ │ +199 public: │ │ │ │ +200 ///@{ │ │ │ │ +201 /// Public typedef │ │ │ │ +202#if __cplusplus > 201703L │ │ │ │ +_2_0_3 using _d_i_f_f_e_r_e_n_c_e___t_y_p_e = _p_t_r_d_i_f_f___t; │ │ │ │ +204#endif │ │ │ │ +_2_0_5 typedef _CharT _c_h_a_r___t_y_p_e; │ │ │ │ +_2_0_6 typedef _Traits _t_r_a_i_t_s___t_y_p_e; │ │ │ │ +_2_0_7 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; │ │ │ │ +208 ///@} │ │ │ │ +209 │ │ │ │ +210 private: │ │ │ │ +211 _o_s_t_r_e_a_m___t_y_p_e* _M_stream; │ │ │ │ +212 const _CharT* _M_string; │ │ │ │ +213 │ │ │ │ +214 public: │ │ │ │ +215 /// Construct from an ostream. │ │ │ │ +_2_1_6 _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 │ │ │ │ +217 : _M_stream(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____s)), _M_string(0) {} │ │ │ │ +218 │ │ │ │ +219 /** │ │ │ │ +220 * Construct from an ostream. │ │ │ │ +221 * │ │ │ │ +222 * The delimiter string @a c is written to the stream after every Tp │ │ │ │ +223 * written to the stream. The delimiter is not copied, and thus must │ │ │ │ +224 * not be destroyed while this iterator is in use. │ │ │ │ +225 * │ │ │ │ +226 * @param __s Underlying ostream to write to. │ │ │ │ +227 * @param __c CharT delimiter string to insert. │ │ │ │ +228 */ │ │ │ │ +_2_2_9 _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 │ │ │ │ +230 : _M_stream(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____s)), _M_string(__c) { } │ │ │ │ +231 │ │ │ │ +232 /// Copy constructor. │ │ │ │ +_2_3_3 _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 │ │ │ │ +234 : _M_stream(_____o_b_j._M_stream), _M_string(_____o_b_j._M_string) { } │ │ │ │ +235 │ │ │ │ +236#if __cplusplus >= 201103L │ │ │ │ +237 _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; │ │ │ │ +238#endif │ │ │ │ +239 │ │ │ │ +240 /// Writes @a value to underlying ostream using operator<<. If │ │ │ │ +241 /// constructed with delimiter string, writes delimiter to ostream. │ │ │ │ +242 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r& │ │ │ │ +_2_4_3 _o_p_e_r_a_t_o_r_=(const _Tp& __value) │ │ │ │ +244 { │ │ │ │ +245 __glibcxx_requires_cond(_M_stream != 0, │ │ │ │ +246 _M_message(__gnu_debug::__msg_output_ostream) │ │ │ │ +247 ._M_iterator(*this)); │ │ │ │ +248 *_M_stream << __value; │ │ │ │ +249 if (_M_string) │ │ │ │ +250 *_M_stream << _M_string; │ │ │ │ +251 return *this; │ │ │ │ +252 } │ │ │ │ +253 │ │ │ │ +254 _GLIBCXX_NODISCARD │ │ │ │ +255 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r& │ │ │ │ +256 operator*() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ +257 { return *this; } │ │ │ │ +258 │ │ │ │ +259 ostream_iterator& │ │ │ │ +260 operator++() _GLIBCXX_NOEXCEPT │ │ │ │ +261 { return *this; } │ │ │ │ +262 │ │ │ │ +263 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r& │ │ │ │ +264 operator++(int) _GLIBCXX_NOEXCEPT │ │ │ │ +265 { return *this; } │ │ │ │ +266 }; │ │ │ │ +267#pragma GCC diagnostic pop │ │ │ │ +268 │ │ │ │ +269 /// @} group iterators │ │ │ │ +270 │ │ │ │ +271_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +272} // namespace │ │ │ │ +273 │ │ │ │ +274#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_1 │ │ │ │ _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_0 │ │ │ │ -_s_t_d_:_:_t_h_i_s___t_h_r_e_a_d_:_:_s_l_e_e_p___f_o_r │ │ │ │ -void sleep_for(const chrono::duration< _Rep, _Period > &__rtime) │ │ │ │ -this_thread::sleep_for │ │ │ │ -DDeeffiinniittiioonn _t_h_i_s___t_h_r_e_a_d___s_l_e_e_p_._h_:_6_8 │ │ │ │ -_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_2 │ │ │ │ -_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_3 │ │ │ │ +_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_1_9_4 │ │ │ │ +_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_0_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_2_8 │ │ │ │ +_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_:_5_8 │ │ │ │ +_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_:_7_9 │ │ │ │ +_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_4 │ │ │ │ +_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_1 │ │ │ │ +_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_:_1_9_8 │ │ │ │ +_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_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___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_6 │ │ │ │ +_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_2_9 │ │ │ │ +_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_6 │ │ │ │ +_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_3 │ │ │ │ +_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_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(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_3 │ │ │ │ _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-14-base/libstdc++/user/a00386.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('a00386.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-14-base/libstdc++/user/a00386.js │ │ │ ├── js-beautify {} │ │ │ │ @@ -1,6 +1,5 @@ │ │ │ │ var a00386 = [ │ │ │ │ - ["string", "a00386.html#ga32db3d9898c44d3b3a578b560f7758cc", null], │ │ │ │ - ["u16string", "a00386.html#ga957ec6dee9435a81e37f7f70e711bf09", null], │ │ │ │ - ["u32string", "a00386.html#ga83ce9bd7fd0896013d6ef39113119bf5", null], │ │ │ │ - ["wstring", "a00386.html#gacc5a707e71ec50089cb9f653282f22f7", null] │ │ │ │ + ["adopt_lock", "a00386.html#gad21e19f3b9b1166718c228219723e130", null], │ │ │ │ + ["defer_lock", "a00386.html#gaef1e52b34e2d2d6e3850bbd28ff7546a", null], │ │ │ │ + ["try_to_lock", "a00386.html#ga845da3c3459b8dc4c6f690039b797dfc", null] │ │ │ │ ]; │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00386_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-2024 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2003-2024 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,102 +72,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// <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
│ │ │ -
36
│ │ │ -
37#pragma GCC system_header
│ │ │ +
30#ifndef _GLIBCXX_MUTEX_H
│ │ │ +
31#define _GLIBCXX_MUTEX_H 1
│ │ │ +
32
│ │ │ +
33#pragma GCC system_header
│ │ │ +
34
│ │ │ +
35#if __cplusplus < 201103L
│ │ │ +
36# include <bits/c++0x_warning.h>
│ │ │ +
37#else
│ │ │
38
│ │ │ -
39#include <bits/c++config.h>
│ │ │ -
40#include <bits/memoryfwd.h>
│ │ │ -
41
│ │ │ -
42namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
43{
│ │ │ -
44_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
45
│ │ │ -
46 /**
│ │ │ -
47 * @defgroup strings Strings
│ │ │ -
48 *
│ │ │ -
49 * @{
│ │ │ -
50 */
│ │ │ -
51
│ │ │ -
52 template<class _CharT>
│ │ │ -
53 struct char_traits;
│ │ │ +
39#include <errno.h> // EBUSY
│ │ │ +
40#include <bits/functexcept.h>
│ │ │ +
41#include <bits/gthr.h>
│ │ │ +
42
│ │ │ +
43namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
44{
│ │ │ +
45_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
46
│ │ │ +
47 /**
│ │ │ +
48 * @defgroup mutexes Mutexes
│ │ │ +
49 * @ingroup concurrency
│ │ │ +
50 *
│ │ │ +
51 * Classes for mutex support.
│ │ │ +
52 * @{
│ │ │ +
53 */
│ │ │
54
│ │ │ -
55 template<> struct char_traits<char>;
│ │ │ -
56
│ │ │ -
57 template<> struct char_traits<wchar_t>;
│ │ │ -
58
│ │ │ -
59#ifdef _GLIBCXX_USE_CHAR8_T
│ │ │ -
60 template<> struct char_traits<char8_t>;
│ │ │ -
61#endif
│ │ │ -
62
│ │ │ -
63#if __cplusplus >= 201103L
│ │ │ -
64 template<> struct char_traits<char16_t>;
│ │ │ -
65 template<> struct char_traits<char32_t>;
│ │ │ -
66#endif
│ │ │ -
67
│ │ │ -
68_GLIBCXX_BEGIN_NAMESPACE_CXX11
│ │ │ -
69
│ │ │ -
70 template<typename _CharT, typename _Traits = char_traits<_CharT>,
│ │ │ -
71 typename _Alloc = allocator<_CharT> >
│ │ │ -
72 class basic_string;
│ │ │ -
73
│ │ │ -
74_GLIBCXX_END_NAMESPACE_CXX11
│ │ │ -
75
│ │ │ -
76 /// A string of @c char
│ │ │ - │ │ │ -
78
│ │ │ -
79 /// A string of @c wchar_t
│ │ │ - │ │ │ -
81
│ │ │ -
82#ifdef _GLIBCXX_USE_CHAR8_T
│ │ │ -
83 /// A string of @c char8_t
│ │ │ -
84 typedef basic_string<char8_t> u8string;
│ │ │ -
85#endif
│ │ │ -
86
│ │ │ -
87#if __cplusplus >= 201103L
│ │ │ -
88 /// A string of @c char16_t
│ │ │ - │ │ │ -
90
│ │ │ -
91 /// A string of @c char32_t
│ │ │ - │ │ │ -
93#endif
│ │ │ -
94
│ │ │ -
95 /** @} */
│ │ │ -
96
│ │ │ -
97_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
98} // namespace std
│ │ │ -
99
│ │ │ -
100#endif // _STRINGFWD_H
│ │ │ - │ │ │ - │ │ │ -
basic_string< char > string
A string of char.
Definition stringfwd.h:77
│ │ │ -
basic_string< char32_t > u32string
A string of char32_t.
Definition stringfwd.h:92
│ │ │ -
basic_string< char16_t > u16string
A string of char16_t.
Definition stringfwd.h:89
│ │ │ -
basic_string< wchar_t > wstring
A string of wchar_t.
Definition stringfwd.h:80
│ │ │ +
55#ifdef _GLIBCXX_HAS_GTHREADS
│ │ │ +
56 /// @cond undocumented
│ │ │ +
57
│ │ │ +
58 // Common base class for std::mutex and std::timed_mutex
│ │ │ +
59 class __mutex_base
│ │ │ +
60 {
│ │ │ +
61 protected:
│ │ │ +
62 typedef __gthread_mutex_t __native_type;
│ │ │ +
63
│ │ │ +
64#ifdef __GTHREAD_MUTEX_INIT
│ │ │ +
65 __native_type _M_mutex = __GTHREAD_MUTEX_INIT;
│ │ │ +
66
│ │ │ +
67 constexpr __mutex_base() noexcept = default;
│ │ │ +
68#else
│ │ │ +
69 __native_type _M_mutex;
│ │ │ +
70
│ │ │ +
71 __mutex_base() noexcept
│ │ │ +
72 {
│ │ │ +
73 // XXX EAGAIN, ENOMEM, EPERM, EBUSY(may), EINVAL(may)
│ │ │ +
74 __GTHREAD_MUTEX_INIT_FUNCTION(&_M_mutex);
│ │ │ +
75 }
│ │ │ +
76
│ │ │ +
77 ~__mutex_base() noexcept { __gthread_mutex_destroy(&_M_mutex); }
│ │ │ +
78#endif
│ │ │ +
79
│ │ │ +
80 __mutex_base(const __mutex_base&) = delete;
│ │ │ +
81 __mutex_base& operator=(const __mutex_base&) = delete;
│ │ │ +
82 };
│ │ │ +
83 /// @endcond
│ │ │ +
84
│ │ │ +
85 /** The standard mutex type.
│ │ │ +
86 *
│ │ │ +
87 * A simple, non-recursive, non-timed mutex.
│ │ │ +
88 *
│ │ │ +
89 * Do not call `lock()` and `unlock()` directly, use a scoped lock type
│ │ │ +
90 * such as `std::unique_lock`, `std::lock_guard`, or (since C++17)
│ │ │ +
91 * `std::scoped_lock`.
│ │ │ +
92 *
│ │ │ +
93 * @headerfile mutex
│ │ │ +
94 * @since C++11
│ │ │ +
95 */
│ │ │ +
│ │ │ +
96 class mutex : private __mutex_base
│ │ │ +
97 {
│ │ │ +
98 public:
│ │ │ + │ │ │ +
100
│ │ │ +
101#ifdef __GTHREAD_MUTEX_INIT
│ │ │ +
102 constexpr
│ │ │ +
103#endif
│ │ │ +
104 mutex() noexcept = default;
│ │ │ +
105 ~mutex() = default;
│ │ │ +
106
│ │ │ +
107 mutex(const mutex&) = delete;
│ │ │ +
108 mutex& operator=(const mutex&) = delete;
│ │ │ +
109
│ │ │ +
110 void
│ │ │ +
111 lock()
│ │ │ +
112 {
│ │ │ +
113 int __e = __gthread_mutex_lock(&_M_mutex);
│ │ │ +
114
│ │ │ +
115 // EINVAL, EAGAIN, EBUSY, EINVAL, EDEADLK(may)
│ │ │ +
116 if (__e)
│ │ │ +
117 __throw_system_error(__e);
│ │ │ +
118 }
│ │ │ +
119
│ │ │ +
120 _GLIBCXX_NODISCARD
│ │ │ +
121 bool
│ │ │ +
122 try_lock() noexcept
│ │ │ +
123 {
│ │ │ +
124 // XXX EINVAL, EAGAIN, EBUSY
│ │ │ +
125 return !__gthread_mutex_trylock(&_M_mutex);
│ │ │ +
126 }
│ │ │ +
127
│ │ │ +
128 void
│ │ │ +
129 unlock()
│ │ │ +
130 {
│ │ │ +
131 // XXX EINVAL, EAGAIN, EPERM
│ │ │ +
132 __gthread_mutex_unlock(&_M_mutex);
│ │ │ +
133 }
│ │ │ +
134
│ │ │ + │ │ │ +
136 native_handle() noexcept
│ │ │ +
137 { return &_M_mutex; }
│ │ │ +
138 };
│ │ │ +
│ │ │ +
139
│ │ │ +
140 /// @cond undocumented
│ │ │ +
141
│ │ │ +
142 // Implementation details for std::condition_variable
│ │ │ +
143 class __condvar
│ │ │ +
144 {
│ │ │ +
145 using timespec = __gthread_time_t;
│ │ │ +
146
│ │ │ +
147 public:
│ │ │ +
148 __condvar() noexcept
│ │ │ +
149 {
│ │ │ +
150#ifndef __GTHREAD_COND_INIT
│ │ │ + │ │ │ +
152#endif
│ │ │ +
153 }
│ │ │ +
154
│ │ │ +
155 ~__condvar()
│ │ │ +
156 {
│ │ │ +
157 int __e __attribute__((__unused__)) = __gthread_cond_destroy(&_M_cond);
│ │ │ +
158 __glibcxx_assert(__e != EBUSY); // threads are still blocked
│ │ │ +
159 }
│ │ │ +
160
│ │ │ +
161 __condvar(const __condvar&) = delete;
│ │ │ +
162 __condvar& operator=(const __condvar&) = delete;
│ │ │ +
163
│ │ │ +
164 __gthread_cond_t* native_handle() noexcept { return &_M_cond; }
│ │ │ +
165
│ │ │ +
166 // Expects: Calling thread has locked __m.
│ │ │ +
167 void
│ │ │ +
168 wait(mutex& __m)
│ │ │ +
169 {
│ │ │ +
170 int __e __attribute__((__unused__))
│ │ │ +
171 = __gthread_cond_wait(&_M_cond, __m.native_handle());
│ │ │ +
172 __glibcxx_assert(__e == 0);
│ │ │ +
173 }
│ │ │ +
174
│ │ │ +
175 void
│ │ │ +
176 wait_until(mutex& __m, timespec& __abs_time)
│ │ │ +
177 {
│ │ │ +
178 __gthread_cond_timedwait(&_M_cond, __m.native_handle(), &__abs_time);
│ │ │ +
179 }
│ │ │ +
180
│ │ │ +
181#ifdef _GLIBCXX_USE_PTHREAD_COND_CLOCKWAIT
│ │ │ +
182 void
│ │ │ +
183 wait_until(mutex& __m, clockid_t __clock, timespec& __abs_time)
│ │ │ +
184 {
│ │ │ +
185 pthread_cond_clockwait(&_M_cond, __m.native_handle(), __clock,
│ │ │ +
186 &__abs_time);
│ │ │ +
187 }
│ │ │ +
188#endif
│ │ │ +
189
│ │ │ +
190 void
│ │ │ +
191 notify_one() noexcept
│ │ │ +
192 {
│ │ │ +
193 int __e __attribute__((__unused__)) = __gthread_cond_signal(&_M_cond);
│ │ │ +
194 __glibcxx_assert(__e == 0);
│ │ │ +
195 }
│ │ │ +
196
│ │ │ +
197 void
│ │ │ +
198 notify_all() noexcept
│ │ │ +
199 {
│ │ │ +
200 int __e __attribute__((__unused__)) = __gthread_cond_broadcast(&_M_cond);
│ │ │ +
201 __glibcxx_assert(__e == 0);
│ │ │ +
202 }
│ │ │ +
203
│ │ │ +
204 protected:
│ │ │ +
205#ifdef __GTHREAD_COND_INIT
│ │ │ +
206 __gthread_cond_t _M_cond = __GTHREAD_COND_INIT;
│ │ │ +
207#else
│ │ │ +
208 __gthread_cond_t _M_cond;
│ │ │ +
209#endif
│ │ │ +
210 };
│ │ │ +
211 /// @endcond
│ │ │ +
212
│ │ │ +
213#endif // _GLIBCXX_HAS_GTHREADS
│ │ │ +
214
│ │ │ +
215 /// Do not acquire ownership of the mutex.
│ │ │ +
216 struct defer_lock_t { explicit defer_lock_t() = default; };
│ │ │ +
217
│ │ │ +
218 /// Try to acquire ownership of the mutex without blocking.
│ │ │ +
219 struct try_to_lock_t { explicit try_to_lock_t() = default; };
│ │ │ +
220
│ │ │ +
221 /// Assume the calling thread has already obtained mutex ownership
│ │ │ +
222 /// and manage it.
│ │ │ +
223 struct adopt_lock_t { explicit adopt_lock_t() = default; };
│ │ │ +
224
│ │ │ +
225 /// Tag used to prevent a scoped lock from acquiring ownership of a mutex.
│ │ │ + │ │ │ +
227
│ │ │ +
228 /// Tag used to prevent a scoped lock from blocking if a mutex is locked.
│ │ │ + │ │ │ +
230
│ │ │ +
231 /// Tag used to make a scoped lock take ownership of a locked mutex.
│ │ │ + │ │ │ +
233
│ │ │ +
234 /** @brief A simple scoped lock type.
│ │ │ +
235 *
│ │ │ +
236 * A lock_guard controls mutex ownership within a scope, releasing
│ │ │ +
237 * ownership in the destructor.
│ │ │ +
238 *
│ │ │ +
239 * @headerfile mutex
│ │ │ +
240 * @since C++11
│ │ │ +
241 */
│ │ │ +
242 template<typename _Mutex>
│ │ │ +
│ │ │ + │ │ │ +
244 {
│ │ │ +
245 public:
│ │ │ +
246 typedef _Mutex mutex_type;
│ │ │ +
247
│ │ │ +
248 [[__nodiscard__]]
│ │ │ +
249 explicit lock_guard(mutex_type& __m) : _M_device(__m)
│ │ │ +
250 { _M_device.lock(); }
│ │ │ +
251
│ │ │ +
252 [[__nodiscard__]]
│ │ │ +
253 lock_guard(mutex_type& __m, adopt_lock_t) noexcept : _M_device(__m)
│ │ │ +
254 { } // calling thread owns mutex
│ │ │ +
255
│ │ │ + │ │ │ +
257 { _M_device.unlock(); }
│ │ │ +
258
│ │ │ +
259 lock_guard(const lock_guard&) = delete;
│ │ │ +
260 lock_guard& operator=(const lock_guard&) = delete;
│ │ │ +
261
│ │ │ +
262 private:
│ │ │ +
263 mutex_type& _M_device;
│ │ │ +
264 };
│ │ │ +
│ │ │ +
265
│ │ │ +
266 /// @} group mutexes
│ │ │ +
267_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
268} // namespace
│ │ │ +
269#endif // C++11
│ │ │ +
270#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:229
│ │ │ +
constexpr adopt_lock_t adopt_lock
Tag used to make a scoped lock take ownership of a locked mutex.
Definition std_mutex.h:232
│ │ │ +
constexpr defer_lock_t defer_lock
Tag used to prevent a scoped lock from acquiring ownership of a mutex.
Definition std_mutex.h:226
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ - │ │ │ + │ │ │ +
Do not acquire ownership of the mutex.
Definition std_mutex.h:216
│ │ │ +
Try to acquire ownership of the mutex without blocking.
Definition std_mutex.h:219
│ │ │ +
Assume the calling thread has already obtained mutex ownership and manage it.
Definition std_mutex.h:223
│ │ │ +
A simple scoped lock type.
Definition std_mutex.h:244
│ │ │ + │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── 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-2024 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2003-2024 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,108 +21,288 @@ │ │ │ │ 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 │ │ │ │ -36 │ │ │ │ -37#pragma GCC system_header │ │ │ │ +30#ifndef _GLIBCXX_MUTEX_H │ │ │ │ +31#define _GLIBCXX_MUTEX_H 1 │ │ │ │ +32 │ │ │ │ +33#pragma GCC system_header │ │ │ │ +34 │ │ │ │ +35#if __cplusplus < 201103L │ │ │ │ +36# include <_b_i_t_s_/_c_+_+_0_x___w_a_r_n_i_n_g_._h> │ │ │ │ +37#else │ │ │ │ 38 │ │ │ │ -39#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ -40#include <_b_i_t_s_/_m_e_m_o_r_y_f_w_d_._h> │ │ │ │ -41 │ │ │ │ -42namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -43{ │ │ │ │ -44_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -45 │ │ │ │ -46 /** │ │ │ │ -47 * @defgroup strings Strings │ │ │ │ -48 * │ │ │ │ -49 * @{ │ │ │ │ -50 */ │ │ │ │ -51 │ │ │ │ -52 template │ │ │ │ -53 struct char_traits; │ │ │ │ +39#include // EBUSY │ │ │ │ +40#include <_b_i_t_s_/_f_u_n_c_t_e_x_c_e_p_t_._h> │ │ │ │ +41#include │ │ │ │ +42 │ │ │ │ +43namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +44{ │ │ │ │ +45_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +46 │ │ │ │ +47 /** │ │ │ │ +48 * @defgroup mutexes Mutexes │ │ │ │ +49 * @ingroup concurrency │ │ │ │ +50 * │ │ │ │ +51 * Classes for mutex support. │ │ │ │ +52 * @{ │ │ │ │ +53 */ │ │ │ │ 54 │ │ │ │ -55 template<> struct char_traits; │ │ │ │ -56 │ │ │ │ -57 template<> struct char_traits; │ │ │ │ -58 │ │ │ │ -59#ifdef _GLIBCXX_USE_CHAR8_T │ │ │ │ -60 template<> struct char_traits; │ │ │ │ -61#endif │ │ │ │ -62 │ │ │ │ -63#if __cplusplus >= 201103L │ │ │ │ -64 template<> struct char_traits; │ │ │ │ -65 template<> struct char_traits; │ │ │ │ -66#endif │ │ │ │ -67 │ │ │ │ -68_GLIBCXX_BEGIN_NAMESPACE_CXX11 │ │ │ │ -69 │ │ │ │ -70 template, │ │ │ │ -71 typename _Alloc = allocator<_CharT> > │ │ │ │ -72 class basic_string; │ │ │ │ -73 │ │ │ │ -74_GLIBCXX_END_NAMESPACE_CXX11 │ │ │ │ -75 │ │ │ │ -76 /// A string of @c char │ │ │ │ -_7_7 typedef _b_a_s_i_c___s_t_r_i_n_g_<_c_h_a_r_> _s_t_r_i_n_g; │ │ │ │ -78 │ │ │ │ -79 /// A string of @c wchar_t │ │ │ │ -_8_0 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; │ │ │ │ -81 │ │ │ │ -82#ifdef _GLIBCXX_USE_CHAR8_T │ │ │ │ -83 /// A string of @c char8_t │ │ │ │ -84 typedef _b_a_s_i_c___s_t_r_i_n_g_<_c_h_a_r_8___t_> u8string; │ │ │ │ -85#endif │ │ │ │ -86 │ │ │ │ -87#if __cplusplus >= 201103L │ │ │ │ -88 /// A string of @c char16_t │ │ │ │ -_8_9 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; │ │ │ │ -90 │ │ │ │ -91 /// A string of @c char32_t │ │ │ │ -_9_2 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; │ │ │ │ -93#endif │ │ │ │ -94 │ │ │ │ -95 /** @} */ │ │ │ │ -96 │ │ │ │ -97_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -98} // namespace std │ │ │ │ -99 │ │ │ │ -100#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_7 │ │ │ │ -_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_2 │ │ │ │ -_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_:_8_9 │ │ │ │ -_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_0 │ │ │ │ +55#ifdef _GLIBCXX_HAS_GTHREADS │ │ │ │ +56 /// @cond undocumented │ │ │ │ +57 │ │ │ │ +58 // Common base class for std::mutex and std::timed_mutex │ │ │ │ +59 class __mutex_base │ │ │ │ +60 { │ │ │ │ +61 protected: │ │ │ │ +62 typedef __gthread_mutex_t __native_type; │ │ │ │ +63 │ │ │ │ +64#ifdef __GTHREAD_MUTEX_INIT │ │ │ │ +65 __native_type _M_mutex = __GTHREAD_MUTEX_INIT; │ │ │ │ +66 │ │ │ │ +67 constexpr __mutex_base() noexcept = default; │ │ │ │ +68#else │ │ │ │ +69 __native_type _M_mutex; │ │ │ │ +70 │ │ │ │ +71 __mutex_base() noexcept │ │ │ │ +72 { │ │ │ │ +73 // XXX EAGAIN, ENOMEM, EPERM, EBUSY(may), EINVAL(may) │ │ │ │ +74 __GTHREAD_MUTEX_INIT_FUNCTION(&_M_mutex); │ │ │ │ +75 } │ │ │ │ +76 │ │ │ │ +77 ~__mutex_base() noexcept { __gthread_mutex_destroy(&_M_mutex); } │ │ │ │ +78#endif │ │ │ │ +79 │ │ │ │ +80 __mutex_base(const __mutex_base&) = delete; │ │ │ │ +81 __mutex_base& operator=(const __mutex_base&) = delete; │ │ │ │ +82 }; │ │ │ │ +83 /// @endcond │ │ │ │ +84 │ │ │ │ +85 /** The standard mutex type. │ │ │ │ +86 * │ │ │ │ +87 * A simple, non-recursive, non-timed mutex. │ │ │ │ +88 * │ │ │ │ +89 * Do not call `lock()` and `unlock()` directly, use a scoped lock type │ │ │ │ +90 * such as `std::unique_lock`, `std::lock_guard`, or (since C++17) │ │ │ │ +91 * `std::scoped_lock`. │ │ │ │ +92 * │ │ │ │ +93 * @headerfile mutex │ │ │ │ +94 * @since C++11 │ │ │ │ +95 */ │ │ │ │ +_9_6 class _m_u_t_e_x : private __mutex_base │ │ │ │ +97 { │ │ │ │ +98 public: │ │ │ │ +99 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; │ │ │ │ +100 │ │ │ │ +101#ifdef __GTHREAD_MUTEX_INIT │ │ │ │ +102 constexpr │ │ │ │ +103#endif │ │ │ │ +104 _m_u_t_e_x() noexcept = default; │ │ │ │ +105 _~_m_u_t_e_x() = default; │ │ │ │ +106 │ │ │ │ +107 _m_u_t_e_x(const _m_u_t_e_x&) = delete; │ │ │ │ +108 _m_u_t_e_x& operator=(const _m_u_t_e_x&) = delete; │ │ │ │ +109 │ │ │ │ +110 void │ │ │ │ +111 lock() │ │ │ │ +112 { │ │ │ │ +113 int __e = __gthread_mutex_lock(&_M_mutex); │ │ │ │ +114 │ │ │ │ +115 // EINVAL, EAGAIN, EBUSY, EINVAL, EDEADLK(may) │ │ │ │ +116 if (__e) │ │ │ │ +117 __throw_system_error(__e); │ │ │ │ +118 } │ │ │ │ +119 │ │ │ │ +120 _GLIBCXX_NODISCARD │ │ │ │ +121 bool │ │ │ │ +122 try_lock() noexcept │ │ │ │ +123 { │ │ │ │ +124 // XXX EINVAL, EAGAIN, EBUSY │ │ │ │ +125 return !__gthread_mutex_trylock(&_M_mutex); │ │ │ │ +126 } │ │ │ │ +127 │ │ │ │ +128 void │ │ │ │ +129 unlock() │ │ │ │ +130 { │ │ │ │ +131 // XXX EINVAL, EAGAIN, EPERM │ │ │ │ +132 __gthread_mutex_unlock(&_M_mutex); │ │ │ │ +133 } │ │ │ │ +134 │ │ │ │ +135 _n_a_t_i_v_e___h_a_n_d_l_e___t_y_p_e │ │ │ │ +136 native_handle() noexcept │ │ │ │ +137 { return &_M_mutex; } │ │ │ │ +138 }; │ │ │ │ +139 │ │ │ │ +140 /// @cond undocumented │ │ │ │ +141 │ │ │ │ +142 // Implementation details for std::condition_variable │ │ │ │ +143 class __condvar │ │ │ │ +144 { │ │ │ │ +145 using _t_i_m_e_s_p_e_c = __gthread_time_t; │ │ │ │ +146 │ │ │ │ +147 public: │ │ │ │ +148 __condvar() noexcept │ │ │ │ +149 { │ │ │ │ +150#ifndef __GTHREAD_COND_INIT │ │ │ │ +151 _____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); │ │ │ │ +152#endif │ │ │ │ +153 } │ │ │ │ +154 │ │ │ │ +155 ~__condvar() │ │ │ │ +156 { │ │ │ │ +157 int __e __attribute__((__unused__)) = __gthread_cond_destroy(&_M_cond); │ │ │ │ +158 __glibcxx_assert(__e != EBUSY); // threads are still blocked │ │ │ │ +159 } │ │ │ │ +160 │ │ │ │ +161 __condvar(const __condvar&) = delete; │ │ │ │ +162 __condvar& operator=(const __condvar&) = delete; │ │ │ │ +163 │ │ │ │ +164 __gthread_cond_t* native_handle() noexcept { return &_M_cond; } │ │ │ │ +165 │ │ │ │ +166 // Expects: Calling thread has locked __m. │ │ │ │ +167 void │ │ │ │ +168 wait(mutex& __m) │ │ │ │ +169 { │ │ │ │ +170 int __e __attribute__((__unused__)) │ │ │ │ +171 = __gthread_cond_wait(&_M_cond, __m.native_handle()); │ │ │ │ +172 __glibcxx_assert(__e == 0); │ │ │ │ +173 } │ │ │ │ +174 │ │ │ │ +175 void │ │ │ │ +176 wait_until(mutex& __m, timespec& __abs_time) │ │ │ │ +177 { │ │ │ │ +178 __gthread_cond_timedwait(&_M_cond, __m.native_handle(), &__abs_time); │ │ │ │ +179 } │ │ │ │ +180 │ │ │ │ +181#ifdef _GLIBCXX_USE_PTHREAD_COND_CLOCKWAIT │ │ │ │ +182 void │ │ │ │ +183 wait_until(mutex& __m, clockid_t __clock, timespec& __abs_time) │ │ │ │ +184 { │ │ │ │ +185 pthread_cond_clockwait(&_M_cond, __m.native_handle(), __clock, │ │ │ │ +186 &__abs_time); │ │ │ │ +187 } │ │ │ │ +188#endif │ │ │ │ +189 │ │ │ │ +190 void │ │ │ │ +191 notify_one() noexcept │ │ │ │ +192 { │ │ │ │ +193 int __e __attribute__((__unused__)) = __gthread_cond_signal(&_M_cond); │ │ │ │ +194 __glibcxx_assert(__e == 0); │ │ │ │ +195 } │ │ │ │ +196 │ │ │ │ +197 void │ │ │ │ +198 notify_all() noexcept │ │ │ │ +199 { │ │ │ │ +200 int __e __attribute__((__unused__)) = __gthread_cond_broadcast(&_M_cond); │ │ │ │ +201 __glibcxx_assert(__e == 0); │ │ │ │ +202 } │ │ │ │ +203 │ │ │ │ +204 protected: │ │ │ │ +205#ifdef __GTHREAD_COND_INIT │ │ │ │ +206 __gthread_cond_t _M_cond = __GTHREAD_COND_INIT; │ │ │ │ +207#else │ │ │ │ +208 __gthread_cond_t _M_cond; │ │ │ │ +209#endif │ │ │ │ +210 }; │ │ │ │ +211 /// @endcond │ │ │ │ +212 │ │ │ │ +213#endif // _GLIBCXX_HAS_GTHREADS │ │ │ │ +214 │ │ │ │ +215 /// Do not acquire ownership of the mutex. │ │ │ │ +_2_1_6 struct _d_e_f_e_r___l_o_c_k___t { explicit _d_e_f_e_r___l_o_c_k___t() = default; }; │ │ │ │ +217 │ │ │ │ +218 /// Try to acquire ownership of the mutex without blocking. │ │ │ │ +_2_1_9 struct _t_r_y___t_o___l_o_c_k___t { explicit _t_r_y___t_o___l_o_c_k___t() = default; }; │ │ │ │ +220 │ │ │ │ +221 /// Assume the calling thread has already obtained mutex ownership │ │ │ │ +222 /// and manage it. │ │ │ │ +_2_2_3 struct _a_d_o_p_t___l_o_c_k___t { explicit _a_d_o_p_t___l_o_c_k___t() = default; }; │ │ │ │ +224 │ │ │ │ +225 /// Tag used to prevent a scoped lock from acquiring ownership of a mutex. │ │ │ │ +_2_2_6 ___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 { }; │ │ │ │ +227 │ │ │ │ +228 /// Tag used to prevent a scoped lock from blocking if a mutex is locked. │ │ │ │ +_2_2_9 ___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 { }; │ │ │ │ +230 │ │ │ │ +231 /// Tag used to make a scoped lock take ownership of a locked mutex. │ │ │ │ +_2_3_2 ___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 { }; │ │ │ │ +233 │ │ │ │ +234 /** @brief A simple scoped lock type. │ │ │ │ +235 * │ │ │ │ +236 * A lock_guard controls mutex ownership within a scope, releasing │ │ │ │ +237 * ownership in the destructor. │ │ │ │ +238 * │ │ │ │ +239 * @headerfile mutex │ │ │ │ +240 * @since C++11 │ │ │ │ +241 */ │ │ │ │ +242 template │ │ │ │ +_2_4_3 class _l_o_c_k___g_u_a_r_d │ │ │ │ +244 { │ │ │ │ +245 public: │ │ │ │ +246 typedef ___M_u_t_e_x mutex_type; │ │ │ │ +247 │ │ │ │ +248 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +249 explicit _l_o_c_k___g_u_a_r_d(mutex_type& _____m) : _M_device(_____m) │ │ │ │ +250 { _M_device.lock(); } │ │ │ │ +251 │ │ │ │ +252 [[_____n_o_d_i_s_c_a_r_d____]] │ │ │ │ +253 _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) │ │ │ │ +254 { } // calling thread owns mutex │ │ │ │ +255 │ │ │ │ +256 _~_l_o_c_k___g_u_a_r_d() │ │ │ │ +257 { _M_device.unlock(); } │ │ │ │ +258 │ │ │ │ +259 _l_o_c_k___g_u_a_r_d(const _l_o_c_k___g_u_a_r_d&) = delete; │ │ │ │ +260 _l_o_c_k___g_u_a_r_d& operator=(const _l_o_c_k___g_u_a_r_d&) = delete; │ │ │ │ +261 │ │ │ │ +262 private: │ │ │ │ +263 mutex_type& _M_device; │ │ │ │ +264 }; │ │ │ │ +265 │ │ │ │ +266 /// @} group mutexes │ │ │ │ +267_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +268} // namespace │ │ │ │ +269#endif // C++11 │ │ │ │ +270#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_2_9 │ │ │ │ +_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_2 │ │ │ │ +_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_6 │ │ │ │ _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_7 │ │ │ │ +_s_t_d_:_:_d_e_f_e_r___l_o_c_k___t │ │ │ │ +Do not acquire ownership of the mutex. │ │ │ │ +DDeeffiinniittiioonn _s_t_d___m_u_t_e_x_._h_:_2_1_6 │ │ │ │ +_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_1_9 │ │ │ │ +_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_3 │ │ │ │ +_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_4 │ │ │ │ _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-14-base/libstdc++/user/a00389.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: streambuf.tcc File Reference │ │ │ +libstdc++: fstream.tcc File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -47,66 +47,56 @@ │ │ │ $(document).ready(function(){initNavTree('a00389.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-14-base/libstdc++/user/a00389_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-2024 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,175 +72,1183 @@ │ │ │
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#pragma GCC system_header
│ │ │
38
│ │ │ -
39namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
40{
│ │ │ -
41_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
39#include <bits/cxxabi_forced.h>
│ │ │ +
40#include <bits/move.h> // for swap
│ │ │ +
41#include <cerrno>
│ │ │
42
│ │ │ -
43 template<typename _CharT, typename _Traits>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ -
47 {
│ │ │ -
48 streamsize __ret = 0;
│ │ │ -
49 while (__ret < __n)
│ │ │ -
50 {
│ │ │ -
51 const streamsize __buf_len = this->egptr() - this->gptr();
│ │ │ -
52 if (__buf_len)
│ │ │ -
53 {
│ │ │ -
54 const streamsize __remaining = __n - __ret;
│ │ │ - │ │ │ -
56 traits_type::copy(__s, this->gptr(), __len);
│ │ │ -
57 __ret += __len;
│ │ │ -
58 __s += __len;
│ │ │ -
59 this->__safe_gbump(__len);
│ │ │ -
60 }
│ │ │ -
61
│ │ │ -
62 if (__ret < __n)
│ │ │ -
63 {
│ │ │ -
64 const int_type __c = this->uflow();
│ │ │ -
65 if (!traits_type::eq_int_type(__c, traits_type::eof()))
│ │ │ -
66 {
│ │ │ -
67 traits_type::assign(*__s++, traits_type::to_char_type(__c));
│ │ │ -
68 ++__ret;
│ │ │ -
69 }
│ │ │ -
70 else
│ │ │ -
71 break;
│ │ │ -
72 }
│ │ │ -
73 }
│ │ │ -
74 return __ret;
│ │ │ -
75 }
│ │ │ -
│ │ │ -
76
│ │ │ -
77 template<typename _CharT, typename _Traits>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ - │ │ │ -
81 {
│ │ │ -
82 streamsize __ret = 0;
│ │ │ -
83 while (__ret < __n)
│ │ │ -
84 {
│ │ │ -
85 const streamsize __buf_len = this->epptr() - this->pptr();
│ │ │ -
86 if (__buf_len)
│ │ │ -
87 {
│ │ │ -
88 const streamsize __remaining = __n - __ret;
│ │ │ - │ │ │ -
90 traits_type::copy(this->pptr(), __s, __len);
│ │ │ -
91 __ret += __len;
│ │ │ -
92 __s += __len;
│ │ │ -
93 this->__safe_pbump(__len);
│ │ │ -
94 }
│ │ │ -
95
│ │ │ -
96 if (__ret < __n)
│ │ │ -
97 {
│ │ │ -
98 int_type __c = this->overflow(traits_type::to_int_type(*__s));
│ │ │ -
99 if (!traits_type::eq_int_type(__c, traits_type::eof()))
│ │ │ -
100 {
│ │ │ -
101 ++__ret;
│ │ │ -
102 ++__s;
│ │ │ -
103 }
│ │ │ -
104 else
│ │ │ -
105 break;
│ │ │ -
106 }
│ │ │ -
107 }
│ │ │ -
108 return __ret;
│ │ │ -
109 }
│ │ │ -
│ │ │ -
110
│ │ │ -
111 // Conceivably, this could be used to implement buffer-to-buffer
│ │ │ -
112 // copies, if this was ever desired in an un-ambiguous way by the
│ │ │ -
113 // standard.
│ │ │ -
114 template<typename _CharT, typename _Traits>
│ │ │ - │ │ │ -
116 __copy_streambufs_eof(basic_streambuf<_CharT, _Traits>* __sbin,
│ │ │ - │ │ │ -
118 bool& __ineof)
│ │ │ -
119 {
│ │ │ -
120 streamsize __ret = 0;
│ │ │ -
121 __ineof = true;
│ │ │ -
122 typename _Traits::int_type __c = __sbin->sgetc();
│ │ │ -
123 while (!_Traits::eq_int_type(__c, _Traits::eof()))
│ │ │ -
124 {
│ │ │ -
125 __c = __sbout->sputc(_Traits::to_char_type(__c));
│ │ │ -
126 if (_Traits::eq_int_type(__c, _Traits::eof()))
│ │ │ -
127 {
│ │ │ -
128 __ineof = false;
│ │ │ -
129 break;
│ │ │ -
130 }
│ │ │ -
131 ++__ret;
│ │ │ -
132 __c = __sbin->snextc();
│ │ │ -
133 }
│ │ │ -
134 return __ret;
│ │ │ -
135 }
│ │ │ -
136
│ │ │ -
137 template<typename _CharT, typename _Traits>
│ │ │ -
138 inline streamsize
│ │ │ -
139 __copy_streambufs(basic_streambuf<_CharT, _Traits>* __sbin,
│ │ │ -
140 basic_streambuf<_CharT, _Traits>* __sbout)
│ │ │ -
141 {
│ │ │ -
142 bool __ineof;
│ │ │ -
143 return __copy_streambufs_eof(__sbin, __sbout, __ineof);
│ │ │ -
144 }
│ │ │ -
145
│ │ │ -
146 // Inhibit implicit instantiations for required instantiations,
│ │ │ -
147 // which are defined via explicit instantiations elsewhere.
│ │ │ -
148#if _GLIBCXX_EXTERN_TEMPLATE
│ │ │ -
149 extern template class basic_streambuf<char>;
│ │ │ -
150
│ │ │ -
151 extern template
│ │ │ - │ │ │ -
153 __copy_streambufs(basic_streambuf<char>*,
│ │ │ -
154 basic_streambuf<char>*);
│ │ │ -
155
│ │ │ -
156#ifdef _GLIBCXX_USE_WCHAR_T
│ │ │ -
157 extern template class basic_streambuf<wchar_t>;
│ │ │ -
158
│ │ │ -
159 extern template
│ │ │ - │ │ │ -
161 __copy_streambufs(basic_streambuf<wchar_t>*,
│ │ │ -
162 basic_streambuf<wchar_t>*);
│ │ │ -
163#endif
│ │ │ -
164#endif
│ │ │ -
165
│ │ │ -
166_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
167} // namespace std
│ │ │ -
168
│ │ │ -
169#endif
│ │ │ -
constexpr const _Tp & min(const _Tp &, const _Tp &)
This does what you think it does.
│ │ │ +
43namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
44{
│ │ │ +
45_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
46
│ │ │ +
47 template<typename _CharT, typename _Traits>
│ │ │ +
48 void
│ │ │ +
49 basic_filebuf<_CharT, _Traits>::
│ │ │ +
50 _M_allocate_internal_buffer()
│ │ │ +
51 {
│ │ │ +
52 // Allocate internal buffer only if one doesn't already exist
│ │ │ +
53 // (either allocated or provided by the user via setbuf).
│ │ │ +
54 if (!_M_buf_allocated && !_M_buf)
│ │ │ +
55 {
│ │ │ +
56 _M_buf = new char_type[_M_buf_size];
│ │ │ +
57 _M_buf_allocated = true;
│ │ │ +
58 }
│ │ │ +
59 }
│ │ │ +
60
│ │ │ +
61 template<typename _CharT, typename _Traits>
│ │ │ +
62 void
│ │ │ +
63 basic_filebuf<_CharT, _Traits>::
│ │ │ +
64 _M_destroy_internal_buffer() throw()
│ │ │ +
65 {
│ │ │ +
66 if (_M_buf_allocated)
│ │ │ +
67 {
│ │ │ +
68 delete [] _M_buf;
│ │ │ +
69 _M_buf = 0;
│ │ │ +
70 _M_buf_allocated = false;
│ │ │ +
71 }
│ │ │ +
72 delete [] _M_ext_buf;
│ │ │ +
73 _M_ext_buf = 0;
│ │ │ +
74 _M_ext_buf_size = 0;
│ │ │ +
75 _M_ext_next = 0;
│ │ │ +
76 _M_ext_end = 0;
│ │ │ +
77 }
│ │ │ +
78
│ │ │ +
79 template<typename _CharT, typename _Traits>
│ │ │ +
│ │ │ + │ │ │ +
81 basic_filebuf() : __streambuf_type(), _M_lock(), _M_file(&_M_lock),
│ │ │ +
82 _M_mode(ios_base::openmode(0)), _M_state_beg(), _M_state_cur(),
│ │ │ +
83 _M_state_last(), _M_buf(0), _M_buf_size(_GLIBCXX_BUFSIZ),
│ │ │ +
84 _M_buf_allocated(false), _M_reading(false), _M_writing(false), _M_pback(),
│ │ │ +
85 _M_pback_cur_save(0), _M_pback_end_save(0), _M_pback_init(false),
│ │ │ +
86 _M_codecvt(0), _M_ext_buf(0), _M_ext_buf_size(0), _M_ext_next(0),
│ │ │ +
87 _M_ext_end(0)
│ │ │ +
88 {
│ │ │ + │ │ │ +
90 }
│ │ │ +
│ │ │ +
91
│ │ │ +
92#if __cplusplus >= 201103L
│ │ │ +
93 template<typename _CharT, typename _Traits>
│ │ │ + │ │ │ + │ │ │ +
96 : __streambuf_type(__rhs),
│ │ │ +
97 _M_lock(), _M_file(std::move(__rhs._M_file), &_M_lock),
│ │ │ +
98 _M_mode(std::__exchange(__rhs._M_mode, ios_base::openmode(0))),
│ │ │ +
99 _M_state_beg(std::move(__rhs._M_state_beg)),
│ │ │ +
100 _M_state_cur(std::move(__rhs._M_state_cur)),
│ │ │ +
101 _M_state_last(std::move(__rhs._M_state_last)),
│ │ │ +
102 _M_buf(std::__exchange(__rhs._M_buf, nullptr)),
│ │ │ +
103 _M_buf_size(std::__exchange(__rhs._M_buf_size, 1)),
│ │ │ +
104 _M_buf_allocated(std::__exchange(__rhs._M_buf_allocated, false)),
│ │ │ +
105 _M_reading(std::__exchange(__rhs._M_reading, false)),
│ │ │ +
106 _M_writing(std::__exchange(__rhs._M_writing, false)),
│ │ │ +
107 _M_pback(__rhs._M_pback),
│ │ │ +
108 _M_pback_cur_save(std::__exchange(__rhs._M_pback_cur_save, nullptr)),
│ │ │ +
109 _M_pback_end_save(std::__exchange(__rhs._M_pback_end_save, nullptr)),
│ │ │ +
110 _M_pback_init(std::__exchange(__rhs._M_pback_init, false)),
│ │ │ +
111 _M_codecvt(__rhs._M_codecvt),
│ │ │ +
112 _M_ext_buf(std::__exchange(__rhs._M_ext_buf, nullptr)),
│ │ │ +
113 _M_ext_buf_size(std::__exchange(__rhs._M_ext_buf_size, 0)),
│ │ │ +
114 _M_ext_next(std::__exchange(__rhs._M_ext_next, nullptr)),
│ │ │ +
115 _M_ext_end(std::__exchange(__rhs._M_ext_end, nullptr))
│ │ │ +
116 {
│ │ │ +
117 __rhs._M_set_buffer(-1);
│ │ │ +
118 __rhs._M_state_last = __rhs._M_state_cur = __rhs._M_state_beg;
│ │ │ +
119 }
│ │ │ +
120
│ │ │ +
121 template<typename _CharT, typename _Traits>
│ │ │ +
122 basic_filebuf<_CharT, _Traits>&
│ │ │ +
123 basic_filebuf<_CharT, _Traits>::
│ │ │ +
124 operator=(basic_filebuf&& __rhs)
│ │ │ +
125 {
│ │ │ +
126 this->close();
│ │ │ +
127 __streambuf_type::operator=(__rhs);
│ │ │ +
128 _M_file.swap(__rhs._M_file);
│ │ │ +
129 _M_mode = std::__exchange(__rhs._M_mode, ios_base::openmode(0));
│ │ │ +
130 _M_state_beg = std::move(__rhs._M_state_beg);
│ │ │ +
131 _M_state_cur = std::move(__rhs._M_state_cur);
│ │ │ +
132 _M_state_last = std::move(__rhs._M_state_last);
│ │ │ +
133 _M_buf = std::__exchange(__rhs._M_buf, nullptr);
│ │ │ +
134 _M_buf_size = std::__exchange(__rhs._M_buf_size, 1);
│ │ │ +
135 _M_buf_allocated = std::__exchange(__rhs._M_buf_allocated, false);
│ │ │ +
136 _M_ext_buf = std::__exchange(__rhs._M_ext_buf, nullptr);
│ │ │ +
137 _M_ext_buf_size = std::__exchange(__rhs._M_ext_buf_size, 0);
│ │ │ +
138 _M_ext_next = std::__exchange(__rhs._M_ext_next, nullptr);
│ │ │ +
139 _M_ext_end = std::__exchange(__rhs._M_ext_end, nullptr);
│ │ │ +
140 _M_reading = std::__exchange(__rhs._M_reading, false);
│ │ │ +
141 _M_writing = std::__exchange(__rhs._M_writing, false);
│ │ │ +
142 _M_pback_cur_save = std::__exchange(__rhs._M_pback_cur_save, nullptr);
│ │ │ +
143 _M_pback_end_save = std::__exchange(__rhs._M_pback_end_save, nullptr);
│ │ │ +
144 _M_pback_init = std::__exchange(__rhs._M_pback_init, false);
│ │ │ +
145 __rhs._M_set_buffer(-1);
│ │ │ +
146 __rhs._M_state_last = __rhs._M_state_cur = __rhs._M_state_beg;
│ │ │ +
147 return *this;
│ │ │ +
148 }
│ │ │ +
149
│ │ │ +
150 template<typename _CharT, typename _Traits>
│ │ │ +
151 void
│ │ │ +
152 basic_filebuf<_CharT, _Traits>::
│ │ │ +
153 swap(basic_filebuf& __rhs)
│ │ │ +
154 {
│ │ │ +
155 __streambuf_type::swap(__rhs);
│ │ │ +
156 _M_file.swap(__rhs._M_file);
│ │ │ +
157 std::swap(_M_mode, __rhs._M_mode);
│ │ │ +
158 std::swap(_M_state_beg, __rhs._M_state_beg);
│ │ │ +
159 std::swap(_M_state_cur, __rhs._M_state_cur);
│ │ │ +
160 std::swap(_M_state_last, __rhs._M_state_last);
│ │ │ +
161 std::swap(_M_buf, __rhs._M_buf);
│ │ │ +
162 std::swap(_M_buf_size, __rhs._M_buf_size);
│ │ │ +
163 std::swap(_M_buf_allocated, __rhs._M_buf_allocated);
│ │ │ +
164 std::swap(_M_ext_buf, __rhs._M_ext_buf);
│ │ │ +
165 std::swap(_M_ext_buf_size, __rhs._M_ext_buf_size);
│ │ │ +
166 std::swap(_M_ext_next, __rhs._M_ext_next);
│ │ │ +
167 std::swap(_M_ext_end, __rhs._M_ext_end);
│ │ │ +
168 std::swap(_M_reading, __rhs._M_reading);
│ │ │ +
169 std::swap(_M_writing, __rhs._M_writing);
│ │ │ +
170 std::swap(_M_pback_cur_save, __rhs._M_pback_cur_save);
│ │ │ +
171 std::swap(_M_pback_end_save, __rhs._M_pback_end_save);
│ │ │ +
172 std::swap(_M_pback_init, __rhs._M_pback_init);
│ │ │ +
173 }
│ │ │ +
174#endif
│ │ │ +
175
│ │ │ +
176 template<typename _CharT, typename _Traits>
│ │ │ +
177 typename basic_filebuf<_CharT, _Traits>::__filebuf_type*
│ │ │ +
│ │ │ + │ │ │ +
179 open(const char* __s, ios_base::openmode __mode)
│ │ │ +
180 {
│ │ │ + │ │ │ +
182 if (!this->is_open())
│ │ │ +
183 {
│ │ │ +
184 _M_file.open(__s, __mode);
│ │ │ +
185 if (this->is_open())
│ │ │ +
186 {
│ │ │ +
187 _M_allocate_internal_buffer();
│ │ │ +
188 _M_mode = __mode;
│ │ │ +
189
│ │ │ +
190 // Setup initial buffer to 'uncommitted' mode.
│ │ │ +
191 _M_reading = false;
│ │ │ +
192 _M_writing = false;
│ │ │ +
193 _M_set_buffer(-1);
│ │ │ +
194
│ │ │ +
195 // Reset to initial state.
│ │ │ +
196 _M_state_last = _M_state_cur = _M_state_beg;
│ │ │ +
197
│ │ │ +
198 // 27.8.1.3,4
│ │ │ +
199 if ((__mode & ios_base::ate)
│ │ │ +
200 && this->seekoff(0, ios_base::end, __mode)
│ │ │ +
201 == pos_type(off_type(-1)))
│ │ │ +
202 this->close();
│ │ │ +
203 else
│ │ │ +
204 __ret = this;
│ │ │ +
205 }
│ │ │ +
206 }
│ │ │ +
207 return __ret;
│ │ │ +
208 }
│ │ │ +
│ │ │ +
209
│ │ │ +
210#if _GLIBCXX_HAVE__WFOPEN && _GLIBCXX_USE_WCHAR_T
│ │ │ +
211 template<typename _CharT, typename _Traits>
│ │ │ + │ │ │ + │ │ │ +
214 open(const wchar_t* __s, ios_base::openmode __mode)
│ │ │ +
215 {
│ │ │ +
216 __filebuf_type *__ret = 0;
│ │ │ +
217 if (!this->is_open())
│ │ │ +
218 {
│ │ │ +
219 _M_file.open(__s, __mode);
│ │ │ +
220 if (this->is_open())
│ │ │ +
221 {
│ │ │ +
222 _M_allocate_internal_buffer();
│ │ │ +
223 _M_mode = __mode;
│ │ │ +
224
│ │ │ +
225 // Setup initial buffer to 'uncommitted' mode.
│ │ │ +
226 _M_reading = false;
│ │ │ +
227 _M_writing = false;
│ │ │ +
228 _M_set_buffer(-1);
│ │ │ +
229
│ │ │ +
230 // Reset to initial state.
│ │ │ +
231 _M_state_last = _M_state_cur = _M_state_beg;
│ │ │ +
232
│ │ │ +
233 // 27.8.1.3,4
│ │ │ +
234 if ((__mode & ios_base::ate)
│ │ │ +
235 && this->seekoff(0, ios_base::end, __mode)
│ │ │ +
236 == pos_type(off_type(-1)))
│ │ │ +
237 this->close();
│ │ │ +
238 else
│ │ │ +
239 __ret = this;
│ │ │ +
240 }
│ │ │ +
241 }
│ │ │ +
242 return __ret;
│ │ │ +
243 }
│ │ │ +
244#endif // HAVE__WFOPEN && USE_WCHAR_T
│ │ │ +
│ │ │ + │ │ │ +
246 template<typename _CharT, typename _Traits>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
249 close()
│ │ │ +
250 {
│ │ │ +
251 if (!this->is_open())
│ │ │ +
252 return 0;
│ │ │ +
253
│ │ │ +
254 bool __testfail = false;
│ │ │ +
255 {
│ │ │ +
256 // NB: Do this here so that re-opened filebufs will be cool...
│ │ │ +
257 struct __close_sentry
│ │ │ +
258 {
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
262 {
│ │ │ +
263 __fb->_M_mode = ios_base::openmode(0);
│ │ │ +
264 __fb->_M_pback_init = false;
│ │ │ +
265 __fb->_M_destroy_internal_buffer();
│ │ │ +
266 __fb->_M_reading = false;
│ │ │ +
267 __fb->_M_writing = false;
│ │ │ +
268 __fb->_M_set_buffer(-1);
│ │ │ +
269 __fb->_M_state_last = __fb->_M_state_cur = __fb->_M_state_beg;
│ │ │ +
270 }
│ │ │ +
271 } __cs (this);
│ │ │ +
272
│ │ │ +
273 __try
│ │ │ +
274 {
│ │ │ +
275 if (!_M_terminate_output())
│ │ │ +
276 __testfail = true;
│ │ │ +
277 }
│ │ │ +
278 __catch(...)
│ │ │ +
279 {
│ │ │ +
280 _M_file.close();
│ │ │ +
281 __throw_exception_again;
│ │ │ +
282 }
│ │ │ +
283 }
│ │ │ +
284
│ │ │ +
285 if (!_M_file.close())
│ │ │ +
286 __testfail = true;
│ │ │ +
287
│ │ │ +
288 if (__testfail)
│ │ │ +
289 return 0;
│ │ │ +
290 else
│ │ │ +
291 return this;
│ │ │ +
292 }
│ │ │ +
│ │ │ +
293
│ │ │ +
294 template<typename _CharT, typename _Traits>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ +
298 {
│ │ │ +
299 streamsize __ret = -1;
│ │ │ +
300 const bool __testin = _M_mode & ios_base::in;
│ │ │ +
301 if (__testin && this->is_open())
│ │ │ +
302 {
│ │ │ +
303 // For a stateful encoding (-1) the pending sequence might be just
│ │ │ +
304 // shift and unshift prefixes with no actual character.
│ │ │ +
305 __ret = this->egptr() - this->gptr();
│ │ │ +
306
│ │ │ +
307#if _GLIBCXX_HAVE_DOS_BASED_FILESYSTEM
│ │ │ +
308 // About this workaround, see libstdc++/20806.
│ │ │ +
309 const bool __testbinary = _M_mode & ios_base::binary;
│ │ │ +
310 if (__check_facet(_M_codecvt).encoding() >= 0
│ │ │ +
311 && __testbinary)
│ │ │ +
312#else
│ │ │ +
313 if (__check_facet(_M_codecvt).encoding() >= 0)
│ │ │ +
314#endif
│ │ │ +
315 __ret += _M_file.showmanyc() / _M_codecvt->max_length();
│ │ │ +
316 }
│ │ │ +
317 return __ret;
│ │ │ +
318 }
│ │ │ +
│ │ │ +
319
│ │ │ +
│ │ │ +
320 template<typename _CharT, typename _Traits>
│ │ │ +
321 typename basic_filebuf<_CharT, _Traits>::int_type
│ │ │ +
│ │ │ + │ │ │ + │ │ │ +
324 {
│ │ │ +
325 int_type __ret = traits_type::eof();
│ │ │ +
326 const bool __testin = _M_mode & ios_base::in;
│ │ │ +
327 if (__testin)
│ │ │ +
328 {
│ │ │ +
329 if (_M_writing)
│ │ │ +
330 {
│ │ │ +
331 if (overflow() == traits_type::eof())
│ │ │ +
332 return __ret;
│ │ │ +
333 _M_set_buffer(-1);
│ │ │ +
334 _M_writing = false;
│ │ │ +
335 }
│ │ │ +
336 // Check for pback madness, and if so switch back to the
│ │ │ +
337 // normal buffers and jet outta here before expensive
│ │ │ +
338 // fileops happen...
│ │ │ +
339 _M_destroy_pback();
│ │ │ +
340
│ │ │ +
341 if (this->gptr() < this->egptr())
│ │ │ +
342 return traits_type::to_int_type(*this->gptr());
│ │ │ +
343
│ │ │ +
344 // Get and convert input sequence.
│ │ │ +
345 const size_t __buflen = _M_buf_size > 1 ? _M_buf_size - 1 : 1;
│ │ │ +
346
│ │ │ +
347 // Will be set to true if ::read() returns 0 indicating EOF.
│ │ │ +
348 bool __got_eof = false;
│ │ │ +
349 // Number of internal characters produced.
│ │ │ +
350 streamsize __ilen = 0;
│ │ │ +
351 codecvt_base::result __r = codecvt_base::ok;
│ │ │ +
352 if (__check_facet(_M_codecvt).always_noconv())
│ │ │ +
353 {
│ │ │ +
354 __ilen = _M_file.xsgetn(reinterpret_cast<char*>(this->eback()),
│ │ │ +
355 __buflen);
│ │ │ +
356 if (__ilen == 0)
│ │ │ +
357 __got_eof = true;
│ │ │ +
358 }
│ │ │ +
359 else
│ │ │ +
360 {
│ │ │ +
361 // Worst-case number of external bytes.
│ │ │ +
362 // XXX Not done encoding() == -1.
│ │ │ +
363 const int __enc = _M_codecvt->encoding();
│ │ │ +
364 streamsize __blen; // Minimum buffer size.
│ │ │ +
365 streamsize __rlen; // Number of chars to read.
│ │ │ +
366 if (__enc > 0)
│ │ │ + │ │ │ +
368 else
│ │ │ +
369 {
│ │ │ +
370 __blen = __buflen + _M_codecvt->max_length() - 1;
│ │ │ +
│ │ │ + │ │ │ +
372 }
│ │ │ +
373 const streamsize __remainder = _M_ext_end - _M_ext_next;
│ │ │ + │ │ │ +
375
│ │ │ +
376 // An imbue in 'read' mode implies first converting the external
│ │ │ +
377 // chars already present.
│ │ │ +
378 if (_M_reading && this->egptr() == this->eback() && __remainder)
│ │ │ +
379 __rlen = 0;
│ │ │ +
380
│ │ │ +
381 // Allocate buffer if necessary and move unconverted
│ │ │ +
382 // bytes to front.
│ │ │ +
383 if (_M_ext_buf_size < __blen)
│ │ │ +
384 {
│ │ │ +
385 char* __buf = new char[__blen];
│ │ │ +
386 if (__remainder)
│ │ │ +
387 __builtin_memcpy(__buf, _M_ext_next, __remainder);
│ │ │ +
388
│ │ │ +
389 delete [] _M_ext_buf;
│ │ │ +
390 _M_ext_buf = __buf;
│ │ │ +
391 _M_ext_buf_size = __blen;
│ │ │ +
392 }
│ │ │ +
393 else if (__remainder)
│ │ │ +
394 __builtin_memmove(_M_ext_buf, _M_ext_next, __remainder);
│ │ │ +
395
│ │ │ +
396 _M_ext_next = _M_ext_buf;
│ │ │ +
397 _M_ext_end = _M_ext_buf + __remainder;
│ │ │ +
398 _M_state_last = _M_state_cur;
│ │ │ +
399
│ │ │ +
400 do
│ │ │ +
401 {
│ │ │ +
402 if (__rlen > 0)
│ │ │ +
403 {
│ │ │ +
404 // Sanity check!
│ │ │ +
405 // This may fail if the return value of
│ │ │ +
406 // codecvt::max_length() is bogus.
│ │ │ +
407 if (_M_ext_end - _M_ext_buf + __rlen > _M_ext_buf_size)
│ │ │ +
408 {
│ │ │ +
409 __throw_ios_failure(__N("basic_filebuf::underflow "
│ │ │ +
410 "codecvt::max_length() "
│ │ │ +
411 "is not valid"));
│ │ │ +
│ │ │ + │ │ │ +
413 streamsize __elen = _M_file.xsgetn(_M_ext_end, __rlen);
│ │ │ +
414 if (__elen == 0)
│ │ │ +
415 __got_eof = true;
│ │ │ +
416 else if (__elen == -1)
│ │ │ +
417 break;
│ │ │ +
418 _M_ext_end += __elen;
│ │ │ +
419 }
│ │ │ +
│ │ │ + │ │ │ +
421 char_type* __iend = this->eback();
│ │ │ +
422 if (_M_ext_next < _M_ext_end)
│ │ │ +
│ │ │ +
423 __r = _M_codecvt->in(_M_state_cur, _M_ext_next,
│ │ │ +
424 _M_ext_end, _M_ext_next,
│ │ │ +
425 this->eback(),
│ │ │ +
426 this->eback() + __buflen, __iend);
│ │ │ +
427 if (__r == codecvt_base::noconv)
│ │ │ +
428 {
│ │ │ +
429 size_t __avail = _M_ext_end - _M_ext_buf;
│ │ │ + │ │ │ +
431 traits_type::copy(this->eback(),
│ │ │ +
432 reinterpret_cast<char_type*>
│ │ │ +
│ │ │ +
433 (_M_ext_buf), __ilen);
│ │ │ +
434 _M_ext_next = _M_ext_buf + __ilen;
│ │ │ +
435 }
│ │ │ +
436 else
│ │ │ +
437 __ilen = __iend - this->eback();
│ │ │ +
438
│ │ │ +
439 // _M_codecvt->in may return error while __ilen > 0: this is
│ │ │ +
440 // ok, and actually occurs in case of mixed encodings (e.g.,
│ │ │ +
441 // XML files).
│ │ │ +
442 if (__r == codecvt_base::error)
│ │ │ +
443 break;
│ │ │ +
444
│ │ │ +
445 __rlen = 1;
│ │ │ +
446 }
│ │ │ +
447 while (__ilen == 0 && !__got_eof);
│ │ │ +
448 }
│ │ │ +
449
│ │ │ +
450 if (__ilen > 0)
│ │ │ +
451 {
│ │ │ +
452 _M_set_buffer(__ilen);
│ │ │ +
│ │ │ +
453 _M_reading = true;
│ │ │ +
454 __ret = traits_type::to_int_type(*this->gptr());
│ │ │ +
455 }
│ │ │ +
│ │ │ +
456 else if (__got_eof)
│ │ │ +
457 {
│ │ │ +
458 // If the actual end of file is reached, set 'uncommitted'
│ │ │ +
459 // mode, thus allowing an immediate write without an
│ │ │ +
│ │ │ +
460 // intervening seek.
│ │ │ +
461 _M_set_buffer(-1);
│ │ │ +
462 _M_reading = false;
│ │ │ +
463 // However, reaching it while looping on partial means that
│ │ │ +
464 // the file has got an incomplete character.
│ │ │ +
465 if (__r == codecvt_base::partial)
│ │ │ +
466 __throw_ios_failure(__N("basic_filebuf::underflow "
│ │ │ +
467 "incomplete character in file"));
│ │ │ +
468 }
│ │ │ +
469 else if (__r == codecvt_base::error)
│ │ │ +
470 __throw_ios_failure(__N("basic_filebuf::underflow "
│ │ │ +
│ │ │ +
471 "invalid byte sequence in file"));
│ │ │ +
472 else
│ │ │ +
473 __throw_ios_failure(__N("basic_filebuf::underflow "
│ │ │ +
│ │ │ +
474 "error reading the file"), errno);
│ │ │ +
475 }
│ │ │ +
476 return __ret;
│ │ │ +
│ │ │ + │ │ │ +
478
│ │ │ +
479 template<typename _CharT, typename _Traits>
│ │ │ +
│ │ │ +
480 typename basic_filebuf<_CharT, _Traits>::int_type
│ │ │ +
│ │ │ + │ │ │ +
482 pbackfail(int_type __i)
│ │ │ +
483 {
│ │ │ +
484 int_type __ret = traits_type::eof();
│ │ │ +
485 const bool __testin = _M_mode & ios_base::in;
│ │ │ +
486 if (__testin)
│ │ │ +
487 {
│ │ │ +
488 if (_M_writing)
│ │ │ +
489 {
│ │ │ +
490 if (overflow() == traits_type::eof())
│ │ │ +
491 return __ret;
│ │ │ +
492 _M_set_buffer(-1);
│ │ │ +
493 _M_writing = false;
│ │ │ +
494 }
│ │ │ +
495 // Remember whether the pback buffer is active, otherwise below
│ │ │ +
496 // we may try to store in it a second char (libstdc++/9761).
│ │ │ +
497 const bool __testpb = _M_pback_init;
│ │ │ +
498 const bool __testeof = traits_type::eq_int_type(__i, __ret);
│ │ │ +
499 int_type __tmp;
│ │ │ +
500 if (this->eback() < this->gptr())
│ │ │ +
501 {
│ │ │ +
502 this->gbump(-1);
│ │ │ +
503 __tmp = traits_type::to_int_type(*this->gptr());
│ │ │ +
504 }
│ │ │ +
505 else if (this->seekoff(-1, ios_base::cur) != pos_type(off_type(-1)))
│ │ │ +
506 {
│ │ │ +
507 __tmp = this->underflow();
│ │ │ +
508 if (traits_type::eq_int_type(__tmp, __ret))
│ │ │ +
509 return __ret;
│ │ │ +
510 }
│ │ │ +
511 else
│ │ │ +
512 {
│ │ │ +
513 // At the beginning of the buffer, need to make a
│ │ │ +
514 // putback position available. But the seek may fail
│ │ │ +
515 // (f.i., at the beginning of a file, see
│ │ │ +
516 // libstdc++/9439) and in that case we return
│ │ │ +
517 // traits_type::eof().
│ │ │ +
518 return __ret;
│ │ │ +
519 }
│ │ │ +
520
│ │ │ +
521 // Try to put back __i into input sequence in one of three ways.
│ │ │ +
522 // Order these tests done in is unspecified by the standard.
│ │ │ +
523 if (!__testeof && traits_type::eq_int_type(__i, __tmp))
│ │ │ +
524 __ret = __i;
│ │ │ +
525 else if (__testeof)
│ │ │ +
526 __ret = traits_type::not_eof(__i);
│ │ │ +
527 else if (!__testpb)
│ │ │ +
528 {
│ │ │ +
529 _M_create_pback();
│ │ │ +
530 _M_reading = true;
│ │ │ +
531 *this->gptr() = traits_type::to_char_type(__i);
│ │ │ +
532 __ret = __i;
│ │ │ +
533 }
│ │ │ +
534 }
│ │ │ +
535 return __ret;
│ │ │ +
536 }
│ │ │ +
│ │ │ +
537
│ │ │ +
538 template<typename _CharT, typename _Traits>
│ │ │ +
539 typename basic_filebuf<_CharT, _Traits>::int_type
│ │ │ +
│ │ │ + │ │ │ +
541 overflow(int_type __c)
│ │ │ +
542 {
│ │ │ +
543 int_type __ret = traits_type::eof();
│ │ │ +
544 const bool __testeof = traits_type::eq_int_type(__c, __ret);
│ │ │ +
545 const bool __testout = (_M_mode & ios_base::out
│ │ │ +
546 || _M_mode & ios_base::app);
│ │ │ +
547 if (__testout)
│ │ │ +
548 {
│ │ │ +
549 if (_M_reading)
│ │ │ +
550 {
│ │ │ +
551 _M_destroy_pback();
│ │ │ +
552 const int __gptr_off = _M_get_ext_pos(_M_state_last);
│ │ │ +
553 if (_M_seek(__gptr_off, ios_base::cur, _M_state_last)
│ │ │ +
554 == pos_type(off_type(-1)))
│ │ │ +
555 return __ret;
│ │ │ +
556 }
│ │ │ +
557 if (this->pbase() < this->pptr())
│ │ │ +
558 {
│ │ │ +
559 // If appropriate, append the overflow char.
│ │ │ +
560 if (!__testeof)
│ │ │ +
561 {
│ │ │ +
562 *this->pptr() = traits_type::to_char_type(__c);
│ │ │ +
563 this->pbump(1);
│ │ │ +
564 }
│ │ │ +
565
│ │ │ +
566 // Convert pending sequence to external representation,
│ │ │ +
567 // and output.
│ │ │ +
568 if (_M_convert_to_external(this->pbase(),
│ │ │ +
569 this->pptr() - this->pbase()))
│ │ │ +
570 {
│ │ │ +
571 _M_set_buffer(0);
│ │ │ +
572 __ret = traits_type::not_eof(__c);
│ │ │ +
573 }
│ │ │ +
574 }
│ │ │ +
575 else if (_M_buf_size > 1)
│ │ │ +
576 {
│ │ │ +
577 // Overflow in 'uncommitted' mode: set _M_writing, set
│ │ │ +
578 // the buffer to the initial 'write' mode, and put __c
│ │ │ +
579 // into the buffer.
│ │ │ +
580 _M_set_buffer(0);
│ │ │ +
581 _M_writing = true;
│ │ │ +
582 if (!__testeof)
│ │ │ +
583 {
│ │ │ +
584 *this->pptr() = traits_type::to_char_type(__c);
│ │ │ +
585 this->pbump(1);
│ │ │ +
586 }
│ │ │ +
587 __ret = traits_type::not_eof(__c);
│ │ │ +
588 }
│ │ │ +
589 else
│ │ │ +
590 {
│ │ │ +
591 // Unbuffered.
│ │ │ +
592 char_type __conv = traits_type::to_char_type(__c);
│ │ │ +
593 if (__testeof || _M_convert_to_external(&__conv, 1))
│ │ │ +
594 {
│ │ │ +
595 _M_writing = true;
│ │ │ +
596 __ret = traits_type::not_eof(__c);
│ │ │ +
597 }
│ │ │ +
598 }
│ │ │ +
599 }
│ │ │ +
600 return __ret;
│ │ │ +
601 }
│ │ │ +
│ │ │ +
602
│ │ │ +
603 template<typename _CharT, typename _Traits>
│ │ │ +
604 bool
│ │ │ + │ │ │ + │ │ │ +
607 {
│ │ │ +
608 // Sizes of external and pending output.
│ │ │ + │ │ │ + │ │ │ +
611 if (__check_facet(_M_codecvt).always_noconv())
│ │ │ +
612 {
│ │ │ +
613 __elen = _M_file.xsputn(reinterpret_cast<char*>(__ibuf), __ilen);
│ │ │ +
614 __plen = __ilen;
│ │ │ +
615 }
│ │ │ +
616 else
│ │ │ +
617 {
│ │ │ +
618 // Worst-case number of external bytes needed.
│ │ │ +
619 // XXX Not done encoding() == -1.
│ │ │ +
620 streamsize __blen = __ilen * _M_codecvt->max_length();
│ │ │ +
621 char* __buf = static_cast<char*>(__builtin_alloca(__blen));
│ │ │ +
622
│ │ │ +
623 char* __bend;
│ │ │ +
624 const char_type* __iend;
│ │ │ +
625 codecvt_base::result __r;
│ │ │ +
626 __r = _M_codecvt->out(_M_state_cur, __ibuf, __ibuf + __ilen,
│ │ │ +
627 __iend, __buf, __buf + __blen, __bend);
│ │ │ +
628
│ │ │ +
629 if (__r == codecvt_base::ok || __r == codecvt_base::partial)
│ │ │ +
630 __blen = __bend - __buf;
│ │ │ +
631 else if (__r == codecvt_base::noconv)
│ │ │ +
632 {
│ │ │ +
633 // Same as the always_noconv case above.
│ │ │ +
634 __buf = reinterpret_cast<char*>(__ibuf);
│ │ │ +
635 __blen = __ilen;
│ │ │ +
636 }
│ │ │ +
637 else
│ │ │ +
638 __throw_ios_failure(__N("basic_filebuf::_M_convert_to_external "
│ │ │ +
639 "conversion error"));
│ │ │ +
640
│ │ │ +
641 __elen = _M_file.xsputn(__buf, __blen);
│ │ │ +
642 __plen = __blen;
│ │ │ +
643
│ │ │ +
644 // Try once more for partial conversions.
│ │ │ +
645 if (__r == codecvt_base::partial && __elen == __plen)
│ │ │ +
646 {
│ │ │ +
647 const char_type* __iresume = __iend;
│ │ │ +
648 streamsize __rlen = this->pptr() - __iend;
│ │ │ +
649 __r = _M_codecvt->out(_M_state_cur, __iresume,
│ │ │ +
650 __iresume + __rlen, __iend, __buf,
│ │ │ +
651 __buf + __blen, __bend);
│ │ │ +
652 if (__r != codecvt_base::error)
│ │ │ +
653 {
│ │ │ +
654 __rlen = __bend - __buf;
│ │ │ +
655 __elen = _M_file.xsputn(__buf, __rlen);
│ │ │ +
656 __plen = __rlen;
│ │ │ +
657 }
│ │ │ +
658 else
│ │ │ +
659 __throw_ios_failure(__N("basic_filebuf::_M_convert_to_external "
│ │ │ +
660 "conversion error"));
│ │ │ +
661 }
│ │ │ +
662 }
│ │ │ +
663 return __elen == __plen;
│ │ │ +
664 }
│ │ │ +
665
│ │ │ +
666 template<typename _CharT, typename _Traits>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
669 xsgetn(_CharT* __s, streamsize __n)
│ │ │ +
670 {
│ │ │ +
671 // Clear out pback buffer before going on to the real deal...
│ │ │ +
672 streamsize __ret = 0;
│ │ │ +
673 if (_M_pback_init)
│ │ │ +
674 {
│ │ │ +
675 if (__n > 0 && this->gptr() == this->eback())
│ │ │ +
676 {
│ │ │ +
677 *__s++ = *this->gptr(); // emulate non-underflowing sbumpc
│ │ │ +
678 this->gbump(1);
│ │ │ +
679 __ret = 1;
│ │ │ +
680 --__n;
│ │ │ +
681 }
│ │ │ +
682 _M_destroy_pback();
│ │ │ +
683 }
│ │ │ +
684 else if (_M_writing)
│ │ │ +
685 {
│ │ │ +
686 if (overflow() == traits_type::eof())
│ │ │ +
687 return __ret;
│ │ │ +
688 _M_set_buffer(-1);
│ │ │ +
689 _M_writing = false;
│ │ │ +
690 }
│ │ │ +
691
│ │ │ +
692 // Optimization in the always_noconv() case, to be generalized in the
│ │ │ +
693 // future: when __n > __buflen we read directly instead of using the
│ │ │ +
694 // buffer repeatedly.
│ │ │ +
695 const bool __testin = _M_mode & ios_base::in;
│ │ │ +
696 const streamsize __buflen = _M_buf_size > 1 ? _M_buf_size - 1 : 1;
│ │ │ +
697
│ │ │ +
698 if (__n > __buflen && __check_facet(_M_codecvt).always_noconv()
│ │ │ +
699 && __testin)
│ │ │ +
700 {
│ │ │ +
701 // First, copy the chars already present in the buffer.
│ │ │ +
702 const streamsize __avail = this->egptr() - this->gptr();
│ │ │ +
703 if (__avail != 0)
│ │ │ +
704 {
│ │ │ +
705 traits_type::copy(__s, this->gptr(), __avail);
│ │ │ +
706 __s += __avail;
│ │ │ +
707 this->setg(this->eback(), this->gptr() + __avail, this->egptr());
│ │ │ +
708 __ret += __avail;
│ │ │ +
709 __n -= __avail;
│ │ │ +
710 }
│ │ │ +
711
│ │ │ +
712 // Need to loop in case of short reads (relatively common
│ │ │ +
713 // with pipes).
│ │ │ + │ │ │ +
715 for (;;)
│ │ │ +
716 {
│ │ │ +
717 __len = _M_file.xsgetn(reinterpret_cast<char*>(__s), __n);
│ │ │ +
718 if (__len == -1)
│ │ │ +
719 __throw_ios_failure(__N("basic_filebuf::xsgetn "
│ │ │ +
720 "error reading the file"), errno);
│ │ │ +
721 if (__len == 0)
│ │ │ +
722 break;
│ │ │ +
723
│ │ │ +
724 __n -= __len;
│ │ │ +
725 __ret += __len;
│ │ │ +
726 if (__n == 0)
│ │ │ +
727 break;
│ │ │ +
728
│ │ │ +
729 __s += __len;
│ │ │ +
730 }
│ │ │ +
731
│ │ │ +
732 if (__n == 0)
│ │ │ +
733 {
│ │ │ +
734 // Set _M_reading. Buffer is already in initial 'read' mode.
│ │ │ +
735 _M_reading = true;
│ │ │ +
736 }
│ │ │ +
737 else if (__len == 0)
│ │ │ +
738 {
│ │ │ +
739 // If end of file is reached, set 'uncommitted'
│ │ │ +
740 // mode, thus allowing an immediate write without
│ │ │ +
741 // an intervening seek.
│ │ │ +
742 _M_set_buffer(-1);
│ │ │ +
743 _M_reading = false;
│ │ │ +
744 }
│ │ │ +
745 }
│ │ │ +
746 else
│ │ │ +
747 __ret += __streambuf_type::xsgetn(__s, __n);
│ │ │ +
748
│ │ │ +
749 return __ret;
│ │ │ +
750 }
│ │ │ +
│ │ │ +
751
│ │ │ +
752 template<typename _CharT, typename _Traits>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
755 xsputn(const _CharT* __s, streamsize __n)
│ │ │ +
756 {
│ │ │ +
757 streamsize __ret = 0;
│ │ │ +
758 // Optimization in the always_noconv() case, to be generalized in the
│ │ │ +
759 // future: when __n is larger than the available capacity we write
│ │ │ +
760 // directly instead of using the buffer.
│ │ │ +
761 const bool __testout = (_M_mode & ios_base::out
│ │ │ +
762 || _M_mode & ios_base::app);
│ │ │ +
763 if (__check_facet(_M_codecvt).always_noconv()
│ │ │ +
764 && __testout && !_M_reading)
│ │ │ +
765 {
│ │ │ +
766 streamsize __bufavail = this->epptr() - this->pptr();
│ │ │ +
767
│ │ │ +
768 // Don't mistake 'uncommitted' mode buffered with unbuffered.
│ │ │ +
769 if (!_M_writing && _M_buf_size > 1)
│ │ │ +
770 __bufavail = _M_buf_size - 1;
│ │ │ +
771
│ │ │ +
772 if (__n >= __bufavail)
│ │ │ +
773 {
│ │ │ +
774 const streamsize __buffill = this->pptr() - this->pbase();
│ │ │ +
775 const char* __buf = reinterpret_cast<const char*>(this->pbase());
│ │ │ +
776 __ret = _M_file.xsputn_2(__buf, __buffill,
│ │ │ +
777 reinterpret_cast<const char*>(__s),
│ │ │ +
778 __n);
│ │ │ +
779 if (__ret == __buffill + __n)
│ │ │ +
780 {
│ │ │ +
781 _M_set_buffer(0);
│ │ │ +
782 _M_writing = true;
│ │ │ +
783 }
│ │ │ +
784 if (__ret > __buffill)
│ │ │ +
785 __ret -= __buffill;
│ │ │ +
786 else
│ │ │ +
787 __ret = 0;
│ │ │ +
788 }
│ │ │ +
789 else
│ │ │ +
790 __ret = __streambuf_type::xsputn(__s, __n);
│ │ │ +
791 }
│ │ │ +
792 else
│ │ │ +
793 __ret = __streambuf_type::xsputn(__s, __n);
│ │ │ +
794 return __ret;
│ │ │ +
795 }
│ │ │ +
│ │ │ +
│ │ │ +
796
│ │ │ +
797 template<typename _CharT, typename _Traits>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
800 setbuf(char_type* __s, streamsize __n)
│ │ │ +
801 {
│ │ │ +
802 if (!this->is_open())
│ │ │ +
803 {
│ │ │ +
804 if (__s == 0 && __n == 0)
│ │ │ +
805 _M_buf_size = 1;
│ │ │ +
806 else if (__s && __n > 0)
│ │ │ +
807 {
│ │ │ +
808 // This is implementation-defined behavior, and assumes that
│ │ │ +
809 // an external char_type array of length __n exists and has
│ │ │ +
810 // been pre-allocated. If this is not the case, things will
│ │ │ +
811 // quickly blow up. When __n > 1, __n - 1 positions will be
│ │ │ +
812 // used for the get area, __n - 1 for the put area and 1
│ │ │ +
813 // position to host the overflow char of a full put area.
│ │ │ +
814 // When __n == 1, 1 position will be used for the get area
│ │ │ +
815 // and 0 for the put area, as in the unbuffered case above.
│ │ │ +
816 _M_buf = __s;
│ │ │ +
817 _M_buf_size = __n;
│ │ │ +
818 }
│ │ │ +
819 }
│ │ │ +
820 return this;
│ │ │ +
821 }
│ │ │ +
│ │ │ +
822
│ │ │ +
823
│ │ │ +
824 // According to 27.8.1.4 p11 - 13, seekoff should ignore the last
│ │ │ +
825 // argument (of type openmode).
│ │ │ +
826 template<typename _CharT, typename _Traits>
│ │ │ +
827 typename basic_filebuf<_CharT, _Traits>::pos_type
│ │ │ +
│ │ │ + │ │ │ +
829 seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode)
│ │ │ +
830 {
│ │ │ +
831 int __width = 0;
│ │ │ +
832 if (_M_codecvt)
│ │ │ +
833 __width = _M_codecvt->encoding();
│ │ │ +
834 if (__width < 0)
│ │ │ +
835 __width = 0;
│ │ │ +
836
│ │ │ +
837 pos_type __ret = pos_type(off_type(-1));
│ │ │ +
838 const bool __testfail = __off != 0 && __width <= 0;
│ │ │ +
839 if (this->is_open() && !__testfail)
│ │ │ +
840 {
│ │ │ +
841 // tellg and tellp queries do not affect any state, unless
│ │ │ +
842 // ! always_noconv and the put sequence is not empty.
│ │ │ +
843 // In that case, determining the position requires converting the
│ │ │ +
844 // put sequence. That doesn't use ext_buf, so requires a flush.
│ │ │ +
845 bool __no_movement = __way == ios_base::cur && __off == 0
│ │ │ +
846 && (!_M_writing || _M_codecvt->always_noconv());
│ │ │ +
847
│ │ │ +
848 // Ditch any pback buffers to avoid confusion.
│ │ │ +
849 if (!__no_movement)
│ │ │ +
850 _M_destroy_pback();
│ │ │ +
851
│ │ │ +
852 // Correct state at destination. Note that this is the correct
│ │ │ +
853 // state for the current position during output, because
│ │ │ +
854 // codecvt::unshift() returns the state to the initial state.
│ │ │ +
855 // This is also the correct state at the end of the file because
│ │ │ +
856 // an unshift sequence should have been written at the end.
│ │ │ +
857 __state_type __state = _M_state_beg;
│ │ │ +
858 off_type __computed_off = __off * __width;
│ │ │ +
859 if (_M_reading && __way == ios_base::cur)
│ │ │ +
860 {
│ │ │ +
861 __state = _M_state_last;
│ │ │ +
862 __computed_off += _M_get_ext_pos(__state);
│ │ │ +
863 }
│ │ │ +
864 if (!__no_movement)
│ │ │ +
865 __ret = _M_seek(__computed_off, __way, __state);
│ │ │ +
866 else
│ │ │ +
867 {
│ │ │ +
868 if (_M_writing)
│ │ │ +
869 __computed_off = this->pptr() - this->pbase();
│ │ │ +
870
│ │ │ +
871 off_type __file_off = _M_file.seekoff(0, ios_base::cur);
│ │ │ +
872 if (__file_off != off_type(-1))
│ │ │ +
873 {
│ │ │ + │ │ │ +
875 __ret.state(__state);
│ │ │ +
876 }
│ │ │ +
877 }
│ │ │ +
878 }
│ │ │ +
879 return __ret;
│ │ │ +
880 }
│ │ │ +
│ │ │ +
881
│ │ │ +
882 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
883 // 171. Strange seekpos() semantics due to joint position
│ │ │ +
884 // According to the resolution of DR 171, seekpos should ignore the last
│ │ │ +
885 // argument (of type openmode).
│ │ │ +
886 template<typename _CharT, typename _Traits>
│ │ │ +
887 typename basic_filebuf<_CharT, _Traits>::pos_type
│ │ │ +
│ │ │ + │ │ │ +
889 seekpos(pos_type __pos, ios_base::openmode)
│ │ │ +
890 {
│ │ │ +
891 pos_type __ret = pos_type(off_type(-1));
│ │ │ +
892 if (this->is_open())
│ │ │ +
893 {
│ │ │ +
894 // Ditch any pback buffers to avoid confusion.
│ │ │ +
895 _M_destroy_pback();
│ │ │ +
896 __ret = _M_seek(off_type(__pos), ios_base::beg, __pos.state());
│ │ │ +
897 }
│ │ │ +
898 return __ret;
│ │ │ +
899 }
│ │ │ +
│ │ │ +
900
│ │ │ +
901 template<typename _CharT, typename _Traits>
│ │ │ +
902 typename basic_filebuf<_CharT, _Traits>::pos_type
│ │ │ + │ │ │ +
904 _M_seek(off_type __off, ios_base::seekdir __way, __state_type __state)
│ │ │ +
905 {
│ │ │ +
906 pos_type __ret = pos_type(off_type(-1));
│ │ │ +
907 if (_M_terminate_output())
│ │ │ +
908 {
│ │ │ +
909 off_type __file_off = _M_file.seekoff(__off, __way);
│ │ │ +
910 if (__file_off != off_type(-1))
│ │ │ +
911 {
│ │ │ +
912 _M_reading = false;
│ │ │ +
913 _M_writing = false;
│ │ │ +
914 _M_ext_next = _M_ext_end = _M_ext_buf;
│ │ │ +
915 _M_set_buffer(-1);
│ │ │ +
916 _M_state_cur = __state;
│ │ │ + │ │ │ +
918 __ret.state(_M_state_cur);
│ │ │ +
919 }
│ │ │ +
920 }
│ │ │ +
921 return __ret;
│ │ │ +
922 }
│ │ │ +
923
│ │ │ +
924 // Returns the distance from the end of the ext buffer to the point
│ │ │ +
925 // corresponding to gptr(). This is a negative value. Updates __state
│ │ │ +
926 // from eback() correspondence to gptr().
│ │ │ +
927 template<typename _CharT, typename _Traits>
│ │ │ +
928 int basic_filebuf<_CharT, _Traits>::
│ │ │ +
929 _M_get_ext_pos(__state_type& __state)
│ │ │ +
930 {
│ │ │ +
931 if (_M_codecvt->always_noconv())
│ │ │ +
932 return this->gptr() - this->egptr();
│ │ │ +
933 else
│ │ │ +
934 {
│ │ │ +
935 // Calculate offset from _M_ext_buf that corresponds to
│ │ │ +
936 // gptr(). Precondition: __state == _M_state_last, which
│ │ │ +
937 // corresponds to eback().
│ │ │ +
938 const int __gptr_off =
│ │ │ +
939 _M_codecvt->length(__state, _M_ext_buf, _M_ext_next,
│ │ │ +
940 this->gptr() - this->eback());
│ │ │ +
941 return _M_ext_buf + __gptr_off - _M_ext_end;
│ │ │ +
942 }
│ │ │ +
943 }
│ │ │ +
944
│ │ │ +
945 template<typename _CharT, typename _Traits>
│ │ │ +
946 bool
│ │ │ +
947 basic_filebuf<_CharT, _Traits>::
│ │ │ +
948 _M_terminate_output()
│ │ │ +
949 {
│ │ │ +
950 // Part one: update the output sequence.
│ │ │ +
951 bool __testvalid = true;
│ │ │ +
952 if (this->pbase() < this->pptr())
│ │ │ +
953 {
│ │ │ +
954 const int_type __tmp = this->overflow();
│ │ │ +
955 if (traits_type::eq_int_type(__tmp, traits_type::eof()))
│ │ │ +
956 __testvalid = false;
│ │ │ +
957 }
│ │ │ +
958
│ │ │ +
959 // Part two: output unshift sequence.
│ │ │ +
960 if (_M_writing && !__check_facet(_M_codecvt).always_noconv()
│ │ │ +
961 && __testvalid)
│ │ │ +
962 {
│ │ │ +
963 // Note: this value is arbitrary, since there is no way to
│ │ │ +
964 // get the length of the unshift sequence from codecvt,
│ │ │ +
965 // without calling unshift.
│ │ │ +
966 const size_t __blen = 128;
│ │ │ +
967 char __buf[__blen];
│ │ │ +
968 codecvt_base::result __r;
│ │ │ +
969 streamsize __ilen = 0;
│ │ │ +
970
│ │ │ +
971 do
│ │ │ +
972 {
│ │ │ +
973 char* __next;
│ │ │ +
974 __r = _M_codecvt->unshift(_M_state_cur, __buf,
│ │ │ +
975 __buf + __blen, __next);
│ │ │ +
976 if (__r == codecvt_base::error)
│ │ │ +
977 __testvalid = false;
│ │ │ +
978 else if (__r == codecvt_base::ok ||
│ │ │ +
979 __r == codecvt_base::partial)
│ │ │ +
980 {
│ │ │ +
981 __ilen = __next - __buf;
│ │ │ +
982 if (__ilen > 0)
│ │ │ +
983 {
│ │ │ +
984 const streamsize __elen = _M_file.xsputn(__buf, __ilen);
│ │ │ +
985 if (__elen != __ilen)
│ │ │ +
986 __testvalid = false;
│ │ │ +
987 }
│ │ │ +
988 }
│ │ │ +
989 }
│ │ │ +
990 while (__r == codecvt_base::partial && __ilen > 0 && __testvalid);
│ │ │ +
991
│ │ │ +
992 if (__testvalid)
│ │ │ +
993 {
│ │ │ +
994 // This second call to overflow() is required by the standard,
│ │ │ +
995 // but it's not clear why it's needed, since the output buffer
│ │ │ +
996 // should be empty by this point (it should have been emptied
│ │ │ +
997 // in the first call to overflow()).
│ │ │ +
998 const int_type __tmp = this->overflow();
│ │ │ +
999 if (traits_type::eq_int_type(__tmp, traits_type::eof()))
│ │ │ +
1000 __testvalid = false;
│ │ │ +
1001 }
│ │ │ +
1002 }
│ │ │ +
1003 return __testvalid;
│ │ │ +
1004 }
│ │ │ +
1005
│ │ │ +
1006 template<typename _CharT, typename _Traits>
│ │ │ +
1007 int
│ │ │ +
│ │ │ + │ │ │ +
1009 sync()
│ │ │ +
1010 {
│ │ │ +
1011 // Make sure that the internal buffer resyncs its idea of
│ │ │ +
1012 // the file position with the external file.
│ │ │ +
1013 int __ret = 0;
│ │ │ +
1014 if (this->pbase() < this->pptr())
│ │ │ +
1015 {
│ │ │ +
1016 const int_type __tmp = this->overflow();
│ │ │ +
1017 if (traits_type::eq_int_type(__tmp, traits_type::eof()))
│ │ │ +
1018 __ret = -1;
│ │ │ +
1019 }
│ │ │ +
1020 return __ret;
│ │ │ +
1021 }
│ │ │ +
│ │ │ +
1022
│ │ │ +
1023 template<typename _CharT, typename _Traits>
│ │ │ +
1024 void
│ │ │ +
│ │ │ + │ │ │ +
1026 imbue(const locale& __loc)
│ │ │ +
1027 {
│ │ │ +
1028 bool __testvalid = true;
│ │ │ +
1029
│ │ │ +
1030 const __codecvt_type* const _M_codecvt_tmp
│ │ │ + │ │ │ +
1032
│ │ │ +
1033 if (this->is_open())
│ │ │ +
1034 {
│ │ │ +
1035 // encoding() == -1 is ok only at the beginning.
│ │ │ +
1036 if ((_M_reading || _M_writing)
│ │ │ +
1037 && __check_facet(_M_codecvt).encoding() == -1)
│ │ │ +
1038 __testvalid = false;
│ │ │ +
1039 else
│ │ │ +
1040 {
│ │ │ +
1041 if (_M_reading)
│ │ │ +
1042 {
│ │ │ +
1043 if (__check_facet(_M_codecvt).always_noconv())
│ │ │ +
1044 {
│ │ │ +
1045 if (_M_codecvt_tmp
│ │ │ +
1046 && !__check_facet(_M_codecvt_tmp).always_noconv())
│ │ │ +
1047 __testvalid = this->seekoff(0, ios_base::cur, _M_mode)
│ │ │ +
1048 != pos_type(off_type(-1));
│ │ │ +
1049 }
│ │ │ +
1050 else
│ │ │ +
1051 {
│ │ │ +
1052 // External position corresponding to gptr().
│ │ │ +
1053 _M_ext_next = _M_ext_buf
│ │ │ +
1054 + _M_codecvt->length(_M_state_last, _M_ext_buf,
│ │ │ +
1055 _M_ext_next,
│ │ │ +
1056 this->gptr() - this->eback());
│ │ │ +
1057 const streamsize __remainder = _M_ext_end - _M_ext_next;
│ │ │ +
1058 if (__remainder)
│ │ │ +
1059 __builtin_memmove(_M_ext_buf, _M_ext_next, __remainder);
│ │ │ +
1060
│ │ │ +
1061 _M_ext_next = _M_ext_buf;
│ │ │ +
1062 _M_ext_end = _M_ext_buf + __remainder;
│ │ │ +
1063 _M_set_buffer(-1);
│ │ │ +
1064 _M_state_last = _M_state_cur = _M_state_beg;
│ │ │ +
1065 }
│ │ │ +
1066 }
│ │ │ +
1067 else if (_M_writing && (__testvalid = _M_terminate_output()))
│ │ │ +
1068 _M_set_buffer(-1);
│ │ │ +
1069 }
│ │ │ +
1070 }
│ │ │ +
1071
│ │ │ +
1072 if (__testvalid)
│ │ │ +
1073 _M_codecvt = _M_codecvt_tmp;
│ │ │ +
1074 else
│ │ │ +
1075 _M_codecvt = 0;
│ │ │ +
1076 }
│ │ │ +
│ │ │ +
1077
│ │ │ +
1078 // Inhibit implicit instantiations for required instantiations,
│ │ │ +
1079 // which are defined via explicit instantiations elsewhere.
│ │ │ +
1080#if _GLIBCXX_EXTERN_TEMPLATE
│ │ │ +
1081 extern template class basic_filebuf<char>;
│ │ │ +
1082 extern template class basic_ifstream<char>;
│ │ │ +
1083 extern template class basic_ofstream<char>;
│ │ │ +
1084 extern template class basic_fstream<char>;
│ │ │ +
1085
│ │ │ +
1086#ifdef _GLIBCXX_USE_WCHAR_T
│ │ │ +
1087 extern template class basic_filebuf<wchar_t>;
│ │ │ +
1088 extern template class basic_ifstream<wchar_t>;
│ │ │ +
1089 extern template class basic_ofstream<wchar_t>;
│ │ │ +
1090 extern template class basic_fstream<wchar_t>;
│ │ │ +
1091#endif
│ │ │ +
1092#endif
│ │ │ +
1093
│ │ │ +
1094_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
1095} // namespace std
│ │ │ +
1096
│ │ │ +
1097#endif
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │ +
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:68
│ │ │ -
traits_type::int_type int_type
Definition streambuf:135
│ │ │ -
virtual streamsize xsputn(const char_type *__s, streamsize __n)
Multiple character insertion.
Definition streambuf.tcc:80
│ │ │ - │ │ │ -
virtual streamsize xsgetn(char_type *__s, streamsize __n)
Multiple character extraction.
Definition streambuf.tcc:46
│ │ │ - │ │ │ +
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
Definition postypes.h:68
│ │ │ +
The actual work of input and output (for files).
Definition fstream:91
│ │ │ +
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:829
│ │ │ +
virtual int_type underflow()
Fetches more data from the controlled sequence.
Definition fstream.tcc:323
│ │ │ +
virtual streamsize showmanyc()
Investigating the data available.
Definition fstream.tcc:297
│ │ │ +
virtual void imbue(const locale &__loc)
Changes translations.
Definition fstream.tcc:1026
│ │ │ +
virtual streamsize xsgetn(char_type *__s, streamsize __n)
Multiple character extraction.
Definition fstream.tcc:669
│ │ │ +
__filebuf_type * close()
Closes the currently associated file.
Definition fstream.tcc:249
│ │ │ +
virtual pos_type seekpos(pos_type __pos, ios_base::openmode __mode=ios_base::in|ios_base::out)
Alters the stream positions.
Definition fstream.tcc:889
│ │ │ +
virtual int_type pbackfail(int_type __c=_Traits::eof())
Tries to back up the input sequence.
Definition fstream.tcc:482
│ │ │ +
virtual streamsize xsputn(const char_type *__s, streamsize __n)
Multiple character insertion.
Definition fstream.tcc:755
│ │ │ +
virtual int_type overflow(int_type __c=_Traits::eof())
Consumes data from the buffer; writes to the controlled sequence.
Definition fstream.tcc:541
│ │ │ +
__filebuf_type * open(const char *__s, ios_base::openmode __mode)
Opens an external file.
Definition fstream.tcc:179
│ │ │ +
basic_filebuf()
Does not open any files.
Definition fstream.tcc:81
│ │ │ +
virtual int sync()
Synchronizes the buffer arrays with the controlled sequences.
Definition fstream.tcc:1009
│ │ │ +
virtual __streambuf_type * setbuf(char_type *__s, streamsize __n)
Manipulates the buffer.
Definition fstream.tcc:800
│ │ │ + │ │ │ +
locale _M_buf_locale
Current locale setting.
Definition streambuf:199
│ │ │ +
The base of the I/O class hierarchy.
Definition ios_base.h:255
│ │ │ +
static const seekdir cur
Request a seek relative to the current position within the sequence.
Definition ios_base.h:518
│ │ │ +
static const seekdir beg
Request a seek relative to the beginning of the stream.
Definition ios_base.h:515
│ │ │ +
static const seekdir end
Request a seek relative to the current end of the sequence.
Definition ios_base.h:521
│ │ │ +
static const openmode in
Open for input. Default for ifstream and fstream.
Definition ios_base.h:487
│ │ │ +
static const openmode out
Open for output. Default for ofstream and fstream.
Definition ios_base.h:490
│ │ │ +
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:484
│ │ │ +
_Ios_Openmode openmode
This is a bitmask type.
Definition ios_base.h:473
│ │ │ +
static const openmode app
Seek to end before each write.
Definition ios_base.h:476
│ │ │ +
static const openmode ate
Open and seek to end immediately after opening.
Definition ios_base.h:479
│ │ │ +
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-2024 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,181 +21,1211 @@ │ │ │ │ 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#pragma GCC system_header │ │ │ │ 38 │ │ │ │ -39namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -40{ │ │ │ │ -41_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +39#include <_b_i_t_s_/_c_x_x_a_b_i___f_o_r_c_e_d_._h> │ │ │ │ +40#include <_b_i_t_s_/_m_o_v_e_._h> // for swap │ │ │ │ +41#include <_c_e_r_r_n_o> │ │ │ │ 42 │ │ │ │ -43 template │ │ │ │ -44 _s_t_r_e_a_m_s_i_z_e │ │ │ │ -_4_5 _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_>_:_: │ │ │ │ -46_ _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) │ │ │ │ -47 { │ │ │ │ -48 _s_t_r_e_a_m_s_i_z_e _____r_e_t = 0; │ │ │ │ -49 while (_____r_e_t < __n) │ │ │ │ -50 { │ │ │ │ -51 const _s_t_r_e_a_m_s_i_z_e _____b_u_f___l_e_n = this->egptr() - this->gptr(); │ │ │ │ -52 if (_____b_u_f___l_e_n) │ │ │ │ -53 { │ │ │ │ -54 const _s_t_r_e_a_m_s_i_z_e _____r_e_m_a_i_n_i_n_g = __n - _____r_e_t; │ │ │ │ -55 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); │ │ │ │ -56 traits_type::copy(_____s, this->gptr(), _____l_e_n); │ │ │ │ -57 _____r_e_t += _____l_e_n; │ │ │ │ -58 _____s += _____l_e_n; │ │ │ │ -59 this->__safe_gbump(_____l_e_n); │ │ │ │ -60 } │ │ │ │ -61 │ │ │ │ -62 if (_____r_e_t < __n) │ │ │ │ -63 { │ │ │ │ -64 const _i_n_t___t_y_p_e __c = this->uflow(); │ │ │ │ -65 if (!traits_type::eq_int_type(__c, traits_type::eof())) │ │ │ │ -66 { │ │ │ │ -67 traits_type::assign(*_____s++, traits_type::to_char_type(__c)); │ │ │ │ -68 ++_____r_e_t; │ │ │ │ -69 } │ │ │ │ -70 else │ │ │ │ -71 break; │ │ │ │ -72 } │ │ │ │ -73 } │ │ │ │ -74 return _____r_e_t; │ │ │ │ -75 } │ │ │ │ -76 │ │ │ │ -77 template │ │ │ │ -78 _s_t_r_e_a_m_s_i_z_e │ │ │ │ -_7_9 _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_>_:_: │ │ │ │ -80_ _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) │ │ │ │ -81 { │ │ │ │ -82 _s_t_r_e_a_m_s_i_z_e _____r_e_t = 0; │ │ │ │ -83 while (_____r_e_t < __n) │ │ │ │ -84 { │ │ │ │ -85 const _s_t_r_e_a_m_s_i_z_e _____b_u_f___l_e_n = this->epptr() - this->pptr(); │ │ │ │ -86 if (_____b_u_f___l_e_n) │ │ │ │ -87 { │ │ │ │ -88 const _s_t_r_e_a_m_s_i_z_e _____r_e_m_a_i_n_i_n_g = __n - _____r_e_t; │ │ │ │ -89 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); │ │ │ │ -90 traits_type::copy(this->pptr(), _____s, _____l_e_n); │ │ │ │ -91 _____r_e_t += _____l_e_n; │ │ │ │ -92 _____s += _____l_e_n; │ │ │ │ -93 this->__safe_pbump(_____l_e_n); │ │ │ │ -94 } │ │ │ │ -95 │ │ │ │ -96 if (_____r_e_t < __n) │ │ │ │ -97 { │ │ │ │ -98 _i_n_t___t_y_p_e __c = this->overflow(traits_type::to_int_type(*_____s)); │ │ │ │ -99 if (!traits_type::eq_int_type(__c, traits_type::eof())) │ │ │ │ -100 { │ │ │ │ -101 ++_____r_e_t; │ │ │ │ -102 ++_____s; │ │ │ │ -103 } │ │ │ │ -104 else │ │ │ │ -105 break; │ │ │ │ -106 } │ │ │ │ -107 } │ │ │ │ -108 return _____r_e_t; │ │ │ │ -109 } │ │ │ │ -110 │ │ │ │ -111 // Conceivably, this could be used to implement buffer-to-buffer │ │ │ │ -112 // copies, if this was ever desired in an un-ambiguous way by the │ │ │ │ -113 // standard. │ │ │ │ -114 template │ │ │ │ -115 _s_t_r_e_a_m_s_i_z_e │ │ │ │ -116 __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, │ │ │ │ -117 _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, │ │ │ │ -118 bool& _____i_n_e_o_f) │ │ │ │ -119 { │ │ │ │ -120 _s_t_r_e_a_m_s_i_z_e _____r_e_t = 0; │ │ │ │ -121 _____i_n_e_o_f = true; │ │ │ │ -122 typename _Traits::int_type __c = _____s_b_i_n->sgetc(); │ │ │ │ -123 while (!_Traits::eq_int_type(__c, _Traits::eof())) │ │ │ │ -124 { │ │ │ │ -125 __c = _____s_b_o_u_t->sputc(_Traits::to_char_type(__c)); │ │ │ │ -126 if (_Traits::eq_int_type(__c, _Traits::eof())) │ │ │ │ -127 { │ │ │ │ -128 _____i_n_e_o_f = false; │ │ │ │ -129 break; │ │ │ │ -130 } │ │ │ │ -131 ++__ret; │ │ │ │ -132 __c = __sbin->snextc(); │ │ │ │ -133 } │ │ │ │ -134 return __ret; │ │ │ │ -135 } │ │ │ │ -136 │ │ │ │ -137 template │ │ │ │ -138 inline _s_t_r_e_a_m_s_i_z_e │ │ │ │ -139 __copy_streambufs(basic_streambuf<_CharT, _Traits>* __sbin, │ │ │ │ -140 basic_streambuf<_CharT, _Traits>* __sbout) │ │ │ │ -141 { │ │ │ │ -142 bool __ineof; │ │ │ │ -143 return __copy_streambufs_eof(__sbin, __sbout, __ineof); │ │ │ │ -144 } │ │ │ │ -145 │ │ │ │ -146 // Inhibit implicit instantiations for required instantiations, │ │ │ │ -147 // which are defined via explicit instantiations elsewhere. │ │ │ │ -148#if _GLIBCXX_EXTERN_TEMPLATE │ │ │ │ -149 extern template class basic_streambuf; │ │ │ │ -150 │ │ │ │ -151 extern template │ │ │ │ -152 _s_t_r_e_a_m_s_i_z_e │ │ │ │ -153 __copy_streambufs(basic_streambuf*, │ │ │ │ -154 basic_streambuf*); │ │ │ │ -155 │ │ │ │ -156#ifdef _GLIBCXX_USE_WCHAR_T │ │ │ │ -157 extern template class basic_streambuf; │ │ │ │ -158 │ │ │ │ -159 extern template │ │ │ │ -160 _s_t_r_e_a_m_s_i_z_e │ │ │ │ -161 __copy_streambufs(basic_streambuf*, │ │ │ │ -162 basic_streambuf*); │ │ │ │ -163#endif │ │ │ │ -164#endif │ │ │ │ -165 │ │ │ │ -166_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -167} // namespace std │ │ │ │ -168 │ │ │ │ -169#endif │ │ │ │ +43namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +44{ │ │ │ │ +45_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +46 │ │ │ │ +47 template │ │ │ │ +48 void │ │ │ │ +49 basic_filebuf<_CharT, _Traits>:: │ │ │ │ +50 _M_allocate_internal_buffer() │ │ │ │ +51 { │ │ │ │ +52 // Allocate internal buffer only if one doesn't already exist │ │ │ │ +53 // (either allocated or provided by the user via setbuf). │ │ │ │ +54 if (!_M_buf_allocated && !_M_buf) │ │ │ │ +55 { │ │ │ │ +56 _M_buf = new char_type[_M_buf_size]; │ │ │ │ +57 _M_buf_allocated = true; │ │ │ │ +58 } │ │ │ │ +59 } │ │ │ │ +60 │ │ │ │ +61 template │ │ │ │ +62 void │ │ │ │ +63 basic_filebuf<_CharT, _Traits>:: │ │ │ │ +64 _M_destroy_internal_buffer() throw() │ │ │ │ +65 { │ │ │ │ +66 if (_M_buf_allocated) │ │ │ │ +67 { │ │ │ │ +68 delete [] _M_buf; │ │ │ │ +69 _M_buf = 0; │ │ │ │ +70 _M_buf_allocated = false; │ │ │ │ +71 } │ │ │ │ +72 delete [] _M_ext_buf; │ │ │ │ +73 _M_ext_buf = 0; │ │ │ │ +74 _M_ext_buf_size = 0; │ │ │ │ +75 _M_ext_next = 0; │ │ │ │ +76 _M_ext_end = 0; │ │ │ │ +77 } │ │ │ │ +78 │ │ │ │ +79 template │ │ │ │ +_8_0 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +81_ _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), │ │ │ │ +82 _M_mode(_i_o_s___b_a_s_e::openmode(0)), _M_state_beg(), _M_state_cur(), │ │ │ │ +83 _M_state_last(), _M_buf(0), _M_buf_size(_GLIBCXX_BUFSIZ), │ │ │ │ +84 _M_buf_allocated(_f_a_l_s_e), _M_reading(_f_a_l_s_e), _M_writing(_f_a_l_s_e), _M_pback(), │ │ │ │ +85 _M_pback_cur_save(0), _M_pback_end_save(0), _M_pback_init(_f_a_l_s_e), │ │ │ │ +86 _M_codecvt(0), _M_ext_buf(0), _M_ext_buf_size(0), _M_ext_next(0), │ │ │ │ +87 _M_ext_end(0) │ │ │ │ +88 { │ │ │ │ +89 _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); │ │ │ │ +90 } │ │ │ │ +91 │ │ │ │ +92#if __cplusplus >= 201103L │ │ │ │ +93 template │ │ │ │ +94 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +95_ _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) │ │ │ │ +96 : __streambuf_type(_____r_h_s), │ │ │ │ +97 _M_lock(), _M_file(_s_t_d::_m_o_v_e(_____r_h_s._M_file), &_M_lock), │ │ │ │ +98 _M_mode(_s_t_d::__exchange(_____r_h_s._M_mode, _i_o_s___b_a_s_e::openmode(0))), │ │ │ │ +99 _M_state_beg(_s_t_d::_m_o_v_e(_____r_h_s._M_state_beg)), │ │ │ │ +100 _M_state_cur(_s_t_d::_m_o_v_e(_____r_h_s._M_state_cur)), │ │ │ │ +101 _M_state_last(_s_t_d::_m_o_v_e(_____r_h_s._M_state_last)), │ │ │ │ +102 _M_buf(_s_t_d::__exchange(_____r_h_s._M_buf, _n_u_l_l_p_t_r)), │ │ │ │ +103 _M_buf_size(_s_t_d::__exchange(_____r_h_s._M_buf_size, 1)), │ │ │ │ +104 _M_buf_allocated(_s_t_d::__exchange(_____r_h_s._M_buf_allocated, _f_a_l_s_e)), │ │ │ │ +105 _M_reading(_s_t_d::__exchange(_____r_h_s._M_reading, _f_a_l_s_e)), │ │ │ │ +106 _M_writing(_s_t_d::__exchange(_____r_h_s._M_writing, _f_a_l_s_e)), │ │ │ │ +107 _M_pback(_____r_h_s._M_pback), │ │ │ │ +108 _M_pback_cur_save(_s_t_d::__exchange(_____r_h_s._M_pback_cur_save, _n_u_l_l_p_t_r)), │ │ │ │ +109 _M_pback_end_save(_s_t_d::__exchange(_____r_h_s._M_pback_end_save, _n_u_l_l_p_t_r)), │ │ │ │ +110 _M_pback_init(_s_t_d::__exchange(_____r_h_s._M_pback_init, _f_a_l_s_e)), │ │ │ │ +111 _M_codecvt(_____r_h_s._M_codecvt), │ │ │ │ +112 _M_ext_buf(_s_t_d::__exchange(_____r_h_s._M_ext_buf, _n_u_l_l_p_t_r)), │ │ │ │ +113 _M_ext_buf_size(_s_t_d::__exchange(_____r_h_s._M_ext_buf_size, 0)), │ │ │ │ +114 _M_ext_next(_s_t_d::__exchange(_____r_h_s._M_ext_next, _n_u_l_l_p_t_r)), │ │ │ │ +115 _M_ext_end(_s_t_d::__exchange(_____r_h_s._M_ext_end, _n_u_l_l_p_t_r)) │ │ │ │ +116 { │ │ │ │ +117 _____r_h_s._M_set_buffer(-1); │ │ │ │ +118 _____r_h_s._M_state_last = _____r_h_s._M_state_cur = _____r_h_s._M_state_beg; │ │ │ │ +119 } │ │ │ │ +120 │ │ │ │ +121 template │ │ │ │ +122 basic_filebuf<_CharT, _Traits>& │ │ │ │ +123 basic_filebuf<_CharT, _Traits>:: │ │ │ │ +124 operator=(basic_filebuf&& __rhs) │ │ │ │ +125 { │ │ │ │ +126 this->close(); │ │ │ │ +127 __streambuf_type::operator=(__rhs); │ │ │ │ +128 _M_file.swap(__rhs._M_file); │ │ │ │ +129 _M_mode = std::__exchange(__rhs._M_mode, _i_o_s___b_a_s_e_:_:_o_p_e_n_m_o_d_e(0)); │ │ │ │ +130 _M_state_beg = _s_t_d_:_:_m_o_v_e(__rhs._M_state_beg); │ │ │ │ +131 _M_state_cur = _s_t_d_:_:_m_o_v_e(__rhs._M_state_cur); │ │ │ │ +132 _M_state_last = _s_t_d_:_:_m_o_v_e(__rhs._M_state_last); │ │ │ │ +133 _M_buf = std::__exchange(__rhs._M_buf, nullptr); │ │ │ │ +134 _M_buf_size = std::__exchange(__rhs._M_buf_size, 1); │ │ │ │ +135 _M_buf_allocated = std::__exchange(__rhs._M_buf_allocated, false); │ │ │ │ +136 _M_ext_buf = std::__exchange(__rhs._M_ext_buf, nullptr); │ │ │ │ +137 _M_ext_buf_size = std::__exchange(__rhs._M_ext_buf_size, 0); │ │ │ │ +138 _M_ext_next = std::__exchange(__rhs._M_ext_next, nullptr); │ │ │ │ +139 _M_ext_end = std::__exchange(__rhs._M_ext_end, nullptr); │ │ │ │ +140 _M_reading = std::__exchange(__rhs._M_reading, false); │ │ │ │ +141 _M_writing = std::__exchange(__rhs._M_writing, false); │ │ │ │ +142 _M_pback_cur_save = std::__exchange(__rhs._M_pback_cur_save, nullptr); │ │ │ │ +143 _M_pback_end_save = std::__exchange(__rhs._M_pback_end_save, nullptr); │ │ │ │ +144 _M_pback_init = std::__exchange(__rhs._M_pback_init, false); │ │ │ │ +145 __rhs._M_set_buffer(-1); │ │ │ │ +146 __rhs._M_state_last = __rhs._M_state_cur = __rhs._M_state_beg; │ │ │ │ +147 return *this; │ │ │ │ +148 } │ │ │ │ +149 │ │ │ │ +150 template │ │ │ │ +151 void │ │ │ │ +152 basic_filebuf<_CharT, _Traits>:: │ │ │ │ +153 swap(basic_filebuf& __rhs) │ │ │ │ +154 { │ │ │ │ +155 __streambuf_type::swap(__rhs); │ │ │ │ +156 _M_file.swap(__rhs._M_file); │ │ │ │ +157 std::swap(_M_mode, __rhs._M_mode); │ │ │ │ +158 std::swap(_M_state_beg, __rhs._M_state_beg); │ │ │ │ +159 std::swap(_M_state_cur, __rhs._M_state_cur); │ │ │ │ +160 std::swap(_M_state_last, __rhs._M_state_last); │ │ │ │ +161 std::swap(_M_buf, __rhs._M_buf); │ │ │ │ +162 std::swap(_M_buf_size, __rhs._M_buf_size); │ │ │ │ +163 std::swap(_M_buf_allocated, __rhs._M_buf_allocated); │ │ │ │ +164 std::swap(_M_ext_buf, __rhs._M_ext_buf); │ │ │ │ +165 std::swap(_M_ext_buf_size, __rhs._M_ext_buf_size); │ │ │ │ +166 std::swap(_M_ext_next, __rhs._M_ext_next); │ │ │ │ +167 std::swap(_M_ext_end, __rhs._M_ext_end); │ │ │ │ +168 std::swap(_M_reading, __rhs._M_reading); │ │ │ │ +169 std::swap(_M_writing, __rhs._M_writing); │ │ │ │ +170 std::swap(_M_pback_cur_save, __rhs._M_pback_cur_save); │ │ │ │ +171 std::swap(_M_pback_end_save, __rhs._M_pback_end_save); │ │ │ │ +172 std::swap(_M_pback_init, __rhs._M_pback_init); │ │ │ │ +173 } │ │ │ │ +174#endif │ │ │ │ +175 │ │ │ │ +176 template │ │ │ │ +177 typename basic_filebuf<_CharT, _Traits>::__filebuf_type* │ │ │ │ +_1_7_8 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +179_ _o_p_e_n(const char* _____s, ios_base::openmode _____m_o_d_e) │ │ │ │ +180 { │ │ │ │ +181 _____f_i_l_e_b_u_f___t_y_p_e *_____r_e_t = 0; │ │ │ │ +182 if (!this->is_open()) │ │ │ │ +183 { │ │ │ │ +184 _M_file.open(_____s, _____m_o_d_e); │ │ │ │ +185 if (this->is_open()) │ │ │ │ +186 { │ │ │ │ +187 _M_allocate_internal_buffer(); │ │ │ │ +188 _M_mode = _____m_o_d_e; │ │ │ │ +189 │ │ │ │ +190 // Setup initial buffer to 'uncommitted' mode. │ │ │ │ +191 _M_reading = false; │ │ │ │ +192 _M_writing = false; │ │ │ │ +193 _M_set_buffer(-1); │ │ │ │ +194 │ │ │ │ +195 // Reset to initial state. │ │ │ │ +196 _M_state_last = _M_state_cur = _M_state_beg; │ │ │ │ +197 │ │ │ │ +198 // 27.8.1.3,4 │ │ │ │ +199 if ((_____m_o_d_e & _i_o_s___b_a_s_e_:_:_a_t_e) │ │ │ │ +200 && this->seekoff(0, _i_o_s___b_a_s_e_:_:_e_n_d, _____m_o_d_e) │ │ │ │ +201 == pos_type(off_type(-1))) │ │ │ │ +202 this->close(); │ │ │ │ +203 else │ │ │ │ +204 _____r_e_t = this; │ │ │ │ +205 } │ │ │ │ +206 } │ │ │ │ +207 return _____r_e_t; │ │ │ │ +208 } │ │ │ │ +209 │ │ │ │ +210#if _GLIBCXX_HAVE__WFOPEN && _GLIBCXX_USE_WCHAR_T │ │ │ │ +211 template │ │ │ │ +212 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>* │ │ │ │ +213 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +214_ _o_p_e_n(const wchar_t* _____s, ios_base::openmode _____m_o_d_e) │ │ │ │ +215 { │ │ │ │ +216 __filebuf_type *_____r_e_t = 0; │ │ │ │ +217 if (!this->is_open()) │ │ │ │ +218 { │ │ │ │ +219 _M_file.open(_____s, _____m_o_d_e); │ │ │ │ +220 if (this->is_open()) │ │ │ │ +221 { │ │ │ │ +222 _M_allocate_internal_buffer(); │ │ │ │ +223 _M_mode = _____m_o_d_e; │ │ │ │ +224 │ │ │ │ +225 // Setup initial buffer to 'uncommitted' mode. │ │ │ │ +226 _M_reading = false; │ │ │ │ +227 _M_writing = false; │ │ │ │ +228 _M_set_buffer(-1); │ │ │ │ +229 │ │ │ │ +230 // Reset to initial state. │ │ │ │ +231 _M_state_last = _M_state_cur = _M_state_beg; │ │ │ │ +232 │ │ │ │ +233 // 27.8.1.3,4 │ │ │ │ +234 if ((_____m_o_d_e & _i_o_s___b_a_s_e_:_:_a_t_e) │ │ │ │ +235 && this->seekoff(0, _i_o_s___b_a_s_e_:_:_e_n_d, _____m_o_d_e) │ │ │ │ +236 == pos_type(off_type(-1))) │ │ │ │ +237 this->close(); │ │ │ │ +238 else │ │ │ │ +239 _____r_e_t = this; │ │ │ │ +240 } │ │ │ │ +241 } │ │ │ │ +242 return __ret; │ │ │ │ +243 } │ │ │ │ +244#endif // HAVE__WFOPEN && USE_WCHAR_T │ │ │ │ +_2_4_5 │ │ │ │ +246 template │ │ │ │ +247 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_4_8 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +249_ _c_l_o_s_e() │ │ │ │ +250 { │ │ │ │ +251 if (!this->is_open()) │ │ │ │ +252 return 0; │ │ │ │ +253 │ │ │ │ +254 bool _____t_e_s_t_f_a_i_l = false; │ │ │ │ +255 { │ │ │ │ +256 // NB: Do this here so that re-opened filebufs will be cool... │ │ │ │ +257 struct _____c_l_o_s_e___s_e_n_t_r_y │ │ │ │ +258 { │ │ │ │ +259 _b_a_s_i_c___f_i_l_e_b_u_f *_____f_b; │ │ │ │ +260 _____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) { } │ │ │ │ +261 _~_____c_l_o_s_e___s_e_n_t_r_y () │ │ │ │ +262 { │ │ │ │ +263 _____f_b->_M_mode = _i_o_s___b_a_s_e_:_:_o_p_e_n_m_o_d_e(0); │ │ │ │ +264 _____f_b->_M_pback_init = false; │ │ │ │ +265 _____f_b->_M_destroy_internal_buffer(); │ │ │ │ +266 _____f_b->_M_reading = false; │ │ │ │ +267 _____f_b->_M_writing = false; │ │ │ │ +268 _____f_b->_M_set_buffer(-1); │ │ │ │ +269 _____f_b->_M_state_last = _____f_b->_M_state_cur = _____f_b->_M_state_beg; │ │ │ │ +270 } │ │ │ │ +271 } _____c_s (this); │ │ │ │ +272 │ │ │ │ +273 __try │ │ │ │ +274 { │ │ │ │ +275 if (!_M_terminate_output()) │ │ │ │ +276 _____t_e_s_t_f_a_i_l = true; │ │ │ │ +277 } │ │ │ │ +278 __catch(...) │ │ │ │ +279 { │ │ │ │ +280 _M_file.close(); │ │ │ │ +281 __throw_exception_again; │ │ │ │ +282 } │ │ │ │ +283 } │ │ │ │ +284 │ │ │ │ +285 if (!_M_file.close()) │ │ │ │ +286 _____t_e_s_t_f_a_i_l = true; │ │ │ │ +287 │ │ │ │ +288 if (_____t_e_s_t_f_a_i_l) │ │ │ │ +289 return 0; │ │ │ │ +290 else │ │ │ │ +291 return this; │ │ │ │ +292 } │ │ │ │ +293 │ │ │ │ +294 template │ │ │ │ +295 _s_t_r_e_a_m_s_i_z_e │ │ │ │ +_2_9_6 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +297_ _s_h_o_w_m_a_n_y_c() │ │ │ │ +298 { │ │ │ │ +299 _s_t_r_e_a_m_s_i_z_e _____r_e_t = -1; │ │ │ │ +300 const bool _____t_e_s_t_i_n = _M_mode & _i_o_s___b_a_s_e_:_:_i_n; │ │ │ │ +301 if (_____t_e_s_t_i_n && this->is_open()) │ │ │ │ +302 { │ │ │ │ +303 // For a stateful encoding (-1) the pending sequence might be just │ │ │ │ +304 // shift and unshift prefixes with no actual character. │ │ │ │ +305 _____r_e_t = this->egptr() - this->gptr(); │ │ │ │ +306 │ │ │ │ +307#if _GLIBCXX_HAVE_DOS_BASED_FILESYSTEM │ │ │ │ +308 // About this workaround, see libstdc++/20806. │ │ │ │ +309 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; │ │ │ │ +310 if (__check_facet(_M_codecvt).encoding() >= 0 │ │ │ │ +311 && _____t_e_s_t_b_i_n_a_r_y) │ │ │ │ +312#else │ │ │ │ +313 if (__check_facet(_M_codecvt).encoding() >= 0) │ │ │ │ +314#endif │ │ │ │ +315 _____r_e_t += _M_file.showmanyc() / _M_codecvt->max_length(); │ │ │ │ +316 } │ │ │ │ +317 return _____r_e_t; │ │ │ │ +318 } │ │ │ │ +319 │ │ │ │ +_3_2_0 template │ │ │ │ +321 typename basic_filebuf<_CharT, _Traits>::int_type │ │ │ │ +_3_2_2 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +323_ _u_n_d_e_r_f_l_o_w() │ │ │ │ +324 { │ │ │ │ +325 int_type _____r_e_t = traits_type::eof(); │ │ │ │ +326 const bool _____t_e_s_t_i_n = _M_mode & _i_o_s___b_a_s_e_:_:_i_n; │ │ │ │ +327 if (_____t_e_s_t_i_n) │ │ │ │ +328 { │ │ │ │ +329 if (_M_writing) │ │ │ │ +330 { │ │ │ │ +331 if (overflow() == traits_type::eof()) │ │ │ │ +332 return _____r_e_t; │ │ │ │ +333 _M_set_buffer(-1); │ │ │ │ +334 _M_writing = false; │ │ │ │ +335 } │ │ │ │ +336 // Check for pback madness, and if so switch back to the │ │ │ │ +337 // normal buffers and jet outta here before expensive │ │ │ │ +338 // fileops happen... │ │ │ │ +339 _M_destroy_pback(); │ │ │ │ +340 │ │ │ │ +341 if (this->gptr() < this->egptr()) │ │ │ │ +342 return traits_type::to_int_type(*this->gptr()); │ │ │ │ +343 │ │ │ │ +344 // Get and convert input sequence. │ │ │ │ +345 const size_t _____b_u_f_l_e_n = _M_buf_size > 1 ? _M_buf_size - 1 : 1; │ │ │ │ +346 │ │ │ │ +347 // Will be set to true if ::read() returns 0 indicating EOF. │ │ │ │ +348 bool _____g_o_t___e_o_f = false; │ │ │ │ +349 // Number of internal characters produced. │ │ │ │ +350 _s_t_r_e_a_m_s_i_z_e _____i_l_e_n = 0; │ │ │ │ +351 codecvt_base::result __r = codecvt_base::ok; │ │ │ │ +352 if (__check_facet(_M_codecvt).always_noconv()) │ │ │ │ +353 { │ │ │ │ +354 _____i_l_e_n = _M_file.xsgetn(reinterpret_cast(this->eback()), │ │ │ │ +355 _____b_u_f_l_e_n); │ │ │ │ +356 if (_____i_l_e_n == 0) │ │ │ │ +357 _____g_o_t___e_o_f = true; │ │ │ │ +358 } │ │ │ │ +359 else │ │ │ │ +360 { │ │ │ │ +361 // Worst-case number of external bytes. │ │ │ │ +362 // XXX Not done encoding() == -1. │ │ │ │ +363 const int _____e_n_c = _M_codecvt->encoding(); │ │ │ │ +364 _s_t_r_e_a_m_s_i_z_e _____b_l_e_n; // Minimum buffer size. │ │ │ │ +365 _s_t_r_e_a_m_s_i_z_e _____r_l_e_n; // Number of chars to read. │ │ │ │ +366 if (_____e_n_c > 0) │ │ │ │ +367 _____b_l_e_n = _____r_l_e_n = _____b_u_f_l_e_n * _____e_n_c; │ │ │ │ +368 else │ │ │ │ +369 { │ │ │ │ +370 _____b_l_e_n = _____b_u_f_l_e_n + _M_codecvt->max_length() - 1; │ │ │ │ +_3_7_1 _____r_l_e_n = _____b_u_f_l_e_n; │ │ │ │ +372 } │ │ │ │ +373 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; │ │ │ │ +374 _____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; │ │ │ │ +375 │ │ │ │ +376 // An imbue in 'read' mode implies first converting the external │ │ │ │ +377 // chars already present. │ │ │ │ +378 if (_M_reading && this->egptr() == this->eback() && _____r_e_m_a_i_n_d_e_r) │ │ │ │ +379 _____r_l_e_n = 0; │ │ │ │ +380 │ │ │ │ +381 // Allocate buffer if necessary and move unconverted │ │ │ │ +382 // bytes to front. │ │ │ │ +383 if (_M_ext_buf_size < _____b_l_e_n) │ │ │ │ +384 { │ │ │ │ +385 char* _____b_u_f = new char[_____b_l_e_n]; │ │ │ │ +386 if (_____r_e_m_a_i_n_d_e_r) │ │ │ │ +387 _____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); │ │ │ │ +388 │ │ │ │ +389 delete [] _M_ext_buf; │ │ │ │ +390 _M_ext_buf = _____b_u_f; │ │ │ │ +391 _M_ext_buf_size = _____b_l_e_n; │ │ │ │ +392 } │ │ │ │ +393 else if (__remainder) │ │ │ │ +394 __builtin_memmove(_M_ext_buf, _M_ext_next, __remainder); │ │ │ │ +395 │ │ │ │ +396 _M_ext_next = _M_ext_buf; │ │ │ │ +397 _M_ext_end = _M_ext_buf + __remainder; │ │ │ │ +398 _M_state_last = _M_state_cur; │ │ │ │ +399 │ │ │ │ +400 do │ │ │ │ +401 { │ │ │ │ +402 if (__rlen > 0) │ │ │ │ +403 { │ │ │ │ +404 // Sanity check! │ │ │ │ +405 // This may fail if the return value of │ │ │ │ +406 // codecvt::max_length() is bogus. │ │ │ │ +407 if (_M_ext_end - _M_ext_buf + __rlen > _M_ext_buf_size) │ │ │ │ +408 { │ │ │ │ +409 __throw_ios_failure(__N("basic_filebuf::underflow " │ │ │ │ +410 "codecvt::max_length() " │ │ │ │ +411 "is not valid")); │ │ │ │ +_4_1_2 } │ │ │ │ +413 _s_t_r_e_a_m_s_i_z_e _____e_l_e_n = _M_file.xsgetn(_M_ext_end, _____r_l_e_n); │ │ │ │ +414 if (_____e_l_e_n == 0) │ │ │ │ +415 _____g_o_t___e_o_f = true; │ │ │ │ +416 else if (_____e_l_e_n == -1) │ │ │ │ +417 break; │ │ │ │ +418 _M_ext_end += _____e_l_e_n; │ │ │ │ +419 } │ │ │ │ +_4_2_0 │ │ │ │ +421 char_type* _____i_e_n_d = this->eback(); │ │ │ │ +422 if (_M_ext_next < _M_ext_end) │ │ │ │ +_4_2_3 __r = _M_codecvt->in(_M_state_cur, _M_ext_next, │ │ │ │ +424 _M_ext_end, _M_ext_next, │ │ │ │ +425 this->eback(), │ │ │ │ +426 this->eback() + _____b_u_f_l_e_n, _____i_e_n_d); │ │ │ │ +427 if (__r == codecvt_base::noconv) │ │ │ │ +428 { │ │ │ │ +429 size_t _____a_v_a_i_l = _M_ext_end - _M_ext_buf; │ │ │ │ +430 _____i_l_e_n = _s_t_d_:_:_m_i_n(_____a_v_a_i_l, _____b_u_f_l_e_n); │ │ │ │ +431 traits_type::copy(this->eback(), │ │ │ │ +432 reinterpret_cast │ │ │ │ +_4_3_3 (_M_ext_buf), _____i_l_e_n); │ │ │ │ +434 _M_ext_next = _M_ext_buf + _____i_l_e_n; │ │ │ │ +435 } │ │ │ │ +436 else │ │ │ │ +437 _____i_l_e_n = _____i_e_n_d - this->eback(); │ │ │ │ +438 │ │ │ │ +439 // _M_codecvt->in may return error while __ilen > 0: this is │ │ │ │ +440 // ok, and actually occurs in case of mixed encodings (e.g., │ │ │ │ +441 // XML files). │ │ │ │ +442 if (__r == codecvt_base::error) │ │ │ │ +443 break; │ │ │ │ +444 │ │ │ │ +445 _____r_l_e_n = 1; │ │ │ │ +446 } │ │ │ │ +447 while (__ilen == 0 && !__got_eof); │ │ │ │ +448 } │ │ │ │ +449 │ │ │ │ +450 if (__ilen > 0) │ │ │ │ +451 { │ │ │ │ +452 _M_set_buffer(__ilen); │ │ │ │ +_4_5_3 _M_reading = true; │ │ │ │ +454 _____r_e_t = traits_type::to_int_type(*this->gptr()); │ │ │ │ +455 } │ │ │ │ +_4_5_6 else if (_____g_o_t___e_o_f) │ │ │ │ +457 { │ │ │ │ +458 // If the actual end of file is reached, set 'uncommitted' │ │ │ │ +459 // mode, thus allowing an immediate write without an │ │ │ │ +_4_6_0 // intervening seek. │ │ │ │ +461 _M_set_buffer(-1); │ │ │ │ +462 _M_reading = false; │ │ │ │ +463 // However, reaching it while looping on partial means that │ │ │ │ +464 // the file has got an incomplete character. │ │ │ │ +465 if (__r == codecvt_base::partial) │ │ │ │ +466 __throw_ios_failure(__N("basic_filebuf::underflow " │ │ │ │ +467 "incomplete character in file")); │ │ │ │ +468 } │ │ │ │ +469 else if (__r == codecvt_base::error) │ │ │ │ +470 __throw_ios_failure(__N("basic_filebuf::underflow " │ │ │ │ +_4_7_1 "invalid byte sequence in file")); │ │ │ │ +472 else │ │ │ │ +473 __throw_ios_failure(__N("basic_filebuf::underflow " │ │ │ │ +_4_7_4 "error reading the file"), errno); │ │ │ │ +475 } │ │ │ │ +476 return _____r_e_t; │ │ │ │ +_4_7_7 } │ │ │ │ +478 │ │ │ │ +479 template │ │ │ │ +_4_8_0 typename basic_filebuf<_CharT, _Traits>::int_type │ │ │ │ +_4_8_1 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +482_ _p_b_a_c_k_f_a_i_l(int_type __i) │ │ │ │ +483 { │ │ │ │ +484 int_type _____r_e_t = traits_type::eof(); │ │ │ │ +485 const bool _____t_e_s_t_i_n = _M_mode & _i_o_s___b_a_s_e_:_:_i_n; │ │ │ │ +486 if (_____t_e_s_t_i_n) │ │ │ │ +487 { │ │ │ │ +488 if (_M_writing) │ │ │ │ +489 { │ │ │ │ +490 if (overflow() == traits_type::eof()) │ │ │ │ +491 return _____r_e_t; │ │ │ │ +492 _M_set_buffer(-1); │ │ │ │ +493 _M_writing = false; │ │ │ │ +494 } │ │ │ │ +495 // Remember whether the pback buffer is active, otherwise below │ │ │ │ +496 // we may try to store in it a second char (libstdc++/9761). │ │ │ │ +497 const bool _____t_e_s_t_p_b = _M_pback_init; │ │ │ │ +498 const bool _____t_e_s_t_e_o_f = traits_type::eq_int_type(__i, _____r_e_t); │ │ │ │ +499 int_type _____t_m_p; │ │ │ │ +500 if (this->eback() < this->gptr()) │ │ │ │ +501 { │ │ │ │ +502 this->gbump(-1); │ │ │ │ +503 _____t_m_p = traits_type::to_int_type(*this->gptr()); │ │ │ │ +504 } │ │ │ │ +505 else if (this->seekoff(-1, _i_o_s___b_a_s_e_:_:_c_u_r) != pos_type(off_type(-1))) │ │ │ │ +506 { │ │ │ │ +507 _____t_m_p = this->underflow(); │ │ │ │ +508 if (traits_type::eq_int_type(_____t_m_p, _____r_e_t)) │ │ │ │ +509 return _____r_e_t; │ │ │ │ +510 } │ │ │ │ +511 else │ │ │ │ +512 { │ │ │ │ +513 // At the beginning of the buffer, need to make a │ │ │ │ +514 // putback position available. But the seek may fail │ │ │ │ +515 // (f.i., at the beginning of a file, see │ │ │ │ +516 // libstdc++/9439) and in that case we return │ │ │ │ +517 // traits_type::eof(). │ │ │ │ +518 return _____r_e_t; │ │ │ │ +519 } │ │ │ │ +520 │ │ │ │ +521 // Try to put back __i into input sequence in one of three ways. │ │ │ │ +522 // Order these tests done in is unspecified by the standard. │ │ │ │ +523 if (!_____t_e_s_t_e_o_f && traits_type::eq_int_type(__i, _____t_m_p)) │ │ │ │ +524 _____r_e_t = __i; │ │ │ │ +525 else if (_____t_e_s_t_e_o_f) │ │ │ │ +526 _____r_e_t = traits_type::not_eof(__i); │ │ │ │ +527 else if (!_____t_e_s_t_p_b) │ │ │ │ +528 { │ │ │ │ +529 _M_create_pback(); │ │ │ │ +530 _M_reading = true; │ │ │ │ +531 *this->gptr() = traits_type::to_char_type(__i); │ │ │ │ +532 _____r_e_t = __i; │ │ │ │ +533 } │ │ │ │ +534 } │ │ │ │ +535 return _____r_e_t; │ │ │ │ +536 } │ │ │ │ +537 │ │ │ │ +538 template │ │ │ │ +539 typename basic_filebuf<_CharT, _Traits>::int_type │ │ │ │ +_5_4_0 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +541_ _o_v_e_r_f_l_o_w(int_type __c) │ │ │ │ +542 { │ │ │ │ +543 int_type _____r_e_t = traits_type::eof(); │ │ │ │ +544 const bool _____t_e_s_t_e_o_f = traits_type::eq_int_type(__c, _____r_e_t); │ │ │ │ +545 const bool _____t_e_s_t_o_u_t = (_M_mode & _i_o_s___b_a_s_e_:_:_o_u_t │ │ │ │ +546 || _M_mode & _i_o_s___b_a_s_e_:_:_a_p_p); │ │ │ │ +547 if (_____t_e_s_t_o_u_t) │ │ │ │ +548 { │ │ │ │ +549 if (_M_reading) │ │ │ │ +550 { │ │ │ │ +551 _M_destroy_pback(); │ │ │ │ +552 const int _____g_p_t_r___o_f_f = _M_get_ext_pos(_M_state_last); │ │ │ │ +553 if (_M_seek(_____g_p_t_r___o_f_f, _i_o_s___b_a_s_e_:_:_c_u_r, _M_state_last) │ │ │ │ +554 == pos_type(off_type(-1))) │ │ │ │ +555 return _____r_e_t; │ │ │ │ +556 } │ │ │ │ +557 if (this->pbase() < this->pptr()) │ │ │ │ +558 { │ │ │ │ +559 // If appropriate, append the overflow char. │ │ │ │ +560 if (!_____t_e_s_t_e_o_f) │ │ │ │ +561 { │ │ │ │ +562 *this->pptr() = traits_type::to_char_type(__c); │ │ │ │ +563 this->pbump(1); │ │ │ │ +564 } │ │ │ │ +565 │ │ │ │ +566 // Convert pending sequence to external representation, │ │ │ │ +567 // and output. │ │ │ │ +568 if (_M_convert_to_external(this->pbase(), │ │ │ │ +569 this->pptr() - this->pbase())) │ │ │ │ +570 { │ │ │ │ +571 _M_set_buffer(0); │ │ │ │ +572 _____r_e_t = traits_type::not_eof(__c); │ │ │ │ +573 } │ │ │ │ +574 } │ │ │ │ +575 else if (_M_buf_size > 1) │ │ │ │ +576 { │ │ │ │ +577 // Overflow in 'uncommitted' mode: set _M_writing, set │ │ │ │ +578 // the buffer to the initial 'write' mode, and put __c │ │ │ │ +579 // into the buffer. │ │ │ │ +580 _M_set_buffer(0); │ │ │ │ +581 _M_writing = true; │ │ │ │ +582 if (!_____t_e_s_t_e_o_f) │ │ │ │ +583 { │ │ │ │ +584 *this->pptr() = traits_type::to_char_type(__c); │ │ │ │ +585 this->pbump(1); │ │ │ │ +586 } │ │ │ │ +587 _____r_e_t = traits_type::not_eof(__c); │ │ │ │ +588 } │ │ │ │ +589 else │ │ │ │ +590 { │ │ │ │ +591 // Unbuffered. │ │ │ │ +592 char_type _____c_o_n_v = traits_type::to_char_type(__c); │ │ │ │ +593 if (_____t_e_s_t_e_o_f || _M_convert_to_external(&_____c_o_n_v, 1)) │ │ │ │ +594 { │ │ │ │ +595 _M_writing = true; │ │ │ │ +596 _____r_e_t = traits_type::not_eof(__c); │ │ │ │ +597 } │ │ │ │ +598 } │ │ │ │ +599 } │ │ │ │ +600 return _____r_e_t; │ │ │ │ +601 } │ │ │ │ +602 │ │ │ │ +603 template │ │ │ │ +604 bool │ │ │ │ +605 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +606_ ___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) │ │ │ │ +607 { │ │ │ │ +608 // Sizes of external and pending output. │ │ │ │ +609 _s_t_r_e_a_m_s_i_z_e _____e_l_e_n; │ │ │ │ +610 _s_t_r_e_a_m_s_i_z_e _____p_l_e_n; │ │ │ │ +611 if (__check_facet(_M_codecvt).always_noconv()) │ │ │ │ +612 { │ │ │ │ +613 _____e_l_e_n = _M_file.xsputn(reinterpret_cast(_____i_b_u_f), _____i_l_e_n); │ │ │ │ +614 _____p_l_e_n = _____i_l_e_n; │ │ │ │ +615 } │ │ │ │ +616 else │ │ │ │ +617 { │ │ │ │ +618 // Worst-case number of external bytes needed. │ │ │ │ +619 // XXX Not done encoding() == -1. │ │ │ │ +620 _s_t_r_e_a_m_s_i_z_e __blen = __ilen * _M_codecvt->max_length(); │ │ │ │ +621 char* __buf = static_cast(__builtin_alloca(__blen)); │ │ │ │ +622 │ │ │ │ +623 char* __bend; │ │ │ │ +624 const char_type* __iend; │ │ │ │ +625 codecvt_base::result __r; │ │ │ │ +626 __r = _M_codecvt->out(_M_state_cur, __ibuf, __ibuf + __ilen, │ │ │ │ +627 __iend, __buf, __buf + __blen, __bend); │ │ │ │ +628 │ │ │ │ +629 if (__r == codecvt_base::ok || __r == codecvt_base::partial) │ │ │ │ +630 __blen = __bend - __buf; │ │ │ │ +631 else if (__r == codecvt_base::noconv) │ │ │ │ +632 { │ │ │ │ +633 // Same as the always_noconv case above. │ │ │ │ +634 __buf = reinterpret_cast(__ibuf); │ │ │ │ +635 __blen = __ilen; │ │ │ │ +636 } │ │ │ │ +637 else │ │ │ │ +638 __throw_ios_failure(__N("basic_filebuf::_M_convert_to_external " │ │ │ │ +639 "conversion error")); │ │ │ │ +640 │ │ │ │ +641 __elen = _M_file.xsputn(__buf, __blen); │ │ │ │ +642 __plen = __blen; │ │ │ │ +643 │ │ │ │ +644 // Try once more for partial conversions. │ │ │ │ +645 if (__r == codecvt_base::partial && __elen == __plen) │ │ │ │ +646 { │ │ │ │ +647 const char_type* __iresume = __iend; │ │ │ │ +648 _s_t_r_e_a_m_s_i_z_e __rlen = this->pptr() - __iend; │ │ │ │ +649 __r = _M_codecvt->out(_M_state_cur, __iresume, │ │ │ │ +650 __iresume + __rlen, __iend, __buf, │ │ │ │ +651 __buf + __blen, __bend); │ │ │ │ +652 if (__r != codecvt_base::error) │ │ │ │ +653 { │ │ │ │ +654 __rlen = __bend - __buf; │ │ │ │ +655 __elen = _M_file.xsputn(__buf, __rlen); │ │ │ │ +656 __plen = __rlen; │ │ │ │ +657 } │ │ │ │ +658 else │ │ │ │ +659 __throw_ios_failure(__N("basic_filebuf::_M_convert_to_external " │ │ │ │ +660 "conversion error")); │ │ │ │ +661 } │ │ │ │ +662 } │ │ │ │ +663 return __elen == __plen; │ │ │ │ +664 } │ │ │ │ +665 │ │ │ │ +666 template │ │ │ │ +667 _s_t_r_e_a_m_s_i_z_e │ │ │ │ +_6_6_8 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +669_ _x_s_g_e_t_n(_CharT* _____s, _s_t_r_e_a_m_s_i_z_e __n) │ │ │ │ +670 { │ │ │ │ +671 // Clear out pback buffer before going on to the real deal... │ │ │ │ +672 _s_t_r_e_a_m_s_i_z_e _____r_e_t = 0; │ │ │ │ +673 if (_M_pback_init) │ │ │ │ +674 { │ │ │ │ +675 if (__n > 0 && this->gptr() == this->eback()) │ │ │ │ +676 { │ │ │ │ +677 *_____s++ = *this->gptr(); // emulate non-underflowing sbumpc │ │ │ │ +678 this->gbump(1); │ │ │ │ +679 _____r_e_t = 1; │ │ │ │ +680 --__n; │ │ │ │ +681 } │ │ │ │ +682 _M_destroy_pback(); │ │ │ │ +683 } │ │ │ │ +684 else if (_M_writing) │ │ │ │ +685 { │ │ │ │ +686 if (overflow() == traits_type::eof()) │ │ │ │ +687 return _____r_e_t; │ │ │ │ +688 _M_set_buffer(-1); │ │ │ │ +689 _M_writing = false; │ │ │ │ +690 } │ │ │ │ +691 │ │ │ │ +692 // Optimization in the always_noconv() case, to be generalized in the │ │ │ │ +693 // future: when __n > __buflen we read directly instead of using the │ │ │ │ +694 // buffer repeatedly. │ │ │ │ +695 const bool _____t_e_s_t_i_n = _M_mode & _i_o_s___b_a_s_e_:_:_i_n; │ │ │ │ +696 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; │ │ │ │ +697 │ │ │ │ +698 if (__n > _____b_u_f_l_e_n && __check_facet(_M_codecvt).always_noconv() │ │ │ │ +699 && _____t_e_s_t_i_n) │ │ │ │ +700 { │ │ │ │ +701 // First, copy the chars already present in the buffer. │ │ │ │ +702 const _s_t_r_e_a_m_s_i_z_e _____a_v_a_i_l = this->egptr() - this->gptr(); │ │ │ │ +703 if (_____a_v_a_i_l != 0) │ │ │ │ +704 { │ │ │ │ +705 traits_type::copy(_____s, this->gptr(), _____a_v_a_i_l); │ │ │ │ +706 _____s += _____a_v_a_i_l; │ │ │ │ +707 this->setg(this->eback(), this->gptr() + _____a_v_a_i_l, this->egptr()); │ │ │ │ +708 _____r_e_t += _____a_v_a_i_l; │ │ │ │ +709 __n -= _____a_v_a_i_l; │ │ │ │ +710 } │ │ │ │ +711 │ │ │ │ +712 // Need to loop in case of short reads (relatively common │ │ │ │ +713 // with pipes). │ │ │ │ +714 _s_t_r_e_a_m_s_i_z_e _____l_e_n; │ │ │ │ +715 for (;;) │ │ │ │ +716 { │ │ │ │ +717 _____l_e_n = _M_file.xsgetn(reinterpret_cast(_____s), __n); │ │ │ │ +718 if (_____l_e_n == -1) │ │ │ │ +719 __throw_ios_failure(__N("basic_filebuf::xsgetn " │ │ │ │ +720 "error reading the file"), errno); │ │ │ │ +721 if (_____l_e_n == 0) │ │ │ │ +722 break; │ │ │ │ +723 │ │ │ │ +724 __n -= _____l_e_n; │ │ │ │ +725 _____r_e_t += _____l_e_n; │ │ │ │ +726 if (__n == 0) │ │ │ │ +727 break; │ │ │ │ +728 │ │ │ │ +729 _____s += _____l_e_n; │ │ │ │ +730 } │ │ │ │ +731 │ │ │ │ +732 if (__n == 0) │ │ │ │ +733 { │ │ │ │ +734 // Set _M_reading. Buffer is already in initial 'read' mode. │ │ │ │ +735 _M_reading = true; │ │ │ │ +736 } │ │ │ │ +737 else if (_____l_e_n == 0) │ │ │ │ +738 { │ │ │ │ +739 // If end of file is reached, set 'uncommitted' │ │ │ │ +740 // mode, thus allowing an immediate write without │ │ │ │ +741 // an intervening seek. │ │ │ │ +742 _M_set_buffer(-1); │ │ │ │ +743 _M_reading = false; │ │ │ │ +744 } │ │ │ │ +745 } │ │ │ │ +746 else │ │ │ │ +747 _____r_e_t += __streambuf_type::xsgetn(_____s, __n); │ │ │ │ +748 │ │ │ │ +749 return _____r_e_t; │ │ │ │ +750 } │ │ │ │ +751 │ │ │ │ +752 template │ │ │ │ +753 _s_t_r_e_a_m_s_i_z_e │ │ │ │ +_7_5_4 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +755_ _x_s_p_u_t_n(const _CharT* _____s, _s_t_r_e_a_m_s_i_z_e __n) │ │ │ │ +756 { │ │ │ │ +757 _s_t_r_e_a_m_s_i_z_e _____r_e_t = 0; │ │ │ │ +758 // Optimization in the always_noconv() case, to be generalized in the │ │ │ │ +759 // future: when __n is larger than the available capacity we write │ │ │ │ +760 // directly instead of using the buffer. │ │ │ │ +761 const bool _____t_e_s_t_o_u_t = (_M_mode & _i_o_s___b_a_s_e_:_:_o_u_t │ │ │ │ +762 || _M_mode & _i_o_s___b_a_s_e_:_:_a_p_p); │ │ │ │ +763 if (__check_facet(_M_codecvt).always_noconv() │ │ │ │ +764 && _____t_e_s_t_o_u_t && !_M_reading) │ │ │ │ +765 { │ │ │ │ +766 _s_t_r_e_a_m_s_i_z_e _____b_u_f_a_v_a_i_l = this->epptr() - this->pptr(); │ │ │ │ +767 │ │ │ │ +768 // Don't mistake 'uncommitted' mode buffered with unbuffered. │ │ │ │ +769 if (!_M_writing && _M_buf_size > 1) │ │ │ │ +770 _____b_u_f_a_v_a_i_l = _M_buf_size - 1; │ │ │ │ +771 │ │ │ │ +772 if (__n >= _____b_u_f_a_v_a_i_l) │ │ │ │ +773 { │ │ │ │ +774 const _s_t_r_e_a_m_s_i_z_e _____b_u_f_f_i_l_l = this->pptr() - this->pbase(); │ │ │ │ +775 const char* _____b_u_f = reinterpret_cast(this->pbase()); │ │ │ │ +776 _____r_e_t = _M_file.xsputn_2(_____b_u_f, _____b_u_f_f_i_l_l, │ │ │ │ +777 reinterpret_cast(_____s), │ │ │ │ +778 __n); │ │ │ │ +779 if (_____r_e_t == _____b_u_f_f_i_l_l + __n) │ │ │ │ +780 { │ │ │ │ +781 _M_set_buffer(0); │ │ │ │ +782 _M_writing = true; │ │ │ │ +783 } │ │ │ │ +784 if (_____r_e_t > _____b_u_f_f_i_l_l) │ │ │ │ +785 _____r_e_t -= _____b_u_f_f_i_l_l; │ │ │ │ +786 else │ │ │ │ +787 _____r_e_t = 0; │ │ │ │ +788 } │ │ │ │ +789 else │ │ │ │ +790 _____r_e_t = __streambuf_type::xsputn(_____s, __n); │ │ │ │ +791 } │ │ │ │ +792 else │ │ │ │ +793 _____r_e_t = __streambuf_type::xsputn(_____s, __n); │ │ │ │ +794 return _____r_e_t; │ │ │ │ +795 } │ │ │ │ +796 │ │ │ │ +797 template │ │ │ │ +798 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* │ │ │ │ +_7_9_9 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +800_ _s_e_t_b_u_f(char_type* _____s, _s_t_r_e_a_m_s_i_z_e __n) │ │ │ │ +801 { │ │ │ │ +802 if (!this->is_open()) │ │ │ │ +803 { │ │ │ │ +804 if (_____s == 0 && __n == 0) │ │ │ │ +805 _M_buf_size = 1; │ │ │ │ +806 else if (_____s && __n > 0) │ │ │ │ +807 { │ │ │ │ +808 // This is implementation-defined behavior, and assumes that │ │ │ │ +809 // an external char_type array of length __n exists and has │ │ │ │ +810 // been pre-allocated. If this is not the case, things will │ │ │ │ +811 // quickly blow up. When __n > 1, __n - 1 positions will be │ │ │ │ +812 // used for the get area, __n - 1 for the put area and 1 │ │ │ │ +813 // position to host the overflow char of a full put area. │ │ │ │ +814 // When __n == 1, 1 position will be used for the get area │ │ │ │ +815 // and 0 for the put area, as in the unbuffered case above. │ │ │ │ +816 _M_buf = _____s; │ │ │ │ +817 _M_buf_size = __n; │ │ │ │ +818 } │ │ │ │ +819 } │ │ │ │ +820 return this; │ │ │ │ +821 } │ │ │ │ +822 │ │ │ │ +823 │ │ │ │ +824 // According to 27.8.1.4 p11 - 13, seekoff should ignore the last │ │ │ │ +825 // argument (of type openmode). │ │ │ │ +826 template │ │ │ │ +827 typename basic_filebuf<_CharT, _Traits>::pos_type │ │ │ │ +_8_2_8 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +829_ _s_e_e_k_o_f_f(off_type _____o_f_f, ios_base::seekdir _____w_a_y, ios_base::openmode) │ │ │ │ +830 { │ │ │ │ +831 int __width = 0; │ │ │ │ +832 if (_M_codecvt) │ │ │ │ +833 __width = _M_codecvt->encoding(); │ │ │ │ +834 if (__width < 0) │ │ │ │ +835 __width = 0; │ │ │ │ +836 │ │ │ │ +837 pos_type _____r_e_t = pos_type(off_type(-1)); │ │ │ │ +838 const bool _____t_e_s_t_f_a_i_l = _____o_f_f != 0 && __width <= 0; │ │ │ │ +839 if (this->is_open() && !_____t_e_s_t_f_a_i_l) │ │ │ │ +840 { │ │ │ │ +841 // tellg and tellp queries do not affect any state, unless │ │ │ │ +842 // ! always_noconv and the put sequence is not empty. │ │ │ │ +843 // In that case, determining the position requires converting the │ │ │ │ +844 // put sequence. That doesn't use ext_buf, so requires a flush. │ │ │ │ +845 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 │ │ │ │ +846 && (!_M_writing || _M_codecvt->always_noconv()); │ │ │ │ +847 │ │ │ │ +848 // Ditch any pback buffers to avoid confusion. │ │ │ │ +849 if (!_____n_o___m_o_v_e_m_e_n_t) │ │ │ │ +850 _M_destroy_pback(); │ │ │ │ +851 │ │ │ │ +852 // Correct state at destination. Note that this is the correct │ │ │ │ +853 // state for the current position during output, because │ │ │ │ +854 // codecvt::unshift() returns the state to the initial state. │ │ │ │ +855 // This is also the correct state at the end of the file because │ │ │ │ +856 // an unshift sequence should have been written at the end. │ │ │ │ +857 __state_type _____s_t_a_t_e = _M_state_beg; │ │ │ │ +858 off_type _____c_o_m_p_u_t_e_d___o_f_f = _____o_f_f * __width; │ │ │ │ +859 if (_M_reading && _____w_a_y == _i_o_s___b_a_s_e_:_:_c_u_r) │ │ │ │ +860 { │ │ │ │ +861 _____s_t_a_t_e = _M_state_last; │ │ │ │ +862 _____c_o_m_p_u_t_e_d___o_f_f += _M_get_ext_pos(_____s_t_a_t_e); │ │ │ │ +863 } │ │ │ │ +864 if (!_____n_o___m_o_v_e_m_e_n_t) │ │ │ │ +865 _____r_e_t = _M_seek(_____c_o_m_p_u_t_e_d___o_f_f, _____w_a_y, _____s_t_a_t_e); │ │ │ │ +866 else │ │ │ │ +867 { │ │ │ │ +868 if (_M_writing) │ │ │ │ +869 _____c_o_m_p_u_t_e_d___o_f_f = this->pptr() - this->pbase(); │ │ │ │ +870 │ │ │ │ +871 off_type _____f_i_l_e___o_f_f = _M_file.seekoff(0, _i_o_s___b_a_s_e_:_:_c_u_r); │ │ │ │ +872 if (_____f_i_l_e___o_f_f != off_type(-1)) │ │ │ │ +873 { │ │ │ │ +874 _____r_e_t = _____f_i_l_e___o_f_f + _____c_o_m_p_u_t_e_d___o_f_f; │ │ │ │ +875 _____r_e_t.state(_____s_t_a_t_e); │ │ │ │ +876 } │ │ │ │ +877 } │ │ │ │ +878 } │ │ │ │ +879 return _____r_e_t; │ │ │ │ +880 } │ │ │ │ +881 │ │ │ │ +882 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +883 // 171. Strange seekpos() semantics due to joint position │ │ │ │ +884 // According to the resolution of DR 171, seekpos should ignore the last │ │ │ │ +885 // argument (of type openmode). │ │ │ │ +886 template │ │ │ │ +887 typename basic_filebuf<_CharT, _Traits>::pos_type │ │ │ │ +_8_8_8 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +889_ _s_e_e_k_p_o_s(pos_type _____p_o_s, ios_base::openmode) │ │ │ │ +890 { │ │ │ │ +891 pos_type _____r_e_t = pos_type(off_type(-1)); │ │ │ │ +892 if (this->is_open()) │ │ │ │ +893 { │ │ │ │ +894 // Ditch any pback buffers to avoid confusion. │ │ │ │ +895 _M_destroy_pback(); │ │ │ │ +896 _____r_e_t = _M_seek(off_type(_____p_o_s), _i_o_s___b_a_s_e_:_:_b_e_g, _____p_o_s.state()); │ │ │ │ +897 } │ │ │ │ +898 return _____r_e_t; │ │ │ │ +899 } │ │ │ │ +900 │ │ │ │ +901 template │ │ │ │ +902 typename basic_filebuf<_CharT, _Traits>::pos_type │ │ │ │ +903 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +904_ ___M___s_e_e_k(off_type _____o_f_f, ios_base::seekdir _____w_a_y, __state_type _____s_t_a_t_e) │ │ │ │ +905 { │ │ │ │ +906 pos_type _____r_e_t = pos_type(off_type(-1)); │ │ │ │ +907 if (_M_terminate_output()) │ │ │ │ +908 { │ │ │ │ +909 off_type _____f_i_l_e___o_f_f = _M_file.seekoff(_____o_f_f, _____w_a_y); │ │ │ │ +910 if (_____f_i_l_e___o_f_f != off_type(-1)) │ │ │ │ +911 { │ │ │ │ +912 _M_reading = false; │ │ │ │ +913 _M_writing = false; │ │ │ │ +914 _M_ext_next = _M_ext_end = _M_ext_buf; │ │ │ │ +915 _M_set_buffer(-1); │ │ │ │ +916 _M_state_cur = _____s_t_a_t_e; │ │ │ │ +917 _____r_e_t = _____f_i_l_e___o_f_f; │ │ │ │ +918 _____r_e_t.state(_M_state_cur); │ │ │ │ +919 } │ │ │ │ +920 } │ │ │ │ +921 return __ret; │ │ │ │ +922 } │ │ │ │ +923 │ │ │ │ +924 // Returns the distance from the end of the ext buffer to the point │ │ │ │ +925 // corresponding to gptr(). This is a negative value. Updates __state │ │ │ │ +926 // from eback() correspondence to gptr(). │ │ │ │ +927 template │ │ │ │ +928 int basic_filebuf<_CharT, _Traits>:: │ │ │ │ +929 _M_get_ext_pos(__state_type& __state) │ │ │ │ +930 { │ │ │ │ +931 if (_M_codecvt->always_noconv()) │ │ │ │ +932 return this->gptr() - this->egptr(); │ │ │ │ +933 else │ │ │ │ +934 { │ │ │ │ +935 // Calculate offset from _M_ext_buf that corresponds to │ │ │ │ +936 // gptr(). Precondition: __state == _M_state_last, which │ │ │ │ +937 // corresponds to eback(). │ │ │ │ +938 const int __gptr_off = │ │ │ │ +939 _M_codecvt->length(__state, _M_ext_buf, _M_ext_next, │ │ │ │ +940 this->gptr() - this->eback()); │ │ │ │ +941 return _M_ext_buf + __gptr_off - _M_ext_end; │ │ │ │ +942 } │ │ │ │ +943 } │ │ │ │ +944 │ │ │ │ +945 template │ │ │ │ +946 bool │ │ │ │ +947 basic_filebuf<_CharT, _Traits>:: │ │ │ │ +948 _M_terminate_output() │ │ │ │ +949 { │ │ │ │ +950 // Part one: update the output sequence. │ │ │ │ +951 bool __testvalid = true; │ │ │ │ +952 if (this->pbase() < this->pptr()) │ │ │ │ +953 { │ │ │ │ +954 const int_type __tmp = this->overflow(); │ │ │ │ +955 if (traits_type::eq_int_type(__tmp, traits_type::eof())) │ │ │ │ +956 __testvalid = false; │ │ │ │ +957 } │ │ │ │ +958 │ │ │ │ +959 // Part two: output unshift sequence. │ │ │ │ +960 if (_M_writing && !__check_facet(_M_codecvt).always_noconv() │ │ │ │ +961 && __testvalid) │ │ │ │ +962 { │ │ │ │ +963 // Note: this value is arbitrary, since there is no way to │ │ │ │ +964 // get the length of the unshift sequence from codecvt, │ │ │ │ +965 // without calling unshift. │ │ │ │ +966 const size_t __blen = 128; │ │ │ │ +967 char __buf[__blen]; │ │ │ │ +968 codecvt_base::result __r; │ │ │ │ +969 _s_t_r_e_a_m_s_i_z_e __ilen = 0; │ │ │ │ +970 │ │ │ │ +971 do │ │ │ │ +972 { │ │ │ │ +973 char* __next; │ │ │ │ +974 __r = _M_codecvt->unshift(_M_state_cur, __buf, │ │ │ │ +975 __buf + __blen, __next); │ │ │ │ +976 if (__r == codecvt_base::error) │ │ │ │ +977 __testvalid = false; │ │ │ │ +978 else if (__r == codecvt_base::ok || │ │ │ │ +979 __r == codecvt_base::partial) │ │ │ │ +980 { │ │ │ │ +981 __ilen = __next - __buf; │ │ │ │ +982 if (__ilen > 0) │ │ │ │ +983 { │ │ │ │ +984 const _s_t_r_e_a_m_s_i_z_e __elen = _M_file.xsputn(__buf, __ilen); │ │ │ │ +985 if (__elen != __ilen) │ │ │ │ +986 __testvalid = false; │ │ │ │ +987 } │ │ │ │ +988 } │ │ │ │ +989 } │ │ │ │ +990 while (__r == codecvt_base::partial && __ilen > 0 && __testvalid); │ │ │ │ +991 │ │ │ │ +992 if (__testvalid) │ │ │ │ +993 { │ │ │ │ +994 // This second call to overflow() is required by the standard, │ │ │ │ +995 // but it's not clear why it's needed, since the output buffer │ │ │ │ +996 // should be empty by this point (it should have been emptied │ │ │ │ +997 // in the first call to overflow()). │ │ │ │ +998 const int_type __tmp = this->overflow(); │ │ │ │ +999 if (traits_type::eq_int_type(__tmp, traits_type::eof())) │ │ │ │ +1000 __testvalid = false; │ │ │ │ +1001 } │ │ │ │ +1002 } │ │ │ │ +1003 return __testvalid; │ │ │ │ +1004 } │ │ │ │ +1005 │ │ │ │ +1006 template │ │ │ │ +1007 int │ │ │ │ +_1_0_0_8 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +1009_ _s_y_n_c() │ │ │ │ +1010 { │ │ │ │ +1011 // Make sure that the internal buffer resyncs its idea of │ │ │ │ +1012 // the file position with the external file. │ │ │ │ +1013 int _____r_e_t = 0; │ │ │ │ +1014 if (this->pbase() < this->pptr()) │ │ │ │ +1015 { │ │ │ │ +1016 const int_type _____t_m_p = this->overflow(); │ │ │ │ +1017 if (traits_type::eq_int_type(_____t_m_p, traits_type::eof())) │ │ │ │ +1018 _____r_e_t = -1; │ │ │ │ +1019 } │ │ │ │ +1020 return _____r_e_t; │ │ │ │ +1021 } │ │ │ │ +1022 │ │ │ │ +1023 template │ │ │ │ +1024 void │ │ │ │ +_1_0_2_5 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +1026_ _i_m_b_u_e(const _l_o_c_a_l_e& _____l_o_c) │ │ │ │ +1027 { │ │ │ │ +1028 bool _____t_e_s_t_v_a_l_i_d = true; │ │ │ │ +1029 │ │ │ │ +1030 const _____c_o_d_e_c_v_t___t_y_p_e* const ___M___c_o_d_e_c_v_t___t_m_p │ │ │ │ +1031 = _____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); │ │ │ │ +1032 │ │ │ │ +1033 if (this->is_open()) │ │ │ │ +1034 { │ │ │ │ +1035 // encoding() == -1 is ok only at the beginning. │ │ │ │ +1036 if ((_M_reading || _M_writing) │ │ │ │ +1037 && __check_facet(_M_codecvt).encoding() == -1) │ │ │ │ +1038 _____t_e_s_t_v_a_l_i_d = false; │ │ │ │ +1039 else │ │ │ │ +1040 { │ │ │ │ +1041 if (_M_reading) │ │ │ │ +1042 { │ │ │ │ +1043 if (__check_facet(_M_codecvt).always_noconv()) │ │ │ │ +1044 { │ │ │ │ +1045 if (___M___c_o_d_e_c_v_t___t_m_p │ │ │ │ +1046 && !__check_facet(___M___c_o_d_e_c_v_t___t_m_p).always_noconv()) │ │ │ │ +1047 _____t_e_s_t_v_a_l_i_d = this->seekoff(0, _i_o_s___b_a_s_e_:_:_c_u_r, _M_mode) │ │ │ │ +1048 != pos_type(off_type(-1)); │ │ │ │ +1049 } │ │ │ │ +1050 else │ │ │ │ +1051 { │ │ │ │ +1052 // External position corresponding to gptr(). │ │ │ │ +1053 _M_ext_next = _M_ext_buf │ │ │ │ +1054 + _M_codecvt->length(_M_state_last, _M_ext_buf, │ │ │ │ +1055 _M_ext_next, │ │ │ │ +1056 this->gptr() - this->eback()); │ │ │ │ +1057 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; │ │ │ │ +1058 if (_____r_e_m_a_i_n_d_e_r) │ │ │ │ +1059 _____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); │ │ │ │ +1060 │ │ │ │ +1061 _M_ext_next = _M_ext_buf; │ │ │ │ +1062 _M_ext_end = _M_ext_buf + _____r_e_m_a_i_n_d_e_r; │ │ │ │ +1063 _M_set_buffer(-1); │ │ │ │ +1064 _M_state_last = _M_state_cur = _M_state_beg; │ │ │ │ +1065 } │ │ │ │ +1066 } │ │ │ │ +1067 else if (_M_writing && (_____t_e_s_t_v_a_l_i_d = _M_terminate_output())) │ │ │ │ +1068 _M_set_buffer(-1); │ │ │ │ +1069 } │ │ │ │ +1070 } │ │ │ │ +1071 │ │ │ │ +1072 if (_____t_e_s_t_v_a_l_i_d) │ │ │ │ +1073 _M_codecvt = ___M___c_o_d_e_c_v_t___t_m_p; │ │ │ │ +1074 else │ │ │ │ +1075 _M_codecvt = 0; │ │ │ │ +1076 } │ │ │ │ +1077 │ │ │ │ +1078 // Inhibit implicit instantiations for required instantiations, │ │ │ │ +1079 // which are defined via explicit instantiations elsewhere. │ │ │ │ +1080#if _GLIBCXX_EXTERN_TEMPLATE │ │ │ │ +1081 extern template class _b_a_s_i_c___f_i_l_e_b_u_f_<_c_h_a_r_>; │ │ │ │ +1082 extern template class _b_a_s_i_c___i_f_s_t_r_e_a_m_<_c_h_a_r_>; │ │ │ │ +1083 extern template class _b_a_s_i_c___o_f_s_t_r_e_a_m_<_c_h_a_r_>; │ │ │ │ +1084 extern template class _b_a_s_i_c___f_s_t_r_e_a_m_<_c_h_a_r_>; │ │ │ │ +1085 │ │ │ │ +1086#ifdef _GLIBCXX_USE_WCHAR_T │ │ │ │ +1087 extern template class _b_a_s_i_c___f_i_l_e_b_u_f_<_w_c_h_a_r___t_>; │ │ │ │ +1088 extern template class _b_a_s_i_c___i_f_s_t_r_e_a_m_<_w_c_h_a_r___t_>; │ │ │ │ +1089 extern template class _b_a_s_i_c___o_f_s_t_r_e_a_m_<_w_c_h_a_r___t_>; │ │ │ │ +1090 extern template class _b_a_s_i_c___f_s_t_r_e_a_m_<_w_c_h_a_r___t_>; │ │ │ │ +1091#endif │ │ │ │ +1092#endif │ │ │ │ +1093 │ │ │ │ +1094_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +1095} // namespace std │ │ │ │ +1096 │ │ │ │ +1097#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_7 │ │ │ │ _s_t_d_:_:_m_i_n │ │ │ │ constexpr const _Tp & min(const _Tp &, const _Tp &) │ │ │ │ This does what you think it does. │ │ │ │ DDeeffiinniittiioonn _s_t_l___a_l_g_o_b_a_s_e_._h_:_2_3_3 │ │ │ │ _s_t_d │ │ │ │ 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_:_6_8 │ │ │ │ -_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_5 │ │ │ │ -_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_0 │ │ │ │ -_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_3 │ │ │ │ -_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_1 │ │ │ │ +_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_2_9 │ │ │ │ +_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_3 │ │ │ │ +_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_:_2_9_7 │ │ │ │ +_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_2_6 │ │ │ │ +_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_:_4_6 │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_._t_c_c_:_6_6_9 │ │ │ │ +_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_4_9 │ │ │ │ +_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_8_9 │ │ │ │ +_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_2 │ │ │ │ +_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_5_5 │ │ │ │ +_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_1 │ │ │ │ +_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_7_9 │ │ │ │ +_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_1 │ │ │ │ +_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_0_9 │ │ │ │ +_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_0 │ │ │ │ +_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_:_1_9_9 │ │ │ │ +_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_5_5 │ │ │ │ +_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_1_8 │ │ │ │ +_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_1_5 │ │ │ │ +_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_2_1 │ │ │ │ +_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_8_7 │ │ │ │ +_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_:_4_9_0 │ │ │ │ +_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_8_4 │ │ │ │ +_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_7_3 │ │ │ │ +_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_7_6 │ │ │ │ +_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_7_9 │ │ │ │ +_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_7 │ │ │ │ _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-14-base/libstdc++/user/a00392.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('a00392.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-14-base/libstdc++/user/a00392_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: streambuf_iterator.h Source File │ │ │ +libstdc++: text_encoding-data.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,608 +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-2024 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#pragma GCC system_header
│ │ │ +
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#include <streambuf>
│ │ │ - │ │ │ -
37#include <debug/debug.h>
│ │ │ -
38
│ │ │ -
39namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
40{
│ │ │ -
41_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
42
│ │ │ -
43 /**
│ │ │ -
44 * @addtogroup iterators
│ │ │ -
45 * @{
│ │ │ -
46 */
│ │ │ -
47
│ │ │ -
48// Ignore warnings about std::iterator.
│ │ │ -
49#pragma GCC diagnostic push
│ │ │ -
50#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
│ │ │ -
51 // 24.5.3 Template class istreambuf_iterator
│ │ │ -
52 /// Provides input iterator semantics for streambufs.
│ │ │ -
53 template<typename _CharT, typename _Traits>
│ │ │ -
│ │ │ - │ │ │ -
55 : public iterator<input_iterator_tag, _CharT, typename _Traits::off_type,
│ │ │ -
56 _CharT*, _CharT>
│ │ │ -
57 {
│ │ │ -
58 public:
│ │ │ -
59 // Types:
│ │ │ -
60 ///@{
│ │ │ -
61 /// Public typedefs
│ │ │ -
62#if __cplusplus < 201103L
│ │ │ -
63 typedef _CharT& reference; // Changed to _CharT by LWG 445
│ │ │ -
64#elif __cplusplus > 201703L
│ │ │ -
65 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
66 // 3188. istreambuf_iterator::pointer should not be unspecified
│ │ │ -
67 using pointer = void;
│ │ │ -
68#endif
│ │ │ -
69
│ │ │ -
70 typedef _CharT char_type;
│ │ │ -
71 typedef _Traits traits_type;
│ │ │ -
72 typedef typename _Traits::int_type int_type;
│ │ │ - │ │ │ - │ │ │ -
75 ///@}
│ │ │ -
76
│ │ │ -
77 template<typename _CharT2>
│ │ │ -
78 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
82
│ │ │ -
83 template<bool _IsMove, typename _CharT2>
│ │ │ -
84 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
│ │ │ -
85 _CharT2*>::__type
│ │ │ -
86 __copy_move_a2(istreambuf_iterator<_CharT2>,
│ │ │ - │ │ │ -
88
│ │ │ -
89 template<typename _CharT2, typename _Size>
│ │ │ -
90 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
│ │ │ -
91 _CharT2*>::__type
│ │ │ -
92 __copy_n_a(istreambuf_iterator<_CharT2>, _Size, _CharT2*, bool);
│ │ │ -
93
│ │ │ -
94 template<typename _CharT2>
│ │ │ -
95 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
│ │ │ - │ │ │ - │ │ │ -
98 const _CharT2&);
│ │ │ -
99
│ │ │ -
100 template<typename _CharT2, typename _Distance>
│ │ │ -
101 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
│ │ │ -
102 void>::__type
│ │ │ - │ │ │ -
104
│ │ │ -
105 private:
│ │ │ -
106 // 24.5.3 istreambuf_iterator
│ │ │ -
107 // p 1
│ │ │ -
108 // If the end of stream is reached (streambuf_type::sgetc()
│ │ │ -
109 // returns traits_type::eof()), the iterator becomes equal to
│ │ │ -
110 // the "end of stream" iterator value.
│ │ │ -
111 // NB: This implementation assumes the "end of stream" value
│ │ │ -
112 // is EOF, or -1.
│ │ │ -
113 mutable streambuf_type* _M_sbuf;
│ │ │ -
114 int_type _M_c;
│ │ │ -
115
│ │ │ -
116 public:
│ │ │ -
117 /// Construct end of input stream iterator.
│ │ │ -
│ │ │ - │ │ │ -
119 : _M_sbuf(0), _M_c(traits_type::eof()) { }
│ │ │ -
│ │ │ -
120
│ │ │ -
121#if __cplusplus > 201703L && __cpp_lib_concepts
│ │ │ -
122 constexpr istreambuf_iterator(default_sentinel_t) noexcept
│ │ │ -
123 : istreambuf_iterator() { }
│ │ │ -
124#endif
│ │ │ -
125
│ │ │ -
126#if __cplusplus >= 201103L
│ │ │ -
127 istreambuf_iterator(const istreambuf_iterator&) noexcept = default;
│ │ │ -
128
│ │ │ -
129 ~istreambuf_iterator() = default;
│ │ │ -
130#endif
│ │ │ -
131
│ │ │ -
132 /// Construct start of input stream iterator.
│ │ │ -
│ │ │ - │ │ │ -
134 : _M_sbuf(__s.rdbuf()), _M_c(traits_type::eof()) { }
│ │ │ -
│ │ │ -
135
│ │ │ -
136 /// Construct start of streambuf iterator.
│ │ │ -
│ │ │ - │ │ │ -
138 : _M_sbuf(__s), _M_c(traits_type::eof()) { }
│ │ │ -
│ │ │ -
139
│ │ │ -
140#if __cplusplus >= 201103L
│ │ │ - │ │ │ -
142 operator=(const istreambuf_iterator&) noexcept = default;
│ │ │ -
143#endif
│ │ │ -
144
│ │ │ -
145 /// Return the current character pointed to by iterator. This returns
│ │ │ -
146 /// streambuf.sgetc(). It cannot be assigned. NB: The result of
│ │ │ -
147 /// operator*() on an end of stream is undefined.
│ │ │ -
148 _GLIBCXX_NODISCARD
│ │ │ - │ │ │ -
│ │ │ -
150 operator*() const
│ │ │ -
151 {
│ │ │ -
152 int_type __c = _M_get();
│ │ │ -
153
│ │ │ -
154#ifdef _GLIBCXX_DEBUG_PEDANTIC
│ │ │ -
155 // Dereferencing a past-the-end istreambuf_iterator is a
│ │ │ -
156 // libstdc++ extension
│ │ │ -
157 __glibcxx_requires_cond(!_S_is_eof(__c),
│ │ │ -
158 _M_message(__gnu_debug::__msg_deref_istreambuf)
│ │ │ -
159 ._M_iterator(*this));
│ │ │ -
160#endif
│ │ │ -
161 return traits_type::to_char_type(__c);
│ │ │ -
162 }
│ │ │ -
│ │ │ -
163
│ │ │ -
164 /// Advance the iterator. Calls streambuf.sbumpc().
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
167 {
│ │ │ -
168 __glibcxx_requires_cond(_M_sbuf &&
│ │ │ -
169 (!_S_is_eof(_M_c) || !_S_is_eof(_M_sbuf->sgetc())),
│ │ │ -
170 _M_message(__gnu_debug::__msg_inc_istreambuf)
│ │ │ -
171 ._M_iterator(*this));
│ │ │ -
172
│ │ │ -
173 _M_sbuf->sbumpc();
│ │ │ -
174 _M_c = traits_type::eof();
│ │ │ -
175 return *this;
│ │ │ -
176 }
│ │ │ -
│ │ │ -
177
│ │ │ -
178 /// Advance the iterator. Calls streambuf.sbumpc().
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
181 {
│ │ │ -
182 __glibcxx_requires_cond(_M_sbuf &&
│ │ │ -
183 (!_S_is_eof(_M_c) || !_S_is_eof(_M_sbuf->sgetc())),
│ │ │ -
184 _M_message(__gnu_debug::__msg_inc_istreambuf)
│ │ │ -
185 ._M_iterator(*this));
│ │ │ -
186
│ │ │ - │ │ │ -
188 __old._M_c = _M_sbuf->sbumpc();
│ │ │ -
189 _M_c = traits_type::eof();
│ │ │ -
190 return __old;
│ │ │ -
191 }
│ │ │ -
│ │ │ -
192
│ │ │ -
193 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
194 // 110 istreambuf_iterator::equal not const
│ │ │ -
195 // NB: there is also number 111 (NAD) relevant to this function.
│ │ │ -
196 /// Return true both iterators are end or both are not end.
│ │ │ -
197 _GLIBCXX_NODISCARD
│ │ │ -
198 bool
│ │ │ -
│ │ │ -
199 equal(const istreambuf_iterator& __b) const
│ │ │ -
200 { return _M_at_eof() == __b._M_at_eof(); }
│ │ │ -
│ │ │ -
201
│ │ │ -
202 private:
│ │ │ - │ │ │ -
204 _M_get() const
│ │ │ -
205 {
│ │ │ -
206 int_type __ret = _M_c;
│ │ │ -
207 if (_M_sbuf && _S_is_eof(__ret) && _S_is_eof(__ret = _M_sbuf->sgetc()))
│ │ │ -
208 _M_sbuf = 0;
│ │ │ -
209 return __ret;
│ │ │ -
210 }
│ │ │ -
211
│ │ │ -
212 bool
│ │ │ -
213 _M_at_eof() const
│ │ │ -
214 { return _S_is_eof(_M_get()); }
│ │ │ -
215
│ │ │ -
216 static bool
│ │ │ -
217 _S_is_eof(int_type __c)
│ │ │ -
218 {
│ │ │ -
219 const int_type __eof = traits_type::eof();
│ │ │ -
220 return traits_type::eq_int_type(__c, __eof);
│ │ │ -
221 }
│ │ │ -
222
│ │ │ -
223#if __cplusplus > 201703L && __cpp_lib_concepts
│ │ │ -
224 [[nodiscard]]
│ │ │ -
225 friend bool
│ │ │ -
226 operator==(const istreambuf_iterator& __i, default_sentinel_t)
│ │ │ -
227 { return __i._M_at_eof(); }
│ │ │ -
228#endif
│ │ │ -
229 };
│ │ │ -
│ │ │ -
230
│ │ │ -
231 template<typename _CharT, typename _Traits>
│ │ │ -
232 _GLIBCXX_NODISCARD
│ │ │ -
233 inline bool
│ │ │ -
234 operator==(const istreambuf_iterator<_CharT, _Traits>& __a,
│ │ │ -
235 const istreambuf_iterator<_CharT, _Traits>& __b)
│ │ │ -
236 { return __a.equal(__b); }
│ │ │ -
237
│ │ │ -
238#if __cpp_impl_three_way_comparison < 201907L
│ │ │ -
239 template<typename _CharT, typename _Traits>
│ │ │ -
240 _GLIBCXX_NODISCARD
│ │ │ -
241 inline bool
│ │ │ -
242 operator!=(const istreambuf_iterator<_CharT, _Traits>& __a,
│ │ │ -
243 const istreambuf_iterator<_CharT, _Traits>& __b)
│ │ │ -
244 { return !__a.equal(__b); }
│ │ │ -
245#endif
│ │ │ -
246
│ │ │ -
247 /// Provides output iterator semantics for streambufs.
│ │ │ -
248 template<typename _CharT, typename _Traits>
│ │ │ -
│ │ │ - │ │ │ -
250 : public iterator<output_iterator_tag, void, void, void, void>
│ │ │ -
251 {
│ │ │ -
252 public:
│ │ │ -
253 // Types:
│ │ │ -
254 ///@{
│ │ │ -
255 /// Public typedefs
│ │ │ -
256#if __cplusplus > 201703L
│ │ │ - │ │ │ -
258#endif
│ │ │ -
259 typedef _CharT char_type;
│ │ │ -
260 typedef _Traits traits_type;
│ │ │ - │ │ │ - │ │ │ -
263 ///@}
│ │ │ -
264
│ │ │ -
265 template<typename _CharT2>
│ │ │ -
266 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
270
│ │ │ -
271 private:
│ │ │ -
272 streambuf_type* _M_sbuf;
│ │ │ -
273 bool _M_failed;
│ │ │ -
274
│ │ │ -
275 public:
│ │ │ -
276
│ │ │ -
277#if __cplusplus > 201703L
│ │ │ -
278 constexpr
│ │ │ -
279 ostreambuf_iterator() noexcept
│ │ │ -
280 : _M_sbuf(nullptr), _M_failed(true) { }
│ │ │ -
281#endif
│ │ │ -
282
│ │ │ -
283 /// Construct output iterator from ostream.
│ │ │ -
│ │ │ - │ │ │ -
285 : _M_sbuf(__s.rdbuf()), _M_failed(!_M_sbuf) { }
│ │ │ -
│ │ │ -
286
│ │ │ -
287 /// Construct output iterator from streambuf.
│ │ │ -
│ │ │ - │ │ │ -
289 : _M_sbuf(__s), _M_failed(!_M_sbuf) { }
│ │ │ -
│ │ │ -
290
│ │ │ -
291 /// Write character to streambuf. Calls streambuf.sputc().
│ │ │ - │ │ │ -
│ │ │ -
293 operator=(_CharT __c)
│ │ │ -
294 {
│ │ │ -
295 if (!_M_failed &&
│ │ │ -
296 _Traits::eq_int_type(_M_sbuf->sputc(__c), _Traits::eof()))
│ │ │ -
297 _M_failed = true;
│ │ │ -
298 return *this;
│ │ │ -
299 }
│ │ │ -
│ │ │ -
300
│ │ │ -
301 /// Return *this.
│ │ │ -
302 _GLIBCXX_NODISCARD
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
305 { return *this; }
│ │ │ -
│ │ │ -
306
│ │ │ -
307 /// Return *this.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
310 { return *this; }
│ │ │ -
│ │ │ -
311
│ │ │ -
312 /// Return *this.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
315 { return *this; }
│ │ │ -
│ │ │ -
316
│ │ │ -
317 /// Return true if previous operator=() failed.
│ │ │ -
318 _GLIBCXX_NODISCARD
│ │ │ -
319 bool
│ │ │ -
│ │ │ - │ │ │ -
321 { return _M_failed; }
│ │ │ -
│ │ │ -
322
│ │ │ - │ │ │ -
324 _M_put(const _CharT* __ws, streamsize __len)
│ │ │ -
325 {
│ │ │ -
326 if (__builtin_expect(!_M_failed, true)
│ │ │ -
327 && __builtin_expect(this->_M_sbuf->sputn(__ws, __len) != __len,
│ │ │ -
328 false))
│ │ │ -
329 _M_failed = true;
│ │ │ -
330 return *this;
│ │ │ -
331 }
│ │ │ -
332 };
│ │ │ -
│ │ │ -
333#pragma GCC diagnostic pop
│ │ │ -
334
│ │ │ -
335 // Overloads for streambuf iterators.
│ │ │ -
336 template<typename _CharT>
│ │ │ -
337 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
│ │ │ -
338 ostreambuf_iterator<_CharT> >::__type
│ │ │ -
339 copy(istreambuf_iterator<_CharT> __first,
│ │ │ -
340 istreambuf_iterator<_CharT> __last,
│ │ │ -
341 ostreambuf_iterator<_CharT> __result)
│ │ │ -
342 {
│ │ │ -
343 if (__first._M_sbuf && !__last._M_sbuf && !__result._M_failed)
│ │ │ -
344 {
│ │ │ -
345 bool __ineof;
│ │ │ -
346 __copy_streambufs_eof(__first._M_sbuf, __result._M_sbuf, __ineof);
│ │ │ -
347 if (!__ineof)
│ │ │ -
348 __result._M_failed = true;
│ │ │ -
349 }
│ │ │ -
350 return __result;
│ │ │ -
351 }
│ │ │ -
352
│ │ │ -
353 template<bool _IsMove, typename _CharT>
│ │ │ -
354 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
│ │ │ -
355 ostreambuf_iterator<_CharT> >::__type
│ │ │ -
356 __copy_move_a2(_CharT* __first, _CharT* __last,
│ │ │ -
357 ostreambuf_iterator<_CharT> __result)
│ │ │ -
358 {
│ │ │ -
359 const streamsize __num = __last - __first;
│ │ │ -
360 if (__num > 0)
│ │ │ -
361 __result._M_put(__first, __num);
│ │ │ -
362 return __result;
│ │ │ -
363 }
│ │ │ -
364
│ │ │ -
365 template<bool _IsMove, typename _CharT>
│ │ │ -
366 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
│ │ │ -
367 ostreambuf_iterator<_CharT> >::__type
│ │ │ -
368 __copy_move_a2(const _CharT* __first, const _CharT* __last,
│ │ │ -
369 ostreambuf_iterator<_CharT> __result)
│ │ │ -
370 {
│ │ │ -
371 const streamsize __num = __last - __first;
│ │ │ -
372 if (__num > 0)
│ │ │ -
373 __result._M_put(__first, __num);
│ │ │ -
374 return __result;
│ │ │ -
375 }
│ │ │ -
376
│ │ │ -
377 template<bool _IsMove, typename _CharT>
│ │ │ -
378 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
│ │ │ -
379 _CharT*>::__type
│ │ │ -
380 __copy_move_a2(istreambuf_iterator<_CharT> __first,
│ │ │ -
381 istreambuf_iterator<_CharT> __last, _CharT* __result)
│ │ │ -
382 {
│ │ │ -
383 typedef istreambuf_iterator<_CharT> __is_iterator_type;
│ │ │ -
384 typedef typename __is_iterator_type::traits_type traits_type;
│ │ │ -
385 typedef typename __is_iterator_type::streambuf_type streambuf_type;
│ │ │ -
386 typedef typename traits_type::int_type int_type;
│ │ │ -
387
│ │ │ -
388 if (__first._M_sbuf && !__last._M_sbuf)
│ │ │ -
389 {
│ │ │ -
390 streambuf_type* __sb = __first._M_sbuf;
│ │ │ -
391 int_type __c = __sb->sgetc();
│ │ │ -
392 while (!traits_type::eq_int_type(__c, traits_type::eof()))
│ │ │ -
393 {
│ │ │ -
394 const streamsize __n = __sb->egptr() - __sb->gptr();
│ │ │ -
395 if (__n > 1)
│ │ │ -
396 {
│ │ │ -
397 traits_type::copy(__result, __sb->gptr(), __n);
│ │ │ -
398 __sb->__safe_gbump(__n);
│ │ │ -
399 __result += __n;
│ │ │ -
400 __c = __sb->underflow();
│ │ │ -
401 }
│ │ │ -
402 else
│ │ │ -
403 {
│ │ │ -
404 *__result++ = traits_type::to_char_type(__c);
│ │ │ -
405 __c = __sb->snextc();
│ │ │ -
406 }
│ │ │ -
407 }
│ │ │ -
408 }
│ │ │ -
409 return __result;
│ │ │ -
410 }
│ │ │ -
411
│ │ │ -
412 template<typename _CharT, typename _Size>
│ │ │ -
413 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
│ │ │ -
414 _CharT*>::__type
│ │ │ -
415 __copy_n_a(istreambuf_iterator<_CharT> __it, _Size __n, _CharT* __result,
│ │ │ -
416 bool __strict __attribute__((__unused__)))
│ │ │ -
417 {
│ │ │ -
418 if (__n == 0)
│ │ │ -
419 return __result;
│ │ │ -
420
│ │ │ -
421 __glibcxx_requires_cond(__it._M_sbuf,
│ │ │ -
422 _M_message(__gnu_debug::__msg_inc_istreambuf)
│ │ │ -
423 ._M_iterator(__it));
│ │ │ -
424 _CharT* __beg = __result;
│ │ │ -
425 __result += __it._M_sbuf->sgetn(__beg, __n);
│ │ │ -
426 __glibcxx_requires_cond(!__strict || __result - __beg == __n,
│ │ │ -
427 _M_message(__gnu_debug::__msg_inc_istreambuf)
│ │ │ -
428 ._M_iterator(__it));
│ │ │ -
429 return __result;
│ │ │ -
430 }
│ │ │ -
431
│ │ │ -
432 template<typename _CharT>
│ │ │ -
433 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
│ │ │ -
434 istreambuf_iterator<_CharT> >::__type
│ │ │ -
435 find(istreambuf_iterator<_CharT> __first,
│ │ │ -
436 istreambuf_iterator<_CharT> __last, const _CharT& __val)
│ │ │ -
437 {
│ │ │ -
438 typedef istreambuf_iterator<_CharT> __is_iterator_type;
│ │ │ -
439 typedef typename __is_iterator_type::traits_type traits_type;
│ │ │ -
440 typedef typename __is_iterator_type::streambuf_type streambuf_type;
│ │ │ -
441 typedef typename traits_type::int_type int_type;
│ │ │ -
442 const int_type __eof = traits_type::eof();
│ │ │ -
443
│ │ │ -
444 if (__first._M_sbuf && !__last._M_sbuf)
│ │ │ -
445 {
│ │ │ -
446 const int_type __ival = traits_type::to_int_type(__val);
│ │ │ -
447 streambuf_type* __sb = __first._M_sbuf;
│ │ │ -
448 int_type __c = __sb->sgetc();
│ │ │ -
449 while (!traits_type::eq_int_type(__c, __eof)
│ │ │ -
450 && !traits_type::eq_int_type(__c, __ival))
│ │ │ -
451 {
│ │ │ -
452 streamsize __n = __sb->egptr() - __sb->gptr();
│ │ │ -
453 if (__n > 1)
│ │ │ -
454 {
│ │ │ -
455 const _CharT* __p = traits_type::find(__sb->gptr(),
│ │ │ -
456 __n, __val);
│ │ │ -
457 if (__p)
│ │ │ -
458 __n = __p - __sb->gptr();
│ │ │ -
459 __sb->__safe_gbump(__n);
│ │ │ -
460 __c = __sb->sgetc();
│ │ │ -
461 }
│ │ │ -
462 else
│ │ │ -
463 __c = __sb->snextc();
│ │ │ -
464 }
│ │ │ -
465
│ │ │ -
466 __first._M_c = __eof;
│ │ │ -
467 }
│ │ │ -
468
│ │ │ -
469 return __first;
│ │ │ -
470 }
│ │ │ -
471
│ │ │ -
472 template<typename _CharT, typename _Distance>
│ │ │ -
473 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
│ │ │ -
474 void>::__type
│ │ │ -
475 advance(istreambuf_iterator<_CharT>& __i, _Distance __n)
│ │ │ -
476 {
│ │ │ -
477 if (__n == 0)
│ │ │ -
478 return;
│ │ │ -
479
│ │ │ -
480 __glibcxx_assert(__n > 0);
│ │ │ -
481 __glibcxx_requires_cond(!__i._M_at_eof(),
│ │ │ -
482 _M_message(__gnu_debug::__msg_inc_istreambuf)
│ │ │ -
483 ._M_iterator(__i));
│ │ │ -
484
│ │ │ -
485 typedef istreambuf_iterator<_CharT> __is_iterator_type;
│ │ │ -
486 typedef typename __is_iterator_type::traits_type traits_type;
│ │ │ -
487 typedef typename __is_iterator_type::streambuf_type streambuf_type;
│ │ │ -
488 typedef typename traits_type::int_type int_type;
│ │ │ -
489 const int_type __eof = traits_type::eof();
│ │ │ -
490
│ │ │ -
491 streambuf_type* __sb = __i._M_sbuf;
│ │ │ -
492 while (__n > 0)
│ │ │ -
493 {
│ │ │ -
494 streamsize __size = __sb->egptr() - __sb->gptr();
│ │ │ -
495 if (__size > __n)
│ │ │ -
496 {
│ │ │ -
497 __sb->__safe_gbump(__n);
│ │ │ -
498 break;
│ │ │ -
499 }
│ │ │ -
500
│ │ │ -
501 __sb->__safe_gbump(__size);
│ │ │ -
502 __n -= __size;
│ │ │ -
503 if (traits_type::eq_int_type(__sb->underflow(), __eof))
│ │ │ -
504 {
│ │ │ -
505 __glibcxx_requires_cond(__n == 0,
│ │ │ -
506 _M_message(__gnu_debug::__msg_inc_istreambuf)
│ │ │ -
507 ._M_iterator(__i));
│ │ │ -
508 break;
│ │ │ -
509 }
│ │ │ -
510 }
│ │ │ -
511
│ │ │ -
512 __i._M_c = __eof;
│ │ │ -
513 }
│ │ │ -
514
│ │ │ -
515/// @} group iterators
│ │ │ -
516
│ │ │ -
517_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
518} // namespace
│ │ │ -
519
│ │ │ -
520#endif
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
ISO C++ entities toplevel namespace is std.
│ │ │ -
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
Definition postypes.h:68
│ │ │ -
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.
│ │ │ - │ │ │ - │ │ │ +
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,650 +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-2024 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#pragma GCC system_header │ │ │ │ +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#include <_s_t_r_e_a_m_b_u_f> │ │ │ │ -36#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> │ │ │ │ -37#include <_d_e_b_u_g_/_d_e_b_u_g_._h> │ │ │ │ -38 │ │ │ │ -39namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -40{ │ │ │ │ -41_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -42 │ │ │ │ -43 /** │ │ │ │ -44 * @addtogroup iterators │ │ │ │ -45 * @{ │ │ │ │ -46 */ │ │ │ │ -47 │ │ │ │ -48// Ignore warnings about std::iterator. │ │ │ │ -49#pragma GCC diagnostic push │ │ │ │ -50#pragma GCC diagnostic ignored "-Wdeprecated-declarations" │ │ │ │ -51 // 24.5.3 Template class istreambuf_iterator │ │ │ │ -52 /// Provides input iterator semantics for streambufs. │ │ │ │ -53 template │ │ │ │ -_5_4 class _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r │ │ │ │ -55 : public _i_t_e_r_a_t_o_r │ │ │ │ -57 { │ │ │ │ -58 public: │ │ │ │ -59 // Types: │ │ │ │ -60 ///@{ │ │ │ │ -61 /// Public typedefs │ │ │ │ -62#if __cplusplus < 201103L │ │ │ │ -63 typedef _CharT& _r_e_f_e_r_e_n_c_e; // Changed to _CharT by LWG 445 │ │ │ │ -64#elif __cplusplus > 201703L │ │ │ │ -65 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -66 // 3188. istreambuf_iterator::pointer should not be unspecified │ │ │ │ -_6_7 using _p_o_i_n_t_e_r = _v_o_i_d; │ │ │ │ -68#endif │ │ │ │ -69 │ │ │ │ -_7_0 typedef _CharT _c_h_a_r___t_y_p_e; │ │ │ │ -_7_1 typedef _Traits _t_r_a_i_t_s___t_y_p_e; │ │ │ │ -_7_2 typedef typename _Traits::int_type _i_n_t___t_y_p_e; │ │ │ │ -_7_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; │ │ │ │ -_7_4 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; │ │ │ │ -75 ///@} │ │ │ │ -76 │ │ │ │ -77 template │ │ │ │ -78 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, │ │ │ │ -79 _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 │ │ │ │ -80 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_>, │ │ │ │ -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_>); │ │ │ │ -82 │ │ │ │ -83 template │ │ │ │ -84 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, │ │ │ │ -85 ___C_h_a_r_T_2*>::__type │ │ │ │ -86 __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_>, │ │ │ │ -87 _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*); │ │ │ │ -88 │ │ │ │ -89 template │ │ │ │ -90 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, │ │ │ │ -91 ___C_h_a_r_T_2*>::__type │ │ │ │ -92 __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); │ │ │ │ -93 │ │ │ │ -94 template │ │ │ │ -95 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, │ │ │ │ -96 _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 │ │ │ │ -97 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_>, │ │ │ │ -98 const ___C_h_a_r_T_2&); │ │ │ │ -99 │ │ │ │ -100 template │ │ │ │ -101 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, │ │ │ │ -102 void>::__type │ │ │ │ -103 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); │ │ │ │ -104 │ │ │ │ -105 private: │ │ │ │ -106 // 24.5.3 istreambuf_iterator │ │ │ │ -107 // p 1 │ │ │ │ -108 // If the end of stream is reached (streambuf_type::sgetc() │ │ │ │ -109 // returns traits_type::eof()), the iterator becomes equal to │ │ │ │ -110 // the "end of stream" iterator value. │ │ │ │ -111 // NB: This implementation assumes the "end of stream" value │ │ │ │ -112 // is EOF, or -1. │ │ │ │ -113 mutable _s_t_r_e_a_m_b_u_f___t_y_p_e* _M_sbuf; │ │ │ │ -114 _i_n_t___t_y_p_e _M_c; │ │ │ │ -115 │ │ │ │ -116 public: │ │ │ │ -117 /// Construct end of input stream iterator. │ │ │ │ -_1_1_8 ___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 │ │ │ │ -119 : _M_sbuf(0), _M_c(_t_r_a_i_t_s___t_y_p_e::eof()) { } │ │ │ │ -120 │ │ │ │ -121#if __cplusplus > 201703L && __cpp_lib_concepts │ │ │ │ -122 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 │ │ │ │ -123 : _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r() { } │ │ │ │ -124#endif │ │ │ │ -125 │ │ │ │ -126#if __cplusplus >= 201103L │ │ │ │ -127 _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; │ │ │ │ -128 │ │ │ │ -129 ~istreambuf_iterator() = default; │ │ │ │ -130#endif │ │ │ │ -131 │ │ │ │ -132 /// Construct start of input stream iterator. │ │ │ │ -_1_3_3 _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 │ │ │ │ -134 : _M_sbuf(_____s.rdbuf()), _M_c(traits_type::eof()) { } │ │ │ │ -135 │ │ │ │ -136 /// Construct start of streambuf iterator. │ │ │ │ -_1_3_7 _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 │ │ │ │ -138 : _M_sbuf(_____s), _M_c(traits_type::eof()) { } │ │ │ │ -139 │ │ │ │ -140#if __cplusplus >= 201103L │ │ │ │ -141 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r& │ │ │ │ -142 operator=(const _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r&) noexcept = default; │ │ │ │ -143#endif │ │ │ │ -144 │ │ │ │ -145 /// Return the current character pointed to by iterator. This returns │ │ │ │ -146 /// streambuf.sgetc(). It cannot be assigned. NB: The result of │ │ │ │ -147 /// operator*() on an end of stream is undefined. │ │ │ │ -148 _GLIBCXX_NODISCARD │ │ │ │ -149 _c_h_a_r___t_y_p_e │ │ │ │ -_1_5_0 _o_p_e_r_a_t_o_r_*() const │ │ │ │ -151 { │ │ │ │ -152 _i_n_t___t_y_p_e __c = _M_get(); │ │ │ │ -153 │ │ │ │ -154#ifdef _GLIBCXX_DEBUG_PEDANTIC │ │ │ │ -155 // Dereferencing a past-the-end istreambuf_iterator is a │ │ │ │ -156 // libstdc++ extension │ │ │ │ -157 __glibcxx_requires_cond(!_S_is_eof(__c), │ │ │ │ -158 _M_message(__gnu_debug::__msg_deref_istreambuf) │ │ │ │ -159 ._M_iterator(*this)); │ │ │ │ -160#endif │ │ │ │ -161 return traits_type::to_char_type(__c); │ │ │ │ -162 } │ │ │ │ -163 │ │ │ │ -164 /// Advance the iterator. Calls streambuf.sbumpc(). │ │ │ │ -165 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r& │ │ │ │ -_1_6_6 _o_p_e_r_a_t_o_r_+_+() │ │ │ │ -167 { │ │ │ │ -168 __glibcxx_requires_cond(_M_sbuf && │ │ │ │ -169 (!_S_is_eof(_M_c) || !_S_is_eof(_M_sbuf->sgetc())), │ │ │ │ -170 _M_message(__gnu_debug::__msg_inc_istreambuf) │ │ │ │ -171 ._M_iterator(*this)); │ │ │ │ -172 │ │ │ │ -173 _M_sbuf->sbumpc(); │ │ │ │ -174 _M_c = traits_type::eof(); │ │ │ │ -175 return *this; │ │ │ │ -176 } │ │ │ │ -177 │ │ │ │ -178 /// Advance the iterator. Calls streambuf.sbumpc(). │ │ │ │ -179 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r │ │ │ │ -_1_8_0 _o_p_e_r_a_t_o_r_+_+(int) │ │ │ │ -181 { │ │ │ │ -182 __glibcxx_requires_cond(_M_sbuf && │ │ │ │ -183 (!_S_is_eof(_M_c) || !_S_is_eof(_M_sbuf->sgetc())), │ │ │ │ -184 _M_message(__gnu_debug::__msg_inc_istreambuf) │ │ │ │ -185 ._M_iterator(*this)); │ │ │ │ -186 │ │ │ │ -187 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r _____o_l_d = *this; │ │ │ │ -188 _____o_l_d._M_c = _M_sbuf->sbumpc(); │ │ │ │ -189 _M_c = traits_type::eof(); │ │ │ │ -190 return _____o_l_d; │ │ │ │ -191 } │ │ │ │ -192 │ │ │ │ -193 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -194 // 110 istreambuf_iterator::equal not const │ │ │ │ -195 // NB: there is also number 111 (NAD) relevant to this function. │ │ │ │ -196 /// Return true both iterators are end or both are not end. │ │ │ │ -197 _GLIBCXX_NODISCARD │ │ │ │ -198 bool │ │ │ │ -_1_9_9 _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 │ │ │ │ -200 { return _M_at_eof() == __b._M_at_eof(); } │ │ │ │ -201 │ │ │ │ -202 private: │ │ │ │ -203 _i_n_t___t_y_p_e │ │ │ │ -204 _M_get() const │ │ │ │ -205 { │ │ │ │ -206 _i_n_t___t_y_p_e _____r_e_t = _M_c; │ │ │ │ -207 if (_M_sbuf && _S_is_eof(_____r_e_t) && _S_is_eof(_____r_e_t = _M_sbuf->sgetc())) │ │ │ │ -208 _M_sbuf = 0; │ │ │ │ -209 return _____r_e_t; │ │ │ │ -210 } │ │ │ │ -211 │ │ │ │ -212 bool │ │ │ │ -213 _M_at_eof() const │ │ │ │ -214 { return _S_is_eof(_M_get()); } │ │ │ │ -215 │ │ │ │ -216 static bool │ │ │ │ -217 _S_is_eof(_i_n_t___t_y_p_e __c) │ │ │ │ -218 { │ │ │ │ -219 const _i_n_t___t_y_p_e __eof = traits_type::eof(); │ │ │ │ -220 return traits_type::eq_int_type(__c, __eof); │ │ │ │ -221 } │ │ │ │ -222 │ │ │ │ -223#if __cplusplus > 201703L && __cpp_lib_concepts │ │ │ │ -224 [[nodiscard]] │ │ │ │ -225 friend bool │ │ │ │ -226 operator==(const _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r& __i, default_sentinel_t) │ │ │ │ -227 { return __i._M_at_eof(); } │ │ │ │ -228#endif │ │ │ │ -229 }; │ │ │ │ -230 │ │ │ │ -231 template │ │ │ │ -232 _GLIBCXX_NODISCARD │ │ │ │ -233 inline bool │ │ │ │ -234 operator==(const istreambuf_iterator<_CharT, _Traits>& __a, │ │ │ │ -235 const istreambuf_iterator<_CharT, _Traits>& __b) │ │ │ │ -236 { return __a.equal(__b); } │ │ │ │ -237 │ │ │ │ -238#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ -239 template │ │ │ │ -240 _GLIBCXX_NODISCARD │ │ │ │ -241 inline bool │ │ │ │ -242 operator!=(const istreambuf_iterator<_CharT, _Traits>& __a, │ │ │ │ -243 const istreambuf_iterator<_CharT, _Traits>& __b) │ │ │ │ -244 { return !__a.equal(__b); } │ │ │ │ -245#endif │ │ │ │ -246 │ │ │ │ -247 /// Provides output iterator semantics for streambufs. │ │ │ │ -248 template │ │ │ │ -_2_4_9 class _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r │ │ │ │ -250 : public _i_t_e_r_a_t_o_r │ │ │ │ -251 { │ │ │ │ -252 public: │ │ │ │ -253 // Types: │ │ │ │ -254 ///@{ │ │ │ │ -255 /// Public typedefs │ │ │ │ -256#if __cplusplus > 201703L │ │ │ │ -_2_5_7 using _d_i_f_f_e_r_e_n_c_e___t_y_p_e = _p_t_r_d_i_f_f___t; │ │ │ │ -258#endif │ │ │ │ -_2_5_9 typedef _CharT _c_h_a_r___t_y_p_e; │ │ │ │ -_2_6_0 typedef _Traits _t_r_a_i_t_s___t_y_p_e; │ │ │ │ -_2_6_1 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_2 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; │ │ │ │ -263 ///@} │ │ │ │ -264 │ │ │ │ -265 template │ │ │ │ -266 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, │ │ │ │ -267 _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 │ │ │ │ -268 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_>, │ │ │ │ -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_>); │ │ │ │ -270 │ │ │ │ -271 private: │ │ │ │ -272 _s_t_r_e_a_m_b_u_f___t_y_p_e* _M_sbuf; │ │ │ │ -273 bool _M_failed; │ │ │ │ -274 │ │ │ │ -275 public: │ │ │ │ -276 │ │ │ │ -277#if __cplusplus > 201703L │ │ │ │ -278 constexpr │ │ │ │ -279 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r() noexcept │ │ │ │ -280 : _M_sbuf(nullptr), _M_failed(_t_r_u_e) { } │ │ │ │ -281#endif │ │ │ │ -282 │ │ │ │ -283 /// Construct output iterator from ostream. │ │ │ │ -_2_8_4 _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 │ │ │ │ -285 : _M_sbuf(_____s.rdbuf()), _M_failed(!_M_sbuf) { } │ │ │ │ -286 │ │ │ │ -287 /// Construct output iterator from streambuf. │ │ │ │ -_2_8_8 _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 │ │ │ │ -289 : _M_sbuf(_____s), _M_failed(!_M_sbuf) { } │ │ │ │ -290 │ │ │ │ -291 /// Write character to streambuf. Calls streambuf.sputc(). │ │ │ │ -292 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r& │ │ │ │ -_2_9_3 _o_p_e_r_a_t_o_r_=(_CharT __c) │ │ │ │ -294 { │ │ │ │ -295 if (!_M_failed && │ │ │ │ -296 _Traits::eq_int_type(_M_sbuf->sputc(__c), _Traits::eof())) │ │ │ │ -297 _M_failed = true; │ │ │ │ -298 return *this; │ │ │ │ -299 } │ │ │ │ -300 │ │ │ │ -301 /// Return *this. │ │ │ │ -302 _GLIBCXX_NODISCARD │ │ │ │ -303 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r& │ │ │ │ -_3_0_4 _o_p_e_r_a_t_o_r_*() │ │ │ │ -305 { return *this; } │ │ │ │ -306 │ │ │ │ -307 /// Return *this. │ │ │ │ -308 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r& │ │ │ │ -_3_0_9 _o_p_e_r_a_t_o_r_+_+(int) │ │ │ │ -310 { return *this; } │ │ │ │ -311 │ │ │ │ -312 /// Return *this. │ │ │ │ -313 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r& │ │ │ │ -_3_1_4 _o_p_e_r_a_t_o_r_+_+() │ │ │ │ -315 { return *this; } │ │ │ │ -316 │ │ │ │ -317 /// Return true if previous operator=() failed. │ │ │ │ -318 _GLIBCXX_NODISCARD │ │ │ │ -319 bool │ │ │ │ -_3_2_0 _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 │ │ │ │ -321 { return _M_failed; } │ │ │ │ -322 │ │ │ │ -323 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r& │ │ │ │ -324 _M_put(const _CharT* _____w_s, _s_t_r_e_a_m_s_i_z_e _____l_e_n) │ │ │ │ -325 { │ │ │ │ -326 if (_____b_u_i_l_t_i_n___e_x_p_e_c_t(!_M_failed, true) │ │ │ │ -327 && _____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, │ │ │ │ -328 false)) │ │ │ │ -329 _M_failed = true; │ │ │ │ -330 return *this; │ │ │ │ -331 } │ │ │ │ -332 }; │ │ │ │ -333#pragma GCC diagnostic pop │ │ │ │ -334 │ │ │ │ -335 // Overloads for streambuf iterators. │ │ │ │ -336 template │ │ │ │ -337 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, │ │ │ │ -338 ostreambuf_iterator<_CharT> >::__type │ │ │ │ -339 copy(istreambuf_iterator<_CharT> __first, │ │ │ │ -340 istreambuf_iterator<_CharT> __last, │ │ │ │ -341 ostreambuf_iterator<_CharT> __result) │ │ │ │ -342 { │ │ │ │ -343 if (__first._M_sbuf && !__last._M_sbuf && !__result._M_failed) │ │ │ │ -344 { │ │ │ │ -345 bool __ineof; │ │ │ │ -346 __copy_streambufs_eof(__first._M_sbuf, __result._M_sbuf, __ineof); │ │ │ │ -347 if (!__ineof) │ │ │ │ -348 __result._M_failed = true; │ │ │ │ -349 } │ │ │ │ -350 return __result; │ │ │ │ -351 } │ │ │ │ -352 │ │ │ │ -353 template │ │ │ │ -354 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, │ │ │ │ -355 ostreambuf_iterator<_CharT> >::__type │ │ │ │ -356 __copy_move_a2(_CharT* __first, _CharT* __last, │ │ │ │ -357 ostreambuf_iterator<_CharT> __result) │ │ │ │ -358 { │ │ │ │ -359 const _s_t_r_e_a_m_s_i_z_e __num = __last - __first; │ │ │ │ -360 if (__num > 0) │ │ │ │ -361 __result._M_put(__first, __num); │ │ │ │ -362 return __result; │ │ │ │ -363 } │ │ │ │ -364 │ │ │ │ -365 template │ │ │ │ -366 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, │ │ │ │ -367 ostreambuf_iterator<_CharT> >::__type │ │ │ │ -368 __copy_move_a2(const _CharT* __first, const _CharT* __last, │ │ │ │ -369 ostreambuf_iterator<_CharT> __result) │ │ │ │ -370 { │ │ │ │ -371 const _s_t_r_e_a_m_s_i_z_e __num = __last - __first; │ │ │ │ -372 if (__num > 0) │ │ │ │ -373 __result._M_put(__first, __num); │ │ │ │ -374 return __result; │ │ │ │ -375 } │ │ │ │ -376 │ │ │ │ -377 template │ │ │ │ -378 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, │ │ │ │ -379 _CharT*>::__type │ │ │ │ -380 __copy_move_a2(istreambuf_iterator<_CharT> __first, │ │ │ │ -381 istreambuf_iterator<_CharT> __last, _CharT* __result) │ │ │ │ -382 { │ │ │ │ -383 typedef istreambuf_iterator<_CharT> __is_iterator_type; │ │ │ │ -384 typedef typename __is_iterator_type::traits_type traits_type; │ │ │ │ -385 typedef typename __is_iterator_type::streambuf_type streambuf_type; │ │ │ │ -386 typedef typename traits_type::int_type int_type; │ │ │ │ -387 │ │ │ │ -388 if (__first._M_sbuf && !__last._M_sbuf) │ │ │ │ -389 { │ │ │ │ -390 streambuf_type* __sb = __first._M_sbuf; │ │ │ │ -391 int_type __c = __sb->sgetc(); │ │ │ │ -392 while (!traits_type::eq_int_type(__c, traits_type::eof())) │ │ │ │ -393 { │ │ │ │ -394 const _s_t_r_e_a_m_s_i_z_e __n = __sb->egptr() - __sb->gptr(); │ │ │ │ -395 if (__n > 1) │ │ │ │ -396 { │ │ │ │ -397 traits_type::copy(__result, __sb->gptr(), __n); │ │ │ │ -398 __sb->__safe_gbump(__n); │ │ │ │ -399 __result += __n; │ │ │ │ -400 __c = __sb->underflow(); │ │ │ │ -401 } │ │ │ │ -402 else │ │ │ │ -403 { │ │ │ │ -404 *__result++ = traits_type::to_char_type(__c); │ │ │ │ -405 __c = __sb->snextc(); │ │ │ │ -406 } │ │ │ │ -407 } │ │ │ │ -408 } │ │ │ │ -409 return __result; │ │ │ │ -410 } │ │ │ │ -411 │ │ │ │ -412 template │ │ │ │ -413 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, │ │ │ │ -414 _CharT*>::__type │ │ │ │ -415 __copy_n_a(istreambuf_iterator<_CharT> __it, _Size __n, _CharT* __result, │ │ │ │ -416 bool __strict __attribute__((__unused__))) │ │ │ │ -417 { │ │ │ │ -418 if (__n == 0) │ │ │ │ -419 return __result; │ │ │ │ -420 │ │ │ │ -421 __glibcxx_requires_cond(__it._M_sbuf, │ │ │ │ -422 _M_message(__gnu_debug::__msg_inc_istreambuf) │ │ │ │ -423 ._M_iterator(__it)); │ │ │ │ -424 _CharT* __beg = __result; │ │ │ │ -425 __result += __it._M_sbuf->sgetn(__beg, __n); │ │ │ │ -426 __glibcxx_requires_cond(!__strict || __result - __beg == __n, │ │ │ │ -427 _M_message(__gnu_debug::__msg_inc_istreambuf) │ │ │ │ -428 ._M_iterator(__it)); │ │ │ │ -429 return __result; │ │ │ │ -430 } │ │ │ │ -431 │ │ │ │ -432 template │ │ │ │ -433 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, │ │ │ │ -434 istreambuf_iterator<_CharT> >::__type │ │ │ │ -435 find(istreambuf_iterator<_CharT> __first, │ │ │ │ -436 istreambuf_iterator<_CharT> __last, const _CharT& __val) │ │ │ │ -437 { │ │ │ │ -438 typedef istreambuf_iterator<_CharT> __is_iterator_type; │ │ │ │ -439 typedef typename __is_iterator_type::traits_type traits_type; │ │ │ │ -440 typedef typename __is_iterator_type::streambuf_type streambuf_type; │ │ │ │ -441 typedef typename traits_type::int_type int_type; │ │ │ │ -442 const int_type __eof = traits_type::eof(); │ │ │ │ -443 │ │ │ │ -444 if (__first._M_sbuf && !__last._M_sbuf) │ │ │ │ -445 { │ │ │ │ -446 const int_type __ival = traits_type::to_int_type(__val); │ │ │ │ -447 streambuf_type* __sb = __first._M_sbuf; │ │ │ │ -448 int_type __c = __sb->sgetc(); │ │ │ │ -449 while (!traits_type::eq_int_type(__c, __eof) │ │ │ │ -450 && !traits_type::eq_int_type(__c, __ival)) │ │ │ │ -451 { │ │ │ │ -452 _s_t_r_e_a_m_s_i_z_e __n = __sb->egptr() - __sb->gptr(); │ │ │ │ -453 if (__n > 1) │ │ │ │ -454 { │ │ │ │ -455 const _CharT* __p = traits_type::find(__sb->gptr(), │ │ │ │ -456 __n, __val); │ │ │ │ -457 if (__p) │ │ │ │ -458 __n = __p - __sb->gptr(); │ │ │ │ -459 __sb->__safe_gbump(__n); │ │ │ │ -460 __c = __sb->sgetc(); │ │ │ │ -461 } │ │ │ │ -462 else │ │ │ │ -463 __c = __sb->snextc(); │ │ │ │ -464 } │ │ │ │ -465 │ │ │ │ -466 __first._M_c = __eof; │ │ │ │ -467 } │ │ │ │ -468 │ │ │ │ -469 return __first; │ │ │ │ -470 } │ │ │ │ -471 │ │ │ │ -472 template │ │ │ │ -473 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, │ │ │ │ -474 void>::__type │ │ │ │ -475 _a_d_v_a_n_c_e(istreambuf_iterator<_CharT>& __i, _Distance __n) │ │ │ │ -476 { │ │ │ │ -477 if (__n == 0) │ │ │ │ -478 return; │ │ │ │ -479 │ │ │ │ -480 __glibcxx_assert(__n > 0); │ │ │ │ -481 __glibcxx_requires_cond(!__i._M_at_eof(), │ │ │ │ -482 _M_message(__gnu_debug::__msg_inc_istreambuf) │ │ │ │ -483 ._M_iterator(__i)); │ │ │ │ -484 │ │ │ │ -485 typedef istreambuf_iterator<_CharT> __is_iterator_type; │ │ │ │ -486 typedef typename __is_iterator_type::traits_type traits_type; │ │ │ │ -487 typedef typename __is_iterator_type::streambuf_type streambuf_type; │ │ │ │ -488 typedef typename traits_type::int_type int_type; │ │ │ │ -489 const int_type __eof = traits_type::eof(); │ │ │ │ -490 │ │ │ │ -491 streambuf_type* __sb = __i._M_sbuf; │ │ │ │ -492 while (__n > 0) │ │ │ │ -493 { │ │ │ │ -494 _s_t_r_e_a_m_s_i_z_e __size = __sb->egptr() - __sb->gptr(); │ │ │ │ -495 if (__size > __n) │ │ │ │ -496 { │ │ │ │ -497 __sb->__safe_gbump(__n); │ │ │ │ -498 break; │ │ │ │ -499 } │ │ │ │ -500 │ │ │ │ -501 __sb->__safe_gbump(__size); │ │ │ │ -502 __n -= __size; │ │ │ │ -503 if (traits_type::eq_int_type(__sb->underflow(), __eof)) │ │ │ │ -504 { │ │ │ │ -505 __glibcxx_requires_cond(__n == 0, │ │ │ │ -506 _M_message(__gnu_debug::__msg_inc_istreambuf) │ │ │ │ -507 ._M_iterator(__i)); │ │ │ │ -508 break; │ │ │ │ -509 } │ │ │ │ -510 } │ │ │ │ -511 │ │ │ │ -512 __i._M_c = __eof; │ │ │ │ -513 } │ │ │ │ -514 │ │ │ │ -515/// @} group iterators │ │ │ │ -516 │ │ │ │ -517_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -518} // namespace │ │ │ │ -519 │ │ │ │ -520#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_:_6_8 │ │ │ │ -_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_0 │ │ │ │ -_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_7 │ │ │ │ -_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_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 │ │ │ │ -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_1_8 │ │ │ │ -_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_4 │ │ │ │ -_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_0 │ │ │ │ -_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_:_1_9_9 │ │ │ │ -_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_6 │ │ │ │ -_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_1 │ │ │ │ -_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_3 │ │ │ │ -_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_0 │ │ │ │ -_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_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_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_7 │ │ │ │ -_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_2 │ │ │ │ -_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_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++(int) │ │ │ │ -Return *this. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_3_0_9 │ │ │ │ -_s_t_d_:_:_o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_+_+ │ │ │ │ -ostreambuf_iterator & operator++() │ │ │ │ -Return *this. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_3_1_4 │ │ │ │ -_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_0 │ │ │ │ -_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_0 │ │ │ │ -_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_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*() │ │ │ │ -Return *this. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_3_0_4 │ │ │ │ -_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_2 │ │ │ │ -_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_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(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_4 │ │ │ │ -_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_5_9 │ │ │ │ -_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_8_8 │ │ │ │ -_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_:_5_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_2_8 │ │ │ │ -_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_3_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 │ │ │ │ +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-14-base/libstdc++/user/a00395.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('a00395.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-14-base/libstdc++/user/a00395_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-2024 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2008-2024 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,308 +72,60 @@ │ │ │
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#pragma GCC system_header
│ │ │ -
34
│ │ │ -
35#include <iosfwd>
│ │ │ -
36#include <bits/move.h>
│ │ │ - │ │ │ -
38#include <debug/debug.h>
│ │ │ -
39
│ │ │ -
40namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
41{
│ │ │ -
42_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
43
│ │ │ -
44 /**
│ │ │ -
45 * @addtogroup iterators
│ │ │ -
46 * @{
│ │ │ -
47 */
│ │ │ -
48
│ │ │ -
49// Ignore warnings about std::iterator.
│ │ │ -
50#pragma GCC diagnostic push
│ │ │ -
51#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
│ │ │ -
52
│ │ │ -
53 /// Provides input iterator semantics for streams.
│ │ │ -
54 template<typename _Tp, typename _CharT = char,
│ │ │ -
55 typename _Traits = char_traits<_CharT>, typename _Dist = ptrdiff_t>
│ │ │ -
│ │ │ - │ │ │ -
57 : public iterator<input_iterator_tag, _Tp, _Dist, const _Tp*, const _Tp&>
│ │ │ -
58 {
│ │ │ -
59 public:
│ │ │ -
60 typedef _CharT char_type;
│ │ │ -
61 typedef _Traits traits_type;
│ │ │ - │ │ │ -
63
│ │ │ -
64 private:
│ │ │ -
65 istream_type* _M_stream;
│ │ │ -
66 _Tp _M_value;
│ │ │ -
67 // This bool becomes false at end-of-stream. It should be sufficient to
│ │ │ -
68 // check _M_stream != nullptr instead, but historically we did not set
│ │ │ -
69 // _M_stream to null when reaching the end, so we need to keep this flag.
│ │ │ -
70 bool _M_ok;
│ │ │ -
71
│ │ │ -
72 public:
│ │ │ -
73 /// Construct end of input stream iterator.
│ │ │ -
│ │ │ - │ │ │ - │ │ │ -
76 : _M_stream(0), _M_value(), _M_ok(false) {}
│ │ │ -
│ │ │ -
77
│ │ │ -
78 /// Construct start of input stream iterator.
│ │ │ -
│ │ │ - │ │ │ -
80 : _M_stream(std::__addressof(__s)), _M_ok(true)
│ │ │ -
81 { _M_read(); }
│ │ │ -
│ │ │ -
82
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
86 : _M_stream(__obj._M_stream), _M_value(__obj._M_value),
│ │ │ -
87 _M_ok(__obj._M_ok)
│ │ │ -
88 { }
│ │ │ -
89
│ │ │ -
90#if __cplusplus > 201703L && __cpp_lib_concepts
│ │ │ -
91 constexpr
│ │ │ -
92 istream_iterator(default_sentinel_t)
│ │ │ -
93 noexcept(is_nothrow_default_constructible_v<_Tp>)
│ │ │ -
94 : istream_iterator() { }
│ │ │ -
95#endif
│ │ │ -
96
│ │ │ -
97#if __cplusplus >= 201103L
│ │ │ -
98 istream_iterator& operator=(const istream_iterator&) = default;
│ │ │ -
99 ~istream_iterator() = default;
│ │ │ -
100#endif
│ │ │ -
101
│ │ │ -
102 _GLIBCXX_NODISCARD
│ │ │ -
103 const _Tp&
│ │ │ -
104 operator*() const _GLIBCXX_NOEXCEPT
│ │ │ -
105 {
│ │ │ -
106 __glibcxx_requires_cond(_M_ok,
│ │ │ -
107 _M_message(__gnu_debug::__msg_deref_istream)
│ │ │ -
108 ._M_iterator(*this));
│ │ │ -
109 return _M_value;
│ │ │ -
110 }
│ │ │ -
111
│ │ │ -
112 _GLIBCXX_NODISCARD
│ │ │ -
113 const _Tp*
│ │ │ -
114 operator->() const _GLIBCXX_NOEXCEPT
│ │ │ -
115 { return std::__addressof((operator*())); }
│ │ │ -
116
│ │ │ - │ │ │ -
118 operator++()
│ │ │ -
119 {
│ │ │ -
120 __glibcxx_requires_cond(_M_ok,
│ │ │ -
121 _M_message(__gnu_debug::__msg_inc_istream)
│ │ │ -
122 ._M_iterator(*this));
│ │ │ -
123 _M_read();
│ │ │ -
124 return *this;
│ │ │ -
125 }
│ │ │ -
126
│ │ │ - │ │ │ -
128 operator++(int)
│ │ │ -
129 {
│ │ │ -
130 __glibcxx_requires_cond(_M_ok,
│ │ │ -
131 _M_message(__gnu_debug::__msg_inc_istream)
│ │ │ -
132 ._M_iterator(*this));
│ │ │ -
133 istream_iterator __tmp = *this;
│ │ │ -
134 _M_read();
│ │ │ -
135 return __tmp;
│ │ │ -
136 }
│ │ │ -
137
│ │ │ -
138 private:
│ │ │ -
139 bool
│ │ │ -
140 _M_equal(const istream_iterator& __x) const _GLIBCXX_NOEXCEPT
│ │ │ -
141 {
│ │ │ -
142 // Ideally this would just return _M_stream == __x._M_stream,
│ │ │ -
143 // but code compiled with old versions never sets _M_stream to null.
│ │ │ -
144 return (_M_ok == __x._M_ok) && (!_M_ok || _M_stream == __x._M_stream);
│ │ │ -
145 }
│ │ │ -
146
│ │ │ -
147 void
│ │ │ -
148 _M_read()
│ │ │ -
149 {
│ │ │ -
150 if (_M_stream && !(*_M_stream >> _M_value))
│ │ │ -
151 {
│ │ │ -
152 _M_stream = 0;
│ │ │ -
153 _M_ok = false;
│ │ │ -
154 }
│ │ │ -
155 }
│ │ │ -
156
│ │ │ -
157 /// Return true if the iterators refer to the same stream,
│ │ │ -
158 /// or are both at end-of-stream.
│ │ │ -
159 _GLIBCXX_NODISCARD
│ │ │ -
160 friend bool
│ │ │ -
│ │ │ - │ │ │ - │ │ │ -
163 { return __x._M_equal(__y); }
│ │ │ -
│ │ │ -
164
│ │ │ -
165#if __cpp_impl_three_way_comparison < 201907L
│ │ │ -
166 /// Return true if the iterators refer to different streams,
│ │ │ -
167 /// or if one is at end-of-stream and the other is not.
│ │ │ -
168 _GLIBCXX_NODISCARD
│ │ │ -
169 friend bool
│ │ │ -
170 operator!=(const istream_iterator& __x, const istream_iterator& __y)
│ │ │ - │ │ │ -
172 { return !__x._M_equal(__y); }
│ │ │ -
173#endif
│ │ │ -
174
│ │ │ -
175#if __cplusplus > 201703L && __cpp_lib_concepts
│ │ │ -
176 [[nodiscard]]
│ │ │ -
177 friend bool
│ │ │ -
178 operator==(const istream_iterator& __i, default_sentinel_t) noexcept
│ │ │ -
179 { return !__i._M_stream; }
│ │ │ -
180#endif
│ │ │ -
181 };
│ │ │ -
│ │ │ -
182
│ │ │ -
183 /**
│ │ │ -
184 * @brief Provides output iterator semantics for streams.
│ │ │ -
185 *
│ │ │ -
186 * This class provides an iterator to write to an ostream. The type Tp is
│ │ │ -
187 * the only type written by this iterator and there must be an
│ │ │ -
188 * operator<<(Tp) defined.
│ │ │ -
189 *
│ │ │ -
190 * @tparam _Tp The type to write to the ostream.
│ │ │ -
191 * @tparam _CharT The ostream char_type.
│ │ │ -
192 * @tparam _Traits The ostream char_traits.
│ │ │ -
193 */
│ │ │ -
194 template<typename _Tp, typename _CharT = char,
│ │ │ -
195 typename _Traits = char_traits<_CharT> >
│ │ │ -
│ │ │ - │ │ │ -
197 : public iterator<output_iterator_tag, void, void, void, void>
│ │ │ -
198 {
│ │ │ -
199 public:
│ │ │ -
200 ///@{
│ │ │ -
201 /// Public typedef
│ │ │ -
202#if __cplusplus > 201703L
│ │ │ - │ │ │ -
204#endif
│ │ │ -
205 typedef _CharT char_type;
│ │ │ -
206 typedef _Traits traits_type;
│ │ │ - │ │ │ -
208 ///@}
│ │ │ -
209
│ │ │ -
210 private:
│ │ │ -
211 ostream_type* _M_stream;
│ │ │ -
212 const _CharT* _M_string;
│ │ │ -
213
│ │ │ -
214 public:
│ │ │ -
215 /// Construct from an ostream.
│ │ │ -
│ │ │ - │ │ │ -
217 : _M_stream(std::__addressof(__s)), _M_string(0) {}
│ │ │ -
│ │ │ -
218
│ │ │ -
219 /**
│ │ │ -
220 * Construct from an ostream.
│ │ │ -
221 *
│ │ │ -
222 * The delimiter string @a c is written to the stream after every Tp
│ │ │ -
223 * written to the stream. The delimiter is not copied, and thus must
│ │ │ -
224 * not be destroyed while this iterator is in use.
│ │ │ -
225 *
│ │ │ -
226 * @param __s Underlying ostream to write to.
│ │ │ -
227 * @param __c CharT delimiter string to insert.
│ │ │ -
228 */
│ │ │ -
│ │ │ - │ │ │ -
230 : _M_stream(std::__addressof(__s)), _M_string(__c) { }
│ │ │ -
│ │ │ -
231
│ │ │ -
232 /// Copy constructor.
│ │ │ -
│ │ │ - │ │ │ -
234 : _M_stream(__obj._M_stream), _M_string(__obj._M_string) { }
│ │ │ -
│ │ │ -
235
│ │ │ -
236#if __cplusplus >= 201103L
│ │ │ -
237 ostream_iterator& operator=(const ostream_iterator&) = default;
│ │ │ -
238#endif
│ │ │ -
239
│ │ │ -
240 /// Writes @a value to underlying ostream using operator<<. If
│ │ │ -
241 /// constructed with delimiter string, writes delimiter to ostream.
│ │ │ - │ │ │ -
│ │ │ -
243 operator=(const _Tp& __value)
│ │ │ -
244 {
│ │ │ -
245 __glibcxx_requires_cond(_M_stream != 0,
│ │ │ -
246 _M_message(__gnu_debug::__msg_output_ostream)
│ │ │ -
247 ._M_iterator(*this));
│ │ │ -
248 *_M_stream << __value;
│ │ │ -
249 if (_M_string)
│ │ │ -
250 *_M_stream << _M_string;
│ │ │ -
251 return *this;
│ │ │ -
252 }
│ │ │ -
│ │ │ -
253
│ │ │ -
254 _GLIBCXX_NODISCARD
│ │ │ - │ │ │ -
256 operator*() _GLIBCXX_NOEXCEPT
│ │ │ -
257 { return *this; }
│ │ │ -
258
│ │ │ -
259 ostream_iterator&
│ │ │ -
260 operator++() _GLIBCXX_NOEXCEPT
│ │ │ -
261 { return *this; }
│ │ │ -
262
│ │ │ - │ │ │ -
264 operator++(int) _GLIBCXX_NOEXCEPT
│ │ │ -
265 { return *this; }
│ │ │ -
266 };
│ │ │ -
│ │ │ -
267#pragma GCC diagnostic pop
│ │ │ -
268
│ │ │ -
269 /// @} group iterators
│ │ │ -
270
│ │ │ -
271_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
272} // namespace
│ │ │ -
273
│ │ │ -
274#endif
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:51
│ │ │ -
ISO C++ entities toplevel namespace is std.
│ │ │ -
is_nothrow_default_constructible
Definition type_traits:1194
│ │ │ -
is_nothrow_copy_constructible
Definition type_traits:1203
│ │ │ -
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.
│ │ │ - │ │ │ +
34
│ │ │ +
35/**
│ │ │ +
36 * @addtogroup atomics
│ │ │ +
37 * @{
│ │ │ +
38 */
│ │ │ +
39
│ │ │ +
40/**
│ │ │ +
41 * Lock-free property.
│ │ │ +
42 *
│ │ │ +
43 * 0 indicates that the types are never lock-free.
│ │ │ +
44 * 1 indicates that the types are sometimes lock-free.
│ │ │ +
45 * 2 indicates that the types are always lock-free.
│ │ │ +
46 */
│ │ │ +
47
│ │ │ +
48#if __cplusplus >= 201103L
│ │ │ +
49#define ATOMIC_BOOL_LOCK_FREE __GCC_ATOMIC_BOOL_LOCK_FREE
│ │ │ +
50#define ATOMIC_CHAR_LOCK_FREE __GCC_ATOMIC_CHAR_LOCK_FREE
│ │ │ +
51#define ATOMIC_WCHAR_T_LOCK_FREE __GCC_ATOMIC_WCHAR_T_LOCK_FREE
│ │ │ +
52#ifdef _GLIBCXX_USE_CHAR8_T
│ │ │ +
53#define ATOMIC_CHAR8_T_LOCK_FREE __GCC_ATOMIC_CHAR8_T_LOCK_FREE
│ │ │ +
54#endif
│ │ │ +
55#define ATOMIC_CHAR16_T_LOCK_FREE __GCC_ATOMIC_CHAR16_T_LOCK_FREE
│ │ │ +
56#define ATOMIC_CHAR32_T_LOCK_FREE __GCC_ATOMIC_CHAR32_T_LOCK_FREE
│ │ │ +
57#define ATOMIC_SHORT_LOCK_FREE __GCC_ATOMIC_SHORT_LOCK_FREE
│ │ │ +
58#define ATOMIC_INT_LOCK_FREE __GCC_ATOMIC_INT_LOCK_FREE
│ │ │ +
59#define ATOMIC_LONG_LOCK_FREE __GCC_ATOMIC_LONG_LOCK_FREE
│ │ │ +
60#define ATOMIC_LLONG_LOCK_FREE __GCC_ATOMIC_LLONG_LOCK_FREE
│ │ │ +
61#define ATOMIC_POINTER_LOCK_FREE __GCC_ATOMIC_POINTER_LOCK_FREE
│ │ │ +
62#endif
│ │ │ +
63
│ │ │ +
64/// @} group atomics
│ │ │ +
65
│ │ │ +
66#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-2024 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2008-2024 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,329 +21,52 @@ │ │ │ │ 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#pragma GCC system_header │ │ │ │ 34 │ │ │ │ -35#include <_i_o_s_f_w_d> │ │ │ │ -36#include <_b_i_t_s_/_m_o_v_e_._h> │ │ │ │ -37#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> │ │ │ │ -38#include <_d_e_b_u_g_/_d_e_b_u_g_._h> │ │ │ │ +35/** │ │ │ │ +36 * @addtogroup atomics │ │ │ │ +37 * @{ │ │ │ │ +38 */ │ │ │ │ 39 │ │ │ │ -40namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -41{ │ │ │ │ -42_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -43 │ │ │ │ -44 /** │ │ │ │ -45 * @addtogroup iterators │ │ │ │ -46 * @{ │ │ │ │ -47 */ │ │ │ │ -48 │ │ │ │ -49// Ignore warnings about std::iterator. │ │ │ │ -50#pragma GCC diagnostic push │ │ │ │ -51#pragma GCC diagnostic ignored "-Wdeprecated-declarations" │ │ │ │ -52 │ │ │ │ -53 /// Provides input iterator semantics for streams. │ │ │ │ -54 template, typename _Dist = ptrdiff_t> │ │ │ │ -_5_6 class _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ -57 : public _i_t_e_r_a_t_o_r │ │ │ │ -58 { │ │ │ │ -59 public: │ │ │ │ -60 typedef _CharT char_type; │ │ │ │ -61 typedef _Traits traits_type; │ │ │ │ -62 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; │ │ │ │ +40/** │ │ │ │ +41 * Lock-free property. │ │ │ │ +42 * │ │ │ │ +43 * 0 indicates that the types are never lock-free. │ │ │ │ +44 * 1 indicates that the types are sometimes lock-free. │ │ │ │ +45 * 2 indicates that the types are always lock-free. │ │ │ │ +46 */ │ │ │ │ +47 │ │ │ │ +48#if __cplusplus >= 201103L │ │ │ │ +_4_9#define ATOMIC_BOOL_LOCK_FREE __GCC_ATOMIC_BOOL_LOCK_FREE │ │ │ │ +50#define ATOMIC_CHAR_LOCK_FREE __GCC_ATOMIC_CHAR_LOCK_FREE │ │ │ │ +51#define ATOMIC_WCHAR_T_LOCK_FREE __GCC_ATOMIC_WCHAR_T_LOCK_FREE │ │ │ │ +52#ifdef _GLIBCXX_USE_CHAR8_T │ │ │ │ +53#define ATOMIC_CHAR8_T_LOCK_FREE __GCC_ATOMIC_CHAR8_T_LOCK_FREE │ │ │ │ +54#endif │ │ │ │ +55#define ATOMIC_CHAR16_T_LOCK_FREE __GCC_ATOMIC_CHAR16_T_LOCK_FREE │ │ │ │ +56#define ATOMIC_CHAR32_T_LOCK_FREE __GCC_ATOMIC_CHAR32_T_LOCK_FREE │ │ │ │ +57#define ATOMIC_SHORT_LOCK_FREE __GCC_ATOMIC_SHORT_LOCK_FREE │ │ │ │ +58#define ATOMIC_INT_LOCK_FREE __GCC_ATOMIC_INT_LOCK_FREE │ │ │ │ +59#define ATOMIC_LONG_LOCK_FREE __GCC_ATOMIC_LONG_LOCK_FREE │ │ │ │ +60#define ATOMIC_LLONG_LOCK_FREE __GCC_ATOMIC_LLONG_LOCK_FREE │ │ │ │ +61#define ATOMIC_POINTER_LOCK_FREE __GCC_ATOMIC_POINTER_LOCK_FREE │ │ │ │ +62#endif │ │ │ │ 63 │ │ │ │ -64 private: │ │ │ │ -65 _i_s_t_r_e_a_m___t_y_p_e* _M_stream; │ │ │ │ -66 _Tp _M_value; │ │ │ │ -67 // This bool becomes false at end-of-stream. It should be sufficient to │ │ │ │ -68 // check _M_stream != nullptr instead, but historically we did not set │ │ │ │ -69 // _M_stream to null when reaching the end, so we need to keep this flag. │ │ │ │ -70 bool _M_ok; │ │ │ │ -71 │ │ │ │ -72 public: │ │ │ │ -73 /// Construct end of input stream iterator. │ │ │ │ -_7_4 ___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() │ │ │ │ -75 ___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) │ │ │ │ -76 : _M_stream(0), _M_value(), _M_ok(_f_a_l_s_e) {} │ │ │ │ -77 │ │ │ │ -78 /// Construct start of input stream iterator. │ │ │ │ -_7_9 _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) │ │ │ │ -80 : _M_stream(_s_t_d::_____a_d_d_r_e_s_s_o_f(_____s)), _M_ok(_t_r_u_e) │ │ │ │ -81 { _M_read(); } │ │ │ │ -82 │ │ │ │ -83 ___G_L_I_B_C_X_X___C_O_N_S_T_E_X_P_R │ │ │ │ -84 _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) │ │ │ │ -85 ___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) │ │ │ │ -86 : _M_stream(_____o_b_j._M_stream), _M_value(_____o_b_j._M_value), │ │ │ │ -87 _M_ok(_____o_b_j._M_ok) │ │ │ │ -88 { } │ │ │ │ -89 │ │ │ │ -90#if __cplusplus > 201703L && __cpp_lib_concepts │ │ │ │ -91 constexpr │ │ │ │ -92 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r(default_sentinel_t) │ │ │ │ -93 noexcept(is_nothrow_default_constructible_v<_Tp>) │ │ │ │ -94 : _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r() { } │ │ │ │ -95#endif │ │ │ │ -96 │ │ │ │ -97#if __cplusplus >= 201103L │ │ │ │ -98 _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; │ │ │ │ -99 ~istream_iterator() = default; │ │ │ │ -100#endif │ │ │ │ -101 │ │ │ │ -102 _GLIBCXX_NODISCARD │ │ │ │ -103 const _Tp& │ │ │ │ -104 operator*() const _GLIBCXX_NOEXCEPT │ │ │ │ -105 { │ │ │ │ -106 __glibcxx_requires_cond(_M_ok, │ │ │ │ -107 _M_message(__gnu_debug::__msg_deref_istream) │ │ │ │ -108 ._M_iterator(*this)); │ │ │ │ -109 return _M_value; │ │ │ │ -110 } │ │ │ │ -111 │ │ │ │ -112 _GLIBCXX_NODISCARD │ │ │ │ -113 const _Tp* │ │ │ │ -114 operator->() const _GLIBCXX_NOEXCEPT │ │ │ │ -115 { return _s_t_d_:_:_____a_d_d_r_e_s_s_o_f((operator*())); } │ │ │ │ -116 │ │ │ │ -117 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& │ │ │ │ -118 operator++() │ │ │ │ -119 { │ │ │ │ -120 __glibcxx_requires_cond(_M_ok, │ │ │ │ -121 _M_message(__gnu_debug::__msg_inc_istream) │ │ │ │ -122 ._M_iterator(*this)); │ │ │ │ -123 _M_read(); │ │ │ │ -124 return *this; │ │ │ │ -125 } │ │ │ │ -126 │ │ │ │ -127 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ -128 operator++(int) │ │ │ │ -129 { │ │ │ │ -130 __glibcxx_requires_cond(_M_ok, │ │ │ │ -131 _M_message(__gnu_debug::__msg_inc_istream) │ │ │ │ -132 ._M_iterator(*this)); │ │ │ │ -133 _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r __tmp = *this; │ │ │ │ -134 _M_read(); │ │ │ │ -135 return __tmp; │ │ │ │ -136 } │ │ │ │ -137 │ │ │ │ -138 private: │ │ │ │ -139 bool │ │ │ │ -140 _M_equal(const _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r& __x) const _GLIBCXX_NOEXCEPT │ │ │ │ -141 { │ │ │ │ -142 // Ideally this would just return _M_stream == __x._M_stream, │ │ │ │ -143 // but code compiled with old versions never sets _M_stream to null. │ │ │ │ -144 return (_M_ok == __x._M_ok) && (!_M_ok || _M_stream == __x._M_stream); │ │ │ │ -145 } │ │ │ │ -146 │ │ │ │ -147 void │ │ │ │ -148 _M_read() │ │ │ │ -149 { │ │ │ │ -150 if (_M_stream && !(*_M_stream >> _M_value)) │ │ │ │ -151 { │ │ │ │ -152 _M_stream = 0; │ │ │ │ -153 _M_ok = false; │ │ │ │ -154 } │ │ │ │ -155 } │ │ │ │ -156 │ │ │ │ -157 /// Return true if the iterators refer to the same stream, │ │ │ │ -158 /// or are both at end-of-stream. │ │ │ │ -159 _GLIBCXX_NODISCARD │ │ │ │ -160 friend bool │ │ │ │ -_1_6_1 _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) │ │ │ │ -162 ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -163 { return __x._M_equal(__y); } │ │ │ │ -164 │ │ │ │ -165#if __cpp_impl_three_way_comparison < 201907L │ │ │ │ -166 /// Return true if the iterators refer to different streams, │ │ │ │ -167 /// or if one is at end-of-stream and the other is not. │ │ │ │ -168 _GLIBCXX_NODISCARD │ │ │ │ -169 friend bool │ │ │ │ -170 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) │ │ │ │ -171 ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -172 { return !__x._M_equal(__y); } │ │ │ │ -173#endif │ │ │ │ -174 │ │ │ │ -175#if __cplusplus > 201703L && __cpp_lib_concepts │ │ │ │ -176 [[nodiscard]] │ │ │ │ -177 friend bool │ │ │ │ -178 _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 │ │ │ │ -179 { return !__i._M_stream; } │ │ │ │ -180#endif │ │ │ │ -181 }; │ │ │ │ -182 │ │ │ │ -183 /** │ │ │ │ -184 * @brief Provides output iterator semantics for streams. │ │ │ │ -185 * │ │ │ │ -186 * This class provides an iterator to write to an ostream. The type Tp is │ │ │ │ -187 * the only type written by this iterator and there must be an │ │ │ │ -188 * operator<<(Tp) defined. │ │ │ │ -189 * │ │ │ │ -190 * @tparam _Tp The type to write to the ostream. │ │ │ │ -191 * @tparam _CharT The ostream char_type. │ │ │ │ -192 * @tparam _Traits The ostream char_traits. │ │ │ │ -193 */ │ │ │ │ -194 template > │ │ │ │ -_1_9_6 class _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r │ │ │ │ -197 : public _i_t_e_r_a_t_o_r │ │ │ │ -198 { │ │ │ │ -199 public: │ │ │ │ -200 ///@{ │ │ │ │ -201 /// Public typedef │ │ │ │ -202#if __cplusplus > 201703L │ │ │ │ -_2_0_3 using _d_i_f_f_e_r_e_n_c_e___t_y_p_e = _p_t_r_d_i_f_f___t; │ │ │ │ -204#endif │ │ │ │ -_2_0_5 typedef _CharT _c_h_a_r___t_y_p_e; │ │ │ │ -_2_0_6 typedef _Traits _t_r_a_i_t_s___t_y_p_e; │ │ │ │ -_2_0_7 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; │ │ │ │ -208 ///@} │ │ │ │ -209 │ │ │ │ -210 private: │ │ │ │ -211 _o_s_t_r_e_a_m___t_y_p_e* _M_stream; │ │ │ │ -212 const _CharT* _M_string; │ │ │ │ -213 │ │ │ │ -214 public: │ │ │ │ -215 /// Construct from an ostream. │ │ │ │ -_2_1_6 _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 │ │ │ │ -217 : _M_stream(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____s)), _M_string(0) {} │ │ │ │ -218 │ │ │ │ -219 /** │ │ │ │ -220 * Construct from an ostream. │ │ │ │ -221 * │ │ │ │ -222 * The delimiter string @a c is written to the stream after every Tp │ │ │ │ -223 * written to the stream. The delimiter is not copied, and thus must │ │ │ │ -224 * not be destroyed while this iterator is in use. │ │ │ │ -225 * │ │ │ │ -226 * @param __s Underlying ostream to write to. │ │ │ │ -227 * @param __c CharT delimiter string to insert. │ │ │ │ -228 */ │ │ │ │ -_2_2_9 _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 │ │ │ │ -230 : _M_stream(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_____s)), _M_string(__c) { } │ │ │ │ -231 │ │ │ │ -232 /// Copy constructor. │ │ │ │ -_2_3_3 _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 │ │ │ │ -234 : _M_stream(_____o_b_j._M_stream), _M_string(_____o_b_j._M_string) { } │ │ │ │ -235 │ │ │ │ -236#if __cplusplus >= 201103L │ │ │ │ -237 _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; │ │ │ │ -238#endif │ │ │ │ -239 │ │ │ │ -240 /// Writes @a value to underlying ostream using operator<<. If │ │ │ │ -241 /// constructed with delimiter string, writes delimiter to ostream. │ │ │ │ -242 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r& │ │ │ │ -_2_4_3 _o_p_e_r_a_t_o_r_=(const _Tp& __value) │ │ │ │ -244 { │ │ │ │ -245 __glibcxx_requires_cond(_M_stream != 0, │ │ │ │ -246 _M_message(__gnu_debug::__msg_output_ostream) │ │ │ │ -247 ._M_iterator(*this)); │ │ │ │ -248 *_M_stream << __value; │ │ │ │ -249 if (_M_string) │ │ │ │ -250 *_M_stream << _M_string; │ │ │ │ -251 return *this; │ │ │ │ -252 } │ │ │ │ -253 │ │ │ │ -254 _GLIBCXX_NODISCARD │ │ │ │ -255 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r& │ │ │ │ -256 operator*() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -257 { return *this; } │ │ │ │ -258 │ │ │ │ -259 ostream_iterator& │ │ │ │ -260 operator++() _GLIBCXX_NOEXCEPT │ │ │ │ -261 { return *this; } │ │ │ │ -262 │ │ │ │ -263 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r& │ │ │ │ -264 operator++(int) _GLIBCXX_NOEXCEPT │ │ │ │ -265 { return *this; } │ │ │ │ -266 }; │ │ │ │ -267#pragma GCC diagnostic pop │ │ │ │ -268 │ │ │ │ -269 /// @} group iterators │ │ │ │ -270 │ │ │ │ -271_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -272} // namespace │ │ │ │ -273 │ │ │ │ -274#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_1 │ │ │ │ -_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_1_9_4 │ │ │ │ -_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_0_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_2_8 │ │ │ │ -_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_:_5_8 │ │ │ │ -_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_:_7_9 │ │ │ │ -_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_4 │ │ │ │ -_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_1 │ │ │ │ -_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_:_1_9_8 │ │ │ │ -_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_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___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_6 │ │ │ │ -_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_2_9 │ │ │ │ -_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_6 │ │ │ │ -_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_3 │ │ │ │ -_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_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(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_3 │ │ │ │ -_s_t_d_:_:_a_u_t_o___p_t_r___r_e_f │ │ │ │ -DDeeffiinniittiioonn _a_u_t_o___p_t_r_._h_:_4_9 │ │ │ │ +64/// @} group atomics │ │ │ │ +65 │ │ │ │ +66#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-14-base/libstdc++/user/a00398.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('a00398.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 294 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 292 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 291 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 290 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 293 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_4 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_2 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_1 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_0 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_3 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-14-base/libstdc++/user/a00398.js │ │ │ ├── js-beautify {} │ │ │ │ @@ -1,6 +1,24 @@ │ │ │ │ var a00398 = [ │ │ │ │ - ["std::_Vector_base< _Tp, _Alloc >", "a07441.html", null], │ │ │ │ - ["operator<=>", "a00398.html#a50f293a0e40b9059a7e4379b63a10737", null], │ │ │ │ - ["operator==", "a00398.html#a00026fa9234350d37423e7f059da985f", null], │ │ │ │ - ["swap", "a00398.html#ad420ada7eccdee66b60c11f6c84fce2f", null] │ │ │ │ + ["atomic_compare_exchange_strong", "a00398.html#ga7f9e658275d4a2cdbf1b6a00d02adcc7", null], │ │ │ │ + ["atomic_compare_exchange_strong", "a00398.html#ga8b4c27092fe0543d16aa24679ab64f35", null], │ │ │ │ + ["atomic_compare_exchange_strong_explicit", "a00398.html#ga8ac0b3f7aae34919ebc25fc54ff6b9c8", null], │ │ │ │ + ["atomic_compare_exchange_strong_explicit", "a00398.html#ga7b812df2cdd0c01f09d65168d22418c9", null], │ │ │ │ + ["atomic_compare_exchange_weak", "a00398.html#ga6860aafd01c4daf71cca0efe5193437f", null], │ │ │ │ + ["atomic_compare_exchange_weak", "a00398.html#ga6aa9828191cf7749c72581e719dde0b0", null], │ │ │ │ + ["atomic_compare_exchange_weak_explicit", "a00398.html#ga31df9efdf79235d0f8e112d245deb431", null], │ │ │ │ + ["atomic_compare_exchange_weak_explicit", "a00398.html#ga8ddc9b0002afbe0001718de9c8ca931e", null], │ │ │ │ + ["atomic_exchange", "a00398.html#ga781c3166a763da6704a757e45235d36f", null], │ │ │ │ + ["atomic_exchange", "a00398.html#ga2030e82e43a4017cbaa802974790bb25", null], │ │ │ │ + ["atomic_exchange_explicit", "a00398.html#ga94196a5199df82a0b4a6add046eb8579", null], │ │ │ │ + ["atomic_exchange_explicit", "a00398.html#ga0e5af6dda768cd829095adcd266e1f68", null], │ │ │ │ + ["atomic_is_lock_free", "a00398.html#ga005c6e4068fe3f26d09f5e24eaa87e92", null], │ │ │ │ + ["atomic_is_lock_free", "a00398.html#ga5fe925503fa03a8132ab6ac8c3d05017", null], │ │ │ │ + ["atomic_load", "a00398.html#gaa0e8444bce044d4c703faa284d5be31b", null], │ │ │ │ + ["atomic_load", "a00398.html#ga862acb9abfac21160395d3892d0fcda4", null], │ │ │ │ + ["atomic_load_explicit", "a00398.html#ga63bd95c47d868e1749c1934fe0f16283", null], │ │ │ │ + ["atomic_load_explicit", "a00398.html#ga15d2346b1ab42f5bd88978eb4f2eb5d5", null], │ │ │ │ + ["atomic_store", "a00398.html#gaf607a58027ea400e7688daa2832c67ef", null], │ │ │ │ + ["atomic_store", "a00398.html#gaad7c9077082544dc2454ef66eb252cad", null], │ │ │ │ + ["atomic_store_explicit", "a00398.html#ga4fb42f2c743388ba4dcf24abf0cc2701", null], │ │ │ │ + ["atomic_store_explicit", "a00398.html#gac459811f24dfa61ca04dff98c59b0433", null] │ │ │ │ ]; │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00398_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-2024 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2014-2024 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,2381 +71,916 @@ │ │ │
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
│ │ │ -
72#include <debug/assertions.h>
│ │ │ -
73
│ │ │ -
74#if _GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR
│ │ │ -
75extern "C" void
│ │ │ -
76__sanitizer_annotate_contiguous_container(const void*, const void*,
│ │ │ -
77 const void*, const void*);
│ │ │ -
78#endif
│ │ │ -
79
│ │ │ -
80namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
81{
│ │ │ -
82_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
83_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
│ │ │ -
84
│ │ │ -
85 /// See bits/stl_deque.h's _Deque_base for an explanation.
│ │ │ -
86 template<typename _Tp, typename _Alloc>
│ │ │ -
│ │ │ - │ │ │ -
88 {
│ │ │ - │ │ │ -
90 rebind<_Tp>::other _Tp_alloc_type;
│ │ │ -
91 typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type>::pointer
│ │ │ -
92 pointer;
│ │ │ -
93
│ │ │ -
94 struct _Vector_impl_data
│ │ │ -
95 {
│ │ │ -
96 pointer _M_start;
│ │ │ -
97 pointer _M_finish;
│ │ │ -
98 pointer _M_end_of_storage;
│ │ │ -
99
│ │ │ - │ │ │ -
101 _Vector_impl_data() _GLIBCXX_NOEXCEPT
│ │ │ -
102 : _M_start(), _M_finish(), _M_end_of_storage()
│ │ │ -
103 { }
│ │ │ -
104
│ │ │ -
105#if __cplusplus >= 201103L
│ │ │ - │ │ │ -
107 _Vector_impl_data(_Vector_impl_data&& __x) noexcept
│ │ │ -
108 : _M_start(__x._M_start), _M_finish(__x._M_finish),
│ │ │ -
109 _M_end_of_storage(__x._M_end_of_storage)
│ │ │ -
110 { __x._M_start = __x._M_finish = __x._M_end_of_storage = pointer(); }
│ │ │ -
111#endif
│ │ │ +
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
│ │ │ - │ │ │ -
114 void
│ │ │ -
115 _M_copy_data(_Vector_impl_data const& __x) _GLIBCXX_NOEXCEPT
│ │ │ -
116 {
│ │ │ -
117 _M_start = __x._M_start;
│ │ │ -
118 _M_finish = __x._M_finish;
│ │ │ -
119 _M_end_of_storage = __x._M_end_of_storage;
│ │ │ -
120 }
│ │ │ -
121
│ │ │ - │ │ │ -
123 void
│ │ │ -
124 _M_swap_data(_Vector_impl_data& __x) _GLIBCXX_NOEXCEPT
│ │ │ -
125 {
│ │ │ -
126 // Do not use std::swap(_M_start, __x._M_start), etc as it loses
│ │ │ -
127 // information used by TBAA.
│ │ │ -
128 _Vector_impl_data __tmp;
│ │ │ -
129 __tmp._M_copy_data(*this);
│ │ │ -
130 _M_copy_data(__x);
│ │ │ -
131 __x._M_copy_data(__tmp);
│ │ │ -
132 }
│ │ │ -
133 };
│ │ │ -
134
│ │ │ -
135 struct _Vector_impl
│ │ │ -
136 : public _Tp_alloc_type, public _Vector_impl_data
│ │ │ -
137 {
│ │ │ - │ │ │ -
139 _Vector_impl() _GLIBCXX_NOEXCEPT_IF(
│ │ │ - │ │ │ -
141#if __cpp_lib_concepts
│ │ │ - │ │ │ -
143#endif
│ │ │ -
144 : _Tp_alloc_type()
│ │ │ -
145 { }
│ │ │ -
146
│ │ │ - │ │ │ -
148 _Vector_impl(_Tp_alloc_type const& __a) _GLIBCXX_NOEXCEPT
│ │ │ -
149 : _Tp_alloc_type(__a)
│ │ │ -
150 { }
│ │ │ -
151
│ │ │ -
152#if __cplusplus >= 201103L
│ │ │ -
153 // Not defaulted, to enforce noexcept(true) even when
│ │ │ -
154 // !is_nothrow_move_constructible<_Tp_alloc_type>.
│ │ │ - │ │ │ -
156 _Vector_impl(_Vector_impl&& __x) noexcept
│ │ │ -
157 : _Tp_alloc_type(std::move(__x)), _Vector_impl_data(std::move(__x))
│ │ │ -
158 { }
│ │ │ -
159
│ │ │ - │ │ │ -
161 _Vector_impl(_Tp_alloc_type&& __a) noexcept
│ │ │ -
162 : _Tp_alloc_type(std::move(__a))
│ │ │ -
163 { }
│ │ │ -
164
│ │ │ - │ │ │ -
166 _Vector_impl(_Tp_alloc_type&& __a, _Vector_impl&& __rv) noexcept
│ │ │ -
167 : _Tp_alloc_type(std::move(__a)), _Vector_impl_data(std::move(__rv))
│ │ │ -
168 { }
│ │ │ -
169#endif
│ │ │ -
170
│ │ │ -
171#if _GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR
│ │ │ -
172 template<typename = _Tp_alloc_type>
│ │ │ -
173 struct _Asan
│ │ │ -
174 {
│ │ │ - │ │ │ -
176 ::size_type size_type;
│ │ │ -
177
│ │ │ -
178 static _GLIBCXX20_CONSTEXPR void
│ │ │ -
179 _S_shrink(_Vector_impl&, size_type) { }
│ │ │ -
180 static _GLIBCXX20_CONSTEXPR void
│ │ │ -
181 _S_on_dealloc(_Vector_impl&) { }
│ │ │ -
182
│ │ │ -
183 typedef _Vector_impl& _Reinit;
│ │ │ -
184
│ │ │ -
185 struct _Grow
│ │ │ -
186 {
│ │ │ -
187 _GLIBCXX20_CONSTEXPR _Grow(_Vector_impl&, size_type) { }
│ │ │ -
188 _GLIBCXX20_CONSTEXPR void _M_grew(size_type) { }
│ │ │ -
189 };
│ │ │ -
190 };
│ │ │ -
191
│ │ │ -
192 // Enable ASan annotations for memory obtained from std::allocator.
│ │ │ -
193 template<typename _Up>
│ │ │ -
194 struct _Asan<allocator<_Up> >
│ │ │ -
195 {
│ │ │ - │ │ │ -
197 ::size_type size_type;
│ │ │ -
198
│ │ │ -
199 // Adjust ASan annotation for [_M_start, _M_end_of_storage) to
│ │ │ -
200 // mark end of valid region as __curr instead of __prev.
│ │ │ -
201 static _GLIBCXX20_CONSTEXPR void
│ │ │ -
202 _S_adjust(_Vector_impl& __impl, pointer __prev, pointer __curr)
│ │ │ -
203 {
│ │ │ -
204#if __cpp_lib_is_constant_evaluated
│ │ │ - │ │ │ -
206 return;
│ │ │ -
207#endif
│ │ │ - │ │ │ -
209 __impl._M_end_of_storage, __prev, __curr);
│ │ │ -
210 }
│ │ │ -
211
│ │ │ -
212 static _GLIBCXX20_CONSTEXPR void
│ │ │ -
213 _S_grow(_Vector_impl& __impl, size_type __n)
│ │ │ -
214 { _S_adjust(__impl, __impl._M_finish, __impl._M_finish + __n); }
│ │ │ -
215
│ │ │ -
216 static _GLIBCXX20_CONSTEXPR void
│ │ │ -
217 _S_shrink(_Vector_impl& __impl, size_type __n)
│ │ │ -
218 { _S_adjust(__impl, __impl._M_finish + __n, __impl._M_finish); }
│ │ │ -
219
│ │ │ -
220 static _GLIBCXX20_CONSTEXPR void
│ │ │ -
221 _S_on_dealloc(_Vector_impl& __impl)
│ │ │ -
222 {
│ │ │ -
223 if (__impl._M_start)
│ │ │ -
224 _S_adjust(__impl, __impl._M_finish, __impl._M_end_of_storage);
│ │ │ -
225 }
│ │ │ -
226
│ │ │ -
227 // Used on reallocation to tell ASan unused capacity is invalid.
│ │ │ -
228 struct _Reinit
│ │ │ -
229 {
│ │ │ -
230 explicit _GLIBCXX20_CONSTEXPR
│ │ │ -
231 _Reinit(_Vector_impl& __impl) : _M_impl(__impl)
│ │ │ -
232 {
│ │ │ -
233 // Mark unused capacity as valid again before deallocating it.
│ │ │ -
234 _S_on_dealloc(_M_impl);
│ │ │ -
235 }
│ │ │ -
236
│ │ │ - │ │ │ -
238 ~_Reinit()
│ │ │ -
239 {
│ │ │ -
240 // Mark unused capacity as invalid after reallocation.
│ │ │ -
241 if (_M_impl._M_start)
│ │ │ -
242 _S_adjust(_M_impl, _M_impl._M_end_of_storage,
│ │ │ -
243 _M_impl._M_finish);
│ │ │ -
244 }
│ │ │ -
245
│ │ │ -
246 _Vector_impl& _M_impl;
│ │ │ -
247
│ │ │ -
248#if __cplusplus >= 201103L
│ │ │ -
249 _Reinit(const _Reinit&) = delete;
│ │ │ -
250 _Reinit& operator=(const _Reinit&) = delete;
│ │ │ -
251#endif
│ │ │ -
252 };
│ │ │ -
253
│ │ │ -
254 // Tell ASan when unused capacity is initialized to be valid.
│ │ │ -
255 struct _Grow
│ │ │ -
256 {
│ │ │ - │ │ │ -
258 _Grow(_Vector_impl& __impl, size_type __n)
│ │ │ -
259 : _M_impl(__impl), _M_n(__n)
│ │ │ -
260 { _S_grow(_M_impl, __n); }
│ │ │ -
261
│ │ │ - │ │ │ -
263 ~_Grow() { if (_M_n) _S_shrink(_M_impl, _M_n); }
│ │ │ -
264
│ │ │ - │ │ │ -
266 void _M_grew(size_type __n) { _M_n -= __n; }
│ │ │ -
267
│ │ │ -
268#if __cplusplus >= 201103L
│ │ │ -
269 _Grow(const _Grow&) = delete;
│ │ │ -
270 _Grow& operator=(const _Grow&) = delete;
│ │ │ -
271#endif
│ │ │ -
272 private:
│ │ │ -
273 _Vector_impl& _M_impl;
│ │ │ -
274 size_type _M_n;
│ │ │ -
275 };
│ │ │ -
276 };
│ │ │ -
277
│ │ │ -
278#define _GLIBCXX_ASAN_ANNOTATE_REINIT \
│ │ │ -
279 typename _Base::_Vector_impl::template _Asan<>::_Reinit const \
│ │ │ -
280 __attribute__((__unused__)) __reinit_guard(this->_M_impl)
│ │ │ -
281#define _GLIBCXX_ASAN_ANNOTATE_GROW(n) \
│ │ │ -
282 typename _Base::_Vector_impl::template _Asan<>::_Grow \
│ │ │ -
283 __attribute__((__unused__)) __grow_guard(this->_M_impl, (n))
│ │ │ -
284#define _GLIBCXX_ASAN_ANNOTATE_GREW(n) __grow_guard._M_grew(n)
│ │ │ -
285#define _GLIBCXX_ASAN_ANNOTATE_SHRINK(n) \
│ │ │ -
286 _Base::_Vector_impl::template _Asan<>::_S_shrink(this->_M_impl, n)
│ │ │ -
287#define _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC \
│ │ │ -
288 _Base::_Vector_impl::template _Asan<>::_S_on_dealloc(this->_M_impl)
│ │ │ -
289#else // ! (_GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR)
│ │ │ -
290#define _GLIBCXX_ASAN_ANNOTATE_REINIT
│ │ │ -
291#define _GLIBCXX_ASAN_ANNOTATE_GROW(n)
│ │ │ -
292#define _GLIBCXX_ASAN_ANNOTATE_GREW(n)
│ │ │ -
293#define _GLIBCXX_ASAN_ANNOTATE_SHRINK(n)
│ │ │ -
294#define _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC
│ │ │ -
295#endif // _GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR
│ │ │ -
296 };
│ │ │ -
297
│ │ │ -
298 public:
│ │ │ -
299 typedef _Alloc allocator_type;
│ │ │ -
300
│ │ │ - │ │ │ -
302 _Tp_alloc_type&
│ │ │ -
303 _M_get_Tp_allocator() _GLIBCXX_NOEXCEPT
│ │ │ -
304 { return this->_M_impl; }
│ │ │ -
305
│ │ │ - │ │ │ -
307 const _Tp_alloc_type&
│ │ │ -
308 _M_get_Tp_allocator() const _GLIBCXX_NOEXCEPT
│ │ │ -
309 { return this->_M_impl; }
│ │ │ -
310
│ │ │ - │ │ │ -
312 allocator_type
│ │ │ +
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 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 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
│ │ │ +
310 template<typename _Tp>
│ │ │ +
311 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
312 inline bool
│ │ │
│ │ │ -
313 get_allocator() const _GLIBCXX_NOEXCEPT
│ │ │ -
314 { return allocator_type(_M_get_Tp_allocator()); }
│ │ │ -
│ │ │ -
315
│ │ │ -
316#if __cplusplus >= 201103L
│ │ │ -
317 _Vector_base() = default;
│ │ │ -
318#else
│ │ │ -
319 _Vector_base() { }
│ │ │ -
320#endif
│ │ │ -
321
│ │ │ -
322 _GLIBCXX20_CONSTEXPR
│ │ │ -
323 _Vector_base(const allocator_type& __a) _GLIBCXX_NOEXCEPT
│ │ │ -
324 : _M_impl(__a) { }
│ │ │ -
325
│ │ │ -
326 // Kept for ABI compatibility.
│ │ │ -
327#if !_GLIBCXX_INLINE_VERSION
│ │ │ -
328 _GLIBCXX20_CONSTEXPR
│ │ │ -
329 _Vector_base(size_t __n)
│ │ │ -
330 : _M_impl()
│ │ │ -
331 { _M_create_storage(__n); }
│ │ │ -
332#endif
│ │ │ -
333
│ │ │ -
334 _GLIBCXX20_CONSTEXPR
│ │ │ -
335 _Vector_base(size_t __n, const allocator_type& __a)
│ │ │ -
336 : _M_impl(__a)
│ │ │ -
337 { _M_create_storage(__n); }
│ │ │ -
338
│ │ │ -
339#if __cplusplus >= 201103L
│ │ │ -
340 _Vector_base(_Vector_base&&) = default;
│ │ │ -
341
│ │ │ -
342 // Kept for ABI compatibility.
│ │ │ -
343# if !_GLIBCXX_INLINE_VERSION
│ │ │ -
344 _GLIBCXX20_CONSTEXPR
│ │ │ -
345 _Vector_base(_Tp_alloc_type&& __a) noexcept
│ │ │ -
346 : _M_impl(std::move(__a)) { }
│ │ │ -
347
│ │ │ -
348 _GLIBCXX20_CONSTEXPR
│ │ │ -
349 _Vector_base(_Vector_base&& __x, const allocator_type& __a)
│ │ │ -
350 : _M_impl(__a)
│ │ │ -
351 {
│ │ │ -
352 if (__x.get_allocator() == __a)
│ │ │ -
353 this->_M_impl._M_swap_data(__x._M_impl);
│ │ │ -
354 else
│ │ │ -
355 {
│ │ │ -
356 size_t __n = __x._M_impl._M_finish - __x._M_impl._M_start;
│ │ │ -
357 _M_create_storage(__n);
│ │ │ -
358 }
│ │ │ -
359 }
│ │ │ -
360# endif
│ │ │ -
361
│ │ │ -
362 _GLIBCXX20_CONSTEXPR
│ │ │ -
363 _Vector_base(const allocator_type& __a, _Vector_base&& __x)
│ │ │ -
364 : _M_impl(_Tp_alloc_type(__a), std::move(__x._M_impl))
│ │ │ -
365 { }
│ │ │ -
366#endif
│ │ │ -
367
│ │ │ -
368 _GLIBCXX20_CONSTEXPR
│ │ │ -
369 ~_Vector_base() _GLIBCXX_NOEXCEPT
│ │ │ -
370 {
│ │ │ -
371 _M_deallocate(_M_impl._M_start,
│ │ │ -
372 _M_impl._M_end_of_storage - _M_impl._M_start);
│ │ │ -
373 }
│ │ │ -
374
│ │ │ -
375 public:
│ │ │ -
376 _Vector_impl _M_impl;
│ │ │ -
377
│ │ │ -
378 _GLIBCXX20_CONSTEXPR
│ │ │ -
379 pointer
│ │ │ -
380 _M_allocate(size_t __n)
│ │ │ -
381 {
│ │ │ - │ │ │ -
383 return __n != 0 ? _Tr::allocate(_M_impl, __n) : pointer();
│ │ │ -
384 }
│ │ │ -
385
│ │ │ -
386 _GLIBCXX20_CONSTEXPR
│ │ │ -
387 void
│ │ │ -
388 _M_deallocate(pointer __p, size_t __n)
│ │ │ -
389 {
│ │ │ - │ │ │ -
391 if (__p)
│ │ │ -
392 _Tr::deallocate(_M_impl, __p, __n);
│ │ │ -
393 }
│ │ │ -
394
│ │ │ -
395 protected:
│ │ │ -
396
│ │ │ -
397 _GLIBCXX20_CONSTEXPR
│ │ │ -
398 void
│ │ │ -
399 _M_create_storage(size_t __n)
│ │ │ -
400 {
│ │ │ -
401 this->_M_impl._M_start = this->_M_allocate(__n);
│ │ │ -
402 this->_M_impl._M_finish = this->_M_impl._M_start;
│ │ │ -
403 this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
│ │ │ -
404 }
│ │ │ -
405 };
│ │ │ -
│ │ │ -
406
│ │ │ -
407 /**
│ │ │ -
408 * @brief A standard container which offers fixed time access to
│ │ │ -
409 * individual elements in any order.
│ │ │ -
410 *
│ │ │ -
411 * @ingroup sequences
│ │ │ -
412 * @headerfile vector
│ │ │ -
413 * @since C++98
│ │ │ -
414 *
│ │ │ -
415 * @tparam _Tp Type of element.
│ │ │ -
416 * @tparam _Alloc Allocator type, defaults to allocator<_Tp>.
│ │ │ -
417 *
│ │ │ -
418 * Meets the requirements of a <a href="tables.html#65">container</a>, a
│ │ │ -
419 * <a href="tables.html#66">reversible container</a>, and a
│ │ │ -
420 * <a href="tables.html#67">sequence</a>, including the
│ │ │ -
421 * <a href="tables.html#68">optional sequence requirements</a> with the
│ │ │ -
422 * %exception of @c push_front and @c pop_front.
│ │ │ -
423 *
│ │ │ -
424 * In some terminology a %vector can be described as a dynamic
│ │ │ -
425 * C-style array, it offers fast and efficient access to individual
│ │ │ -
426 * elements in any order and saves the user from worrying about
│ │ │ -
427 * memory and size allocation. Subscripting ( @c [] ) access is
│ │ │ -
428 * also provided as with C-style arrays.
│ │ │ -
429 */
│ │ │ -
430 template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
│ │ │ -
│ │ │ -
431 class vector : protected _Vector_base<_Tp, _Alloc>
│ │ │ -
432 {
│ │ │ -
433#ifdef _GLIBCXX_CONCEPT_CHECKS
│ │ │ -
434 // Concept requirements.
│ │ │ -
435 typedef typename _Alloc::value_type _Alloc_value_type;
│ │ │ -
436# if __cplusplus < 201103L
│ │ │ -
437 __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
│ │ │ -
438# endif
│ │ │ -
439 __glibcxx_class_requires2(_Tp, _Alloc_value_type, _SameTypeConcept)
│ │ │ -
440#endif
│ │ │ -
441
│ │ │ -
442#if __cplusplus >= 201103L
│ │ │ -
443 static_assert(is_same<typename remove_cv<_Tp>::type, _Tp>::value,
│ │ │ -
444 "std::vector must have a non-const, non-volatile value_type");
│ │ │ -
445# if __cplusplus > 201703L || defined __STRICT_ANSI__
│ │ │ - │ │ │ -
447 "std::vector must have the same value_type as its allocator");
│ │ │ -
448# endif
│ │ │ +
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 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 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
│ │ │ +
405 // _Sp_counted_base<>*
│ │ │ +
406 using pointer = decltype(__count_type::_M_pi);
│ │ │ +
407
│ │ │ +
408 // Ensure we can use the LSB as the lock bit.
│ │ │ +
409 static_assert(alignof(remove_pointer_t<pointer>) > 1);
│ │ │ +
410
│ │ │ +
411 constexpr _Atomic_count() noexcept = default;
│ │ │ +
412
│ │ │ +
413 explicit
│ │ │ +
414 _Atomic_count(__count_type&& __c) noexcept
│ │ │ +
415 : _M_val(reinterpret_cast<uintptr_t>(__c._M_pi))
│ │ │ +
416 {
│ │ │ +
417 __c._M_pi = nullptr;
│ │ │ +
418 }
│ │ │ +
419
│ │ │ +
420 ~_Atomic_count()
│ │ │ +
421 {
│ │ │ +
422 auto __val = _M_val.load(memory_order_relaxed);
│ │ │ +
423 _GLIBCXX_TSAN_MUTEX_DESTROY(&_M_val);
│ │ │ +
424 __glibcxx_assert(!(__val & _S_lock_bit));
│ │ │ +
425 if (auto __pi = reinterpret_cast<pointer>(__val))
│ │ │ +
426 {
│ │ │ +
427 if constexpr (__is_shared_ptr<_Tp>)
│ │ │ +
428 __pi->_M_release();
│ │ │ +
429 else
│ │ │ +
430 __pi->_M_weak_release();
│ │ │ +
431 }
│ │ │ +
432 }
│ │ │ +
433
│ │ │ +
434 _Atomic_count(const _Atomic_count&) = delete;
│ │ │ +
435 _Atomic_count& operator=(const _Atomic_count&) = delete;
│ │ │ +
436
│ │ │ +
437 // Precondition: Caller does not hold lock!
│ │ │ +
438 // Returns the raw pointer value without the lock bit set.
│ │ │ +
439 pointer
│ │ │ +
440 lock(memory_order __o) const noexcept
│ │ │ +
441 {
│ │ │ +
442 // To acquire the lock we flip the LSB from 0 to 1.
│ │ │ +
443
│ │ │ +
444 auto __current = _M_val.load(memory_order_relaxed);
│ │ │ +
445 while (__current & _S_lock_bit)
│ │ │ +
446 {
│ │ │ +
447#if __glibcxx_atomic_wait
│ │ │ +
448 __detail::__thread_relax();
│ │ │
449#endif
│ │ │ -
450
│ │ │ - │ │ │ -
452 typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
│ │ │ - │ │ │ +
450 __current = _M_val.load(memory_order_relaxed);
│ │ │ +
451 }
│ │ │ +
452
│ │ │ +
453 _GLIBCXX_TSAN_MUTEX_TRY_LOCK(&_M_val);
│ │ │
454
│ │ │ -
455 public:
│ │ │ -
456 typedef _Tp value_type;
│ │ │ -
457 typedef typename _Base::pointer pointer;
│ │ │ -
458 typedef typename _Alloc_traits::const_pointer const_pointer;
│ │ │ -
459 typedef typename _Alloc_traits::reference reference;
│ │ │ -
460 typedef typename _Alloc_traits::const_reference const_reference;
│ │ │ -
461 typedef __gnu_cxx::__normal_iterator<pointer, vector> iterator;
│ │ │ -
462 typedef __gnu_cxx::__normal_iterator<const_pointer, vector>
│ │ │ -
463 const_iterator;
│ │ │ - │ │ │ - │ │ │ -
466 typedef size_t size_type;
│ │ │ - │ │ │ -
468 typedef _Alloc allocator_type;
│ │ │ -
469
│ │ │ -
470 private:
│ │ │ -
471#if __cplusplus >= 201103L
│ │ │ -
472 static constexpr bool
│ │ │ -
473 _S_nothrow_relocate(true_type)
│ │ │ -
474 {
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
479 }
│ │ │ -
480
│ │ │ -
481 static constexpr bool
│ │ │ -
482 _S_nothrow_relocate(false_type)
│ │ │ -
483 { return false; }
│ │ │ -
484
│ │ │ -
485 static constexpr bool
│ │ │ -
486 _S_use_relocate()
│ │ │ -
487 {
│ │ │ -
488 // Instantiating std::__relocate_a might cause an error outside the
│ │ │ -
489 // immediate context (in __relocate_object_a's noexcept-specifier),
│ │ │ -
490 // so only do it if we know the type can be move-inserted into *this.
│ │ │ -
491 return _S_nothrow_relocate(__is_move_insertable<_Tp_alloc_type>{});
│ │ │ -
492 }
│ │ │ +
455 while (!_M_val.compare_exchange_strong(__current,
│ │ │ +
456 __current | _S_lock_bit,
│ │ │ +
457 __o,
│ │ │ +
458 memory_order_relaxed))
│ │ │ +
459 {
│ │ │ +
460 _GLIBCXX_TSAN_MUTEX_TRY_LOCK_FAILED(&_M_val);
│ │ │ +
461#if __glibcxx_atomic_wait
│ │ │ +
462 __detail::__thread_relax();
│ │ │ +
463#endif
│ │ │ +
464 __current = __current & ~_S_lock_bit;
│ │ │ +
465 _GLIBCXX_TSAN_MUTEX_TRY_LOCK(&_M_val);
│ │ │ +
466 }
│ │ │ +
467 _GLIBCXX_TSAN_MUTEX_LOCKED(&_M_val);
│ │ │ +
468 return reinterpret_cast<pointer>(__current);
│ │ │ +
469 }
│ │ │ +
470
│ │ │ +
471 // Precondition: caller holds lock!
│ │ │ +
472 void
│ │ │ +
473 unlock(memory_order __o) const noexcept
│ │ │ +
474 {
│ │ │ +
475 _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK(&_M_val);
│ │ │ +
476 _M_val.fetch_sub(1, __o);
│ │ │ +
477 _GLIBCXX_TSAN_MUTEX_POST_UNLOCK(&_M_val);
│ │ │ +
478 }
│ │ │ +
479
│ │ │ +
480 // Swaps the values of *this and __c, and unlocks *this.
│ │ │ +
481 // Precondition: caller holds lock!
│ │ │ +
482 void
│ │ │ +
483 _M_swap_unlock(__count_type& __c, memory_order __o) noexcept
│ │ │ +
484 {
│ │ │ +
485 if (__o != memory_order_seq_cst)
│ │ │ +
486 __o = memory_order_release;
│ │ │ +
487 auto __x = reinterpret_cast<uintptr_t>(__c._M_pi);
│ │ │ +
488 _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK(&_M_val);
│ │ │ +
489 __x = _M_val.exchange(__x, __o);
│ │ │ +
490 _GLIBCXX_TSAN_MUTEX_POST_UNLOCK(&_M_val);
│ │ │ +
491 __c._M_pi = reinterpret_cast<pointer>(__x & ~_S_lock_bit);
│ │ │ +
492 }
│ │ │
493
│ │ │ -
494 static pointer
│ │ │ -
495 _S_do_relocate(pointer __first, pointer __last, pointer __result,
│ │ │ -
496 _Tp_alloc_type& __alloc, true_type) noexcept
│ │ │ -
497 {
│ │ │ -
498 return std::__relocate_a(__first, __last, __result, __alloc);
│ │ │ -
499 }
│ │ │ -
500
│ │ │ -
501 static pointer
│ │ │ -
502 _S_do_relocate(pointer, pointer, pointer __result,
│ │ │ -
503 _Tp_alloc_type&, false_type) noexcept
│ │ │ -
504 { return __result; }
│ │ │ -
505
│ │ │ -
506 static _GLIBCXX20_CONSTEXPR pointer
│ │ │ -
507 _S_relocate(pointer __first, pointer __last, pointer __result,
│ │ │ -
508 _Tp_alloc_type& __alloc) noexcept
│ │ │ -
509 {
│ │ │ -
510#if __cpp_if_constexpr
│ │ │ -
511 // All callers have already checked _S_use_relocate() so just do it.
│ │ │ -
512 return std::__relocate_a(__first, __last, __result, __alloc);
│ │ │ -
513#else
│ │ │ -
514 using __do_it = __bool_constant<_S_use_relocate()>;
│ │ │ -
515 return _S_do_relocate(__first, __last, __result, __alloc, __do_it{});
│ │ │ -
516#endif
│ │ │ -
517 }
│ │ │ -
518#endif // C++11
│ │ │ -
519
│ │ │ -
520 protected:
│ │ │ -
521 using _Base::_M_allocate;
│ │ │ -
522 using _Base::_M_deallocate;
│ │ │ -
523 using _Base::_M_impl;
│ │ │ -
524 using _Base::_M_get_Tp_allocator;
│ │ │ -
525
│ │ │ -
526 public:
│ │ │ -
527 // [23.2.4.1] construct/copy/destroy
│ │ │ -
528 // (assign() and get_allocator() are also listed in this section)
│ │ │ -
529
│ │ │ -
530 /**
│ │ │ -
531 * @brief Creates a %vector with no elements.
│ │ │ -
532 */
│ │ │ -
533#if __cplusplus >= 201103L
│ │ │ -
534 vector() = default;
│ │ │ -
535#else
│ │ │ -
536 vector() { }
│ │ │ -
537#endif
│ │ │ -
538
│ │ │ -
539 /**
│ │ │ -
540 * @brief Creates a %vector with no elements.
│ │ │ -
541 * @param __a An allocator object.
│ │ │ -
542 */
│ │ │ -
543 explicit
│ │ │ - │ │ │ -
│ │ │ -
545 vector(const allocator_type& __a) _GLIBCXX_NOEXCEPT
│ │ │ -
546 : _Base(__a) { }
│ │ │ -
│ │ │ -
547
│ │ │ -
548#if __cplusplus >= 201103L
│ │ │ -
549 /**
│ │ │ -
550 * @brief Creates a %vector with default constructed elements.
│ │ │ -
551 * @param __n The number of elements to initially create.
│ │ │ -
552 * @param __a An allocator.
│ │ │ -
553 *
│ │ │ -
554 * This constructor fills the %vector with @a __n default
│ │ │ -
555 * constructed elements.
│ │ │ -
556 */
│ │ │ -
557 explicit
│ │ │ - │ │ │ -
│ │ │ -
559 vector(size_type __n, const allocator_type& __a = allocator_type())
│ │ │ -
560 : _Base(_S_check_init_len(__n, __a), __a)
│ │ │ -
561 { _M_default_initialize(__n); }
│ │ │ -
│ │ │ -
562
│ │ │ -
563 /**
│ │ │ -
564 * @brief Creates a %vector with copies of an exemplar element.
│ │ │ -
565 * @param __n The number of elements to initially create.
│ │ │ -
566 * @param __value An element to copy.
│ │ │ -
567 * @param __a An allocator.
│ │ │ -
568 *
│ │ │ -
569 * This constructor fills the %vector with @a __n copies of @a __value.
│ │ │ -
570 */
│ │ │ - │ │ │ -
│ │ │ -
572 vector(size_type __n, const value_type& __value,
│ │ │ -
573 const allocator_type& __a = allocator_type())
│ │ │ -
574 : _Base(_S_check_init_len(__n, __a), __a)
│ │ │ -
575 { _M_fill_initialize(__n, __value); }
│ │ │ -
│ │ │ -
576#else
│ │ │ -
577 /**
│ │ │ -
578 * @brief Creates a %vector with copies of an exemplar element.
│ │ │ -
579 * @param __n The number of elements to initially create.
│ │ │ -
580 * @param __value An element to copy.
│ │ │ -
581 * @param __a An allocator.
│ │ │ -
582 *
│ │ │ -
583 * This constructor fills the %vector with @a __n copies of @a __value.
│ │ │ -
584 */
│ │ │ -
585 explicit
│ │ │ -
586 vector(size_type __n, const value_type& __value = value_type(),
│ │ │ -
587 const allocator_type& __a = allocator_type())
│ │ │ -
588 : _Base(_S_check_init_len(__n, __a), __a)
│ │ │ -
589 { _M_fill_initialize(__n, __value); }
│ │ │ -
590#endif
│ │ │ -
591
│ │ │ -
592 /**
│ │ │ -
593 * @brief %Vector copy constructor.
│ │ │ -
594 * @param __x A %vector of identical element and allocator types.
│ │ │ -
595 *
│ │ │ -
596 * All the elements of @a __x are copied, but any unused capacity in
│ │ │ -
597 * @a __x will not be copied
│ │ │ -
598 * (i.e. capacity() == size() in the new %vector).
│ │ │ -
599 *
│ │ │ -
600 * The newly-created %vector uses a copy of the allocator object used
│ │ │ -
601 * by @a __x (unless the allocator traits dictate a different object).
│ │ │ -
602 */
│ │ │ -
603 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ -
604 vector(const vector& __x)
│ │ │ -
605 : _Base(__x.size(),
│ │ │ -
606 _Alloc_traits::_S_select_on_copy(__x._M_get_Tp_allocator()))
│ │ │ +
494#if __glibcxx_atomic_wait
│ │ │ +
495 // Precondition: caller holds lock!
│ │ │ +
496 void
│ │ │ +
497 _M_wait_unlock(memory_order __o) const noexcept
│ │ │ +
498 {
│ │ │ +
499 _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK(&_M_val);
│ │ │ +
500 auto __v = _M_val.fetch_sub(1, memory_order_relaxed);
│ │ │ +
501 _GLIBCXX_TSAN_MUTEX_POST_UNLOCK(&_M_val);
│ │ │ +
502 _M_val.wait(__v & ~_S_lock_bit, __o);
│ │ │ +
503 }
│ │ │ +
504
│ │ │ +
505 void
│ │ │ +
506 notify_one() noexcept
│ │ │ +
507 {
│ │ │ +
508 _GLIBCXX_TSAN_MUTEX_PRE_SIGNAL(&_M_val);
│ │ │ +
509 _M_val.notify_one();
│ │ │ +
510 _GLIBCXX_TSAN_MUTEX_POST_SIGNAL(&_M_val);
│ │ │ +
511 }
│ │ │ +
512
│ │ │ +
513 void
│ │ │ +
514 notify_all() noexcept
│ │ │ +
515 {
│ │ │ +
516 _GLIBCXX_TSAN_MUTEX_PRE_SIGNAL(&_M_val);
│ │ │ +
517 _M_val.notify_all();
│ │ │ +
518 _GLIBCXX_TSAN_MUTEX_POST_SIGNAL(&_M_val);
│ │ │ +
519 }
│ │ │ +
520#endif
│ │ │ +
521
│ │ │ +
522 private:
│ │ │ +
523 mutable __atomic_base<uintptr_t> _M_val{0};
│ │ │ +
524 static constexpr uintptr_t _S_lock_bit{1};
│ │ │ +
525 };
│ │ │ +
526
│ │ │ +
527 typename _Tp::element_type* _M_ptr = nullptr;
│ │ │ +
528 _Atomic_count _M_refcount;
│ │ │ +
529
│ │ │ +
530 static typename _Atomic_count::pointer
│ │ │ +
531 _S_add_ref(typename _Atomic_count::pointer __p)
│ │ │ +
532 {
│ │ │ +
533 if (__p)
│ │ │ +
534 {
│ │ │ +
535 if constexpr (__is_shared_ptr<_Tp>)
│ │ │ +
536 __p->_M_add_ref_copy();
│ │ │ +
537 else
│ │ │ +
538 __p->_M_weak_add_ref();
│ │ │ +
539 }
│ │ │ +
540 return __p;
│ │ │ +
541 }
│ │ │ +
542
│ │ │ +
543 constexpr _Sp_atomic() noexcept = default;
│ │ │ +
544
│ │ │ +
545 explicit
│ │ │ +
546 _Sp_atomic(value_type __r) noexcept
│ │ │ +
547 : _M_ptr(__r._M_ptr), _M_refcount(std::move(__r._M_refcount))
│ │ │ +
548 { }
│ │ │ +
549
│ │ │ +
550 ~_Sp_atomic() = default;
│ │ │ +
551
│ │ │ +
552 _Sp_atomic(const _Sp_atomic&) = delete;
│ │ │ +
553 void operator=(const _Sp_atomic&) = delete;
│ │ │ +
554
│ │ │ +
555 value_type
│ │ │ +
556 load(memory_order __o) const noexcept
│ │ │ +
557 {
│ │ │ +
558 __glibcxx_assert(__o != memory_order_release
│ │ │ +
559 && __o != memory_order_acq_rel);
│ │ │ +
560 // Ensure that the correct value of _M_ptr is visible after locking,
│ │ │ +
561 // by upgrading relaxed or consume to acquire.
│ │ │ +
562 if (__o != memory_order_seq_cst)
│ │ │ +
563 __o = memory_order_acquire;
│ │ │ +
564
│ │ │ +
565 value_type __ret;
│ │ │ +
566 auto __pi = _M_refcount.lock(__o);
│ │ │ +
567 __ret._M_ptr = _M_ptr;
│ │ │ +
568 __ret._M_refcount._M_pi = _S_add_ref(__pi);
│ │ │ +
569 _M_refcount.unlock(memory_order_relaxed);
│ │ │ +
570 return __ret;
│ │ │ +
571 }
│ │ │ +
572
│ │ │ +
573 void
│ │ │ +
574 swap(value_type& __r, memory_order __o) noexcept
│ │ │ +
575 {
│ │ │ +
576 _M_refcount.lock(memory_order_acquire);
│ │ │ +
577 std::swap(_M_ptr, __r._M_ptr);
│ │ │ +
578 _M_refcount._M_swap_unlock(__r._M_refcount, __o);
│ │ │ +
579 }
│ │ │ +
580
│ │ │ +
581 bool
│ │ │ +
582 compare_exchange_strong(value_type& __expected, value_type __desired,
│ │ │ +
583 memory_order __o, memory_order __o2) noexcept
│ │ │ +
584 {
│ │ │ +
585 bool __result = true;
│ │ │ +
586 auto __pi = _M_refcount.lock(memory_order_acquire);
│ │ │ +
587 if (_M_ptr == __expected._M_ptr
│ │ │ +
588 && __pi == __expected._M_refcount._M_pi)
│ │ │ +
589 {
│ │ │ +
590 _M_ptr = __desired._M_ptr;
│ │ │ +
591 _M_refcount._M_swap_unlock(__desired._M_refcount, __o);
│ │ │ +
592 }
│ │ │ +
593 else
│ │ │ +
594 {
│ │ │ +
595 _Tp __sink = std::move(__expected);
│ │ │ +
596 __expected._M_ptr = _M_ptr;
│ │ │ +
597 __expected._M_refcount._M_pi = _S_add_ref(__pi);
│ │ │ +
598 _M_refcount.unlock(__o2);
│ │ │ +
599 __result = false;
│ │ │ +
600 }
│ │ │ +
601 return __result;
│ │ │ +
602 }
│ │ │ +
603
│ │ │ +
604#if __glibcxx_atomic_wait
│ │ │ +
605 void
│ │ │ +
606 wait(value_type __old, memory_order __o) const noexcept
│ │ │
607 {
│ │ │ -
608 this->_M_impl._M_finish =
│ │ │ - │ │ │ -
610 this->_M_impl._M_start,
│ │ │ -
611 _M_get_Tp_allocator());
│ │ │ -
612 }
│ │ │ -
│ │ │ -
613
│ │ │ -
614#if __cplusplus >= 201103L
│ │ │ -
615 /**
│ │ │ -
616 * @brief %Vector move constructor.
│ │ │ -
617 *
│ │ │ -
618 * The newly-created %vector contains the exact contents of the
│ │ │ -
619 * moved instance.
│ │ │ -
620 * The contents of the moved instance are a valid, but unspecified
│ │ │ -
621 * %vector.
│ │ │ -
622 */
│ │ │ -
623 vector(vector&&) noexcept = default;
│ │ │ -
624
│ │ │ -
625 /// Copy constructor with alternative allocator
│ │ │ - │ │ │ -
│ │ │ -
627 vector(const vector& __x, const __type_identity_t<allocator_type>& __a)
│ │ │ -
628 : _Base(__x.size(), __a)
│ │ │ -
629 {
│ │ │ -
630 this->_M_impl._M_finish =
│ │ │ -
631 std::__uninitialized_copy_a(__x.begin(), __x.end(),
│ │ │ -
632 this->_M_impl._M_start,
│ │ │ -
633 _M_get_Tp_allocator());
│ │ │ -
634 }
│ │ │ -
│ │ │ -
635
│ │ │ -
636 private:
│ │ │ - │ │ │ -
638 vector(vector&& __rv, const allocator_type& __m, true_type) noexcept
│ │ │ -
639 : _Base(__m, std::move(__rv))
│ │ │ -
640 { }
│ │ │ -
641
│ │ │ -
642 _GLIBCXX20_CONSTEXPR
│ │ │ -
643 vector(vector&& __rv, const allocator_type& __m, false_type)
│ │ │ -
644 : _Base(__m)
│ │ │ -
645 {
│ │ │ -
646 if (__rv.get_allocator() == __m)
│ │ │ -
647 this->_M_impl._M_swap_data(__rv._M_impl);
│ │ │ -
648 else if (!__rv.empty())
│ │ │ -
649 {
│ │ │ -
650 this->_M_create_storage(__rv.size());
│ │ │ -
651 this->_M_impl._M_finish =
│ │ │ -
652 std::__uninitialized_move_a(__rv.begin(), __rv.end(),
│ │ │ -
653 this->_M_impl._M_start,
│ │ │ -
654 _M_get_Tp_allocator());
│ │ │ -
655 __rv.clear();
│ │ │ -
656 }
│ │ │ -
657 }
│ │ │ -
658
│ │ │ -
659 public:
│ │ │ -
660 /// Move constructor with alternative allocator
│ │ │ -
661 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ - │ │ │ -
663 noexcept( noexcept(
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
667 { }
│ │ │ -
│ │ │ -
668
│ │ │ -
669 /**
│ │ │ -
670 * @brief Builds a %vector from an initializer list.
│ │ │ -
671 * @param __l An initializer_list.
│ │ │ -
672 * @param __a An allocator.
│ │ │ -
673 *
│ │ │ -
674 * Create a %vector consisting of copies of the elements in the
│ │ │ -
675 * initializer_list @a __l.
│ │ │ -
676 *
│ │ │ -
677 * This will call the element type's copy constructor N times
│ │ │ -
678 * (where N is @a __l.size()) and do no memory reallocation.
│ │ │ -
679 */
│ │ │ -
680 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ - │ │ │ -
682 const allocator_type& __a = allocator_type())
│ │ │ -
683 : _Base(__a)
│ │ │ -
684 {
│ │ │ -
685 _M_range_initialize_n(__l.begin(), __l.end(), __l.size());
│ │ │ -
686 }
│ │ │ -
│ │ │ -
687#endif
│ │ │ -
688
│ │ │ -
689 /**
│ │ │ -
690 * @brief Builds a %vector from a range.
│ │ │ -
691 * @param __first An input iterator.
│ │ │ -
692 * @param __last An input iterator.
│ │ │ -
693 * @param __a An allocator.
│ │ │ -
694 *
│ │ │ -
695 * Create a %vector consisting of copies of the elements from
│ │ │ -
696 * [first,last).
│ │ │ -
697 *
│ │ │ -
698 * If the iterators are forward, bidirectional, or
│ │ │ -
699 * random-access, then this will call the elements' copy
│ │ │ -
700 * constructor N times (where N is distance(first,last)) and do
│ │ │ -
701 * no memory reallocation. But if only input iterators are
│ │ │ -
702 * used, then this will do at most 2N calls to the copy
│ │ │ -
703 * constructor, and logN memory reallocations.
│ │ │ -
704 */
│ │ │ -
705#if __cplusplus >= 201103L
│ │ │ -
706 template<typename _InputIterator,
│ │ │ - │ │ │ - │ │ │ -
│ │ │ - │ │ │ -
710 const allocator_type& __a = allocator_type())
│ │ │ -
711 : _Base(__a)
│ │ │ -
712 {
│ │ │ -
713#if __glibcxx_concepts // C++ >= C++20
│ │ │ - │ │ │ - │ │ │ -
716 {
│ │ │ -
717 const auto __n
│ │ │ -
718 = static_cast<size_type>(ranges::distance(__first, __last));
│ │ │ -
719 _M_range_initialize_n(__first, __last, __n);
│ │ │ -
720 return;
│ │ │ -
721 }
│ │ │ -
722 else
│ │ │ -
723#endif
│ │ │ -
724 _M_range_initialize(__first, __last,
│ │ │ -
725 std::__iterator_category(__first));
│ │ │ -
726 }
│ │ │ -
│ │ │ -
727#else
│ │ │ -
728 template<typename _InputIterator>
│ │ │ -
729 vector(_InputIterator __first, _InputIterator __last,
│ │ │ -
730 const allocator_type& __a = allocator_type())
│ │ │ -
731 : _Base(__a)
│ │ │ -
732 {
│ │ │ -
733 // Check whether it's an integral type. If so, it's not an iterator.
│ │ │ -
734 typedef typename std::__is_integer<_InputIterator>::__type _Integral;
│ │ │ -
735 _M_initialize_dispatch(__first, __last, _Integral());
│ │ │ -
736 }
│ │ │ -
737#endif
│ │ │ -
738
│ │ │ -
739 /**
│ │ │ -
740 * The dtor only erases the elements, and note that if the
│ │ │ -
741 * elements themselves are pointers, the pointed-to memory is
│ │ │ -
742 * not touched in any way. Managing the pointer is the user's
│ │ │ -
743 * responsibility.
│ │ │ -
744 */
│ │ │ -
745 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ - │ │ │ -
747 {
│ │ │ -
748 std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
│ │ │ -
749 _M_get_Tp_allocator());
│ │ │ -
750 _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC;
│ │ │ -
751 }
│ │ │ -
│ │ │ -
752
│ │ │ -
753 /**
│ │ │ -
754 * @brief %Vector assignment operator.
│ │ │ -
755 * @param __x A %vector of identical element and allocator types.
│ │ │ -
756 *
│ │ │ -
757 * All the elements of @a __x are copied, but any unused capacity in
│ │ │ -
758 * @a __x will not be copied.
│ │ │ -
759 *
│ │ │ -
760 * Whether the allocator is copied depends on the allocator traits.
│ │ │ -
761 */
│ │ │ - │ │ │ -
763 vector&
│ │ │ -
764 operator=(const vector& __x);
│ │ │ +
608 auto __pi = _M_refcount.lock(memory_order_acquire);
│ │ │ +
609 if (_M_ptr == __old._M_ptr && __pi == __old._M_refcount._M_pi)
│ │ │ +
610 _M_refcount._M_wait_unlock(__o);
│ │ │ +
611 else
│ │ │ +
612 _M_refcount.unlock(memory_order_relaxed);
│ │ │ +
613 }
│ │ │ +
614
│ │ │ +
615 void
│ │ │ +
616 notify_one() noexcept
│ │ │ +
617 {
│ │ │ +
618 _M_refcount.notify_one();
│ │ │ +
619 }
│ │ │ +
620
│ │ │ +
621 void
│ │ │ +
622 notify_all() noexcept
│ │ │ +
623 {
│ │ │ +
624 _M_refcount.notify_all();
│ │ │ +
625 }
│ │ │ +
626#endif
│ │ │ +
627 };
│ │ │ +
628
│ │ │ +
629 template<typename _Tp>
│ │ │ +
630 struct atomic<shared_ptr<_Tp>>
│ │ │ +
631 {
│ │ │ +
632 public:
│ │ │ +
633 using value_type = shared_ptr<_Tp>;
│ │ │ +
634
│ │ │ +
635 static constexpr bool is_always_lock_free = false;
│ │ │ +
636
│ │ │ +
637 bool
│ │ │ +
638 is_lock_free() const noexcept
│ │ │ +
639 { return false; }
│ │ │ +
640
│ │ │ +
641 constexpr atomic() noexcept = default;
│ │ │ +
642
│ │ │ +
643 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
644 // 3661. constinit atomic<shared_ptr<T>> a(nullptr); should work
│ │ │ +
645 constexpr atomic(nullptr_t) noexcept : atomic() { }
│ │ │ +
646
│ │ │ +
647 atomic(shared_ptr<_Tp> __r) noexcept
│ │ │ +
648 : _M_impl(std::move(__r))
│ │ │ +
649 { }
│ │ │ +
650
│ │ │ +
651 atomic(const atomic&) = delete;
│ │ │ +
652 void operator=(const atomic&) = delete;
│ │ │ +
653
│ │ │ +
654 shared_ptr<_Tp>
│ │ │ +
655 load(memory_order __o = memory_order_seq_cst) const noexcept
│ │ │ +
656 { return _M_impl.load(__o); }
│ │ │ +
657
│ │ │ +
658 operator shared_ptr<_Tp>() const noexcept
│ │ │ +
659 { return _M_impl.load(memory_order_seq_cst); }
│ │ │ +
660
│ │ │ +
661 void
│ │ │ +
662 store(shared_ptr<_Tp> __desired,
│ │ │ +
663 memory_order __o = memory_order_seq_cst) noexcept
│ │ │ +
664 { _M_impl.swap(__desired, __o); }
│ │ │ +
665
│ │ │ +
666 void
│ │ │ +
667 operator=(shared_ptr<_Tp> __desired) noexcept
│ │ │ +
668 { _M_impl.swap(__desired, memory_order_seq_cst); }
│ │ │ +
669
│ │ │ +
670 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
671 // 3893. LWG 3661 broke atomic<shared_ptr<T>> a; a = nullptr;
│ │ │ +
672 void
│ │ │ +
673 operator=(nullptr_t) noexcept
│ │ │ +
674 { store(nullptr); }
│ │ │ +
675
│ │ │ +
676 shared_ptr<_Tp>
│ │ │ +
677 exchange(shared_ptr<_Tp> __desired,
│ │ │ +
678 memory_order __o = memory_order_seq_cst) noexcept
│ │ │ +
679 {
│ │ │ +
680 _M_impl.swap(__desired, __o);
│ │ │ +
681 return __desired;
│ │ │ +
682 }
│ │ │ +
683
│ │ │ +
684 bool
│ │ │ +
685 compare_exchange_strong(shared_ptr<_Tp>& __expected,
│ │ │ +
686 shared_ptr<_Tp> __desired,
│ │ │ +
687 memory_order __o, memory_order __o2) noexcept
│ │ │ +
688 {
│ │ │ +
689 return _M_impl.compare_exchange_strong(__expected, __desired, __o, __o2);
│ │ │ +
690 }
│ │ │ +
691
│ │ │ +
692 bool
│ │ │ +
693 compare_exchange_strong(value_type& __expected, value_type __desired,
│ │ │ +
694 memory_order __o = memory_order_seq_cst) noexcept
│ │ │ +
695 {
│ │ │ +
696 memory_order __o2;
│ │ │ +
697 switch (__o)
│ │ │ +
698 {
│ │ │ +
699 case memory_order_acq_rel:
│ │ │ +
700 __o2 = memory_order_acquire;
│ │ │ +
701 break;
│ │ │ +
702 case memory_order_release:
│ │ │ +
703 __o2 = memory_order_relaxed;
│ │ │ +
704 break;
│ │ │ +
705 default:
│ │ │ +
706 __o2 = __o;
│ │ │ +
707 }
│ │ │ +
708 return compare_exchange_strong(__expected, std::move(__desired),
│ │ │ +
709 __o, __o2);
│ │ │ +
710 }
│ │ │ +
711
│ │ │ +
712 bool
│ │ │ +
713 compare_exchange_weak(value_type& __expected, value_type __desired,
│ │ │ +
714 memory_order __o, memory_order __o2) noexcept
│ │ │ +
715 {
│ │ │ +
716 return compare_exchange_strong(__expected, std::move(__desired),
│ │ │ +
717 __o, __o2);
│ │ │ +
718 }
│ │ │ +
719
│ │ │ +
720 bool
│ │ │ +
721 compare_exchange_weak(value_type& __expected, value_type __desired,
│ │ │ +
722 memory_order __o = memory_order_seq_cst) noexcept
│ │ │ +
723 {
│ │ │ +
724 return compare_exchange_strong(__expected, std::move(__desired), __o);
│ │ │ +
725 }
│ │ │ +
726
│ │ │ +
727#if __glibcxx_atomic_wait
│ │ │ +
728 void
│ │ │ +
729 wait(value_type __old,
│ │ │ +
730 memory_order __o = memory_order_seq_cst) const noexcept
│ │ │ +
731 {
│ │ │ +
732 _M_impl.wait(std::move(__old), __o);
│ │ │ +
733 }
│ │ │ +
734
│ │ │ +
735 void
│ │ │ +
736 notify_one() noexcept
│ │ │ +
737 {
│ │ │ +
738 _M_impl.notify_one();
│ │ │ +
739 }
│ │ │ +
740
│ │ │ +
741 void
│ │ │ +
742 notify_all() noexcept
│ │ │ +
743 {
│ │ │ +
744 _M_impl.notify_all();
│ │ │ +
745 }
│ │ │ +
746#endif
│ │ │ +
747
│ │ │ +
748 private:
│ │ │ +
749 _Sp_atomic<shared_ptr<_Tp>> _M_impl;
│ │ │ +
750 };
│ │ │ +
751
│ │ │ +
752 template<typename _Tp>
│ │ │ +
753 struct atomic<weak_ptr<_Tp>>
│ │ │ +
754 {
│ │ │ +
755 public:
│ │ │ +
756 using value_type = weak_ptr<_Tp>;
│ │ │ +
757
│ │ │ +
758 static constexpr bool is_always_lock_free = false;
│ │ │ +
759
│ │ │ +
760 bool
│ │ │ +
761 is_lock_free() const noexcept
│ │ │ +
762 { return false; }
│ │ │ +
763
│ │ │ +
764 constexpr atomic() noexcept = default;
│ │ │
765
│ │ │ -
766#if __cplusplus >= 201103L
│ │ │ -
767 /**
│ │ │ -
768 * @brief %Vector move assignment operator.
│ │ │ -
769 * @param __x A %vector of identical element and allocator types.
│ │ │ -
770 *
│ │ │ -
771 * The contents of @a __x are moved into this %vector (without copying,
│ │ │ -
772 * if the allocators permit it).
│ │ │ -
773 * Afterwards @a __x is a valid, but unspecified %vector.
│ │ │ -
774 *
│ │ │ -
775 * Whether the allocator is moved depends on the allocator traits.
│ │ │ -
776 */
│ │ │ - │ │ │ -
778 vector&
│ │ │ -
│ │ │ -
779 operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move())
│ │ │ -
780 {
│ │ │ -
781 constexpr bool __move_storage =
│ │ │ -
782 _Alloc_traits::_S_propagate_on_move_assign()
│ │ │ -
783 || _Alloc_traits::_S_always_equal();
│ │ │ -
784 _M_move_assign(std::move(__x), __bool_constant<__move_storage>());
│ │ │ -
785 return *this;
│ │ │ -
786 }
│ │ │ -
│ │ │ -
787
│ │ │ -
788 /**
│ │ │ -
789 * @brief %Vector list assignment operator.
│ │ │ -
790 * @param __l An initializer_list.
│ │ │ -
791 *
│ │ │ -
792 * This function fills a %vector with copies of the elements in the
│ │ │ -
793 * initializer list @a __l.
│ │ │ -
794 *
│ │ │ -
795 * Note that the assignment completely changes the %vector and
│ │ │ -
796 * that the resulting %vector's size is the same as the number
│ │ │ -
797 * of elements assigned.
│ │ │ -
798 */
│ │ │ - │ │ │ -
800 vector&
│ │ │ -
│ │ │ - │ │ │ -
802 {
│ │ │ -
803 this->_M_assign_aux(__l.begin(), __l.end(),
│ │ │ - │ │ │ -
805 return *this;
│ │ │ -
806 }
│ │ │ -
│ │ │ -
807#endif
│ │ │ -
808
│ │ │ -
809 /**
│ │ │ -
810 * @brief Assigns a given value to a %vector.
│ │ │ -
811 * @param __n Number of elements to be assigned.
│ │ │ -
812 * @param __val Value to be assigned.
│ │ │ -
813 *
│ │ │ -
814 * This function fills a %vector with @a __n copies of the given
│ │ │ -
815 * value. Note that the assignment completely changes the
│ │ │ -
816 * %vector and that the resulting %vector's size is the same as
│ │ │ -
817 * the number of elements assigned.
│ │ │ -
818 */
│ │ │ - │ │ │ -
820 void
│ │ │ -
│ │ │ -
821 assign(size_type __n, const value_type& __val)
│ │ │ -
822 { _M_fill_assign(__n, __val); }
│ │ │ -
│ │ │ -
823
│ │ │ -
824 /**
│ │ │ -
825 * @brief Assigns a range to a %vector.
│ │ │ -
826 * @param __first An input iterator.
│ │ │ -
827 * @param __last An input iterator.
│ │ │ -
828 *
│ │ │ -
829 * This function fills a %vector with copies of the elements in the
│ │ │ -
830 * range [__first,__last).
│ │ │ -
831 *
│ │ │ -
832 * Note that the assignment completely changes the %vector and
│ │ │ -
833 * that the resulting %vector's size is the same as the number
│ │ │ -
834 * of elements assigned.
│ │ │ -
835 */
│ │ │ -
836#if __cplusplus >= 201103L
│ │ │ -
837 template<typename _InputIterator,
│ │ │ - │ │ │ - │ │ │ -
840 void
│ │ │ -
│ │ │ - │ │ │ -
842 { _M_assign_aux(__first, __last, std::__iterator_category(__first)); }
│ │ │ -
│ │ │ -
843#else
│ │ │ -
844 template<typename _InputIterator>
│ │ │ -
845 void
│ │ │ -
846 assign(_InputIterator __first, _InputIterator __last)
│ │ │ -
847 {
│ │ │ -
848 // Check whether it's an integral type. If so, it's not an iterator.
│ │ │ -
849 typedef typename std::__is_integer<_InputIterator>::__type _Integral;
│ │ │ -
850 _M_assign_dispatch(__first, __last, _Integral());
│ │ │ -
851 }
│ │ │ -
852#endif
│ │ │ +
766 atomic(weak_ptr<_Tp> __r) noexcept
│ │ │ +
767 : _M_impl(move(__r))
│ │ │ +
768 { }
│ │ │ +
769
│ │ │ +
770 atomic(const atomic&) = delete;
│ │ │ +
771 void operator=(const atomic&) = delete;
│ │ │ +
772
│ │ │ +
773 weak_ptr<_Tp>
│ │ │ +
774 load(memory_order __o = memory_order_seq_cst) const noexcept
│ │ │ +
775 { return _M_impl.load(__o); }
│ │ │ +
776
│ │ │ +
777 operator weak_ptr<_Tp>() const noexcept
│ │ │ +
778 { return _M_impl.load(memory_order_seq_cst); }
│ │ │ +
779
│ │ │ +
780 void
│ │ │ +
781 store(weak_ptr<_Tp> __desired,
│ │ │ +
782 memory_order __o = memory_order_seq_cst) noexcept
│ │ │ +
783 { _M_impl.swap(__desired, __o); }
│ │ │ +
784
│ │ │ +
785 void
│ │ │ +
786 operator=(weak_ptr<_Tp> __desired) noexcept
│ │ │ +
787 { _M_impl.swap(__desired, memory_order_seq_cst); }
│ │ │ +
788
│ │ │ +
789 weak_ptr<_Tp>
│ │ │ +
790 exchange(weak_ptr<_Tp> __desired,
│ │ │ +
791 memory_order __o = memory_order_seq_cst) noexcept
│ │ │ +
792 {
│ │ │ +
793 _M_impl.swap(__desired, __o);
│ │ │ +
794 return __desired;
│ │ │ +
795 }
│ │ │ +
796
│ │ │ +
797 bool
│ │ │ +
798 compare_exchange_strong(weak_ptr<_Tp>& __expected,
│ │ │ +
799 weak_ptr<_Tp> __desired,
│ │ │ +
800 memory_order __o, memory_order __o2) noexcept
│ │ │ +
801 {
│ │ │ +
802 return _M_impl.compare_exchange_strong(__expected, __desired, __o, __o2);
│ │ │ +
803 }
│ │ │ +
804
│ │ │ +
805 bool
│ │ │ +
806 compare_exchange_strong(value_type& __expected, value_type __desired,
│ │ │ +
807 memory_order __o = memory_order_seq_cst) noexcept
│ │ │ +
808 {
│ │ │ +
809 memory_order __o2;
│ │ │ +
810 switch (__o)
│ │ │ +
811 {
│ │ │ +
812 case memory_order_acq_rel:
│ │ │ +
813 __o2 = memory_order_acquire;
│ │ │ +
814 break;
│ │ │ +
815 case memory_order_release:
│ │ │ +
816 __o2 = memory_order_relaxed;
│ │ │ +
817 break;
│ │ │ +
818 default:
│ │ │ +
819 __o2 = __o;
│ │ │ +
820 }
│ │ │ +
821 return compare_exchange_strong(__expected, std::move(__desired),
│ │ │ +
822 __o, __o2);
│ │ │ +
823 }
│ │ │ +
824
│ │ │ +
825 bool
│ │ │ +
826 compare_exchange_weak(value_type& __expected, value_type __desired,
│ │ │ +
827 memory_order __o, memory_order __o2) noexcept
│ │ │ +
828 {
│ │ │ +
829 return compare_exchange_strong(__expected, std::move(__desired),
│ │ │ +
830 __o, __o2);
│ │ │ +
831 }
│ │ │ +
832
│ │ │ +
833 bool
│ │ │ +
834 compare_exchange_weak(value_type& __expected, value_type __desired,
│ │ │ +
835 memory_order __o = memory_order_seq_cst) noexcept
│ │ │ +
836 {
│ │ │ +
837 return compare_exchange_strong(__expected, std::move(__desired), __o);
│ │ │ +
838 }
│ │ │ +
839
│ │ │ +
840#if __glibcxx_atomic_wait
│ │ │ +
841 void
│ │ │ +
842 wait(value_type __old,
│ │ │ +
843 memory_order __o = memory_order_seq_cst) const noexcept
│ │ │ +
844 {
│ │ │ +
845 _M_impl.wait(std::move(__old), __o);
│ │ │ +
846 }
│ │ │ +
847
│ │ │ +
848 void
│ │ │ +
849 notify_one() noexcept
│ │ │ +
850 {
│ │ │ +
851 _M_impl.notify_one();
│ │ │ +
852 }
│ │ │
853
│ │ │ -
854#if __cplusplus >= 201103L
│ │ │ -
855 /**
│ │ │ -
856 * @brief Assigns an initializer list to a %vector.
│ │ │ -
857 * @param __l An initializer_list.
│ │ │ -
858 *
│ │ │ -
859 * This function fills a %vector with copies of the elements in the
│ │ │ -
860 * initializer list @a __l.
│ │ │ -
861 *
│ │ │ -
862 * Note that the assignment completely changes the %vector and
│ │ │ -
863 * that the resulting %vector's size is the same as the number
│ │ │ -
864 * of elements assigned.
│ │ │ -
865 */
│ │ │ -
866 _GLIBCXX20_CONSTEXPR
│ │ │ -
867 void
│ │ │ -
│ │ │ - │ │ │ -
869 {
│ │ │ -
870 this->_M_assign_aux(__l.begin(), __l.end(),
│ │ │ - │ │ │ -
872 }
│ │ │ -
│ │ │ -
873#endif
│ │ │ -
874
│ │ │ -
875 /// Get a copy of the memory allocation object.
│ │ │ -
│ │ │ -
876 using _Base::get_allocator;
│ │ │ -
877
│ │ │ -
878 // iterators
│ │ │ -
879 /**
│ │ │ -
880 * Returns a read/write iterator that points to the first
│ │ │ -
881 * element in the %vector. Iteration is done in ordinary
│ │ │ -
882 * element order.
│ │ │ -
883 */
│ │ │ -
884 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
885 iterator
│ │ │ -
│ │ │ - │ │ │ -
887 { return iterator(this->_M_impl._M_start); }
│ │ │ -
│ │ │ -
888
│ │ │ -
889 /**
│ │ │ -
890 * Returns a read-only (constant) iterator that points to the
│ │ │ -
891 * first element in the %vector. Iteration is done in ordinary
│ │ │ -
892 * element order.
│ │ │ -
893 */
│ │ │ -
894 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
895 const_iterator
│ │ │ -
│ │ │ - │ │ │ -
897 { return const_iterator(this->_M_impl._M_start); }
│ │ │ -
│ │ │ -
898
│ │ │ -
899 /**
│ │ │ -
900 * Returns a read/write iterator that points one past the last
│ │ │ -
901 * element in the %vector. Iteration is done in ordinary
│ │ │ -
902 * element order.
│ │ │ -
903 */
│ │ │ -
904 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
907 { return iterator(this->_M_impl._M_finish); }
│ │ │ -
│ │ │ -
908
│ │ │ -
909 /**
│ │ │ -
910 * Returns a read-only (constant) iterator that points one past
│ │ │ -
911 * the last element in the %vector. Iteration is done in
│ │ │ -
912 * ordinary element order.
│ │ │ -
913 */
│ │ │ -
914 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
915 const_iterator
│ │ │ -
│ │ │ - │ │ │ -
917 { return const_iterator(this->_M_impl._M_finish); }
│ │ │ -
│ │ │ -
918
│ │ │ -
919 /**
│ │ │ -
920 * Returns a read/write reverse iterator that points to the
│ │ │ -
921 * last element in the %vector. Iteration is done in reverse
│ │ │ -
922 * element order.
│ │ │ -
923 */
│ │ │ -
924 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
927 { return reverse_iterator(end()); }
│ │ │ -
│ │ │ -
928
│ │ │ -
929 /**
│ │ │ -
930 * Returns a read-only (constant) reverse iterator that points
│ │ │ -
931 * to the last element in the %vector. Iteration is done in
│ │ │ -
932 * reverse element order.
│ │ │ -
933 */
│ │ │ -
934 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
935 const_reverse_iterator
│ │ │ -
│ │ │ - │ │ │ -
937 { return const_reverse_iterator(end()); }
│ │ │ -
│ │ │ -
938
│ │ │ -
939 /**
│ │ │ -
940 * Returns a read/write reverse iterator that points to one
│ │ │ -
941 * before the first element in the %vector. Iteration is done
│ │ │ -
942 * in reverse element order.
│ │ │ -
943 */
│ │ │ -
944 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
947 { return reverse_iterator(begin()); }
│ │ │ -
│ │ │ -
948
│ │ │ -
949 /**
│ │ │ -
950 * Returns a read-only (constant) reverse iterator that points
│ │ │ -
951 * to one before the first element in the %vector. Iteration
│ │ │ -
952 * is done in reverse element order.
│ │ │ -
953 */
│ │ │ -
954 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
955 const_reverse_iterator
│ │ │ -
│ │ │ - │ │ │ -
957 { return const_reverse_iterator(begin()); }
│ │ │ -
│ │ │ -
958
│ │ │ -
959#if __cplusplus >= 201103L
│ │ │ -
960 /**
│ │ │ -
961 * Returns a read-only (constant) iterator that points to the
│ │ │ -
962 * first element in the %vector. Iteration is done in ordinary
│ │ │ -
963 * element order.
│ │ │ -
964 */
│ │ │ - │ │ │ -
966 const_iterator
│ │ │ -
│ │ │ -
967 cbegin() const noexcept
│ │ │ -
968 { return const_iterator(this->_M_impl._M_start); }
│ │ │ -
│ │ │ -
969
│ │ │ -
970 /**
│ │ │ -
971 * Returns a read-only (constant) iterator that points one past
│ │ │ -
972 * the last element in the %vector. Iteration is done in
│ │ │ -
973 * ordinary element order.
│ │ │ -
974 */
│ │ │ - │ │ │ -
976 const_iterator
│ │ │ -
│ │ │ -
977 cend() const noexcept
│ │ │ -
978 { return const_iterator(this->_M_impl._M_finish); }
│ │ │ -
│ │ │ -
979
│ │ │ -
980 /**
│ │ │ -
981 * Returns a read-only (constant) reverse iterator that points
│ │ │ -
982 * to the last element in the %vector. Iteration is done in
│ │ │ -
983 * reverse element order.
│ │ │ -
984 */
│ │ │ - │ │ │ -
986 const_reverse_iterator
│ │ │ -
│ │ │ -
987 crbegin() const noexcept
│ │ │ -
988 { return const_reverse_iterator(end()); }
│ │ │ -
│ │ │ -
989
│ │ │ -
990 /**
│ │ │ -
991 * Returns a read-only (constant) reverse iterator that points
│ │ │ -
992 * to one before the first element in the %vector. Iteration
│ │ │ -
993 * is done in reverse element order.
│ │ │ -
994 */
│ │ │ - │ │ │ -
996 const_reverse_iterator
│ │ │ -
│ │ │ -
997 crend() const noexcept
│ │ │ -
998 { return const_reverse_iterator(begin()); }
│ │ │ -
│ │ │ -
999#endif
│ │ │ -
1000
│ │ │ -
1001 // [23.2.4.2] capacity
│ │ │ -
1002 /** Returns the number of elements in the %vector. */
│ │ │ -
1003 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1004 size_type
│ │ │ -
│ │ │ - │ │ │ -
1006 { return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); }
│ │ │ -
│ │ │ -
1007
│ │ │ -
1008 /** Returns the size() of the largest possible %vector. */
│ │ │ -
1009 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1010 size_type
│ │ │ -
│ │ │ - │ │ │ -
1012 { return _S_max_size(_M_get_Tp_allocator()); }
│ │ │ -
│ │ │ -
1013
│ │ │ -
1014#if __cplusplus >= 201103L
│ │ │ -
1015 /**
│ │ │ -
1016 * @brief Resizes the %vector to the specified number of elements.
│ │ │ -
1017 * @param __new_size Number of elements the %vector should contain.
│ │ │ -
1018 *
│ │ │ -
1019 * This function will %resize the %vector to the specified
│ │ │ -
1020 * number of elements. If the number is smaller than the
│ │ │ -
1021 * %vector's current size the %vector is truncated, otherwise
│ │ │ -
1022 * default constructed elements are appended.
│ │ │ -
1023 */
│ │ │ - │ │ │ -
1025 void
│ │ │ -
│ │ │ - │ │ │ -
1027 {
│ │ │ -
1028 if (__new_size > size())
│ │ │ -
1029 _M_default_append(__new_size - size());
│ │ │ -
1030 else if (__new_size < size())
│ │ │ -
1031 _M_erase_at_end(this->_M_impl._M_start + __new_size);
│ │ │ -
1032 }
│ │ │ -
│ │ │ -
1033
│ │ │ -
1034 /**
│ │ │ -
1035 * @brief Resizes the %vector to the specified number of elements.
│ │ │ -
1036 * @param __new_size Number of elements the %vector should contain.
│ │ │ -
1037 * @param __x Data with which new elements should be populated.
│ │ │ -
1038 *
│ │ │ -
1039 * This function will %resize the %vector to the specified
│ │ │ -
1040 * number of elements. If the number is smaller than the
│ │ │ -
1041 * %vector's current size the %vector is truncated, otherwise
│ │ │ -
1042 * the %vector is extended and new elements are populated with
│ │ │ -
1043 * given data.
│ │ │ -
1044 */
│ │ │ - │ │ │ -
1046 void
│ │ │ -
│ │ │ -
1047 resize(size_type __new_size, const value_type& __x)
│ │ │ -
1048 {
│ │ │ -
1049 if (__new_size > size())
│ │ │ -
1050 _M_fill_insert(end(), __new_size - size(), __x);
│ │ │ -
1051 else if (__new_size < size())
│ │ │ -
1052 _M_erase_at_end(this->_M_impl._M_start + __new_size);
│ │ │ -
1053 }
│ │ │ -
│ │ │ -
1054#else
│ │ │ -
1055 /**
│ │ │ -
1056 * @brief Resizes the %vector to the specified number of elements.
│ │ │ -
1057 * @param __new_size Number of elements the %vector should contain.
│ │ │ -
1058 * @param __x Data with which new elements should be populated.
│ │ │ -
1059 *
│ │ │ -
1060 * This function will %resize the %vector to the specified
│ │ │ -
1061 * number of elements. If the number is smaller than the
│ │ │ -
1062 * %vector's current size the %vector is truncated, otherwise
│ │ │ -
1063 * the %vector is extended and new elements are populated with
│ │ │ -
1064 * given data.
│ │ │ -
1065 */
│ │ │ - │ │ │ -
1067 void
│ │ │ -
1068 resize(size_type __new_size, value_type __x = value_type())
│ │ │ -
1069 {
│ │ │ -
1070 if (__new_size > size())
│ │ │ -
1071 _M_fill_insert(end(), __new_size - size(), __x);
│ │ │ -
1072 else if (__new_size < size())
│ │ │ -
1073 _M_erase_at_end(this->_M_impl._M_start + __new_size);
│ │ │ -
1074 }
│ │ │ -
1075#endif
│ │ │ -
1076
│ │ │ -
1077#if __cplusplus >= 201103L
│ │ │ -
1078 /** A non-binding request to reduce capacity() to size(). */
│ │ │ -
1079 _GLIBCXX20_CONSTEXPR
│ │ │ -
1080 void
│ │ │ -
│ │ │ - │ │ │ -
1082 { _M_shrink_to_fit(); }
│ │ │ -
│ │ │ -
1083#endif
│ │ │ -
1084
│ │ │ -
1085 /**
│ │ │ -
1086 * Returns the total number of elements that the %vector can
│ │ │ -
1087 * hold before needing to allocate more memory.
│ │ │ -
1088 */
│ │ │ -
1089 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1090 size_type
│ │ │ -
│ │ │ - │ │ │ -
1092 {
│ │ │ -
1093 return size_type(this->_M_impl._M_end_of_storage
│ │ │ -
1094 - this->_M_impl._M_start);
│ │ │ -
1095 }
│ │ │ -
│ │ │ -
1096
│ │ │ -
1097 /**
│ │ │ -
1098 * Returns true if the %vector is empty. (Thus begin() would
│ │ │ -
1099 * equal end().)
│ │ │ -
1100 */
│ │ │ -
1101 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1102 bool
│ │ │ -
│ │ │ - │ │ │ -
1104 { return begin() == end(); }
│ │ │ -
│ │ │ -
1105
│ │ │ -
1106 /**
│ │ │ -
1107 * @brief Attempt to preallocate enough memory for specified number of
│ │ │ -
1108 * elements.
│ │ │ -
1109 * @param __n Number of elements required.
│ │ │ -
1110 * @throw std::length_error If @a n exceeds @c max_size().
│ │ │ -
1111 *
│ │ │ -
1112 * This function attempts to reserve enough memory for the
│ │ │ -
1113 * %vector to hold the specified number of elements. If the
│ │ │ -
1114 * number requested is more than max_size(), length_error is
│ │ │ -
1115 * thrown.
│ │ │ -
1116 *
│ │ │ -
1117 * The advantage of this function is that if optimal code is a
│ │ │ -
1118 * necessity and the user can determine the number of elements
│ │ │ -
1119 * that will be required, the user can reserve the memory in
│ │ │ -
1120 * %advance, and thus prevent a possible reallocation of memory
│ │ │ -
1121 * and copying of %vector data.
│ │ │ -
1122 */
│ │ │ - │ │ │ -
1124 void
│ │ │ -
1125 reserve(size_type __n);
│ │ │ -
1126
│ │ │ -
1127 // element access
│ │ │ -
1128 /**
│ │ │ -
1129 * @brief Subscript access to the data contained in the %vector.
│ │ │ -
1130 * @param __n The index of the element for which data should be
│ │ │ -
1131 * accessed.
│ │ │ -
1132 * @return Read/write reference to data.
│ │ │ -
1133 *
│ │ │ -
1134 * This operator allows for easy, array-style, data access.
│ │ │ -
1135 * Note that data access with this operator is unchecked and
│ │ │ -
1136 * out_of_range lookups are not defined. (For checked lookups
│ │ │ -
1137 * see at().)
│ │ │ -
1138 */
│ │ │ -
1139 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1140 reference
│ │ │ -
│ │ │ - │ │ │ -
1142 {
│ │ │ -
1143 __glibcxx_requires_subscript(__n);
│ │ │ -
1144 return *(this->_M_impl._M_start + __n);
│ │ │ -
1145 }
│ │ │ -
│ │ │ -
1146
│ │ │ -
1147 /**
│ │ │ -
1148 * @brief Subscript access to the data contained in the %vector.
│ │ │ -
1149 * @param __n The index of the element for which data should be
│ │ │ -
1150 * accessed.
│ │ │ -
1151 * @return Read-only (constant) reference to data.
│ │ │ -
1152 *
│ │ │ -
1153 * This operator allows for easy, array-style, data access.
│ │ │ -
1154 * Note that data access with this operator is unchecked and
│ │ │ -
1155 * out_of_range lookups are not defined. (For checked lookups
│ │ │ -
1156 * see at().)
│ │ │ -
1157 */
│ │ │ -
1158 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1159 const_reference
│ │ │ -
│ │ │ -
1160 operator[](size_type __n) const _GLIBCXX_NOEXCEPT
│ │ │ -
1161 {
│ │ │ -
1162 __glibcxx_requires_subscript(__n);
│ │ │ -
1163 return *(this->_M_impl._M_start + __n);
│ │ │ -
1164 }
│ │ │ -
│ │ │ -
1165
│ │ │ -
1166 protected:
│ │ │ -
1167 /// Safety check used only from at().
│ │ │ - │ │ │ -
1169 void
│ │ │ -
│ │ │ -
1170 _M_range_check(size_type __n) const
│ │ │ -
1171 {
│ │ │ -
1172 if (__n >= this->size())
│ │ │ -
1173 __throw_out_of_range_fmt(__N("vector::_M_range_check: __n "
│ │ │ -
1174 "(which is %zu) >= this->size() "
│ │ │ -
1175 "(which is %zu)"),
│ │ │ -
1176 __n, this->size());
│ │ │ -
1177 }
│ │ │ -
│ │ │ -
1178
│ │ │ -
1179 public:
│ │ │ -
1180 /**
│ │ │ -
1181 * @brief Provides access to the data contained in the %vector.
│ │ │ -
1182 * @param __n The index of the element for which data should be
│ │ │ -
1183 * accessed.
│ │ │ -
1184 * @return Read/write reference to data.
│ │ │ -
1185 * @throw std::out_of_range If @a __n is an invalid index.
│ │ │ -
1186 *
│ │ │ -
1187 * This function provides for safer data access. The parameter
│ │ │ -
1188 * is first checked that it is in the range of the vector. The
│ │ │ -
1189 * function throws out_of_range if the check fails.
│ │ │ -
1190 */
│ │ │ -
1191 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1192 reference
│ │ │ -
│ │ │ -
1193 at(size_type __n)
│ │ │ -
1194 {
│ │ │ -
1195 _M_range_check(__n);
│ │ │ -
1196 return (*this)[__n];
│ │ │ -
1197 }
│ │ │ -
│ │ │ -
1198
│ │ │ -
1199 /**
│ │ │ -
1200 * @brief Provides access to the data contained in the %vector.
│ │ │ -
1201 * @param __n The index of the element for which data should be
│ │ │ -
1202 * accessed.
│ │ │ -
1203 * @return Read-only (constant) reference to data.
│ │ │ -
1204 * @throw std::out_of_range If @a __n is an invalid index.
│ │ │ -
1205 *
│ │ │ -
1206 * This function provides for safer data access. The parameter
│ │ │ -
1207 * is first checked that it is in the range of the vector. The
│ │ │ -
1208 * function throws out_of_range if the check fails.
│ │ │ -
1209 */
│ │ │ -
1210 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1211 const_reference
│ │ │ -
│ │ │ -
1212 at(size_type __n) const
│ │ │ -
1213 {
│ │ │ -
1214 _M_range_check(__n);
│ │ │ -
1215 return (*this)[__n];
│ │ │ -
1216 }
│ │ │ -
│ │ │ -
1217
│ │ │ -
1218 /**
│ │ │ -
1219 * Returns a read/write reference to the data at the first
│ │ │ -
1220 * element of the %vector.
│ │ │ -
1221 */
│ │ │ -
1222 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1223 reference
│ │ │ -
│ │ │ - │ │ │ -
1225 {
│ │ │ -
1226 __glibcxx_requires_nonempty();
│ │ │ -
1227 return *begin();
│ │ │ -
1228 }
│ │ │ -
│ │ │ -
1229
│ │ │ -
1230 /**
│ │ │ -
1231 * Returns a read-only (constant) reference to the data at the first
│ │ │ -
1232 * element of the %vector.
│ │ │ -
1233 */
│ │ │ -
1234 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1235 const_reference
│ │ │ -
│ │ │ - │ │ │ -
1237 {
│ │ │ -
1238 __glibcxx_requires_nonempty();
│ │ │ -
1239 return *begin();
│ │ │ -
1240 }
│ │ │ -
│ │ │ -
1241
│ │ │ -
1242 /**
│ │ │ -
1243 * Returns a read/write reference to the data at the last
│ │ │ -
1244 * element of the %vector.
│ │ │ -
1245 */
│ │ │ -
1246 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1247 reference
│ │ │ -
│ │ │ - │ │ │ -
1249 {
│ │ │ -
1250 __glibcxx_requires_nonempty();
│ │ │ -
1251 return *(end() - 1);
│ │ │ -
1252 }
│ │ │ -
│ │ │ -
1253
│ │ │ -
1254 /**
│ │ │ -
1255 * Returns a read-only (constant) reference to the data at the
│ │ │ -
1256 * last element of the %vector.
│ │ │ -
1257 */
│ │ │ -
1258 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1259 const_reference
│ │ │ -
│ │ │ - │ │ │ -
1261 {
│ │ │ -
1262 __glibcxx_requires_nonempty();
│ │ │ -
1263 return *(end() - 1);
│ │ │ -
1264 }
│ │ │ -
│ │ │ -
1265
│ │ │ -
1266 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1267 // DR 464. Suggestion for new member functions in standard containers.
│ │ │ -
1268 // data access
│ │ │ -
1269 /**
│ │ │ -
1270 * Returns a pointer such that [data(), data() + size()) is a valid
│ │ │ -
1271 * range. For a non-empty %vector, data() == &front().
│ │ │ -
1272 */
│ │ │ -
1273 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1274 _Tp*
│ │ │ -
│ │ │ - │ │ │ -
1276 { return _M_data_ptr(this->_M_impl._M_start); }
│ │ │ -
│ │ │ -
1277
│ │ │ -
1278 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1279 const _Tp*
│ │ │ - │ │ │ -
1281 { return _M_data_ptr(this->_M_impl._M_start); }
│ │ │ -
1282
│ │ │ -
1283 // [23.2.4.3] modifiers
│ │ │ -
1284 /**
│ │ │ -
1285 * @brief Add data to the end of the %vector.
│ │ │ -
1286 * @param __x Data to be added.
│ │ │ -
1287 *
│ │ │ -
1288 * This is a typical stack operation. The function creates an
│ │ │ -
1289 * element at the end of the %vector and assigns the given data
│ │ │ -
1290 * to it. Due to the nature of a %vector this operation can be
│ │ │ -
1291 * done in constant time if the %vector has preallocated space
│ │ │ -
1292 * available.
│ │ │ -
1293 */
│ │ │ -
1294 _GLIBCXX20_CONSTEXPR
│ │ │ -
1295 void
│ │ │ -
│ │ │ -
1296 push_back(const value_type& __x)
│ │ │ -
1297 {
│ │ │ -
1298 if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
│ │ │ -
1299 {
│ │ │ -
1300 _GLIBCXX_ASAN_ANNOTATE_GROW(1);
│ │ │ -
1301 _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
│ │ │ -
1302 __x);
│ │ │ -
1303 ++this->_M_impl._M_finish;
│ │ │ -
1304 _GLIBCXX_ASAN_ANNOTATE_GREW(1);
│ │ │ -
1305 }
│ │ │ -
1306 else
│ │ │ -
1307 _M_realloc_append(__x);
│ │ │ -
1308 }
│ │ │ -
│ │ │ -
1309
│ │ │ -
1310#if __cplusplus >= 201103L
│ │ │ - │ │ │ -
1312 void
│ │ │ -
1313 push_back(value_type&& __x)
│ │ │ -
1314 { emplace_back(std::move(__x)); }
│ │ │ -
1315
│ │ │ -
1316 template<typename... _Args>
│ │ │ -
1317#if __cplusplus > 201402L
│ │ │ -
1318 _GLIBCXX20_CONSTEXPR
│ │ │ -
1319 reference
│ │ │ -
1320#else
│ │ │ -
1321 void
│ │ │ -
1322#endif
│ │ │ -
1323 emplace_back(_Args&&... __args);
│ │ │ -
1324#endif
│ │ │ -
1325
│ │ │ -
1326 /**
│ │ │ -
1327 * @brief Removes last element.
│ │ │ -
1328 *
│ │ │ -
1329 * This is a typical stack operation. It shrinks the %vector by one.
│ │ │ -
1330 *
│ │ │ -
1331 * Note that no data is returned, and if the last element's
│ │ │ -
1332 * data is needed, it should be retrieved before pop_back() is
│ │ │ -
1333 * called.
│ │ │ -
1334 */
│ │ │ -
1335 _GLIBCXX20_CONSTEXPR
│ │ │ -
1336 void
│ │ │ -
│ │ │ - │ │ │ -
1338 {
│ │ │ -
1339 __glibcxx_requires_nonempty();
│ │ │ -
1340 --this->_M_impl._M_finish;
│ │ │ -
1341 _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish);
│ │ │ -
1342 _GLIBCXX_ASAN_ANNOTATE_SHRINK(1);
│ │ │ -
1343 }
│ │ │ -
│ │ │ -
1344
│ │ │ -
1345#if __cplusplus >= 201103L
│ │ │ -
1346 /**
│ │ │ -
1347 * @brief Inserts an object in %vector before specified iterator.
│ │ │ -
1348 * @param __position A const_iterator into the %vector.
│ │ │ -
1349 * @param __args Arguments.
│ │ │ -
1350 * @return An iterator that points to the inserted data.
│ │ │ -
1351 *
│ │ │ -
1352 * This function will insert an object of type T constructed
│ │ │ -
1353 * with T(std::forward<Args>(args)...) before the specified location.
│ │ │ -
1354 * Note that this kind of operation could be expensive for a %vector
│ │ │ -
1355 * and if it is frequently used the user should consider using
│ │ │ -
1356 * std::list.
│ │ │ -
1357 */
│ │ │ -
1358 template<typename... _Args>
│ │ │ - │ │ │ -
1360 iterator
│ │ │ -
│ │ │ -
1361 emplace(const_iterator __position, _Args&&... __args)
│ │ │ -
1362 { return _M_emplace_aux(__position, std::forward<_Args>(__args)...); }
│ │ │ -
│ │ │ -
1363
│ │ │ -
1364 /**
│ │ │ -
1365 * @brief Inserts given value into %vector before specified iterator.
│ │ │ -
1366 * @param __position A const_iterator into the %vector.
│ │ │ -
1367 * @param __x Data to be inserted.
│ │ │ -
1368 * @return An iterator that points to the inserted data.
│ │ │ -
1369 *
│ │ │ -
1370 * This function will insert a copy of the given value before
│ │ │ -
1371 * the specified location. Note that this kind of operation
│ │ │ -
1372 * could be expensive for a %vector and if it is frequently
│ │ │ -
1373 * used the user should consider using std::list.
│ │ │ -
1374 */
│ │ │ - │ │ │ -
1376 iterator
│ │ │ -
1377 insert(const_iterator __position, const value_type& __x);
│ │ │ -
1378#else
│ │ │ -
1379 /**
│ │ │ -
1380 * @brief Inserts given value into %vector before specified iterator.
│ │ │ -
1381 * @param __position An iterator into the %vector.
│ │ │ -
1382 * @param __x Data to be inserted.
│ │ │ -
1383 * @return An iterator that points to the inserted data.
│ │ │ -
1384 *
│ │ │ -
1385 * This function will insert a copy of the given value before
│ │ │ -
1386 * the specified location. Note that this kind of operation
│ │ │ -
1387 * could be expensive for a %vector and if it is frequently
│ │ │ -
1388 * used the user should consider using std::list.
│ │ │ -
1389 */
│ │ │ -
1390 iterator
│ │ │ -
1391 insert(iterator __position, const value_type& __x);
│ │ │ -
1392#endif
│ │ │ -
1393
│ │ │ -
1394#if __cplusplus >= 201103L
│ │ │ -
1395 /**
│ │ │ -
1396 * @brief Inserts given rvalue into %vector before specified iterator.
│ │ │ -
1397 * @param __position A const_iterator into the %vector.
│ │ │ -
1398 * @param __x Data to be inserted.
│ │ │ -
1399 * @return An iterator that points to the inserted data.
│ │ │ -
1400 *
│ │ │ -
1401 * This function will insert a copy of the given rvalue before
│ │ │ -
1402 * the specified location. Note that this kind of operation
│ │ │ -
1403 * could be expensive for a %vector and if it is frequently
│ │ │ -
1404 * used the user should consider using std::list.
│ │ │ -
1405 */
│ │ │ - │ │ │ -
1407 iterator
│ │ │ -
│ │ │ -
1408 insert(const_iterator __position, value_type&& __x)
│ │ │ -
1409 { return _M_insert_rval(__position, std::move(__x)); }
│ │ │ -
│ │ │ -
1410
│ │ │ -
1411 /**
│ │ │ -
1412 * @brief Inserts an initializer_list into the %vector.
│ │ │ -
1413 * @param __position An iterator into the %vector.
│ │ │ -
1414 * @param __l An initializer_list.
│ │ │ -
1415 *
│ │ │ -
1416 * This function will insert copies of the data in the
│ │ │ -
1417 * initializer_list @a l into the %vector before the location
│ │ │ -
1418 * specified by @a position.
│ │ │ -
1419 *
│ │ │ -
1420 * Note that this kind of operation could be expensive for a
│ │ │ -
1421 * %vector and if it is frequently used the user should
│ │ │ -
1422 * consider using std::list.
│ │ │ -
1423 */
│ │ │ - │ │ │ -
1425 iterator
│ │ │ -
│ │ │ - │ │ │ -
1427 {
│ │ │ -
1428 auto __offset = __position - cbegin();
│ │ │ -
1429 _M_range_insert(begin() + __offset, __l.begin(), __l.end(),
│ │ │ - │ │ │ -
1431 return begin() + __offset;
│ │ │ -
1432 }
│ │ │ -
│ │ │ -
1433#endif
│ │ │ -
1434
│ │ │ -
1435#if __cplusplus >= 201103L
│ │ │ -
1436 /**
│ │ │ -
1437 * @brief Inserts a number of copies of given data into the %vector.
│ │ │ -
1438 * @param __position A const_iterator into the %vector.
│ │ │ -
1439 * @param __n Number of elements to be inserted.
│ │ │ -
1440 * @param __x Data to be inserted.
│ │ │ -
1441 * @return An iterator that points to the inserted data.
│ │ │ -
1442 *
│ │ │ -
1443 * This function will insert a specified number of copies of
│ │ │ -
1444 * the given data before the location specified by @a position.
│ │ │ -
1445 *
│ │ │ -
1446 * Note that this kind of operation could be expensive for a
│ │ │ -
1447 * %vector and if it is frequently used the user should
│ │ │ -
1448 * consider using std::list.
│ │ │ -
1449 */
│ │ │ - │ │ │ -
1451 iterator
│ │ │ -
│ │ │ -
1452 insert(const_iterator __position, size_type __n, const value_type& __x)
│ │ │ -
1453 {
│ │ │ -
1454 difference_type __offset = __position - cbegin();
│ │ │ -
1455 _M_fill_insert(begin() + __offset, __n, __x);
│ │ │ -
1456 return begin() + __offset;
│ │ │ -
1457 }
│ │ │ -
│ │ │ -
1458#else
│ │ │ -
1459 /**
│ │ │ -
1460 * @brief Inserts a number of copies of given data into the %vector.
│ │ │ -
1461 * @param __position An iterator into the %vector.
│ │ │ -
1462 * @param __n Number of elements to be inserted.
│ │ │ -
1463 * @param __x Data to be inserted.
│ │ │ -
1464 *
│ │ │ -
1465 * This function will insert a specified number of copies of
│ │ │ -
1466 * the given data before the location specified by @a position.
│ │ │ -
1467 *
│ │ │ -
1468 * Note that this kind of operation could be expensive for a
│ │ │ -
1469 * %vector and if it is frequently used the user should
│ │ │ -
1470 * consider using std::list.
│ │ │ -
1471 */
│ │ │ -
1472 void
│ │ │ -
1473 insert(iterator __position, size_type __n, const value_type& __x)
│ │ │ -
1474 { _M_fill_insert(__position, __n, __x); }
│ │ │ -
1475#endif
│ │ │ -
1476
│ │ │ -
1477#if __cplusplus >= 201103L
│ │ │ -
1478 /**
│ │ │ -
1479 * @brief Inserts a range into the %vector.
│ │ │ -
1480 * @param __position A const_iterator into the %vector.
│ │ │ -
1481 * @param __first An input iterator.
│ │ │ -
1482 * @param __last An input iterator.
│ │ │ -
1483 * @return An iterator that points to the inserted data.
│ │ │ -
1484 *
│ │ │ -
1485 * This function will insert copies of the data in the range
│ │ │ -
1486 * [__first,__last) into the %vector before the location specified
│ │ │ -
1487 * by @a pos.
│ │ │ -
1488 *
│ │ │ -
1489 * Note that this kind of operation could be expensive for a
│ │ │ -
1490 * %vector and if it is frequently used the user should
│ │ │ -
1491 * consider using std::list.
│ │ │ -
1492 */
│ │ │ -
1493 template<typename _InputIterator,
│ │ │ - │ │ │ -
1495 _GLIBCXX20_CONSTEXPR
│ │ │ -
1496 iterator
│ │ │ -
│ │ │ -
1497 insert(const_iterator __position, _InputIterator __first,
│ │ │ -
1498 _InputIterator __last)
│ │ │ -
1499 {
│ │ │ -
1500 difference_type __offset = __position - cbegin();
│ │ │ -
1501 _M_range_insert(begin() + __offset, __first, __last,
│ │ │ -
1502 std::__iterator_category(__first));
│ │ │ -
1503 return begin() + __offset;
│ │ │ -
1504 }
│ │ │ -
│ │ │ -
1505#else
│ │ │ -
1506 /**
│ │ │ -
1507 * @brief Inserts a range into the %vector.
│ │ │ -
1508 * @param __position An iterator into the %vector.
│ │ │ -
1509 * @param __first An input iterator.
│ │ │ -
1510 * @param __last An input iterator.
│ │ │ -
1511 *
│ │ │ -
1512 * This function will insert copies of the data in the range
│ │ │ -
1513 * [__first,__last) into the %vector before the location specified
│ │ │ -
1514 * by @a pos.
│ │ │ -
1515 *
│ │ │ -
1516 * Note that this kind of operation could be expensive for a
│ │ │ -
1517 * %vector and if it is frequently used the user should
│ │ │ -
1518 * consider using std::list.
│ │ │ -
1519 */
│ │ │ -
1520 template<typename _InputIterator>
│ │ │ -
1521 void
│ │ │ - │ │ │ -
1523 _InputIterator __last)
│ │ │ -
1524 {
│ │ │ -
1525 // Check whether it's an integral type. If so, it's not an iterator.
│ │ │ -
1526 typedef typename std::__is_integer<_InputIterator>::__type _Integral;
│ │ │ -
1527 _M_insert_dispatch(__position, __first, __last, _Integral());
│ │ │ -
1528 }
│ │ │ -
1529#endif
│ │ │ -
1530
│ │ │ -
1531 /**
│ │ │ -
1532 * @brief Remove element at given position.
│ │ │ -
1533 * @param __position Iterator pointing to element to be erased.
│ │ │ -
1534 * @return An iterator pointing to the next element (or end()).
│ │ │ -
1535 *
│ │ │ -
1536 * This function will erase the element at the given position and thus
│ │ │ -
1537 * shorten the %vector by one.
│ │ │ -
1538 *
│ │ │ -
1539 * Note This operation could be expensive and if it is
│ │ │ -
1540 * frequently used the user should consider using std::list.
│ │ │ -
1541 * The user is also cautioned that this function only erases
│ │ │ -
1542 * the element, and that if the element is itself a pointer,
│ │ │ -
1543 * the pointed-to memory is not touched in any way. Managing
│ │ │ -
1544 * the pointer is the user's responsibility.
│ │ │ -
1545 */
│ │ │ -
1546 _GLIBCXX20_CONSTEXPR
│ │ │ -
1547 iterator
│ │ │ -
1548#if __cplusplus >= 201103L
│ │ │ -
│ │ │ -
1549 erase(const_iterator __position)
│ │ │ -
1550 { return _M_erase(begin() + (__position - cbegin())); }
│ │ │ -
│ │ │ -
1551#else
│ │ │ - │ │ │ -
1553 { return _M_erase(__position); }
│ │ │ -
1554#endif
│ │ │ -
1555
│ │ │ -
1556 /**
│ │ │ -
1557 * @brief Remove a range of elements.
│ │ │ -
1558 * @param __first Iterator pointing to the first element to be erased.
│ │ │ -
1559 * @param __last Iterator pointing to one past the last element to be
│ │ │ -
1560 * erased.
│ │ │ -
1561 * @return An iterator pointing to the element pointed to by @a __last
│ │ │ -
1562 * prior to erasing (or end()).
│ │ │ -
1563 *
│ │ │ -
1564 * This function will erase the elements in the range
│ │ │ -
1565 * [__first,__last) and shorten the %vector accordingly.
│ │ │ -
1566 *
│ │ │ -
1567 * Note This operation could be expensive and if it is
│ │ │ -
1568 * frequently used the user should consider using std::list.
│ │ │ -
1569 * The user is also cautioned that this function only erases
│ │ │ -
1570 * the elements, and that if the elements themselves are
│ │ │ -
1571 * pointers, the pointed-to memory is not touched in any way.
│ │ │ -
1572 * Managing the pointer is the user's responsibility.
│ │ │ -
1573 */
│ │ │ -
1574 _GLIBCXX20_CONSTEXPR
│ │ │ -
1575 iterator
│ │ │ -
1576#if __cplusplus >= 201103L
│ │ │ -
│ │ │ -
1577 erase(const_iterator __first, const_iterator __last)
│ │ │ -
1578 {
│ │ │ -
1579 const auto __beg = begin();
│ │ │ -
1580 const auto __cbeg = cbegin();
│ │ │ -
1581 return _M_erase(__beg + (__first - __cbeg), __beg + (__last - __cbeg));
│ │ │ -
1582 }
│ │ │ -
│ │ │ -
1583#else
│ │ │ -
1584 erase(iterator __first, iterator __last)
│ │ │ -
1585 { return _M_erase(__first, __last); }
│ │ │ -
1586#endif
│ │ │ -
1587
│ │ │ -
1588 /**
│ │ │ -
1589 * @brief Swaps data with another %vector.
│ │ │ -
1590 * @param __x A %vector of the same element and allocator types.
│ │ │ -
1591 *
│ │ │ -
1592 * This exchanges the elements between two vectors in constant time.
│ │ │ -
1593 * (Three pointers, so it should be quite fast.)
│ │ │ -
1594 * Note that the global std::swap() function is specialized such that
│ │ │ -
1595 * std::swap(v1,v2) will feed to this function.
│ │ │ -
1596 *
│ │ │ -
1597 * Whether the allocators are swapped depends on the allocator traits.
│ │ │ -
1598 */
│ │ │ -
1599 _GLIBCXX20_CONSTEXPR
│ │ │ -
1600 void
│ │ │ -
│ │ │ - │ │ │ -
1602 {
│ │ │ -
1603#if __cplusplus >= 201103L
│ │ │ -
1604 __glibcxx_assert(_Alloc_traits::propagate_on_container_swap::value
│ │ │ -
1605 || _M_get_Tp_allocator() == __x._M_get_Tp_allocator());
│ │ │ -
1606#endif
│ │ │ -
1607 this->_M_impl._M_swap_data(__x._M_impl);
│ │ │ -
1608 _Alloc_traits::_S_on_swap(_M_get_Tp_allocator(),
│ │ │ -
1609 __x._M_get_Tp_allocator());
│ │ │ -
1610 }
│ │ │ -
│ │ │ -
1611
│ │ │ -
1612 /**
│ │ │ -
1613 * Erases all the elements. Note that this function only erases the
│ │ │ -
1614 * elements, and that if the elements themselves are pointers, the
│ │ │ -
1615 * pointed-to memory is not touched in any way. Managing the pointer is
│ │ │ -
1616 * the user's responsibility.
│ │ │ -
1617 */
│ │ │ - │ │ │ -
1619 void
│ │ │ -
│ │ │ - │ │ │ -
1621 { _M_erase_at_end(this->_M_impl._M_start); }
│ │ │ -
│ │ │ -
1622
│ │ │ -
1623 protected:
│ │ │ -
1624 /**
│ │ │ -
1625 * Memory expansion handler. Uses the member allocation function to
│ │ │ -
1626 * obtain @a n bytes of memory, and then copies [first,last) into it.
│ │ │ -
1627 */
│ │ │ -
1628 template<typename _ForwardIterator>
│ │ │ - │ │ │ -
1630 pointer
│ │ │ -
│ │ │ - │ │ │ -
1632 _ForwardIterator __first, _ForwardIterator __last)
│ │ │ -
1633 {
│ │ │ -
1634 pointer __result = this->_M_allocate(__n);
│ │ │ -
1635 __try
│ │ │ -
1636 {
│ │ │ -
1637 std::__uninitialized_copy_a(__first, __last, __result,
│ │ │ -
1638 _M_get_Tp_allocator());
│ │ │ -
1639 return __result;
│ │ │ -
1640 }
│ │ │ -
1641 __catch(...)
│ │ │ -
1642 {
│ │ │ -
1643 _M_deallocate(__result, __n);
│ │ │ -
1644 __throw_exception_again;
│ │ │ -
1645 }
│ │ │ -
1646 }
│ │ │ -
│ │ │ -
1647
│ │ │ -
1648
│ │ │ -
1649 // Internal constructor functions follow.
│ │ │ -
1650
│ │ │ -
1651 // Called by the range constructor to implement [23.1.1]/9
│ │ │ -
1652
│ │ │ -
1653#if __cplusplus < 201103L
│ │ │ -
1654 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1655 // 438. Ambiguity in the "do the right thing" clause
│ │ │ -
1656 template<typename _Integer>
│ │ │ -
1657 void
│ │ │ -
1658 _M_initialize_dispatch(_Integer __n, _Integer __value, __true_type)
│ │ │ -
1659 {
│ │ │ -
1660 this->_M_impl._M_start = _M_allocate(_S_check_init_len(
│ │ │ -
1661 static_cast<size_type>(__n), _M_get_Tp_allocator()));
│ │ │ -
1662 this->_M_impl._M_end_of_storage =
│ │ │ -
1663 this->_M_impl._M_start + static_cast<size_type>(__n);
│ │ │ -
1664 _M_fill_initialize(static_cast<size_type>(__n), __value);
│ │ │ -
1665 }
│ │ │ -
1666
│ │ │ -
1667 // Called by the range constructor to implement [23.1.1]/9
│ │ │ -
1668 template<typename _InputIterator>
│ │ │ -
1669 void
│ │ │ -
1670 _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
│ │ │ -
1671 __false_type)
│ │ │ -
1672 {
│ │ │ -
1673 _M_range_initialize(__first, __last,
│ │ │ -
1674 std::__iterator_category(__first));
│ │ │ -
1675 }
│ │ │ -
1676#endif
│ │ │ -
1677
│ │ │ -
1678 // Called by the second initialize_dispatch above
│ │ │ -
1679 template<typename _InputIterator>
│ │ │ -
1680 _GLIBCXX20_CONSTEXPR
│ │ │ -
1681 void
│ │ │ -
1682 _M_range_initialize(_InputIterator __first, _InputIterator __last,
│ │ │ - │ │ │ -
1684 {
│ │ │ -
1685 __try {
│ │ │ -
1686 for (; __first != __last; ++__first)
│ │ │ -
1687#if __cplusplus >= 201103L
│ │ │ -
1688 emplace_back(*__first);
│ │ │ -
1689#else
│ │ │ -
1690 push_back(*__first);
│ │ │ -
1691#endif
│ │ │ -
1692 } __catch(...) {
│ │ │ -
1693 clear();
│ │ │ -
1694 __throw_exception_again;
│ │ │ -
1695 }
│ │ │ -
1696 }
│ │ │ -
1697
│ │ │ -
1698 // Called by the second initialize_dispatch above
│ │ │ -
1699 template<typename _ForwardIterator>
│ │ │ -
1700 _GLIBCXX20_CONSTEXPR
│ │ │ -
1701 void
│ │ │ -
1702 _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last,
│ │ │ - │ │ │ -
1704 {
│ │ │ -
1705 _M_range_initialize_n(__first, __last,
│ │ │ -
1706 std::distance(__first, __last));
│ │ │ -
1707 }
│ │ │ -
1708
│ │ │ -
1709 template<typename _Iterator>
│ │ │ -
1710 _GLIBCXX20_CONSTEXPR
│ │ │ -
1711 void
│ │ │ -
1712 _M_range_initialize_n(_Iterator __first, _Iterator __last,
│ │ │ -
1713 size_type __n)
│ │ │ -
1714 {
│ │ │ -
1715 pointer __start = this->_M_impl._M_start =
│ │ │ -
1716 this->_M_allocate(_S_check_init_len(__n, _M_get_Tp_allocator()));
│ │ │ -
1717 this->_M_impl._M_end_of_storage = __start + __n;
│ │ │ -
1718 this->_M_impl._M_finish
│ │ │ -
1719 = std::__uninitialized_copy_a(_GLIBCXX_MOVE(__first), __last,
│ │ │ -
1720 __start, _M_get_Tp_allocator());
│ │ │ -
1721 }
│ │ │ -
1722
│ │ │ -
1723 // Called by the first initialize_dispatch above and by the
│ │ │ -
1724 // vector(n,value,a) constructor.
│ │ │ -
1725 _GLIBCXX20_CONSTEXPR
│ │ │ -
1726 void
│ │ │ -
1727 _M_fill_initialize(size_type __n, const value_type& __value)
│ │ │ -
1728 {
│ │ │ -
1729 this->_M_impl._M_finish =
│ │ │ -
1730 std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, __value,
│ │ │ -
1731 _M_get_Tp_allocator());
│ │ │ -
1732 }
│ │ │ -
1733
│ │ │ -
1734#if __cplusplus >= 201103L
│ │ │ -
1735 // Called by the vector(n) constructor.
│ │ │ -
1736 _GLIBCXX20_CONSTEXPR
│ │ │ -
1737 void
│ │ │ -
1738 _M_default_initialize(size_type __n)
│ │ │ -
1739 {
│ │ │ -
1740 this->_M_impl._M_finish =
│ │ │ -
1741 std::__uninitialized_default_n_a(this->_M_impl._M_start, __n,
│ │ │ -
1742 _M_get_Tp_allocator());
│ │ │ -
1743 }
│ │ │ -
1744#endif
│ │ │ -
1745
│ │ │ -
1746 // Internal assign functions follow. The *_aux functions do the actual
│ │ │ -
1747 // assignment work for the range versions.
│ │ │ -
1748
│ │ │ -
1749 // Called by the range assign to implement [23.1.1]/9
│ │ │ -
1750
│ │ │ -
1751 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1752 // 438. Ambiguity in the "do the right thing" clause
│ │ │ -
1753 template<typename _Integer>
│ │ │ -
1754 _GLIBCXX20_CONSTEXPR
│ │ │ -
1755 void
│ │ │ -
1756 _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
│ │ │ -
1757 { _M_fill_assign(__n, __val); }
│ │ │ -
1758
│ │ │ -
1759 // Called by the range assign to implement [23.1.1]/9
│ │ │ -
1760 template<typename _InputIterator>
│ │ │ -
1761 _GLIBCXX20_CONSTEXPR
│ │ │ -
1762 void
│ │ │ -
1763 _M_assign_dispatch(_InputIterator __first, _InputIterator __last,
│ │ │ -
1764 __false_type)
│ │ │ -
1765 { _M_assign_aux(__first, __last, std::__iterator_category(__first)); }
│ │ │ -
1766
│ │ │ -
1767 // Called by the second assign_dispatch above
│ │ │ -
1768 template<typename _InputIterator>
│ │ │ -
1769 _GLIBCXX20_CONSTEXPR
│ │ │ -
1770 void
│ │ │ -
1771 _M_assign_aux(_InputIterator __first, _InputIterator __last,
│ │ │ - │ │ │ -
1773
│ │ │ -
1774 // Called by the second assign_dispatch above
│ │ │ -
1775 template<typename _ForwardIterator>
│ │ │ -
1776 _GLIBCXX20_CONSTEXPR
│ │ │ -
1777 void
│ │ │ -
1778 _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
│ │ │ - │ │ │ -
1780
│ │ │ -
1781 // Called by assign(n,t), and the range assign when it turns out
│ │ │ -
1782 // to be the same thing.
│ │ │ -
1783 _GLIBCXX20_CONSTEXPR
│ │ │ -
1784 void
│ │ │ -
1785 _M_fill_assign(size_type __n, const value_type& __val);
│ │ │ -
1786
│ │ │ -
1787 // Internal insert functions follow.
│ │ │ -
1788
│ │ │ -
1789 // Called by the range insert to implement [23.1.1]/9
│ │ │ -
1790
│ │ │ -
1791 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1792 // 438. Ambiguity in the "do the right thing" clause
│ │ │ -
1793 template<typename _Integer>
│ │ │ -
1794 _GLIBCXX20_CONSTEXPR
│ │ │ -
1795 void
│ │ │ -
1796 _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __val,
│ │ │ -
1797 __true_type)
│ │ │ -
1798 { _M_fill_insert(__pos, __n, __val); }
│ │ │ -
1799
│ │ │ -
1800 // Called by the range insert to implement [23.1.1]/9
│ │ │ -
1801 template<typename _InputIterator>
│ │ │ -
1802 _GLIBCXX20_CONSTEXPR
│ │ │ -
1803 void
│ │ │ -
1804 _M_insert_dispatch(iterator __pos, _InputIterator __first,
│ │ │ -
1805 _InputIterator __last, __false_type)
│ │ │ -
1806 {
│ │ │ -
1807 _M_range_insert(__pos, __first, __last,
│ │ │ -
1808 std::__iterator_category(__first));
│ │ │ -
1809 }
│ │ │ -
1810
│ │ │ -
1811 // Called by the second insert_dispatch above
│ │ │ -
1812 template<typename _InputIterator>
│ │ │ -
1813 _GLIBCXX20_CONSTEXPR
│ │ │ -
1814 void
│ │ │ -
1815 _M_range_insert(iterator __pos, _InputIterator __first,
│ │ │ -
1816 _InputIterator __last, std::input_iterator_tag);
│ │ │ -
1817
│ │ │ -
1818 // Called by the second insert_dispatch above
│ │ │ -
1819 template<typename _ForwardIterator>
│ │ │ -
1820 _GLIBCXX20_CONSTEXPR
│ │ │ -
1821 void
│ │ │ -
1822 _M_range_insert(iterator __pos, _ForwardIterator __first,
│ │ │ -
1823 _ForwardIterator __last, std::forward_iterator_tag);
│ │ │ -
1824
│ │ │ -
1825 // Called by insert(p,n,x), and the range insert when it turns out to be
│ │ │ -
1826 // the same thing.
│ │ │ -
1827 _GLIBCXX20_CONSTEXPR
│ │ │ -
1828 void
│ │ │ -
1829 _M_fill_insert(iterator __pos, size_type __n, const value_type& __x);
│ │ │ -
1830
│ │ │ -
1831#if __cplusplus >= 201103L
│ │ │ -
1832 // Called by resize(n).
│ │ │ -
1833 _GLIBCXX20_CONSTEXPR
│ │ │ -
1834 void
│ │ │ -
1835 _M_default_append(size_type __n);
│ │ │ -
1836
│ │ │ -
1837 _GLIBCXX20_CONSTEXPR
│ │ │ -
1838 bool
│ │ │ -
1839 _M_shrink_to_fit();
│ │ │ -
1840#endif
│ │ │ -
1841
│ │ │ -
1842#if __cplusplus < 201103L
│ │ │ -
1843 // Called by insert(p,x)
│ │ │ -
1844 void
│ │ │ -
1845 _M_insert_aux(iterator __position, const value_type& __x);
│ │ │ -
1846
│ │ │ -
1847 void
│ │ │ -
1848 _M_realloc_insert(iterator __position, const value_type& __x);
│ │ │ -
1849
│ │ │ -
1850 void
│ │ │ -
1851 _M_realloc_append(const value_type& __x);
│ │ │ -
1852#else
│ │ │ -
1853 // A value_type object constructed with _Alloc_traits::construct()
│ │ │ -
1854 // and destroyed with _Alloc_traits::destroy().
│ │ │ -
1855 struct _Temporary_value
│ │ │ -
1856 {
│ │ │ -
1857 template<typename... _Args>
│ │ │ -
1858 _GLIBCXX20_CONSTEXPR explicit
│ │ │ -
1859 _Temporary_value(vector* __vec, _Args&&... __args) : _M_this(__vec)
│ │ │ -
1860 {
│ │ │ -
1861 _Alloc_traits::construct(_M_this->_M_impl, _M_ptr(),
│ │ │ -
1862 std::forward<_Args>(__args)...);
│ │ │ -
1863 }
│ │ │ -
1864
│ │ │ -
1865 _GLIBCXX20_CONSTEXPR
│ │ │ -
1866 ~_Temporary_value()
│ │ │ -
1867 { _Alloc_traits::destroy(_M_this->_M_impl, _M_ptr()); }
│ │ │ -
1868
│ │ │ -
1869 _GLIBCXX20_CONSTEXPR value_type&
│ │ │ -
1870 _M_val() noexcept { return _M_storage._M_val; }
│ │ │ -
1871
│ │ │ -
1872 private:
│ │ │ -
1873 _GLIBCXX20_CONSTEXPR _Tp*
│ │ │ -
1874 _M_ptr() noexcept { return std::__addressof(_M_storage._M_val); }
│ │ │ -
1875
│ │ │ -
1876 union _Storage
│ │ │ -
1877 {
│ │ │ -
1878 constexpr _Storage() : _M_byte() { }
│ │ │ -
1879 _GLIBCXX20_CONSTEXPR ~_Storage() { }
│ │ │ -
1880 _Storage& operator=(const _Storage&) = delete;
│ │ │ -
1881 unsigned char _M_byte;
│ │ │ -
1882 _Tp _M_val;
│ │ │ -
1883 };
│ │ │ -
1884
│ │ │ -
1885 vector* _M_this;
│ │ │ -
1886 _Storage _M_storage;
│ │ │ -
1887 };
│ │ │ -
1888
│ │ │ -
1889 // Called by insert(p,x) and other functions when insertion needs to
│ │ │ -
1890 // reallocate or move existing elements. _Arg is either _Tp& or _Tp.
│ │ │ -
1891 template<typename _Arg>
│ │ │ -
1892 _GLIBCXX20_CONSTEXPR
│ │ │ -
1893 void
│ │ │ -
1894 _M_insert_aux(iterator __position, _Arg&& __arg);
│ │ │ -
1895
│ │ │ -
1896 template<typename... _Args>
│ │ │ -
1897 _GLIBCXX20_CONSTEXPR
│ │ │ -
1898 void
│ │ │ -
1899 _M_realloc_insert(iterator __position, _Args&&... __args);
│ │ │ -
1900
│ │ │ -
1901 template<typename... _Args>
│ │ │ -
1902 _GLIBCXX20_CONSTEXPR
│ │ │ -
1903 void
│ │ │ -
1904 _M_realloc_append(_Args&&... __args);
│ │ │ -
1905
│ │ │ -
1906 // Either move-construct at the end, or forward to _M_insert_aux.
│ │ │ -
1907 _GLIBCXX20_CONSTEXPR
│ │ │ -
1908 iterator
│ │ │ -
1909 _M_insert_rval(const_iterator __position, value_type&& __v);
│ │ │ -
1910
│ │ │ -
1911 // Try to emplace at the end, otherwise forward to _M_insert_aux.
│ │ │ -
1912 template<typename... _Args>
│ │ │ -
1913 _GLIBCXX20_CONSTEXPR
│ │ │ -
1914 iterator
│ │ │ -
1915 _M_emplace_aux(const_iterator __position, _Args&&... __args);
│ │ │ -
1916
│ │ │ -
1917 // Emplacing an rvalue of the correct type can use _M_insert_rval.
│ │ │ -
1918 _GLIBCXX20_CONSTEXPR
│ │ │ -
1919 iterator
│ │ │ -
1920 _M_emplace_aux(const_iterator __position, value_type&& __v)
│ │ │ -
1921 { return _M_insert_rval(__position, std::move(__v)); }
│ │ │ -
1922#endif
│ │ │ -
1923
│ │ │ -
1924 // Called by _M_fill_insert, _M_insert_aux etc.
│ │ │ -
1925 _GLIBCXX20_CONSTEXPR
│ │ │ -
1926 size_type
│ │ │ -
1927 _M_check_len(size_type __n, const char* __s) const
│ │ │ -
1928 {
│ │ │ -
1929 if (max_size() - size() < __n)
│ │ │ -
1930 __throw_length_error(__N(__s));
│ │ │ -
1931
│ │ │ -
1932 const size_type __len = size() + (std::max)(size(), __n);
│ │ │ -
1933 return (__len < size() || __len > max_size()) ? max_size() : __len;
│ │ │ -
1934 }
│ │ │ -
1935
│ │ │ -
1936 // Called by constructors to check initial size.
│ │ │ -
1937 static _GLIBCXX20_CONSTEXPR size_type
│ │ │ -
1938 _S_check_init_len(size_type __n, const allocator_type& __a)
│ │ │ -
1939 {
│ │ │ -
1940 if (__n > _S_max_size(_Tp_alloc_type(__a)))
│ │ │ -
1941 __throw_length_error(
│ │ │ -
1942 __N("cannot create std::vector larger than max_size()"));
│ │ │ -
1943 return __n;
│ │ │ -
1944 }
│ │ │ -
1945
│ │ │ -
1946 static _GLIBCXX20_CONSTEXPR size_type
│ │ │ -
1947 _S_max_size(const _Tp_alloc_type& __a) _GLIBCXX_NOEXCEPT
│ │ │ -
1948 {
│ │ │ -
1949 // std::distance(begin(), end()) cannot be greater than PTRDIFF_MAX,
│ │ │ -
1950 // and realistically we can't store more than PTRDIFF_MAX/sizeof(T)
│ │ │ -
1951 // (even if std::allocator_traits::max_size says we can).
│ │ │ -
1952 const size_t __diffmax
│ │ │ -
1953 = __gnu_cxx::__numeric_traits<ptrdiff_t>::__max / sizeof(_Tp);
│ │ │ -
1954 const size_t __allocmax = _Alloc_traits::max_size(__a);
│ │ │ -
1955 return (std::min)(__diffmax, __allocmax);
│ │ │ -
1956 }
│ │ │ -
1957
│ │ │ -
1958 // Internal erase functions follow.
│ │ │ -
1959
│ │ │ -
1960 // Called by erase(q1,q2), clear(), resize(), _M_fill_assign,
│ │ │ -
1961 // _M_assign_aux.
│ │ │ -
1962 _GLIBCXX20_CONSTEXPR
│ │ │ -
1963 void
│ │ │ -
1964 _M_erase_at_end(pointer __pos) _GLIBCXX_NOEXCEPT
│ │ │ -
1965 {
│ │ │ -
1966 if (size_type __n = this->_M_impl._M_finish - __pos)
│ │ │ -
1967 {
│ │ │ -
1968 std::_Destroy(__pos, this->_M_impl._M_finish,
│ │ │ -
1969 _M_get_Tp_allocator());
│ │ │ -
1970 this->_M_impl._M_finish = __pos;
│ │ │ -
1971 _GLIBCXX_ASAN_ANNOTATE_SHRINK(__n);
│ │ │ -
1972 }
│ │ │ -
1973 }
│ │ │ -
1974
│ │ │ -
1975 _GLIBCXX20_CONSTEXPR
│ │ │ -
1976 iterator
│ │ │ -
1977 _M_erase(iterator __position);
│ │ │ -
1978
│ │ │ -
1979 _GLIBCXX20_CONSTEXPR
│ │ │ -
1980 iterator
│ │ │ -
1981 _M_erase(iterator __first, iterator __last);
│ │ │ -
1982
│ │ │ -
1983#if __cplusplus >= 201103L
│ │ │ -
1984 private:
│ │ │ -
1985 // Constant-time move assignment when source object's memory can be
│ │ │ -
1986 // moved, either because the source's allocator will move too
│ │ │ -
1987 // or because the allocators are equal.
│ │ │ -
1988 _GLIBCXX20_CONSTEXPR
│ │ │ -
1989 void
│ │ │ -
1990 _M_move_assign(vector&& __x, true_type) noexcept
│ │ │ -
1991 {
│ │ │ -
1992 vector __tmp(get_allocator());
│ │ │ -
1993 this->_M_impl._M_swap_data(__x._M_impl);
│ │ │ -
1994 __tmp._M_impl._M_swap_data(__x._M_impl);
│ │ │ -
1995 std::__alloc_on_move(_M_get_Tp_allocator(), __x._M_get_Tp_allocator());
│ │ │ -
1996 }
│ │ │ -
1997
│ │ │ -
1998 // Do move assignment when it might not be possible to move source
│ │ │ -
1999 // object's memory, resulting in a linear-time operation.
│ │ │ -
2000 _GLIBCXX20_CONSTEXPR
│ │ │ -
2001 void
│ │ │ -
2002 _M_move_assign(vector&& __x, false_type)
│ │ │ -
2003 {
│ │ │ -
2004 if (__x._M_get_Tp_allocator() == this->_M_get_Tp_allocator())
│ │ │ -
2005 _M_move_assign(std::move(__x), true_type());
│ │ │ -
2006 else
│ │ │ -
2007 {
│ │ │ -
2008 // The rvalue's allocator cannot be moved and is not equal,
│ │ │ -
2009 // so we need to individually move each element.
│ │ │ -
2010 this->_M_assign_aux(std::make_move_iterator(__x.begin()),
│ │ │ -
2011 std::make_move_iterator(__x.end()),
│ │ │ - │ │ │ -
2013 __x.clear();
│ │ │ -
2014 }
│ │ │ -
2015 }
│ │ │ -
2016#endif
│ │ │ -
2017
│ │ │ -
2018 template<typename _Up>
│ │ │ -
2019 _GLIBCXX20_CONSTEXPR
│ │ │ -
2020 _Up*
│ │ │ -
2021 _M_data_ptr(_Up* __ptr) const _GLIBCXX_NOEXCEPT
│ │ │ -
2022 { return __ptr; }
│ │ │ -
2023
│ │ │ -
2024#if __cplusplus >= 201103L
│ │ │ -
2025 template<typename _Ptr>
│ │ │ -
2026 _GLIBCXX20_CONSTEXPR
│ │ │ - │ │ │ -
2028 _M_data_ptr(_Ptr __ptr) const
│ │ │ -
2029 { return empty() ? nullptr : std::__to_address(__ptr); }
│ │ │ -
2030#else
│ │ │ -
2031 template<typename _Up>
│ │ │ -
2032 _Up*
│ │ │ -
2033 _M_data_ptr(_Up* __ptr) _GLIBCXX_NOEXCEPT
│ │ │ -
2034 { return __ptr; }
│ │ │ -
2035
│ │ │ -
2036 template<typename _Ptr>
│ │ │ -
2037 value_type*
│ │ │ -
2038 _M_data_ptr(_Ptr __ptr)
│ │ │ -
2039 { return empty() ? (value_type*)0 : __ptr.operator->(); }
│ │ │ -
2040
│ │ │ -
2041 template<typename _Ptr>
│ │ │ -
2042 const value_type*
│ │ │ -
2043 _M_data_ptr(_Ptr __ptr) const
│ │ │ -
2044 { return empty() ? (const value_type*)0 : __ptr.operator->(); }
│ │ │ -
2045#endif
│ │ │ -
2046 };
│ │ │ -
2047
│ │ │ -
2048#if __cpp_deduction_guides >= 201606
│ │ │ -
2049 template<typename _InputIterator, typename _ValT
│ │ │ -
2050 = typename iterator_traits<_InputIterator>::value_type,
│ │ │ -
2051 typename _Allocator = allocator<_ValT>,
│ │ │ -
2052 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
2053 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2054 vector(_InputIterator, _InputIterator, _Allocator = _Allocator())
│ │ │ -
2055 -> vector<_ValT, _Allocator>;
│ │ │ -
2056#endif
│ │ │ -
2057
│ │ │ -
2058 /**
│ │ │ -
2059 * @brief Vector equality comparison.
│ │ │ -
2060 * @param __x A %vector.
│ │ │ -
2061 * @param __y A %vector of the same type as @a __x.
│ │ │ -
2062 * @return True iff the size and elements of the vectors are equal.
│ │ │ -
2063 *
│ │ │ -
2064 * This is an equivalence relation. It is linear in the size of the
│ │ │ -
2065 * vectors. Vectors are considered equivalent if their sizes are equal,
│ │ │ -
2066 * and if corresponding elements compare equal.
│ │ │ -
2067 */
│ │ │ -
2068 template<typename _Tp, typename _Alloc>
│ │ │ -
2069 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
2070 inline bool
│ │ │ -
│ │ │ -
2071 operator==(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
│ │ │ -
2072 { return (__x.size() == __y.size()
│ │ │ -
2073 && std::equal(__x.begin(), __x.end(), __y.begin())); }
│ │ │ -
│ │ │ -
2074
│ │ │ -
2075#if __cpp_lib_three_way_comparison // >= C++20
│ │ │ -
2076 /**
│ │ │ -
2077 * @brief Vector ordering relation.
│ │ │ -
2078 * @param __x A `vector`.
│ │ │ -
2079 * @param __y A `vector` of the same type as `__x`.
│ │ │ -
2080 * @return A value indicating whether `__x` is less than, equal to,
│ │ │ -
2081 * greater than, or incomparable with `__y`.
│ │ │ -
2082 *
│ │ │ -
2083 * See `std::lexicographical_compare_three_way()` for how the determination
│ │ │ -
2084 * is made. This operator is used to synthesize relational operators like
│ │ │ -
2085 * `<` and `>=` etc.
│ │ │ -
2086 */
│ │ │ -
2087 template<typename _Tp, typename _Alloc>
│ │ │ -
2088 [[nodiscard]]
│ │ │ -
│ │ │ -
2089 constexpr __detail::__synth3way_t<_Tp>
│ │ │ -
2090 operator<=>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
│ │ │ -
2091 {
│ │ │ -
2092 return std::lexicographical_compare_three_way(__x.begin(), __x.end(),
│ │ │ -
2093 __y.begin(), __y.end(),
│ │ │ -
2094 __detail::__synth3way);
│ │ │ -
2095 }
│ │ │ -
│ │ │ -
2096#else
│ │ │ -
2097 /**
│ │ │ -
2098 * @brief Vector ordering relation.
│ │ │ -
2099 * @param __x A %vector.
│ │ │ -
2100 * @param __y A %vector of the same type as @a __x.
│ │ │ -
2101 * @return True iff @a __x is lexicographically less than @a __y.
│ │ │ -
2102 *
│ │ │ -
2103 * This is a total ordering relation. It is linear in the size of the
│ │ │ -
2104 * vectors. The elements must be comparable with @c <.
│ │ │ -
2105 *
│ │ │ -
2106 * See std::lexicographical_compare() for how the determination is made.
│ │ │ -
2107 */
│ │ │ -
2108 template<typename _Tp, typename _Alloc>
│ │ │ -
2109 _GLIBCXX_NODISCARD inline bool
│ │ │ -
2110 operator<(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
│ │ │ -
2111 { return std::lexicographical_compare(__x.begin(), __x.end(),
│ │ │ -
2112 __y.begin(), __y.end()); }
│ │ │ -
2113
│ │ │ -
2114 /// Based on operator==
│ │ │ -
2115 template<typename _Tp, typename _Alloc>
│ │ │ -
2116 _GLIBCXX_NODISCARD inline bool
│ │ │ -
2117 operator!=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
│ │ │ -
2118 { return !(__x == __y); }
│ │ │ -
2119
│ │ │ -
2120 /// Based on operator<
│ │ │ -
2121 template<typename _Tp, typename _Alloc>
│ │ │ -
2122 _GLIBCXX_NODISCARD inline bool
│ │ │ -
2123 operator>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
│ │ │ -
2124 { return __y < __x; }
│ │ │ -
2125
│ │ │ -
2126 /// Based on operator<
│ │ │ -
2127 template<typename _Tp, typename _Alloc>
│ │ │ -
2128 _GLIBCXX_NODISCARD inline bool
│ │ │ -
2129 operator<=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
│ │ │ -
2130 { return !(__y < __x); }
│ │ │ -
2131
│ │ │ -
2132 /// Based on operator<
│ │ │ -
2133 template<typename _Tp, typename _Alloc>
│ │ │ -
2134 _GLIBCXX_NODISCARD inline bool
│ │ │ -
2135 operator>=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
│ │ │ -
2136 { return !(__x < __y); }
│ │ │ -
2137#endif // three-way comparison
│ │ │ -
2138
│ │ │ -
2139 /// See std::vector::swap().
│ │ │ -
2140 template<typename _Tp, typename _Alloc>
│ │ │ -
2141 _GLIBCXX20_CONSTEXPR
│ │ │ -
2142 inline void
│ │ │ -
│ │ │ - │ │ │ -
2144 _GLIBCXX_NOEXCEPT_IF(noexcept(__x.swap(__y)))
│ │ │ -
2145 { __x.swap(__y); }
│ │ │ -
│ │ │ -
2146
│ │ │ -
2147_GLIBCXX_END_NAMESPACE_CONTAINER
│ │ │ -
2148
│ │ │ -
2149#if __cplusplus >= 201703L
│ │ │ -
2150 namespace __detail::__variant
│ │ │ -
2151 {
│ │ │ -
2152 template<typename> struct _Never_valueless_alt; // see <variant>
│ │ │ -
2153
│ │ │ -
2154 // Provide the strong exception-safety guarantee when emplacing a
│ │ │ -
2155 // vector into a variant, but only if move assignment cannot throw.
│ │ │ -
2156 template<typename _Tp, typename _Alloc>
│ │ │ -
2157 struct _Never_valueless_alt<_GLIBCXX_STD_C::vector<_Tp, _Alloc>>
│ │ │ -
2158 : std::is_nothrow_move_assignable<_GLIBCXX_STD_C::vector<_Tp, _Alloc>>
│ │ │ -
2159 { };
│ │ │ -
2160 } // namespace __detail::__variant
│ │ │ -
2161#endif // C++17
│ │ │ -
2162
│ │ │ -
2163_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
2164} // namespace std
│ │ │ -
2165
│ │ │ -
2166#endif /* _STL_VECTOR_H */
│ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
constexpr bool operator<=(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:855
│ │ │ -
constexpr bool operator>=(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:869
│ │ │ -
constexpr bool operator>(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:862
│ │ │ -
__bool_constant< true > true_type
The type used as a compile-time boolean with true value.
Definition type_traits:111
│ │ │ -
__bool_constant< false > false_type
The type used as a compile-time boolean with false value.
Definition type_traits:114
│ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │ -
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:51
│ │ │ -
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 &)
│ │ │ +
854 void
│ │ │ +
855 notify_all() noexcept
│ │ │ +
856 {
│ │ │ +
857 _M_impl.notify_all();
│ │ │ +
858 }
│ │ │ +
859#endif
│ │ │ +
860
│ │ │ +
861 private:
│ │ │ +
862 _Sp_atomic<weak_ptr<_Tp>> _M_impl;
│ │ │ +
863 };
│ │ │ +
864 /// @} group pointer_abstractions
│ │ │ +
865#endif // C++20
│ │ │ +
866
│ │ │ +
867_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
868} // namespace
│ │ │ +
869
│ │ │ +
870#endif // _SHARED_PTR_ATOMIC_H
│ │ │ + │ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │ +
memory_order
Enumeration for memory_order.
Definition atomic_base.h:65
│ │ │ +
void lock(_L1 &__l1, _L2 &__l2, _L3 &... __l3)
Generic lock.
Definition mutex:698
│ │ │
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:1194
│ │ │ -
is_nothrow_move_assignable
Definition type_traits:1280
│ │ │ -
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:129
│ │ │ - │ │ │ -
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:88
│ │ │ -
A standard container which offers fixed time access to individual elements in any order.
Definition stl_vector.h:432
│ │ │ -
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:801
│ │ │ -
constexpr reverse_iterator rbegin() noexcept
Definition stl_vector.h:926
│ │ │ -
constexpr iterator end() noexcept
Definition stl_vector.h:906
│ │ │ -
constexpr vector(const vector &__x)
Vector copy constructor.
Definition stl_vector.h:604
│ │ │ -
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
Definition stl_vector.h:956
│ │ │ -
constexpr iterator begin() noexcept
Definition stl_vector.h:886
│ │ │ -
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:746
│ │ │ -
constexpr const_iterator begin() const noexcept
Definition stl_vector.h:896
│ │ │ -
constexpr void assign(_InputIterator __first, _InputIterator __last)
Assigns a range to a vector.
Definition stl_vector.h:841
│ │ │ -
constexpr void assign(size_type __n, const value_type &__val)
Assigns a given value to a vector.
Definition stl_vector.h:821
│ │ │ -
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:662
│ │ │ -
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:559
│ │ │ -
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:779
│ │ │ -
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:545
│ │ │ -
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
Definition stl_vector.h:946
│ │ │ -
constexpr const_reverse_iterator rbegin() const noexcept
Definition stl_vector.h:936
│ │ │ -
constexpr const_reverse_iterator crbegin() const noexcept
Definition stl_vector.h:987
│ │ │ -
constexpr const_reference at(size_type __n) const
Provides access to the data contained in the vector.
│ │ │ -
constexpr const_iterator cbegin() const noexcept
Definition stl_vector.h:967
│ │ │ -
constexpr vector(_InputIterator __first, _InputIterator __last, const allocator_type &__a=allocator_type())
Builds a vector from a range.
Definition stl_vector.h:709
│ │ │ -
constexpr vector(initializer_list< value_type > __l, const allocator_type &__a=allocator_type())
Builds a vector from an initializer list.
Definition stl_vector.h:681
│ │ │ -
constexpr const_iterator end() const noexcept
Definition stl_vector.h:916
│ │ │ -
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:868
│ │ │ -
constexpr allocator_type get_allocator() const noexcept
Get a copy of the memory allocation object.
Definition stl_vector.h:313
│ │ │ -
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:572
│ │ │ -
constexpr reference back() noexcept
│ │ │ -
constexpr const_reverse_iterator crend() const noexcept
Definition stl_vector.h:997
│ │ │ -
constexpr const_iterator cend() const noexcept
Definition stl_vector.h:977
│ │ │ -
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-2024 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2014-2024 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,2487 +21,876 @@ │ │ │ │ 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 │ │ │ │ +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#include <_d_e_b_u_g_/_a_s_s_e_r_t_i_o_n_s_._h> │ │ │ │ +72 /// @cond undocumented │ │ │ │ 73 │ │ │ │ -74#if _GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR │ │ │ │ -75extern "C" void │ │ │ │ -76__sanitizer_annotate_contiguous_container(const void*, const void*, │ │ │ │ -77 const void*, const void*); │ │ │ │ -78#endif │ │ │ │ -79 │ │ │ │ -80namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -81{ │ │ │ │ -82_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -83_GLIBCXX_BEGIN_NAMESPACE_CONTAINER │ │ │ │ +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 /// See bits/stl_deque.h's _Deque_base for an explanation. │ │ │ │ -86 template │ │ │ │ -_8_7 struct ___V_e_c_t_o_r___b_a_s_e │ │ │ │ -88 { │ │ │ │ -89 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 │ │ │ │ -90 rebind<_Tp>::other _Tp_alloc_type; │ │ │ │ -91 typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type>::pointer │ │ │ │ -92 pointer; │ │ │ │ -93 │ │ │ │ -94 struct _Vector_impl_data │ │ │ │ -95 { │ │ │ │ -96 pointer _M_start; │ │ │ │ -97 pointer _M_finish; │ │ │ │ -98 pointer _M_end_of_storage; │ │ │ │ -99 │ │ │ │ -100 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -101 _Vector_impl_data() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -102 : _M_start(), _M_finish(), _M_end_of_storage() │ │ │ │ -103 { } │ │ │ │ -104 │ │ │ │ -105#if __cplusplus >= 201103L │ │ │ │ -106 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -107 _Vector_impl_data(_Vector_impl_data&& __x) noexcept │ │ │ │ -108 : _M_start(__x._M_start), _M_finish(__x._M_finish), │ │ │ │ -109 _M_end_of_storage(__x._M_end_of_storage) │ │ │ │ -110 { __x._M_start = __x._M_finish = __x._M_end_of_storage = pointer(); } │ │ │ │ -111#endif │ │ │ │ +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 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -114 void │ │ │ │ -115 _M_copy_data(_Vector_impl_data const& __x) ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -116 { │ │ │ │ -117 _M_start = __x._M_start; │ │ │ │ -118 _M_finish = __x._M_finish; │ │ │ │ -119 _M_end_of_storage = __x._M_end_of_storage; │ │ │ │ -120 } │ │ │ │ -121 │ │ │ │ -122 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -123 void │ │ │ │ -124 _M_swap_data(_Vector_impl_data& __x) ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -125 { │ │ │ │ -126 // Do not use std::swap(_M_start, __x._M_start), etc as it loses │ │ │ │ -127 // information used by TBAA. │ │ │ │ -128 _Vector_impl_data _____t_m_p; │ │ │ │ -129 _____t_m_p._M_copy_data(*this); │ │ │ │ -130 _M_copy_data(__x); │ │ │ │ -131 __x._M_copy_data(_____t_m_p); │ │ │ │ -132 } │ │ │ │ -133 }; │ │ │ │ -134 │ │ │ │ -135 struct _Vector_impl │ │ │ │ -136 : public _Tp_alloc_type, public _Vector_impl_data │ │ │ │ -137 { │ │ │ │ -138 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -139 _Vector_impl() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T___I_F( │ │ │ │ -140 _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) │ │ │ │ -141#if __cpp_lib_concepts │ │ │ │ -142 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_> │ │ │ │ -143#endif │ │ │ │ -144 : _Tp_alloc_type() │ │ │ │ -145 { } │ │ │ │ -146 │ │ │ │ -147 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -148 _Vector_impl(_Tp_alloc_type const& __a) ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -149 : _Tp_alloc_type(__a) │ │ │ │ -150 { } │ │ │ │ -151 │ │ │ │ -152#if __cplusplus >= 201103L │ │ │ │ -153 // Not defaulted, to enforce noexcept(true) even when │ │ │ │ -154 // !is_nothrow_move_constructible<_Tp_alloc_type>. │ │ │ │ -155 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -156 _Vector_impl(_Vector_impl&& __x) noexcept │ │ │ │ -157 : _Tp_alloc_type(_s_t_d_:_:_m_o_v_e(__x)), _Vector_impl_data(_s_t_d_:_:_m_o_v_e(__x)) │ │ │ │ -158 { } │ │ │ │ -159 │ │ │ │ -160 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -161 _Vector_impl(_Tp_alloc_type&& __a) noexcept │ │ │ │ -162 : _Tp_alloc_type(_s_t_d_:_:_m_o_v_e(__a)) │ │ │ │ -163 { } │ │ │ │ -164 │ │ │ │ -165 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -166 _Vector_impl(_Tp_alloc_type&& __a, _Vector_impl&& _____r_v) noexcept │ │ │ │ -167 : _Tp_alloc_type(_s_t_d_:_:_m_o_v_e(__a)), _Vector_impl_data(_s_t_d_:_:_m_o_v_e(_____r_v)) │ │ │ │ -168 { } │ │ │ │ -169#endif │ │ │ │ -170 │ │ │ │ -171#if _GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR │ │ │ │ -172 template │ │ │ │ -173 struct ___A_s_a_n │ │ │ │ -174 { │ │ │ │ -175 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_> │ │ │ │ -176 ::size_type size_type; │ │ │ │ -177 │ │ │ │ -178 static ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R void │ │ │ │ -179 ___S___s_h_r_i_n_k(_Vector_impl&, size_type) { } │ │ │ │ -180 static ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R void │ │ │ │ -181 ___S___o_n___d_e_a_l_l_o_c(_Vector_impl&) { } │ │ │ │ -182 │ │ │ │ -183 typedef _Vector_impl& ___R_e_i_n_i_t; │ │ │ │ -184 │ │ │ │ -185 struct ___G_r_o_w │ │ │ │ -186 { │ │ │ │ -187 ___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) { } │ │ │ │ -188 ___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) { } │ │ │ │ -189 }; │ │ │ │ -190 }; │ │ │ │ -191 │ │ │ │ -192 // Enable ASan annotations for memory obtained from std::allocator. │ │ │ │ -193 template │ │ │ │ -194 struct ___A_s_a_n<_a_l_l_o_c_a_t_o_r<_Up> > │ │ │ │ -195 { │ │ │ │ -196 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_> │ │ │ │ -197 ::size_type size_type; │ │ │ │ -198 │ │ │ │ -199 // Adjust ASan annotation for [_M_start, _M_end_of_storage) to │ │ │ │ -200 // mark end of valid region as __curr instead of __prev. │ │ │ │ -201 static ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R void │ │ │ │ -202 ___S___a_d_j_u_s_t(_Vector_impl& _____i_m_p_l, pointer _____p_r_e_v, pointer _____c_u_r_r) │ │ │ │ -203 { │ │ │ │ -204#if __cpp_lib_is_constant_evaluated │ │ │ │ -205 if (_s_t_d_:_:_i_s___c_o_n_s_t_a_n_t___e_v_a_l_u_a_t_e_d()) │ │ │ │ -206 return; │ │ │ │ -207#endif │ │ │ │ -208 _____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, │ │ │ │ -209 _____i_m_p_l._M_end_of_storage, _____p_r_e_v, _____c_u_r_r); │ │ │ │ -210 } │ │ │ │ -211 │ │ │ │ -212 static ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R void │ │ │ │ -213 ___S___g_r_o_w(_Vector_impl& _____i_m_p_l, size_type __n) │ │ │ │ -214 { ___S___a_d_j_u_s_t(_____i_m_p_l, _____i_m_p_l._M_finish, _____i_m_p_l._M_finish + __n); } │ │ │ │ -215 │ │ │ │ -216 static ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R void │ │ │ │ -217 ___S___s_h_r_i_n_k(_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 + __n, _____i_m_p_l._M_finish); } │ │ │ │ -219 │ │ │ │ -220 static ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R void │ │ │ │ -221 ___S___o_n___d_e_a_l_l_o_c(_Vector_impl& _____i_m_p_l) │ │ │ │ -222 { │ │ │ │ -223 if (_____i_m_p_l._M_start) │ │ │ │ -224 ___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); │ │ │ │ -225 } │ │ │ │ -226 │ │ │ │ -227 // Used on reallocation to tell ASan unused capacity is invalid. │ │ │ │ -228 struct ___R_e_i_n_i_t │ │ │ │ -229 { │ │ │ │ -230 explicit ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -231 ___R_e_i_n_i_t(_Vector_impl& _____i_m_p_l) : _M_impl(_____i_m_p_l) │ │ │ │ -232 { │ │ │ │ -233 // Mark unused capacity as valid again before deallocating it. │ │ │ │ -234 ___S___o_n___d_e_a_l_l_o_c(_M_impl); │ │ │ │ -235 } │ │ │ │ -236 │ │ │ │ -237 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -238 _~___R_e_i_n_i_t() │ │ │ │ -239 { │ │ │ │ -240 // Mark unused capacity as invalid after reallocation. │ │ │ │ -241 if (_M_impl._M_start) │ │ │ │ -242 ___S___a_d_j_u_s_t(_M_impl, _M_impl._M_end_of_storage, │ │ │ │ -243 _M_impl._M_finish); │ │ │ │ -244 } │ │ │ │ -245 │ │ │ │ -246 _Vector_impl& _M_impl; │ │ │ │ -247 │ │ │ │ -248#if __cplusplus >= 201103L │ │ │ │ -249 ___R_e_i_n_i_t(const ___R_e_i_n_i_t&) = delete; │ │ │ │ -250 ___R_e_i_n_i_t& operator=(const ___R_e_i_n_i_t&) = delete; │ │ │ │ -251#endif │ │ │ │ -252 }; │ │ │ │ -253 │ │ │ │ -254 // Tell ASan when unused capacity is initialized to be valid. │ │ │ │ -255 struct ___G_r_o_w │ │ │ │ -256 { │ │ │ │ -257 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -258 ___G_r_o_w(_Vector_impl& _____i_m_p_l, size_type __n) │ │ │ │ -259 : _M_impl(_____i_m_p_l), _M_n(__n) │ │ │ │ -260 { ___S___g_r_o_w(_M_impl, __n); } │ │ │ │ -261 │ │ │ │ -262 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -263 _~___G_r_o_w() { if (_M_n) ___S___s_h_r_i_n_k(_M_impl, _M_n); } │ │ │ │ -264 │ │ │ │ -265 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -266 void ___M___g_r_e_w(size_type __n) { _M_n -= __n; } │ │ │ │ -267 │ │ │ │ -268#if __cplusplus >= 201103L │ │ │ │ -269 ___G_r_o_w(const ___G_r_o_w&) = delete; │ │ │ │ -270 ___G_r_o_w& operator=(const ___G_r_o_w&) = delete; │ │ │ │ -271#endif │ │ │ │ -272 private: │ │ │ │ -273 _Vector_impl& _M_impl; │ │ │ │ -274 size_type _M_n; │ │ │ │ -275 }; │ │ │ │ -276 }; │ │ │ │ -277 │ │ │ │ -278#define _GLIBCXX_ASAN_ANNOTATE_REINIT \ │ │ │ │ -279 typename _Base::_Vector_impl::template _Asan<>::_Reinit const \ │ │ │ │ -280 __attribute__((__unused__)) __reinit_guard(this->_M_impl) │ │ │ │ -281#define _GLIBCXX_ASAN_ANNOTATE_GROW(n) \ │ │ │ │ -282 typename _Base::_Vector_impl::template _Asan<>::_Grow \ │ │ │ │ -283 __attribute__((__unused__)) __grow_guard(this->_M_impl, (n)) │ │ │ │ -284#define _GLIBCXX_ASAN_ANNOTATE_GREW(n) __grow_guard._M_grew(n) │ │ │ │ -285#define _GLIBCXX_ASAN_ANNOTATE_SHRINK(n) \ │ │ │ │ -286 _Base::_Vector_impl::template _Asan<>::_S_shrink(this->_M_impl, n) │ │ │ │ -287#define _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC \ │ │ │ │ -288 _Base::_Vector_impl::template _Asan<>::_S_on_dealloc(this->_M_impl) │ │ │ │ -289#else // ! (_GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR) │ │ │ │ -290#define _GLIBCXX_ASAN_ANNOTATE_REINIT │ │ │ │ -291#define _GLIBCXX_ASAN_ANNOTATE_GROW(n) │ │ │ │ -292#define _GLIBCXX_ASAN_ANNOTATE_GREW(n) │ │ │ │ -293#define _GLIBCXX_ASAN_ANNOTATE_SHRINK(n) │ │ │ │ -294#define _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC │ │ │ │ -295#endif // _GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR │ │ │ │ -296 }; │ │ │ │ -297 │ │ │ │ -298 public: │ │ │ │ -299 typedef _Alloc allocator_type; │ │ │ │ -300 │ │ │ │ -301 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -302 _Tp_alloc_type& │ │ │ │ -303 _M_get_Tp_allocator() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -304 { return this->_M_impl; } │ │ │ │ -305 │ │ │ │ -306 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -307 const _Tp_alloc_type& │ │ │ │ -308 _M_get_Tp_allocator() const ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -309 { return this->_M_impl; } │ │ │ │ -310 │ │ │ │ -311 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -312 allocator_type │ │ │ │ -_3_1_3 get_allocator() _c_o_n_s_t ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -314 { return allocator_type(_M_get_Tp_allocator()); } │ │ │ │ -315 │ │ │ │ -316#if __cplusplus >= 201103L │ │ │ │ -317 ___V_e_c_t_o_r___b_a_s_e() = default; │ │ │ │ -318#else │ │ │ │ -319 ___V_e_c_t_o_r___b_a_s_e() { } │ │ │ │ -320#endif │ │ │ │ -321 │ │ │ │ -322 _GLIBCXX20_CONSTEXPR │ │ │ │ -323 _Vector_base(const allocator_type& __a) _GLIBCXX_NOEXCEPT │ │ │ │ -324 : _M_impl(__a) { } │ │ │ │ -325 │ │ │ │ -326 // Kept for ABI compatibility. │ │ │ │ -327#if !_GLIBCXX_INLINE_VERSION │ │ │ │ -328 _GLIBCXX20_CONSTEXPR │ │ │ │ -329 _Vector_base(size_t __n) │ │ │ │ -330 : _M_impl() │ │ │ │ -331 { _M_create_storage(__n); } │ │ │ │ -332#endif │ │ │ │ -333 │ │ │ │ -334 _GLIBCXX20_CONSTEXPR │ │ │ │ -335 _Vector_base(size_t __n, const allocator_type& __a) │ │ │ │ -336 : _M_impl(__a) │ │ │ │ -337 { _M_create_storage(__n); } │ │ │ │ -338 │ │ │ │ -339#if __cplusplus >= 201103L │ │ │ │ -340 _Vector_base(_Vector_base&&) = default; │ │ │ │ -341 │ │ │ │ -342 // Kept for ABI compatibility. │ │ │ │ -343# if !_GLIBCXX_INLINE_VERSION │ │ │ │ -344 _GLIBCXX20_CONSTEXPR │ │ │ │ -345 _Vector_base(_Tp_alloc_type&& __a) noexcept │ │ │ │ -346 : _M_impl(_s_t_d_:_:_m_o_v_e(__a)) { } │ │ │ │ -347 │ │ │ │ -348 _GLIBCXX20_CONSTEXPR │ │ │ │ -349 _Vector_base(_Vector_base&& __x, const allocator_type& __a) │ │ │ │ -350 : _M_impl(__a) │ │ │ │ -351 { │ │ │ │ -352 if (__x.get_allocator() == __a) │ │ │ │ -353 this->_M_impl._M_swap_data(__x._M_impl); │ │ │ │ -354 else │ │ │ │ -355 { │ │ │ │ -356 size_t __n = __x._M_impl._M_finish - __x._M_impl._M_start; │ │ │ │ -357 _M_create_storage(__n); │ │ │ │ -358 } │ │ │ │ -359 } │ │ │ │ -360# endif │ │ │ │ -361 │ │ │ │ -362 _GLIBCXX20_CONSTEXPR │ │ │ │ -363 _Vector_base(const allocator_type& __a, _Vector_base&& __x) │ │ │ │ -364 : _M_impl(_Tp_alloc_type(__a), _s_t_d::_m_o_v_e(__x._M_impl)) │ │ │ │ -365 { } │ │ │ │ -366#endif │ │ │ │ -367 │ │ │ │ -368 _GLIBCXX20_CONSTEXPR │ │ │ │ -369 ~_Vector_base() _GLIBCXX_NOEXCEPT │ │ │ │ -370 { │ │ │ │ -371 _M_deallocate(_M_impl._M_start, │ │ │ │ -372 _M_impl._M_end_of_storage - _M_impl._M_start); │ │ │ │ -373 } │ │ │ │ -374 │ │ │ │ -375 public: │ │ │ │ -376 _Vector_impl _M_impl; │ │ │ │ -377 │ │ │ │ -378 _GLIBCXX20_CONSTEXPR │ │ │ │ -379 pointer │ │ │ │ -380 _M_allocate(size_t __n) │ │ │ │ -381 { │ │ │ │ -382 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; │ │ │ │ -383 return __n != 0 ? _Tr::allocate(_M_impl, __n) : pointer(); │ │ │ │ -384 } │ │ │ │ -385 │ │ │ │ -386 _GLIBCXX20_CONSTEXPR │ │ │ │ -387 void │ │ │ │ -388 _M_deallocate(pointer __p, size_t __n) │ │ │ │ -389 { │ │ │ │ -390 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; │ │ │ │ -391 if (__p) │ │ │ │ -392 _Tr::deallocate(_M_impl, __p, __n); │ │ │ │ -393 } │ │ │ │ -394 │ │ │ │ -395 protected: │ │ │ │ -396 │ │ │ │ -397 _GLIBCXX20_CONSTEXPR │ │ │ │ -398 void │ │ │ │ -399 _M_create_storage(size_t __n) │ │ │ │ -400 { │ │ │ │ -401 this->_M_impl._M_start = this->_M_allocate(__n); │ │ │ │ -402 this->_M_impl._M_finish = this->_M_impl._M_start; │ │ │ │ -403 this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; │ │ │ │ -404 } │ │ │ │ -405 }; │ │ │ │ -406 │ │ │ │ -407 /** │ │ │ │ -408 * @brief A standard container which offers fixed time access to │ │ │ │ -409 * individual elements in any order. │ │ │ │ -410 * │ │ │ │ -411 * @ingroup sequences │ │ │ │ -412 * @headerfile vector │ │ │ │ -413 * @since C++98 │ │ │ │ -414 * │ │ │ │ -415 * @tparam _Tp Type of element. │ │ │ │ -416 * @tparam _Alloc Allocator type, defaults to allocator<_Tp>. │ │ │ │ -417 * │ │ │ │ -418 * Meets the requirements of a container, a │ │ │ │ -419 * reversible container, and a │ │ │ │ -420 * sequence, including the │ │ │ │ -421 * optional sequence requirements with the │ │ │ │ -422 * %exception of @c push_front and @c pop_front. │ │ │ │ -423 * │ │ │ │ -424 * In some terminology a %vector can be described as a dynamic │ │ │ │ -425 * C-style array, it offers fast and efficient access to individual │ │ │ │ -426 * elements in any order and saves the user from worrying about │ │ │ │ -427 * memory and size allocation. Subscripting ( @c [] ) access is │ │ │ │ -428 * also provided as with C-style arrays. │ │ │ │ -429 */ │ │ │ │ -430 template > │ │ │ │ -_4_3_1 class _v_e_c_t_o_r : protected ___V_e_c_t_o_r___b_a_s_e<_Tp, _Alloc> │ │ │ │ -432 { │ │ │ │ -433#ifdef _GLIBCXX_CONCEPT_CHECKS │ │ │ │ -434 // Concept requirements. │ │ │ │ -435 typedef typename _Alloc::value_type ___A_l_l_o_c___v_a_l_u_e___t_y_p_e; │ │ │ │ -436# if __cplusplus < 201103L │ │ │ │ -437 __glibcxx_class_requires(_Tp, _SGIAssignableConcept) │ │ │ │ -438# endif │ │ │ │ -439 __glibcxx_class_requires2(_Tp, ___A_l_l_o_c___v_a_l_u_e___t_y_p_e, _SameTypeConcept) │ │ │ │ -440#endif │ │ │ │ -441 │ │ │ │ -442#if __cplusplus >= 201103L │ │ │ │ -443 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, │ │ │ │ -444 "std::vector must have a non-const, non-volatile value_type"); │ │ │ │ -445# if __cplusplus > 201703L || defined __STRICT_ANSI__ │ │ │ │ -446 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, │ │ │ │ -447 "std::vector must have the same value_type as its allocator"); │ │ │ │ -448# endif │ │ │ │ +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 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 return std::atomic_exchange_explicit(__p, _s_t_d_:_:_m_o_v_e(__r), │ │ │ │ +228 memory_order_seq_cst); │ │ │ │ +229 } │ │ │ │ +230 │ │ │ │ +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 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 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 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 /// @} 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 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 │ │ │ │ +405 // _Sp_counted_base<>* │ │ │ │ +406 using pointer = decltype(__count_type::_M_pi); │ │ │ │ +407 │ │ │ │ +408 // Ensure we can use the LSB as the lock bit. │ │ │ │ +409 static_assert(alignof(remove_pointer_t) > 1); │ │ │ │ +410 │ │ │ │ +411 constexpr _Atomic_count() noexcept = default; │ │ │ │ +412 │ │ │ │ +413 explicit │ │ │ │ +414 _Atomic_count(__count_type&& __c) noexcept │ │ │ │ +415 : _M_val(reinterpret_cast(__c._M_pi)) │ │ │ │ +416 { │ │ │ │ +417 __c._M_pi = nullptr; │ │ │ │ +418 } │ │ │ │ +419 │ │ │ │ +420 ~_Atomic_count() │ │ │ │ +421 { │ │ │ │ +422 auto __val = _M_val.load(memory_order_relaxed); │ │ │ │ +423 _GLIBCXX_TSAN_MUTEX_DESTROY(&_M_val); │ │ │ │ +424 __glibcxx_assert(!(__val & _S_lock_bit)); │ │ │ │ +425 if (auto __pi = reinterpret_cast(__val)) │ │ │ │ +426 { │ │ │ │ +427 if constexpr (__is_shared_ptr<_Tp>) │ │ │ │ +428 __pi->_M_release(); │ │ │ │ +429 else │ │ │ │ +430 __pi->_M_weak_release(); │ │ │ │ +431 } │ │ │ │ +432 } │ │ │ │ +433 │ │ │ │ +434 _Atomic_count(const _Atomic_count&) = delete; │ │ │ │ +435 _Atomic_count& operator=(const _Atomic_count&) = delete; │ │ │ │ +436 │ │ │ │ +437 // Precondition: Caller does not hold lock! │ │ │ │ +438 // Returns the raw pointer value without the lock bit set. │ │ │ │ +439 pointer │ │ │ │ +440 _l_o_c_k(_m_e_m_o_r_y___o_r_d_e_r __o) const noexcept │ │ │ │ +441 { │ │ │ │ +442 // To acquire the lock we flip the LSB from 0 to 1. │ │ │ │ +443 │ │ │ │ +444 auto __current = _M_val.load(memory_order_relaxed); │ │ │ │ +445 while (__current & _S_lock_bit) │ │ │ │ +446 { │ │ │ │ +447#if __glibcxx_atomic_wait │ │ │ │ +448 __detail::__thread_relax(); │ │ │ │ 449#endif │ │ │ │ -450 │ │ │ │ -451 typedef ___V_e_c_t_o_r___b_a_s_e_<___T_p_,_ ___A_l_l_o_c_> ___B_a_s_e; │ │ │ │ -452 typedef typename _Base::_Tp_alloc_type _Tp_alloc_type; │ │ │ │ -453 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; │ │ │ │ +450 __current = _M_val.load(memory_order_relaxed); │ │ │ │ +451 } │ │ │ │ +452 │ │ │ │ +453 _GLIBCXX_TSAN_MUTEX_TRY_LOCK(&_M_val); │ │ │ │ 454 │ │ │ │ -455 public: │ │ │ │ -456 typedef _Tp value_type; │ │ │ │ -457 typedef typename _Base::pointer pointer; │ │ │ │ -458 typedef typename _Alloc_traits::const_pointer const_pointer; │ │ │ │ -459 typedef typename _Alloc_traits::reference reference; │ │ │ │ -460 typedef typename _Alloc_traits::const_reference const_reference; │ │ │ │ -461 typedef __gnu_cxx::__normal_iterator iterator; │ │ │ │ -462 typedef __gnu_cxx::__normal_iterator │ │ │ │ -463 const_iterator; │ │ │ │ -464 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; │ │ │ │ -465 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; │ │ │ │ -466 typedef size_t size_type; │ │ │ │ -467 typedef _p_t_r_d_i_f_f___t _d_i_f_f_e_r_e_n_c_e___t_y_p_e; │ │ │ │ -468 typedef _Alloc allocator_type; │ │ │ │ -469 │ │ │ │ -470 private: │ │ │ │ -471#if __cplusplus >= 201103L │ │ │ │ -472 static constexpr bool │ │ │ │ -473 _S_nothrow_relocate(_t_r_u_e___t_y_p_e) │ │ │ │ +455 while (!_M_val.compare_exchange_strong(__current, │ │ │ │ +456 __current | _S_lock_bit, │ │ │ │ +457 __o, │ │ │ │ +458 memory_order_relaxed)) │ │ │ │ +459 { │ │ │ │ +460 _GLIBCXX_TSAN_MUTEX_TRY_LOCK_FAILED(&_M_val); │ │ │ │ +461#if __glibcxx_atomic_wait │ │ │ │ +462 __detail::__thread_relax(); │ │ │ │ +463#endif │ │ │ │ +464 __current = __current & ~_S_lock_bit; │ │ │ │ +465 _GLIBCXX_TSAN_MUTEX_TRY_LOCK(&_M_val); │ │ │ │ +466 } │ │ │ │ +467 _GLIBCXX_TSAN_MUTEX_LOCKED(&_M_val); │ │ │ │ +468 return reinterpret_cast(__current); │ │ │ │ +469 } │ │ │ │ +470 │ │ │ │ +471 // Precondition: caller holds lock! │ │ │ │ +472 void │ │ │ │ +473 unlock(_m_e_m_o_r_y___o_r_d_e_r __o) const noexcept │ │ │ │ 474 { │ │ │ │ -475 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_>(), │ │ │ │ -476 _s_t_d_:_:_d_e_c_l_v_a_l_<_p_o_i_n_t_e_r_>(), │ │ │ │ -477 _s_t_d_:_:_d_e_c_l_v_a_l_<_p_o_i_n_t_e_r_>(), │ │ │ │ -478 _s_t_d_:_:_d_e_c_l_v_a_l_<___T_p___a_l_l_o_c___t_y_p_e_&_>())); │ │ │ │ -479 } │ │ │ │ -480 │ │ │ │ -481 static constexpr bool │ │ │ │ -482 _S_nothrow_relocate(_f_a_l_s_e___t_y_p_e) │ │ │ │ -483 { return false; } │ │ │ │ -484 │ │ │ │ -485 static constexpr bool │ │ │ │ -486 _S_use_relocate() │ │ │ │ -487 { │ │ │ │ -488 // Instantiating std::__relocate_a might cause an error outside the │ │ │ │ -489 // immediate context (in __relocate_object_a's noexcept-specifier), │ │ │ │ -490 // so only do it if we know the type can be move-inserted into *this. │ │ │ │ -491 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_>{}); │ │ │ │ +475 _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK(&_M_val); │ │ │ │ +476 _M_val.fetch_sub(1, __o); │ │ │ │ +477 _GLIBCXX_TSAN_MUTEX_POST_UNLOCK(&_M_val); │ │ │ │ +478 } │ │ │ │ +479 │ │ │ │ +480 // Swaps the values of *this and __c, and unlocks *this. │ │ │ │ +481 // Precondition: caller holds lock! │ │ │ │ +482 void │ │ │ │ +483 _M_swap_unlock(__count_type& __c, _m_e_m_o_r_y___o_r_d_e_r __o) noexcept │ │ │ │ +484 { │ │ │ │ +485 if (__o != memory_order_seq_cst) │ │ │ │ +486 __o = memory_order_release; │ │ │ │ +487 auto __x = reinterpret_cast(__c._M_pi); │ │ │ │ +488 _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK(&_M_val); │ │ │ │ +489 __x = _M_val.exchange(__x, __o); │ │ │ │ +490 _GLIBCXX_TSAN_MUTEX_POST_UNLOCK(&_M_val); │ │ │ │ +491 __c._M_pi = reinterpret_cast(__x & ~_S_lock_bit); │ │ │ │ 492 } │ │ │ │ 493 │ │ │ │ -494 static pointer │ │ │ │ -495 _S_do_relocate(pointer __first, pointer __last, pointer __result, │ │ │ │ -496 _Tp_alloc_type& _____a_l_l_o_c, _t_r_u_e___t_y_p_e) noexcept │ │ │ │ -497 { │ │ │ │ -498 return _s_t_d_:_:_____r_e_l_o_c_a_t_e___a(__first, __last, __result, _____a_l_l_o_c); │ │ │ │ -499 } │ │ │ │ -500 │ │ │ │ -501 static pointer │ │ │ │ -502 _S_do_relocate(pointer, pointer, pointer __result, │ │ │ │ -503 _Tp_alloc_type&, _f_a_l_s_e___t_y_p_e) noexcept │ │ │ │ -504 { return __result; } │ │ │ │ -505 │ │ │ │ -506 static ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R pointer │ │ │ │ -507 _S_relocate(pointer __first, pointer __last, pointer __result, │ │ │ │ -508 _Tp_alloc_type& _____a_l_l_o_c) noexcept │ │ │ │ -509 { │ │ │ │ -510#if __cpp_if_constexpr │ │ │ │ -511 // All callers have already checked _S_use_relocate() so just do it. │ │ │ │ -512 return _s_t_d_:_:_____r_e_l_o_c_a_t_e___a(__first, __last, __result, _____a_l_l_o_c); │ │ │ │ -513#else │ │ │ │ -514 using _____d_o___i_t = __bool_constant<_S_use_relocate()>; │ │ │ │ -515 return _S_do_relocate(__first, __last, __result, _____a_l_l_o_c, _____d_o___i_t{}); │ │ │ │ -516#endif │ │ │ │ -517 } │ │ │ │ -518#endif // C++11 │ │ │ │ -519 │ │ │ │ -520 protected: │ │ │ │ -521 using _Base::_M_allocate; │ │ │ │ -522 using _Base::_M_deallocate; │ │ │ │ -523 using _Base::_M_impl; │ │ │ │ -524 using _Base::_M_get_Tp_allocator; │ │ │ │ -525 │ │ │ │ -526 public: │ │ │ │ -527 // [23.2.4.1] construct/copy/destroy │ │ │ │ -528 // (assign() and get_allocator() are also listed in this section) │ │ │ │ +494#if __glibcxx_atomic_wait │ │ │ │ +495 // Precondition: caller holds lock! │ │ │ │ +496 void │ │ │ │ +497 _M_wait_unlock(_m_e_m_o_r_y___o_r_d_e_r __o) const noexcept │ │ │ │ +498 { │ │ │ │ +499 _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK(&_M_val); │ │ │ │ +500 auto __v = _M_val.fetch_sub(1, memory_order_relaxed); │ │ │ │ +501 _GLIBCXX_TSAN_MUTEX_POST_UNLOCK(&_M_val); │ │ │ │ +502 _M_val.wait(__v & ~_S_lock_bit, __o); │ │ │ │ +503 } │ │ │ │ +504 │ │ │ │ +505 void │ │ │ │ +506 notify_one() noexcept │ │ │ │ +507 { │ │ │ │ +508 _GLIBCXX_TSAN_MUTEX_PRE_SIGNAL(&_M_val); │ │ │ │ +509 _M_val.notify_one(); │ │ │ │ +510 _GLIBCXX_TSAN_MUTEX_POST_SIGNAL(&_M_val); │ │ │ │ +511 } │ │ │ │ +512 │ │ │ │ +513 void │ │ │ │ +514 notify_all() noexcept │ │ │ │ +515 { │ │ │ │ +516 _GLIBCXX_TSAN_MUTEX_PRE_SIGNAL(&_M_val); │ │ │ │ +517 _M_val.notify_all(); │ │ │ │ +518 _GLIBCXX_TSAN_MUTEX_POST_SIGNAL(&_M_val); │ │ │ │ +519 } │ │ │ │ +520#endif │ │ │ │ +521 │ │ │ │ +522 private: │ │ │ │ +523 mutable __atomic_base _M_val{0}; │ │ │ │ +524 static constexpr uintptr_t _S_lock_bit{1}; │ │ │ │ +525 }; │ │ │ │ +526 │ │ │ │ +527 typename _Tp::element_type* _M_ptr = nullptr; │ │ │ │ +528 _Atomic_count _M_refcount; │ │ │ │ 529 │ │ │ │ -530 /** │ │ │ │ -531 * @brief Creates a %vector with no elements. │ │ │ │ -532 */ │ │ │ │ -533#if __cplusplus >= 201103L │ │ │ │ -_5_3_4 _v_e_c_t_o_r() = default; │ │ │ │ -535#else │ │ │ │ -536 _v_e_c_t_o_r() { } │ │ │ │ -537#endif │ │ │ │ -538 │ │ │ │ -539 /** │ │ │ │ -540 * @brief Creates a %vector with no elements. │ │ │ │ -541 * @param __a An allocator object. │ │ │ │ -542 */ │ │ │ │ -543 explicit │ │ │ │ -544 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -_5_4_5 _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 │ │ │ │ -546 : ___B_a_s_e(__a) { } │ │ │ │ -547 │ │ │ │ -548#if __cplusplus >= 201103L │ │ │ │ -549 /** │ │ │ │ -550 * @brief Creates a %vector with default constructed elements. │ │ │ │ -551 * @param __n The number of elements to initially create. │ │ │ │ -552 * @param __a An allocator. │ │ │ │ -553 * │ │ │ │ -554 * This constructor fills the %vector with @a __n default │ │ │ │ -555 * constructed elements. │ │ │ │ -556 */ │ │ │ │ -557 explicit │ │ │ │ -558 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -_5_5_9 _v_e_c_t_o_r(size_type __n, const allocator_type& __a = allocator_type()) │ │ │ │ -560 : ___B_a_s_e(_S_check_init_len(__n, __a), __a) │ │ │ │ -561 { _M_default_initialize(__n); } │ │ │ │ -562 │ │ │ │ -563 /** │ │ │ │ -564 * @brief Creates a %vector with copies of an exemplar element. │ │ │ │ -565 * @param __n The number of elements to initially create. │ │ │ │ -566 * @param __value An element to copy. │ │ │ │ -567 * @param __a An allocator. │ │ │ │ -568 * │ │ │ │ -569 * This constructor fills the %vector with @a __n copies of @a __value. │ │ │ │ -570 */ │ │ │ │ -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(size_type __n, const value_type& __value, │ │ │ │ -573 const allocator_type& __a = allocator_type()) │ │ │ │ -574 : ___B_a_s_e(_S_check_init_len(__n, __a), __a) │ │ │ │ -575 { _M_fill_initialize(__n, __value); } │ │ │ │ -576#else │ │ │ │ -577 /** │ │ │ │ -578 * @brief Creates a %vector with copies of an exemplar element. │ │ │ │ -579 * @param __n The number of elements to initially create. │ │ │ │ -580 * @param __value An element to copy. │ │ │ │ -581 * @param __a An allocator. │ │ │ │ -582 * │ │ │ │ -583 * This constructor fills the %vector with @a __n copies of @a __value. │ │ │ │ -584 */ │ │ │ │ -585 explicit │ │ │ │ -586 _v_e_c_t_o_r(size_type __n, const value_type& __value = value_type(), │ │ │ │ -587 const allocator_type& __a = allocator_type()) │ │ │ │ -588 : _Base(_S_check_init_len(__n, __a), __a) │ │ │ │ -589 { _M_fill_initialize(__n, __value); } │ │ │ │ -590#endif │ │ │ │ -591 │ │ │ │ -592 /** │ │ │ │ -593 * @brief %Vector copy constructor. │ │ │ │ -594 * @param __x A %vector of identical element and allocator types. │ │ │ │ -595 * │ │ │ │ -596 * All the elements of @a __x are copied, but any unused capacity in │ │ │ │ -597 * @a __x will not be copied │ │ │ │ -598 * (i.e. capacity() == size() in the new %vector). │ │ │ │ -599 * │ │ │ │ -600 * The newly-created %vector uses a copy of the allocator object used │ │ │ │ -601 * by @a __x (unless the allocator traits dictate a different object). │ │ │ │ -602 */ │ │ │ │ -603 _GLIBCXX20_CONSTEXPR │ │ │ │ -_6_0_4 _v_e_c_t_o_r(const _v_e_c_t_o_r& __x) │ │ │ │ -605 : ___B_a_s_e(__x._s_i_z_e(), │ │ │ │ -606 ___A_l_l_o_c___t_r_a_i_t_s::_S_select_on_copy(__x._M_get_Tp_allocator())) │ │ │ │ +530 static typename _Atomic_count::pointer │ │ │ │ +531 _S_add_ref(typename _Atomic_count::pointer __p) │ │ │ │ +532 { │ │ │ │ +533 if (__p) │ │ │ │ +534 { │ │ │ │ +535 if constexpr (__is_shared_ptr<_Tp>) │ │ │ │ +536 __p->_M_add_ref_copy(); │ │ │ │ +537 else │ │ │ │ +538 __p->_M_weak_add_ref(); │ │ │ │ +539 } │ │ │ │ +540 return __p; │ │ │ │ +541 } │ │ │ │ +542 │ │ │ │ +543 constexpr _Sp_atomic() noexcept = default; │ │ │ │ +544 │ │ │ │ +545 explicit │ │ │ │ +546 _Sp_atomic(value_type __r) noexcept │ │ │ │ +547 : _M_ptr(__r._M_ptr), _M_refcount(_s_t_d::_m_o_v_e(__r._M_refcount)) │ │ │ │ +548 { } │ │ │ │ +549 │ │ │ │ +550 ~_Sp_atomic() = default; │ │ │ │ +551 │ │ │ │ +552 _Sp_atomic(const _Sp_atomic&) = delete; │ │ │ │ +553 void operator=(const _Sp_atomic&) = delete; │ │ │ │ +554 │ │ │ │ +555 value_type │ │ │ │ +556 load(_m_e_m_o_r_y___o_r_d_e_r __o) const noexcept │ │ │ │ +557 { │ │ │ │ +558 __glibcxx_assert(__o != memory_order_release │ │ │ │ +559 && __o != memory_order_acq_rel); │ │ │ │ +560 // Ensure that the correct value of _M_ptr is visible after locking, │ │ │ │ +561 // by upgrading relaxed or consume to acquire. │ │ │ │ +562 if (__o != memory_order_seq_cst) │ │ │ │ +563 __o = memory_order_acquire; │ │ │ │ +564 │ │ │ │ +565 value_type __ret; │ │ │ │ +566 auto __pi = _M_refcount.lock(__o); │ │ │ │ +567 __ret._M_ptr = _M_ptr; │ │ │ │ +568 __ret._M_refcount._M_pi = _S_add_ref(__pi); │ │ │ │ +569 _M_refcount.unlock(memory_order_relaxed); │ │ │ │ +570 return __ret; │ │ │ │ +571 } │ │ │ │ +572 │ │ │ │ +573 void │ │ │ │ +574 swap(value_type& __r, _m_e_m_o_r_y___o_r_d_e_r __o) noexcept │ │ │ │ +575 { │ │ │ │ +576 _M_refcount.lock(memory_order_acquire); │ │ │ │ +577 std::swap(_M_ptr, __r._M_ptr); │ │ │ │ +578 _M_refcount._M_swap_unlock(__r._M_refcount, __o); │ │ │ │ +579 } │ │ │ │ +580 │ │ │ │ +581 bool │ │ │ │ +582 compare_exchange_strong(value_type& __expected, value_type __desired, │ │ │ │ +583 _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 │ │ │ │ +584 { │ │ │ │ +585 bool __result = true; │ │ │ │ +586 auto __pi = _M_refcount.lock(memory_order_acquire); │ │ │ │ +587 if (_M_ptr == __expected._M_ptr │ │ │ │ +588 && __pi == __expected._M_refcount._M_pi) │ │ │ │ +589 { │ │ │ │ +590 _M_ptr = __desired._M_ptr; │ │ │ │ +591 _M_refcount._M_swap_unlock(__desired._M_refcount, __o); │ │ │ │ +592 } │ │ │ │ +593 else │ │ │ │ +594 { │ │ │ │ +595 _Tp __sink = _s_t_d_:_:_m_o_v_e(__expected); │ │ │ │ +596 __expected._M_ptr = _M_ptr; │ │ │ │ +597 __expected._M_refcount._M_pi = _S_add_ref(__pi); │ │ │ │ +598 _M_refcount.unlock(__o2); │ │ │ │ +599 __result = false; │ │ │ │ +600 } │ │ │ │ +601 return __result; │ │ │ │ +602 } │ │ │ │ +603 │ │ │ │ +604#if __glibcxx_atomic_wait │ │ │ │ +605 void │ │ │ │ +606 wait(value_type __old, _m_e_m_o_r_y___o_r_d_e_r __o) const noexcept │ │ │ │ 607 { │ │ │ │ -608 this->_M_impl._M_finish = │ │ │ │ -609 _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(), │ │ │ │ -610 _t_h_i_s->_M_impl._M_start, │ │ │ │ -611 _M_get_Tp_allocator()); │ │ │ │ -612 } │ │ │ │ -613 │ │ │ │ -614#if __cplusplus >= 201103L │ │ │ │ -615 /** │ │ │ │ -616 * @brief %Vector move constructor. │ │ │ │ -617 * │ │ │ │ -618 * The newly-created %vector contains the exact contents of the │ │ │ │ -619 * moved instance. │ │ │ │ -620 * The contents of the moved instance are a valid, but unspecified │ │ │ │ -621 * %vector. │ │ │ │ -622 */ │ │ │ │ -_6_2_3 _v_e_c_t_o_r(_v_e_c_t_o_r&&) noexcept = _d_e_f_a_u_l_t; │ │ │ │ -624 │ │ │ │ -625 /// Copy constructor with alternative allocator │ │ │ │ -626 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -_6_2_7 _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) │ │ │ │ -628 : ___B_a_s_e(__x._s_i_z_e(), __a) │ │ │ │ -629 { │ │ │ │ -630 this->_M_impl._M_finish = │ │ │ │ -631 _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(), │ │ │ │ -632 _t_h_i_s->_M_impl._M_start, │ │ │ │ -633 _M_get_Tp_allocator()); │ │ │ │ -634 } │ │ │ │ -635 │ │ │ │ -636 private: │ │ │ │ -637 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -638 _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 │ │ │ │ -639 : _Base(_____m, _s_t_d_:_:_m_o_v_e(_____r_v)) │ │ │ │ -640 { } │ │ │ │ -641 │ │ │ │ -642 _GLIBCXX20_CONSTEXPR │ │ │ │ -643 _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) │ │ │ │ -644 : _Base(__m) │ │ │ │ -645 { │ │ │ │ -646 if (__rv.get_allocator() == __m) │ │ │ │ -647 this->_M_impl._M_swap_data(__rv._M_impl); │ │ │ │ -648 else if (!__rv.empty()) │ │ │ │ -649 { │ │ │ │ -650 this->_M_create_storage(__rv.size()); │ │ │ │ -651 this->_M_impl._M_finish = │ │ │ │ -652 _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(), │ │ │ │ -653 this->_M_impl._M_start, │ │ │ │ -654 _M_get_Tp_allocator()); │ │ │ │ -655 __rv.clear(); │ │ │ │ -656 } │ │ │ │ -657 } │ │ │ │ -658 │ │ │ │ -659 public: │ │ │ │ -660 /// Move constructor with alternative allocator │ │ │ │ -661 _GLIBCXX20_CONSTEXPR │ │ │ │ -_6_6_2 _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) │ │ │ │ -663 noexcept( noexcept( │ │ │ │ -664 _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_&_>(), │ │ │ │ -665 _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_>())) ) │ │ │ │ -666 : _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{}) │ │ │ │ -667 { } │ │ │ │ -668 │ │ │ │ -669 /** │ │ │ │ -670 * @brief Builds a %vector from an initializer list. │ │ │ │ -671 * @param __l An initializer_list. │ │ │ │ -672 * @param __a An allocator. │ │ │ │ -673 * │ │ │ │ -674 * Create a %vector consisting of copies of the elements in the │ │ │ │ -675 * initializer_list @a __l. │ │ │ │ -676 * │ │ │ │ -677 * This will call the element type's copy constructor N times │ │ │ │ -678 * (where N is @a __l.size()) and do no memory reallocation. │ │ │ │ -679 */ │ │ │ │ -680 _GLIBCXX20_CONSTEXPR │ │ │ │ -_6_8_1 _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, │ │ │ │ -682 const allocator_type& __a = allocator_type()) │ │ │ │ -683 : ___B_a_s_e(__a) │ │ │ │ -684 { │ │ │ │ -685 _M_range_initialize_n(_____l.begin(), _____l.end(), _____l.size()); │ │ │ │ -686 } │ │ │ │ -687#endif │ │ │ │ -688 │ │ │ │ -689 /** │ │ │ │ -690 * @brief Builds a %vector from a range. │ │ │ │ -691 * @param __first An input iterator. │ │ │ │ -692 * @param __last An input iterator. │ │ │ │ -693 * @param __a An allocator. │ │ │ │ -694 * │ │ │ │ -695 * Create a %vector consisting of copies of the elements from │ │ │ │ -696 * [first,last). │ │ │ │ -697 * │ │ │ │ -698 * If the iterators are forward, bidirectional, or │ │ │ │ -699 * random-access, then this will call the elements' copy │ │ │ │ -700 * constructor N times (where N is distance(first,last)) and do │ │ │ │ -701 * no memory reallocation. But if only input iterators are │ │ │ │ -702 * used, then this will do at most 2N calls to the copy │ │ │ │ -703 * constructor, and logN memory reallocations. │ │ │ │ -704 */ │ │ │ │ -705#if __cplusplus >= 201103L │ │ │ │ -706 template> │ │ │ │ -708 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -_7_0_9 _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, │ │ │ │ -710 const allocator_type& __a = allocator_type()) │ │ │ │ -711 : ___B_a_s_e(__a) │ │ │ │ -712 { │ │ │ │ -713#if __glibcxx_concepts // C++ >= C++20 │ │ │ │ -714 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_> │ │ │ │ -715 || _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_>) │ │ │ │ -716 { │ │ │ │ -717 const auto __n │ │ │ │ -718 = static_cast(ranges::distance(__first, __last)); │ │ │ │ -719 _M_range_initialize_n(__first, __last, __n); │ │ │ │ -720 return; │ │ │ │ -721 } │ │ │ │ -722 else │ │ │ │ -723#endif │ │ │ │ -724 _M_range_initialize(__first, __last, │ │ │ │ -725 _s_t_d_:_:_____i_t_e_r_a_t_o_r___c_a_t_e_g_o_r_y(__first)); │ │ │ │ -726 } │ │ │ │ -727#else │ │ │ │ -728 template │ │ │ │ -729 _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, │ │ │ │ -730 const allocator_type& __a = allocator_type()) │ │ │ │ -731 : _Base(__a) │ │ │ │ -732 { │ │ │ │ -733 // Check whether it's an integral type. If so, it's not an iterator. │ │ │ │ -734 typedef typename std::__is_integer<_InputIterator>::__type ___I_n_t_e_g_r_a_l; │ │ │ │ -735 _M_initialize_dispatch(__first, __last, ___I_n_t_e_g_r_a_l()); │ │ │ │ -736 } │ │ │ │ -737#endif │ │ │ │ -738 │ │ │ │ -739 /** │ │ │ │ -740 * The dtor only erases the elements, and note that if the │ │ │ │ -741 * elements themselves are pointers, the pointed-to memory is │ │ │ │ -742 * not touched in any way. Managing the pointer is the user's │ │ │ │ -743 * responsibility. │ │ │ │ -744 */ │ │ │ │ -745 _GLIBCXX20_CONSTEXPR │ │ │ │ -_7_4_6 _~_v_e_c_t_o_r() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -747 { │ │ │ │ -748 _s_t_d_:_:___D_e_s_t_r_o_y(this->_M_impl._M_start, _t_h_i_s->_M_impl._M_finish, │ │ │ │ -749 _M_get_Tp_allocator()); │ │ │ │ -750 _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC; │ │ │ │ -751 } │ │ │ │ -752 │ │ │ │ -753 /** │ │ │ │ -754 * @brief %Vector assignment operator. │ │ │ │ -755 * @param __x A %vector of identical element and allocator types. │ │ │ │ -756 * │ │ │ │ -757 * All the elements of @a __x are copied, but any unused capacity in │ │ │ │ -758 * @a __x will not be copied. │ │ │ │ -759 * │ │ │ │ -760 * Whether the allocator is copied depends on the allocator traits. │ │ │ │ -761 */ │ │ │ │ -762 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -763 _v_e_c_t_o_r& │ │ │ │ -_7_6_4 _o_p_e_r_a_t_o_r_=(const _v_e_c_t_o_r& __x); │ │ │ │ +608 auto __pi = _M_refcount.lock(memory_order_acquire); │ │ │ │ +609 if (_M_ptr == __old._M_ptr && __pi == __old._M_refcount._M_pi) │ │ │ │ +610 _M_refcount._M_wait_unlock(__o); │ │ │ │ +611 else │ │ │ │ +612 _M_refcount.unlock(memory_order_relaxed); │ │ │ │ +613 } │ │ │ │ +614 │ │ │ │ +615 void │ │ │ │ +616 notify_one() noexcept │ │ │ │ +617 { │ │ │ │ +618 _M_refcount.notify_one(); │ │ │ │ +619 } │ │ │ │ +620 │ │ │ │ +621 void │ │ │ │ +622 notify_all() noexcept │ │ │ │ +623 { │ │ │ │ +624 _M_refcount.notify_all(); │ │ │ │ +625 } │ │ │ │ +626#endif │ │ │ │ +627 }; │ │ │ │ +628 │ │ │ │ +629 template │ │ │ │ +630 struct atomic> │ │ │ │ +631 { │ │ │ │ +632 public: │ │ │ │ +633 using value_type = shared_ptr<_Tp>; │ │ │ │ +634 │ │ │ │ +635 static constexpr bool is_always_lock_free = false; │ │ │ │ +636 │ │ │ │ +637 bool │ │ │ │ +638 is_lock_free() const noexcept │ │ │ │ +639 { return false; } │ │ │ │ +640 │ │ │ │ +641 constexpr atomic() noexcept = default; │ │ │ │ +642 │ │ │ │ +643 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +644 // 3661. constinit atomic> a(nullptr); should work │ │ │ │ +645 constexpr atomic(nullptr_t) noexcept : atomic() { } │ │ │ │ +646 │ │ │ │ +647 atomic(shared_ptr<_Tp> __r) noexcept │ │ │ │ +648 : _M_impl(_s_t_d_:_:_m_o_v_e(__r)) │ │ │ │ +649 { } │ │ │ │ +650 │ │ │ │ +651 atomic(const atomic&) = delete; │ │ │ │ +652 void operator=(const atomic&) = delete; │ │ │ │ +653 │ │ │ │ +654 shared_ptr<_Tp> │ │ │ │ +655 load(_m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) const noexcept │ │ │ │ +656 { return _M_impl.load(__o); } │ │ │ │ +657 │ │ │ │ +658 operator shared_ptr<_Tp>() const noexcept │ │ │ │ +659 { return _M_impl.load(memory_order_seq_cst); } │ │ │ │ +660 │ │ │ │ +661 void │ │ │ │ +662 store(shared_ptr<_Tp> __desired, │ │ │ │ +663 _m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) noexcept │ │ │ │ +664 { _M_impl.swap(__desired, __o); } │ │ │ │ +665 │ │ │ │ +666 void │ │ │ │ +667 operator=(shared_ptr<_Tp> __desired) noexcept │ │ │ │ +668 { _M_impl.swap(__desired, memory_order_seq_cst); } │ │ │ │ +669 │ │ │ │ +670 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +671 // 3893. LWG 3661 broke atomic> a; a = nullptr; │ │ │ │ +672 void │ │ │ │ +673 operator=(nullptr_t) noexcept │ │ │ │ +674 { store(nullptr); } │ │ │ │ +675 │ │ │ │ +676 shared_ptr<_Tp> │ │ │ │ +677 exchange(shared_ptr<_Tp> __desired, │ │ │ │ +678 _m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) noexcept │ │ │ │ +679 { │ │ │ │ +680 _M_impl.swap(__desired, __o); │ │ │ │ +681 return __desired; │ │ │ │ +682 } │ │ │ │ +683 │ │ │ │ +684 bool │ │ │ │ +685 compare_exchange_strong(shared_ptr<_Tp>& __expected, │ │ │ │ +686 shared_ptr<_Tp> __desired, │ │ │ │ +687 _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 │ │ │ │ +688 { │ │ │ │ +689 return _M_impl.compare_exchange_strong(__expected, __desired, __o, __o2); │ │ │ │ +690 } │ │ │ │ +691 │ │ │ │ +692 bool │ │ │ │ +693 compare_exchange_strong(value_type& __expected, value_type __desired, │ │ │ │ +694 _m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) noexcept │ │ │ │ +695 { │ │ │ │ +696 _m_e_m_o_r_y___o_r_d_e_r __o2; │ │ │ │ +697 switch (__o) │ │ │ │ +698 { │ │ │ │ +699 case memory_order_acq_rel: │ │ │ │ +700 __o2 = memory_order_acquire; │ │ │ │ +701 break; │ │ │ │ +702 case memory_order_release: │ │ │ │ +703 __o2 = memory_order_relaxed; │ │ │ │ +704 break; │ │ │ │ +705 default: │ │ │ │ +706 __o2 = __o; │ │ │ │ +707 } │ │ │ │ +708 return compare_exchange_strong(__expected, _s_t_d_:_:_m_o_v_e(__desired), │ │ │ │ +709 __o, __o2); │ │ │ │ +710 } │ │ │ │ +711 │ │ │ │ +712 bool │ │ │ │ +713 compare_exchange_weak(value_type& __expected, value_type __desired, │ │ │ │ +714 _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 │ │ │ │ +715 { │ │ │ │ +716 return compare_exchange_strong(__expected, _s_t_d_:_:_m_o_v_e(__desired), │ │ │ │ +717 __o, __o2); │ │ │ │ +718 } │ │ │ │ +719 │ │ │ │ +720 bool │ │ │ │ +721 compare_exchange_weak(value_type& __expected, value_type __desired, │ │ │ │ +722 _m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) noexcept │ │ │ │ +723 { │ │ │ │ +724 return compare_exchange_strong(__expected, _s_t_d_:_:_m_o_v_e(__desired), __o); │ │ │ │ +725 } │ │ │ │ +726 │ │ │ │ +727#if __glibcxx_atomic_wait │ │ │ │ +728 void │ │ │ │ +729 wait(value_type __old, │ │ │ │ +730 _m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) const noexcept │ │ │ │ +731 { │ │ │ │ +732 _M_impl.wait(_s_t_d_:_:_m_o_v_e(__old), __o); │ │ │ │ +733 } │ │ │ │ +734 │ │ │ │ +735 void │ │ │ │ +736 notify_one() noexcept │ │ │ │ +737 { │ │ │ │ +738 _M_impl.notify_one(); │ │ │ │ +739 } │ │ │ │ +740 │ │ │ │ +741 void │ │ │ │ +742 notify_all() noexcept │ │ │ │ +743 { │ │ │ │ +744 _M_impl.notify_all(); │ │ │ │ +745 } │ │ │ │ +746#endif │ │ │ │ +747 │ │ │ │ +748 private: │ │ │ │ +749 _Sp_atomic> _M_impl; │ │ │ │ +750 }; │ │ │ │ +751 │ │ │ │ +752 template │ │ │ │ +753 struct atomic> │ │ │ │ +754 { │ │ │ │ +755 public: │ │ │ │ +756 using value_type = weak_ptr<_Tp>; │ │ │ │ +757 │ │ │ │ +758 static constexpr bool is_always_lock_free = false; │ │ │ │ +759 │ │ │ │ +760 bool │ │ │ │ +761 is_lock_free() const noexcept │ │ │ │ +762 { return false; } │ │ │ │ +763 │ │ │ │ +764 constexpr atomic() noexcept = default; │ │ │ │ 765 │ │ │ │ -766#if __cplusplus >= 201103L │ │ │ │ -767 /** │ │ │ │ -768 * @brief %Vector move assignment operator. │ │ │ │ -769 * @param __x A %vector of identical element and allocator types. │ │ │ │ -770 * │ │ │ │ -771 * The contents of @a __x are moved into this %vector (without copying, │ │ │ │ -772 * if the allocators permit it). │ │ │ │ -773 * Afterwards @a __x is a valid, but unspecified %vector. │ │ │ │ -774 * │ │ │ │ -775 * Whether the allocator is moved depends on the allocator traits. │ │ │ │ -776 */ │ │ │ │ -777 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -778 _v_e_c_t_o_r& │ │ │ │ -_7_7_9 _o_p_e_r_a_t_o_r_=(_v_e_c_t_o_r&& __x) noexcept(_Alloc_traits::_S_nothrow_move()) │ │ │ │ -780 { │ │ │ │ -781 constexpr bool _____m_o_v_e___s_t_o_r_a_g_e = │ │ │ │ -782 _Alloc_traits::_S_propagate_on_move_assign() │ │ │ │ -783 || _Alloc_traits::_S_always_equal(); │ │ │ │ -784 _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_>()); │ │ │ │ -785 return *this; │ │ │ │ -786 } │ │ │ │ -787 │ │ │ │ -788 /** │ │ │ │ -789 * @brief %Vector list assignment operator. │ │ │ │ -790 * @param __l An initializer_list. │ │ │ │ -791 * │ │ │ │ -792 * This function fills a %vector with copies of the elements in the │ │ │ │ -793 * initializer list @a __l. │ │ │ │ -794 * │ │ │ │ -795 * Note that the assignment completely changes the %vector and │ │ │ │ -796 * that the resulting %vector's size is the same as the number │ │ │ │ -797 * of elements assigned. │ │ │ │ -798 */ │ │ │ │ -799 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -800 _v_e_c_t_o_r& │ │ │ │ -_8_0_1 _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) │ │ │ │ -802 { │ │ │ │ -803 this->_M_assign_aux(_____l.begin(), _____l.end(), │ │ │ │ -804 _r_a_n_d_o_m___a_c_c_e_s_s___i_t_e_r_a_t_o_r___t_a_g()); │ │ │ │ -805 return *this; │ │ │ │ -806 } │ │ │ │ -807#endif │ │ │ │ -808 │ │ │ │ -809 /** │ │ │ │ -810 * @brief Assigns a given value to a %vector. │ │ │ │ -811 * @param __n Number of elements to be assigned. │ │ │ │ -812 * @param __val Value to be assigned. │ │ │ │ -813 * │ │ │ │ -814 * This function fills a %vector with @a __n copies of the given │ │ │ │ -815 * value. Note that the assignment completely changes the │ │ │ │ -816 * %vector and that the resulting %vector's size is the same as │ │ │ │ -817 * the number of elements assigned. │ │ │ │ -818 */ │ │ │ │ -819 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -820 void │ │ │ │ -_8_2_1 _a_s_s_i_g_n(size_type __n, const value_type& __val) │ │ │ │ -822 { _M_fill_assign(__n, __val); } │ │ │ │ -823 │ │ │ │ -824 /** │ │ │ │ -825 * @brief Assigns a range to a %vector. │ │ │ │ -826 * @param __first An input iterator. │ │ │ │ -827 * @param __last An input iterator. │ │ │ │ -828 * │ │ │ │ -829 * This function fills a %vector with copies of the elements in the │ │ │ │ -830 * range [__first,__last). │ │ │ │ -831 * │ │ │ │ -832 * Note that the assignment completely changes the %vector and │ │ │ │ -833 * that the resulting %vector's size is the same as the number │ │ │ │ -834 * of elements assigned. │ │ │ │ -835 */ │ │ │ │ -836#if __cplusplus >= 201103L │ │ │ │ -837 template> │ │ │ │ -839 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -840 void │ │ │ │ -_8_4_1 _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) │ │ │ │ -842 { _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)); } │ │ │ │ -843#else │ │ │ │ -844 template │ │ │ │ -845 void │ │ │ │ -846 _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) │ │ │ │ -847 { │ │ │ │ -848 // Check whether it's an integral type. If so, it's not an iterator. │ │ │ │ -849 typedef typename std::__is_integer<_InputIterator>::__type ___I_n_t_e_g_r_a_l; │ │ │ │ -850 _M_assign_dispatch(__first, __last, ___I_n_t_e_g_r_a_l()); │ │ │ │ -851 } │ │ │ │ -852#endif │ │ │ │ +766 atomic(weak_ptr<_Tp> __r) noexcept │ │ │ │ +767 : _M_impl(_m_o_v_e(__r)) │ │ │ │ +768 { } │ │ │ │ +769 │ │ │ │ +770 atomic(const atomic&) = delete; │ │ │ │ +771 void operator=(const atomic&) = delete; │ │ │ │ +772 │ │ │ │ +773 weak_ptr<_Tp> │ │ │ │ +774 load(_m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) const noexcept │ │ │ │ +775 { return _M_impl.load(__o); } │ │ │ │ +776 │ │ │ │ +777 operator weak_ptr<_Tp>() const noexcept │ │ │ │ +778 { return _M_impl.load(memory_order_seq_cst); } │ │ │ │ +779 │ │ │ │ +780 void │ │ │ │ +781 store(weak_ptr<_Tp> __desired, │ │ │ │ +782 _m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) noexcept │ │ │ │ +783 { _M_impl.swap(__desired, __o); } │ │ │ │ +784 │ │ │ │ +785 void │ │ │ │ +786 operator=(weak_ptr<_Tp> __desired) noexcept │ │ │ │ +787 { _M_impl.swap(__desired, memory_order_seq_cst); } │ │ │ │ +788 │ │ │ │ +789 weak_ptr<_Tp> │ │ │ │ +790 exchange(weak_ptr<_Tp> __desired, │ │ │ │ +791 _m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) noexcept │ │ │ │ +792 { │ │ │ │ +793 _M_impl.swap(__desired, __o); │ │ │ │ +794 return __desired; │ │ │ │ +795 } │ │ │ │ +796 │ │ │ │ +797 bool │ │ │ │ +798 compare_exchange_strong(weak_ptr<_Tp>& __expected, │ │ │ │ +799 weak_ptr<_Tp> __desired, │ │ │ │ +800 _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 │ │ │ │ +801 { │ │ │ │ +802 return _M_impl.compare_exchange_strong(__expected, __desired, __o, __o2); │ │ │ │ +803 } │ │ │ │ +804 │ │ │ │ +805 bool │ │ │ │ +806 compare_exchange_strong(value_type& __expected, value_type __desired, │ │ │ │ +807 _m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) noexcept │ │ │ │ +808 { │ │ │ │ +809 _m_e_m_o_r_y___o_r_d_e_r __o2; │ │ │ │ +810 switch (__o) │ │ │ │ +811 { │ │ │ │ +812 case memory_order_acq_rel: │ │ │ │ +813 __o2 = memory_order_acquire; │ │ │ │ +814 break; │ │ │ │ +815 case memory_order_release: │ │ │ │ +816 __o2 = memory_order_relaxed; │ │ │ │ +817 break; │ │ │ │ +818 default: │ │ │ │ +819 __o2 = __o; │ │ │ │ +820 } │ │ │ │ +821 return compare_exchange_strong(__expected, _s_t_d_:_:_m_o_v_e(__desired), │ │ │ │ +822 __o, __o2); │ │ │ │ +823 } │ │ │ │ +824 │ │ │ │ +825 bool │ │ │ │ +826 compare_exchange_weak(value_type& __expected, value_type __desired, │ │ │ │ +827 _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 │ │ │ │ +828 { │ │ │ │ +829 return compare_exchange_strong(__expected, _s_t_d_:_:_m_o_v_e(__desired), │ │ │ │ +830 __o, __o2); │ │ │ │ +831 } │ │ │ │ +832 │ │ │ │ +833 bool │ │ │ │ +834 compare_exchange_weak(value_type& __expected, value_type __desired, │ │ │ │ +835 _m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) noexcept │ │ │ │ +836 { │ │ │ │ +837 return compare_exchange_strong(__expected, _s_t_d_:_:_m_o_v_e(__desired), __o); │ │ │ │ +838 } │ │ │ │ +839 │ │ │ │ +840#if __glibcxx_atomic_wait │ │ │ │ +841 void │ │ │ │ +842 wait(value_type __old, │ │ │ │ +843 _m_e_m_o_r_y___o_r_d_e_r __o = memory_order_seq_cst) const noexcept │ │ │ │ +844 { │ │ │ │ +845 _M_impl.wait(_s_t_d_:_:_m_o_v_e(__old), __o); │ │ │ │ +846 } │ │ │ │ +847 │ │ │ │ +848 void │ │ │ │ +849 notify_one() noexcept │ │ │ │ +850 { │ │ │ │ +851 _M_impl.notify_one(); │ │ │ │ +852 } │ │ │ │ 853 │ │ │ │ -854#if __cplusplus >= 201103L │ │ │ │ -855 /** │ │ │ │ -856 * @brief Assigns an initializer list to a %vector. │ │ │ │ -857 * @param __l An initializer_list. │ │ │ │ -858 * │ │ │ │ -859 * This function fills a %vector with copies of the elements in the │ │ │ │ -860 * initializer list @a __l. │ │ │ │ -861 * │ │ │ │ -862 * Note that the assignment completely changes the %vector and │ │ │ │ -863 * that the resulting %vector's size is the same as the number │ │ │ │ -864 * of elements assigned. │ │ │ │ -865 */ │ │ │ │ -866 _GLIBCXX20_CONSTEXPR │ │ │ │ -867 void │ │ │ │ -_8_6_8 _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) │ │ │ │ -869 { │ │ │ │ -870 this->_M_assign_aux(_____l.begin(), _____l.end(), │ │ │ │ -871 _r_a_n_d_o_m___a_c_c_e_s_s___i_t_e_r_a_t_o_r___t_a_g()); │ │ │ │ -872 } │ │ │ │ -873#endif │ │ │ │ -874 │ │ │ │ -875 /// Get a copy of the memory allocation object. │ │ │ │ -_8_7_6 using _Base::get_allocator; │ │ │ │ -877 │ │ │ │ -878 // iterators │ │ │ │ -879 /** │ │ │ │ -880 * Returns a read/write iterator that points to the first │ │ │ │ -881 * element in the %vector. Iteration is done in ordinary │ │ │ │ -882 * element order. │ │ │ │ -883 */ │ │ │ │ -884 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -885 iterator │ │ │ │ -_8_8_6 _b_e_g_i_n() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -887 { return iterator(this->_M_impl._M_start); } │ │ │ │ -888 │ │ │ │ -889 /** │ │ │ │ -890 * Returns a read-only (constant) iterator that points to the │ │ │ │ -891 * first element in the %vector. Iteration is done in ordinary │ │ │ │ -892 * element order. │ │ │ │ -893 */ │ │ │ │ -894 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -895 const_iterator │ │ │ │ -_8_9_6 _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 │ │ │ │ -897 { return const_iterator(this->_M_impl._M_start); } │ │ │ │ -898 │ │ │ │ -899 /** │ │ │ │ -900 * Returns a read/write iterator that points one past the last │ │ │ │ -901 * element in the %vector. Iteration is done in ordinary │ │ │ │ -902 * element order. │ │ │ │ -903 */ │ │ │ │ -904 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -905 _i_t_e_r_a_t_o_r │ │ │ │ -_9_0_6 _e_n_d() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -907 { return iterator(this->_M_impl._M_finish); } │ │ │ │ -908 │ │ │ │ -909 /** │ │ │ │ -910 * Returns a read-only (constant) iterator that points one past │ │ │ │ -911 * the last element in the %vector. Iteration is done in │ │ │ │ -912 * ordinary element order. │ │ │ │ -913 */ │ │ │ │ -914 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -915 const_iterator │ │ │ │ -_9_1_6 _e_n_d() _c_o_n_s_t ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -917 { return const_iterator(this->_M_impl._M_finish); } │ │ │ │ -918 │ │ │ │ -919 /** │ │ │ │ -920 * Returns a read/write reverse iterator that points to the │ │ │ │ -921 * last element in the %vector. Iteration is done in reverse │ │ │ │ -922 * element order. │ │ │ │ -923 */ │ │ │ │ -924 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -925 _r_e_v_e_r_s_e___i_t_e_r_a_t_o_r │ │ │ │ -_9_2_6 _r_b_e_g_i_n() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -927 { return _r_e_v_e_r_s_e___i_t_e_r_a_t_o_r(_e_n_d()); } │ │ │ │ -928 │ │ │ │ -929 /** │ │ │ │ -930 * Returns a read-only (constant) reverse iterator that points │ │ │ │ -931 * to the last element in the %vector. Iteration is done in │ │ │ │ -932 * reverse element order. │ │ │ │ -933 */ │ │ │ │ -934 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -935 const_reverse_iterator │ │ │ │ -_9_3_6 _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 │ │ │ │ -937 { return _c_o_n_s_t___r_e_v_e_r_s_e___i_t_e_r_a_t_o_r(_e_n_d()); } │ │ │ │ -938 │ │ │ │ -939 /** │ │ │ │ -940 * Returns a read/write reverse iterator that points to one │ │ │ │ -941 * before the first element in the %vector. Iteration is done │ │ │ │ -942 * in reverse element order. │ │ │ │ -943 */ │ │ │ │ -944 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -945 _r_e_v_e_r_s_e___i_t_e_r_a_t_o_r │ │ │ │ -_9_4_6 _r_e_n_d() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -947 { return _r_e_v_e_r_s_e___i_t_e_r_a_t_o_r(_b_e_g_i_n()); } │ │ │ │ -948 │ │ │ │ -949 /** │ │ │ │ -950 * Returns a read-only (constant) reverse iterator that points │ │ │ │ -951 * to one before the first element in the %vector. Iteration │ │ │ │ -952 * is done in reverse element order. │ │ │ │ -953 */ │ │ │ │ -954 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -955 const_reverse_iterator │ │ │ │ -_9_5_6 _r_e_n_d() _c_o_n_s_t ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -957 { 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()); } │ │ │ │ -958 │ │ │ │ -959#if __cplusplus >= 201103L │ │ │ │ -960 /** │ │ │ │ -961 * Returns a read-only (constant) iterator that points to the │ │ │ │ -962 * first element in the %vector. Iteration is done in ordinary │ │ │ │ -963 * element order. │ │ │ │ -964 */ │ │ │ │ -965 [[_____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 │ │ │ │ -966 const_iterator │ │ │ │ -_9_6_7 _c_b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ -968 { return const_iterator(this->_M_impl._M_start); } │ │ │ │ -969 │ │ │ │ -970 /** │ │ │ │ -971 * Returns a read-only (constant) iterator that points one past │ │ │ │ -972 * the last element in the %vector. Iteration is done in │ │ │ │ -973 * ordinary element order. │ │ │ │ -974 */ │ │ │ │ -975 [[_____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 │ │ │ │ -976 const_iterator │ │ │ │ -_9_7_7 _c_e_n_d() _c_o_n_s_t noexcept │ │ │ │ -978 { return const_iterator(this->_M_impl._M_finish); } │ │ │ │ -979 │ │ │ │ -980 /** │ │ │ │ -981 * Returns a read-only (constant) reverse iterator that points │ │ │ │ -982 * to the last element in the %vector. Iteration is done in │ │ │ │ -983 * reverse element order. │ │ │ │ -984 */ │ │ │ │ -985 [[_____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 │ │ │ │ -986 const_reverse_iterator │ │ │ │ -_9_8_7 _c_r_b_e_g_i_n() _c_o_n_s_t noexcept │ │ │ │ -988 { return _c_o_n_s_t___r_e_v_e_r_s_e___i_t_e_r_a_t_o_r(_e_n_d()); } │ │ │ │ -989 │ │ │ │ -990 /** │ │ │ │ -991 * Returns a read-only (constant) reverse iterator that points │ │ │ │ -992 * to one before the first element in the %vector. Iteration │ │ │ │ -993 * is done in reverse element order. │ │ │ │ -994 */ │ │ │ │ -995 [[_____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 │ │ │ │ -996 const_reverse_iterator │ │ │ │ -_9_9_7 _c_r_e_n_d() _c_o_n_s_t noexcept │ │ │ │ -998 { 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()); } │ │ │ │ -999#endif │ │ │ │ -1000 │ │ │ │ -1001 // [23.2.4.2] capacity │ │ │ │ -1002 /** Returns the number of elements in the %vector. */ │ │ │ │ -1003 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1004 size_type │ │ │ │ -_1_0_0_5 _s_i_z_e() _c_o_n_s_t ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1006 { return size_type(this->_M_impl._M_finish - _t_h_i_s->_M_impl._M_start); } │ │ │ │ -1007 │ │ │ │ -1008 /** Returns the size() of the largest possible %vector. */ │ │ │ │ -1009 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1010 size_type │ │ │ │ -_1_0_1_1 _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 │ │ │ │ -1012 { return _S_max_size(_M_get_Tp_allocator()); } │ │ │ │ -1013 │ │ │ │ -1014#if __cplusplus >= 201103L │ │ │ │ -1015 /** │ │ │ │ -1016 * @brief Resizes the %vector to the specified number of elements. │ │ │ │ -1017 * @param __new_size Number of elements the %vector should contain. │ │ │ │ -1018 * │ │ │ │ -1019 * This function will %resize the %vector to the specified │ │ │ │ -1020 * number of elements. If the number is smaller than the │ │ │ │ -1021 * %vector's current size the %vector is truncated, otherwise │ │ │ │ -1022 * default constructed elements are appended. │ │ │ │ -1023 */ │ │ │ │ -1024 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1025 void │ │ │ │ -_1_0_2_6 _r_e_s_i_z_e(size_type _____n_e_w___s_i_z_e) │ │ │ │ -1027 { │ │ │ │ -1028 if (_____n_e_w___s_i_z_e > _s_i_z_e()) │ │ │ │ -1029 _M_default_append(_____n_e_w___s_i_z_e - _s_i_z_e()); │ │ │ │ -1030 else if (_____n_e_w___s_i_z_e < _s_i_z_e()) │ │ │ │ -1031 _M_erase_at_end(this->_M_impl._M_start + _____n_e_w___s_i_z_e); │ │ │ │ -1032 } │ │ │ │ -1033 │ │ │ │ -1034 /** │ │ │ │ -1035 * @brief Resizes the %vector to the specified number of elements. │ │ │ │ -1036 * @param __new_size Number of elements the %vector should contain. │ │ │ │ -1037 * @param __x Data with which new elements should be populated. │ │ │ │ -1038 * │ │ │ │ -1039 * This function will %resize the %vector to the specified │ │ │ │ -1040 * number of elements. If the number is smaller than the │ │ │ │ -1041 * %vector's current size the %vector is truncated, otherwise │ │ │ │ -1042 * the %vector is extended and new elements are populated with │ │ │ │ -1043 * given data. │ │ │ │ -1044 */ │ │ │ │ -1045 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1046 void │ │ │ │ -_1_0_4_7 _r_e_s_i_z_e(size_type _____n_e_w___s_i_z_e, const value_type& __x) │ │ │ │ -1048 { │ │ │ │ -1049 if (_____n_e_w___s_i_z_e > _s_i_z_e()) │ │ │ │ -1050 _M_fill_insert(_e_n_d(), _____n_e_w___s_i_z_e - _s_i_z_e(), __x); │ │ │ │ -1051 else if (_____n_e_w___s_i_z_e < _s_i_z_e()) │ │ │ │ -1052 _M_erase_at_end(this->_M_impl._M_start + _____n_e_w___s_i_z_e); │ │ │ │ -1053 } │ │ │ │ -1054#else │ │ │ │ -1055 /** │ │ │ │ -1056 * @brief Resizes the %vector to the specified number of elements. │ │ │ │ -1057 * @param __new_size Number of elements the %vector should contain. │ │ │ │ -1058 * @param __x Data with which new elements should be populated. │ │ │ │ -1059 * │ │ │ │ -1060 * This function will %resize the %vector to the specified │ │ │ │ -1061 * number of elements. If the number is smaller than the │ │ │ │ -1062 * %vector's current size the %vector is truncated, otherwise │ │ │ │ -1063 * the %vector is extended and new elements are populated with │ │ │ │ -1064 * given data. │ │ │ │ -1065 */ │ │ │ │ -1066 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1067 void │ │ │ │ -1068 _r_e_s_i_z_e(size_type _____n_e_w___s_i_z_e, value_type __x = value_type()) │ │ │ │ -1069 { │ │ │ │ -1070 if (_____n_e_w___s_i_z_e > _s_i_z_e()) │ │ │ │ -1071 _M_fill_insert(_e_n_d(), _____n_e_w___s_i_z_e - _s_i_z_e(), __x); │ │ │ │ -1072 else if (_____n_e_w___s_i_z_e < _s_i_z_e()) │ │ │ │ -1073 _M_erase_at_end(this->_M_impl._M_start + _____n_e_w___s_i_z_e); │ │ │ │ -1074 } │ │ │ │ -1075#endif │ │ │ │ -1076 │ │ │ │ -1077#if __cplusplus >= 201103L │ │ │ │ -1078 /** A non-binding request to reduce capacity() to size(). */ │ │ │ │ -1079 _GLIBCXX20_CONSTEXPR │ │ │ │ -1080 void │ │ │ │ -_1_0_8_1 _s_h_r_i_n_k___t_o___f_i_t() │ │ │ │ -1082 { _M_shrink_to_fit(); } │ │ │ │ -1083#endif │ │ │ │ -1084 │ │ │ │ -1085 /** │ │ │ │ -1086 * Returns the total number of elements that the %vector can │ │ │ │ -1087 * hold before needing to allocate more memory. │ │ │ │ -1088 */ │ │ │ │ -1089 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1090 size_type │ │ │ │ -_1_0_9_1 _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 │ │ │ │ -1092 { │ │ │ │ -1093 return size_type(this->_M_impl._M_end_of_storage │ │ │ │ -1094 - _t_h_i_s->_M_impl._M_start); │ │ │ │ -1095 } │ │ │ │ -1096 │ │ │ │ -1097 /** │ │ │ │ -1098 * Returns true if the %vector is empty. (Thus begin() would │ │ │ │ -1099 * equal end().) │ │ │ │ -1100 */ │ │ │ │ -1101 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1102 bool │ │ │ │ -_1_1_0_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 │ │ │ │ -1104 { return _b_e_g_i_n() == _e_n_d(); } │ │ │ │ -1105 │ │ │ │ -1106 /** │ │ │ │ -1107 * @brief Attempt to preallocate enough memory for specified number of │ │ │ │ -1108 * elements. │ │ │ │ -1109 * @param __n Number of elements required. │ │ │ │ -1110 * @throw std::length_error If @a n exceeds @c max_size(). │ │ │ │ -1111 * │ │ │ │ -1112 * This function attempts to reserve enough memory for the │ │ │ │ -1113 * %vector to hold the specified number of elements. If the │ │ │ │ -1114 * number requested is more than max_size(), length_error is │ │ │ │ -1115 * thrown. │ │ │ │ -1116 * │ │ │ │ -1117 * The advantage of this function is that if optimal code is a │ │ │ │ -1118 * necessity and the user can determine the number of elements │ │ │ │ -1119 * that will be required, the user can reserve the memory in │ │ │ │ -1120 * %advance, and thus prevent a possible reallocation of memory │ │ │ │ -1121 * and copying of %vector data. │ │ │ │ -1122 */ │ │ │ │ -1123 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1124 void │ │ │ │ -1125 _r_e_s_e_r_v_e(size_type __n); │ │ │ │ -1126 │ │ │ │ -1127 // element access │ │ │ │ -1128 /** │ │ │ │ -1129 * @brief Subscript access to the data contained in the %vector. │ │ │ │ -1130 * @param __n The index of the element for which data should be │ │ │ │ -1131 * accessed. │ │ │ │ -1132 * @return Read/write reference to data. │ │ │ │ -1133 * │ │ │ │ -1134 * This operator allows for easy, array-style, data access. │ │ │ │ -1135 * Note that data access with this operator is unchecked and │ │ │ │ -1136 * out_of_range lookups are not defined. (For checked lookups │ │ │ │ -1137 * see at().) │ │ │ │ -1138 */ │ │ │ │ -1139 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1140 reference │ │ │ │ -_1_1_4_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 │ │ │ │ -1142 { │ │ │ │ -1143 __glibcxx_requires_subscript(__n); │ │ │ │ -1144 return *(this->_M_impl._M_start + __n); │ │ │ │ -1145 } │ │ │ │ -1146 │ │ │ │ -1147 /** │ │ │ │ -1148 * @brief Subscript access to the data contained in the %vector. │ │ │ │ -1149 * @param __n The index of the element for which data should be │ │ │ │ -1150 * accessed. │ │ │ │ -1151 * @return Read-only (constant) reference to data. │ │ │ │ -1152 * │ │ │ │ -1153 * This operator allows for easy, array-style, data access. │ │ │ │ -1154 * Note that data access with this operator is unchecked and │ │ │ │ -1155 * out_of_range lookups are not defined. (For checked lookups │ │ │ │ -1156 * see at().) │ │ │ │ -1157 */ │ │ │ │ -1158 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1159 const_reference │ │ │ │ -_1_1_6_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 │ │ │ │ -1161 { │ │ │ │ -1162 __glibcxx_requires_subscript(__n); │ │ │ │ -1163 return *(this->_M_impl._M_start + __n); │ │ │ │ -1164 } │ │ │ │ -1165 │ │ │ │ -1166 protected: │ │ │ │ -1167 /// Safety check used only from at(). │ │ │ │ -1168 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1169 void │ │ │ │ -_1_1_7_0 ___M___r_a_n_g_e___c_h_e_c_k(size_type __n) const │ │ │ │ -1171 { │ │ │ │ -1172 if (__n >= this->_s_i_z_e()) │ │ │ │ -1173 __throw_out_of_range_fmt(__N("vector::_M_range_check: __n " │ │ │ │ -1174 "(which is %zu) >= this->size() " │ │ │ │ -1175 "(which is %zu)"), │ │ │ │ -1176 __n, this->_s_i_z_e()); │ │ │ │ -1177 } │ │ │ │ -1178 │ │ │ │ -1179 public: │ │ │ │ -1180 /** │ │ │ │ -1181 * @brief Provides access to the data contained in the %vector. │ │ │ │ -1182 * @param __n The index of the element for which data should be │ │ │ │ -1183 * accessed. │ │ │ │ -1184 * @return Read/write reference to data. │ │ │ │ -1185 * @throw std::out_of_range If @a __n is an invalid index. │ │ │ │ -1186 * │ │ │ │ -1187 * This function provides for safer data access. The parameter │ │ │ │ -1188 * is first checked that it is in the range of the vector. The │ │ │ │ -1189 * function throws out_of_range if the check fails. │ │ │ │ -1190 */ │ │ │ │ -1191 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1192 reference │ │ │ │ -_1_1_9_3 _a_t(size_type __n) │ │ │ │ -1194 { │ │ │ │ -1195 ___M___r_a_n_g_e___c_h_e_c_k(__n); │ │ │ │ -1196 return (*this)[__n]; │ │ │ │ -1197 } │ │ │ │ -1198 │ │ │ │ -1199 /** │ │ │ │ -1200 * @brief Provides access to the data contained in the %vector. │ │ │ │ -1201 * @param __n The index of the element for which data should be │ │ │ │ -1202 * accessed. │ │ │ │ -1203 * @return Read-only (constant) reference to data. │ │ │ │ -1204 * @throw std::out_of_range If @a __n is an invalid index. │ │ │ │ -1205 * │ │ │ │ -1206 * This function provides for safer data access. The parameter │ │ │ │ -1207 * is first checked that it is in the range of the vector. The │ │ │ │ -1208 * function throws out_of_range if the check fails. │ │ │ │ -1209 */ │ │ │ │ -1210 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1211 const_reference │ │ │ │ -_1_2_1_2 _a_t(size_type __n) const │ │ │ │ -1213 { │ │ │ │ -1214 ___M___r_a_n_g_e___c_h_e_c_k(__n); │ │ │ │ -1215 return (*this)[__n]; │ │ │ │ -1216 } │ │ │ │ -1217 │ │ │ │ -1218 /** │ │ │ │ -1219 * Returns a read/write reference to the data at the first │ │ │ │ -1220 * element of the %vector. │ │ │ │ -1221 */ │ │ │ │ -1222 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1223 reference │ │ │ │ -_1_2_2_4 _f_r_o_n_t() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1225 { │ │ │ │ -1226 __glibcxx_requires_nonempty(); │ │ │ │ -1227 return *_b_e_g_i_n(); │ │ │ │ -1228 } │ │ │ │ -1229 │ │ │ │ -1230 /** │ │ │ │ -1231 * Returns a read-only (constant) reference to the data at the first │ │ │ │ -1232 * element of the %vector. │ │ │ │ -1233 */ │ │ │ │ -1234 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1235 const_reference │ │ │ │ -_1_2_3_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 │ │ │ │ -1237 { │ │ │ │ -1238 __glibcxx_requires_nonempty(); │ │ │ │ -1239 return *_b_e_g_i_n(); │ │ │ │ -1240 } │ │ │ │ -1241 │ │ │ │ -1242 /** │ │ │ │ -1243 * Returns a read/write reference to the data at the last │ │ │ │ -1244 * element of the %vector. │ │ │ │ -1245 */ │ │ │ │ -1246 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1247 reference │ │ │ │ -_1_2_4_8 _b_a_c_k() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1249 { │ │ │ │ -1250 __glibcxx_requires_nonempty(); │ │ │ │ -1251 return *(_e_n_d() - 1); │ │ │ │ -1252 } │ │ │ │ -1253 │ │ │ │ -1254 /** │ │ │ │ -1255 * Returns a read-only (constant) reference to the data at the │ │ │ │ -1256 * last element of the %vector. │ │ │ │ -1257 */ │ │ │ │ -1258 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1259 const_reference │ │ │ │ -_1_2_6_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 │ │ │ │ -1261 { │ │ │ │ -1262 __glibcxx_requires_nonempty(); │ │ │ │ -1263 return *(_e_n_d() - 1); │ │ │ │ -1264 } │ │ │ │ -1265 │ │ │ │ -1266 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1267 // DR 464. Suggestion for new member functions in standard containers. │ │ │ │ -1268 // data access │ │ │ │ -1269 /** │ │ │ │ -1270 * Returns a pointer such that [data(), data() + size()) is a valid │ │ │ │ -1271 * range. For a non-empty %vector, data() == &front(). │ │ │ │ -1272 */ │ │ │ │ -1273 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1274 _Tp* │ │ │ │ -_1_2_7_5 _d_a_t_a() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1276 { return _M_data_ptr(this->_M_impl._M_start); } │ │ │ │ -1277 │ │ │ │ -1278 _GLIBCXX_NODISCARD ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1279 const _Tp* │ │ │ │ -1280 _d_a_t_a() _c_o_n_s_t ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1281 { return _M_data_ptr(this->_M_impl._M_start); } │ │ │ │ -1282 │ │ │ │ -1283 // [23.2.4.3] modifiers │ │ │ │ -1284 /** │ │ │ │ -1285 * @brief Add data to the end of the %vector. │ │ │ │ -1286 * @param __x Data to be added. │ │ │ │ -1287 * │ │ │ │ -1288 * This is a typical stack operation. The function creates an │ │ │ │ -1289 * element at the end of the %vector and assigns the given data │ │ │ │ -1290 * to it. Due to the nature of a %vector this operation can be │ │ │ │ -1291 * done in constant time if the %vector has preallocated space │ │ │ │ -1292 * available. │ │ │ │ -1293 */ │ │ │ │ -1294 _GLIBCXX20_CONSTEXPR │ │ │ │ -1295 void │ │ │ │ -_1_2_9_6 _p_u_s_h___b_a_c_k(const value_type& __x) │ │ │ │ -1297 { │ │ │ │ -1298 if (this->_M_impl._M_finish != _t_h_i_s->_M_impl._M_end_of_storage) │ │ │ │ -1299 { │ │ │ │ -1300 _GLIBCXX_ASAN_ANNOTATE_GROW(1); │ │ │ │ -1301 _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, │ │ │ │ -1302 __x); │ │ │ │ -1303 ++this->_M_impl._M_finish; │ │ │ │ -1304 _GLIBCXX_ASAN_ANNOTATE_GREW(1); │ │ │ │ -1305 } │ │ │ │ -1306 else │ │ │ │ -1307 _M_realloc_append(__x); │ │ │ │ -1308 } │ │ │ │ -1309 │ │ │ │ -1310#if __cplusplus >= 201103L │ │ │ │ -1311 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1312 void │ │ │ │ -1313 _p_u_s_h___b_a_c_k(value_type&& __x) │ │ │ │ -1314 { emplace_back(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -1315 │ │ │ │ -1316 template │ │ │ │ -1317#if __cplusplus > 201402L │ │ │ │ -1318 _GLIBCXX20_CONSTEXPR │ │ │ │ -1319 reference │ │ │ │ -1320#else │ │ │ │ -1321 void │ │ │ │ -1322#endif │ │ │ │ -1323 emplace_back(_Args&&... __args); │ │ │ │ -1324#endif │ │ │ │ -1325 │ │ │ │ -1326 /** │ │ │ │ -1327 * @brief Removes last element. │ │ │ │ -1328 * │ │ │ │ -1329 * This is a typical stack operation. It shrinks the %vector by one. │ │ │ │ -1330 * │ │ │ │ -1331 * Note that no data is returned, and if the last element's │ │ │ │ -1332 * data is needed, it should be retrieved before pop_back() is │ │ │ │ -1333 * called. │ │ │ │ -1334 */ │ │ │ │ -1335 _GLIBCXX20_CONSTEXPR │ │ │ │ -1336 void │ │ │ │ -_1_3_3_7 _p_o_p___b_a_c_k() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1338 { │ │ │ │ -1339 __glibcxx_requires_nonempty(); │ │ │ │ -1340 --this->_M_impl._M_finish; │ │ │ │ -1341 _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish); │ │ │ │ -1342 _GLIBCXX_ASAN_ANNOTATE_SHRINK(1); │ │ │ │ -1343 } │ │ │ │ -1344 │ │ │ │ -1345#if __cplusplus >= 201103L │ │ │ │ -1346 /** │ │ │ │ -1347 * @brief Inserts an object in %vector before specified iterator. │ │ │ │ -1348 * @param __position A const_iterator into the %vector. │ │ │ │ -1349 * @param __args Arguments. │ │ │ │ -1350 * @return An iterator that points to the inserted data. │ │ │ │ -1351 * │ │ │ │ -1352 * This function will insert an object of type T constructed │ │ │ │ -1353 * with T(std::forward(args)...) before the specified location. │ │ │ │ -1354 * Note that this kind of operation could be expensive for a %vector │ │ │ │ -1355 * and if it is frequently used the user should consider using │ │ │ │ -1356 * std::list. │ │ │ │ -1357 */ │ │ │ │ -1358 template │ │ │ │ -1359 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1360 _i_t_e_r_a_t_o_r │ │ │ │ -_1_3_6_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) │ │ │ │ -1362 { 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)...); } │ │ │ │ -1363 │ │ │ │ -1364 /** │ │ │ │ -1365 * @brief Inserts given value into %vector before specified iterator. │ │ │ │ -1366 * @param __position A const_iterator into the %vector. │ │ │ │ -1367 * @param __x Data to be inserted. │ │ │ │ -1368 * @return An iterator that points to the inserted data. │ │ │ │ -1369 * │ │ │ │ -1370 * This function will insert a copy of the given value before │ │ │ │ -1371 * the specified location. Note that this kind of operation │ │ │ │ -1372 * could be expensive for a %vector and if it is frequently │ │ │ │ -1373 * used the user should consider using std::list. │ │ │ │ -1374 */ │ │ │ │ -1375 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1376 _i_t_e_r_a_t_o_r │ │ │ │ -1377 _i_n_s_e_r_t(const_iterator _____p_o_s_i_t_i_o_n, const value_type& __x); │ │ │ │ -1378#else │ │ │ │ -1379 /** │ │ │ │ -1380 * @brief Inserts given value into %vector before specified iterator. │ │ │ │ -1381 * @param __position An iterator into the %vector. │ │ │ │ -1382 * @param __x Data to be inserted. │ │ │ │ -1383 * @return An iterator that points to the inserted data. │ │ │ │ -1384 * │ │ │ │ -1385 * This function will insert a copy of the given value before │ │ │ │ -1386 * the specified location. Note that this kind of operation │ │ │ │ -1387 * could be expensive for a %vector and if it is frequently │ │ │ │ -1388 * used the user should consider using std::list. │ │ │ │ -1389 */ │ │ │ │ -1390 _i_t_e_r_a_t_o_r │ │ │ │ -1391 _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); │ │ │ │ -1392#endif │ │ │ │ -1393 │ │ │ │ -1394#if __cplusplus >= 201103L │ │ │ │ -1395 /** │ │ │ │ -1396 * @brief Inserts given rvalue into %vector before specified iterator. │ │ │ │ -1397 * @param __position A const_iterator into the %vector. │ │ │ │ -1398 * @param __x Data to be inserted. │ │ │ │ -1399 * @return An iterator that points to the inserted data. │ │ │ │ -1400 * │ │ │ │ -1401 * This function will insert a copy of the given rvalue before │ │ │ │ -1402 * the specified location. Note that this kind of operation │ │ │ │ -1403 * could be expensive for a %vector and if it is frequently │ │ │ │ -1404 * used the user should consider using std::list. │ │ │ │ -1405 */ │ │ │ │ -1406 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1407 _i_t_e_r_a_t_o_r │ │ │ │ -_1_4_0_8 _i_n_s_e_r_t(const_iterator _____p_o_s_i_t_i_o_n, value_type&& __x) │ │ │ │ -1409 { return _M_insert_rval(_____p_o_s_i_t_i_o_n, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -1410 │ │ │ │ -1411 /** │ │ │ │ -1412 * @brief Inserts an initializer_list into the %vector. │ │ │ │ -1413 * @param __position An iterator into the %vector. │ │ │ │ -1414 * @param __l An initializer_list. │ │ │ │ -1415 * │ │ │ │ -1416 * This function will insert copies of the data in the │ │ │ │ -1417 * initializer_list @a l into the %vector before the location │ │ │ │ -1418 * specified by @a position. │ │ │ │ -1419 * │ │ │ │ -1420 * Note that this kind of operation could be expensive for a │ │ │ │ -1421 * %vector and if it is frequently used the user should │ │ │ │ -1422 * consider using std::list. │ │ │ │ -1423 */ │ │ │ │ -1424 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1425 _i_t_e_r_a_t_o_r │ │ │ │ -_1_4_2_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) │ │ │ │ -1427 { │ │ │ │ -1428 auto __offset = _____p_o_s_i_t_i_o_n - _c_b_e_g_i_n(); │ │ │ │ -1429 _M_range_insert(_b_e_g_i_n() + __offset, _____l.begin(), _____l.end(), │ │ │ │ -1430 _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()); │ │ │ │ -1431 return _b_e_g_i_n() + __offset; │ │ │ │ -1432 } │ │ │ │ -1433#endif │ │ │ │ -1434 │ │ │ │ -1435#if __cplusplus >= 201103L │ │ │ │ -1436 /** │ │ │ │ -1437 * @brief Inserts a number of copies of given data into the %vector. │ │ │ │ -1438 * @param __position A const_iterator into the %vector. │ │ │ │ -1439 * @param __n Number of elements to be inserted. │ │ │ │ -1440 * @param __x Data to be inserted. │ │ │ │ -1441 * @return An iterator that points to the inserted data. │ │ │ │ -1442 * │ │ │ │ -1443 * This function will insert a specified number of copies of │ │ │ │ -1444 * the given data before the location specified by @a position. │ │ │ │ -1445 * │ │ │ │ -1446 * Note that this kind of operation could be expensive for a │ │ │ │ -1447 * %vector and if it is frequently used the user should │ │ │ │ -1448 * consider using std::list. │ │ │ │ -1449 */ │ │ │ │ -1450 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1451 _i_t_e_r_a_t_o_r │ │ │ │ -_1_4_5_2 _i_n_s_e_r_t(const_iterator _____p_o_s_i_t_i_o_n, size_type __n, const value_type& __x) │ │ │ │ -1453 { │ │ │ │ -1454 _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(); │ │ │ │ -1455 _M_fill_insert(_b_e_g_i_n() + __offset, __n, __x); │ │ │ │ -1456 return _b_e_g_i_n() + __offset; │ │ │ │ -1457 } │ │ │ │ -1458#else │ │ │ │ -1459 /** │ │ │ │ -1460 * @brief Inserts a number of copies of given data into the %vector. │ │ │ │ -1461 * @param __position An iterator into the %vector. │ │ │ │ -1462 * @param __n Number of elements to be inserted. │ │ │ │ -1463 * @param __x Data to be inserted. │ │ │ │ -1464 * │ │ │ │ -1465 * This function will insert a specified number of copies of │ │ │ │ -1466 * the given data before the location specified by @a position. │ │ │ │ -1467 * │ │ │ │ -1468 * Note that this kind of operation could be expensive for a │ │ │ │ -1469 * %vector and if it is frequently used the user should │ │ │ │ -1470 * consider using std::list. │ │ │ │ -1471 */ │ │ │ │ -1472 void │ │ │ │ -1473 _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) │ │ │ │ -1474 { _M_fill_insert(_____p_o_s_i_t_i_o_n, __n, __x); } │ │ │ │ -1475#endif │ │ │ │ -1476 │ │ │ │ -1477#if __cplusplus >= 201103L │ │ │ │ -1478 /** │ │ │ │ -1479 * @brief Inserts a range into the %vector. │ │ │ │ -1480 * @param __position A const_iterator into the %vector. │ │ │ │ -1481 * @param __first An input iterator. │ │ │ │ -1482 * @param __last An input iterator. │ │ │ │ -1483 * @return An iterator that points to the inserted data. │ │ │ │ -1484 * │ │ │ │ -1485 * This function will insert copies of the data in the range │ │ │ │ -1486 * [__first,__last) into the %vector before the location specified │ │ │ │ -1487 * by @a pos. │ │ │ │ -1488 * │ │ │ │ -1489 * Note that this kind of operation could be expensive for a │ │ │ │ -1490 * %vector and if it is frequently used the user should │ │ │ │ -1491 * consider using std::list. │ │ │ │ -1492 */ │ │ │ │ -1493 template> │ │ │ │ -1495 _GLIBCXX20_CONSTEXPR │ │ │ │ -1496 iterator │ │ │ │ -_1_4_9_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, │ │ │ │ -1498 ___I_n_p_u_t_I_t_e_r_a_t_o_r __last) │ │ │ │ -1499 { │ │ │ │ -1500 _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(); │ │ │ │ -1501 _M_range_insert(_b_e_g_i_n() + __offset, __first, __last, │ │ │ │ -1502 _s_t_d_:_:_____i_t_e_r_a_t_o_r___c_a_t_e_g_o_r_y(__first)); │ │ │ │ -1503 return _b_e_g_i_n() + __offset; │ │ │ │ -1504 } │ │ │ │ -1505#else │ │ │ │ -1506 /** │ │ │ │ -1507 * @brief Inserts a range into the %vector. │ │ │ │ -1508 * @param __position An iterator into the %vector. │ │ │ │ -1509 * @param __first An input iterator. │ │ │ │ -1510 * @param __last An input iterator. │ │ │ │ -1511 * │ │ │ │ -1512 * This function will insert copies of the data in the range │ │ │ │ -1513 * [__first,__last) into the %vector before the location specified │ │ │ │ -1514 * by @a pos. │ │ │ │ -1515 * │ │ │ │ -1516 * Note that this kind of operation could be expensive for a │ │ │ │ -1517 * %vector and if it is frequently used the user should │ │ │ │ -1518 * consider using std::list. │ │ │ │ -1519 */ │ │ │ │ -1520 template │ │ │ │ -1521 void │ │ │ │ -1522 _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, │ │ │ │ -1523 ___I_n_p_u_t_I_t_e_r_a_t_o_r __last) │ │ │ │ -1524 { │ │ │ │ -1525 // Check whether it's an integral type. If so, it's not an iterator. │ │ │ │ -1526 typedef typename std::__is_integer<_InputIterator>::__type ___I_n_t_e_g_r_a_l; │ │ │ │ -1527 _M_insert_dispatch(_____p_o_s_i_t_i_o_n, __first, __last, ___I_n_t_e_g_r_a_l()); │ │ │ │ -1528 } │ │ │ │ -1529#endif │ │ │ │ -1530 │ │ │ │ -1531 /** │ │ │ │ -1532 * @brief Remove element at given position. │ │ │ │ -1533 * @param __position Iterator pointing to element to be erased. │ │ │ │ -1534 * @return An iterator pointing to the next element (or end()). │ │ │ │ -1535 * │ │ │ │ -1536 * This function will erase the element at the given position and thus │ │ │ │ -1537 * shorten the %vector by one. │ │ │ │ -1538 * │ │ │ │ -1539 * Note This operation could be expensive and if it is │ │ │ │ -1540 * frequently used the user should consider using std::list. │ │ │ │ -1541 * The user is also cautioned that this function only erases │ │ │ │ -1542 * the element, and that if the element is itself a pointer, │ │ │ │ -1543 * the pointed-to memory is not touched in any way. Managing │ │ │ │ -1544 * the pointer is the user's responsibility. │ │ │ │ -1545 */ │ │ │ │ -1546 _GLIBCXX20_CONSTEXPR │ │ │ │ -1547 iterator │ │ │ │ -1548#if __cplusplus >= 201103L │ │ │ │ -_1_5_4_9 _e_r_a_s_e(const_iterator _____p_o_s_i_t_i_o_n) │ │ │ │ -1550 { return _M_erase(_b_e_g_i_n() + (_____p_o_s_i_t_i_o_n - _c_b_e_g_i_n())); } │ │ │ │ -1551#else │ │ │ │ -1552 _e_r_a_s_e(_i_t_e_r_a_t_o_r _____p_o_s_i_t_i_o_n) │ │ │ │ -1553 { return _M_erase(_____p_o_s_i_t_i_o_n); } │ │ │ │ -1554#endif │ │ │ │ -1555 │ │ │ │ -1556 /** │ │ │ │ -1557 * @brief Remove a range of elements. │ │ │ │ -1558 * @param __first Iterator pointing to the first element to be erased. │ │ │ │ -1559 * @param __last Iterator pointing to one past the last element to be │ │ │ │ -1560 * erased. │ │ │ │ -1561 * @return An iterator pointing to the element pointed to by @a __last │ │ │ │ -1562 * prior to erasing (or end()). │ │ │ │ -1563 * │ │ │ │ -1564 * This function will erase the elements in the range │ │ │ │ -1565 * [__first,__last) and shorten the %vector accordingly. │ │ │ │ -1566 * │ │ │ │ -1567 * Note This operation could be expensive and if it is │ │ │ │ -1568 * frequently used the user should consider using std::list. │ │ │ │ -1569 * The user is also cautioned that this function only erases │ │ │ │ -1570 * the elements, and that if the elements themselves are │ │ │ │ -1571 * pointers, the pointed-to memory is not touched in any way. │ │ │ │ -1572 * Managing the pointer is the user's responsibility. │ │ │ │ -1573 */ │ │ │ │ -1574 _GLIBCXX20_CONSTEXPR │ │ │ │ -1575 iterator │ │ │ │ -1576#if __cplusplus >= 201103L │ │ │ │ -_1_5_7_7 _e_r_a_s_e(const_iterator __first, const_iterator __last) │ │ │ │ -1578 { │ │ │ │ -1579 const auto _____b_e_g = _b_e_g_i_n(); │ │ │ │ -1580 const auto _____c_b_e_g = _c_b_e_g_i_n(); │ │ │ │ -1581 return _M_erase(_____b_e_g + (__first - _____c_b_e_g), _____b_e_g + (__last - _____c_b_e_g)); │ │ │ │ -1582 } │ │ │ │ -1583#else │ │ │ │ -1584 _e_r_a_s_e(_i_t_e_r_a_t_o_r __first, _i_t_e_r_a_t_o_r __last) │ │ │ │ -1585 { return _M_erase(__first, __last); } │ │ │ │ -1586#endif │ │ │ │ -1587 │ │ │ │ -1588 /** │ │ │ │ -1589 * @brief Swaps data with another %vector. │ │ │ │ -1590 * @param __x A %vector of the same element and allocator types. │ │ │ │ -1591 * │ │ │ │ -1592 * This exchanges the elements between two vectors in constant time. │ │ │ │ -1593 * (Three pointers, so it should be quite fast.) │ │ │ │ -1594 * Note that the global std::swap() function is specialized such that │ │ │ │ -1595 * std::swap(v1,v2) will feed to this function. │ │ │ │ -1596 * │ │ │ │ -1597 * Whether the allocators are swapped depends on the allocator traits. │ │ │ │ -1598 */ │ │ │ │ -1599 _GLIBCXX20_CONSTEXPR │ │ │ │ -1600 void │ │ │ │ -_1_6_0_1 _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 │ │ │ │ -1602 { │ │ │ │ -1603#if __cplusplus >= 201103L │ │ │ │ -1604 __glibcxx_assert(_Alloc_traits::propagate_on_container_swap::value │ │ │ │ -1605 || _M_get_Tp_allocator() == __x._M_get_Tp_allocator()); │ │ │ │ -1606#endif │ │ │ │ -1607 this->_M_impl._M_swap_data(__x._M_impl); │ │ │ │ -1608 _Alloc_traits::_S_on_swap(_M_get_Tp_allocator(), │ │ │ │ -1609 __x._M_get_Tp_allocator()); │ │ │ │ -1610 } │ │ │ │ -1611 │ │ │ │ -1612 /** │ │ │ │ -1613 * Erases all the elements. Note that this function only erases the │ │ │ │ -1614 * elements, and that if the elements themselves are pointers, the │ │ │ │ -1615 * pointed-to memory is not touched in any way. Managing the pointer is │ │ │ │ -1616 * the user's responsibility. │ │ │ │ -1617 */ │ │ │ │ -1618 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1619 void │ │ │ │ -_1_6_2_0 _c_l_e_a_r() ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T │ │ │ │ -1621 { _M_erase_at_end(this->_M_impl._M_start); } │ │ │ │ -1622 │ │ │ │ -1623 protected: │ │ │ │ -1624 /** │ │ │ │ -1625 * Memory expansion handler. Uses the member allocation function to │ │ │ │ -1626 * obtain @a n bytes of memory, and then copies [first,last) into it. │ │ │ │ -1627 */ │ │ │ │ -1628 template │ │ │ │ -1629 ___G_L_I_B_C_X_X_2_0___C_O_N_S_T_E_X_P_R │ │ │ │ -1630 pointer │ │ │ │ -_1_6_3_1 ___M___a_l_l_o_c_a_t_e___a_n_d___c_o_p_y(size_type __n, │ │ │ │ -1632 ___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) │ │ │ │ -1633 { │ │ │ │ -1634 pointer __result = this->_M_allocate(__n); │ │ │ │ -1635 __try │ │ │ │ -1636 { │ │ │ │ -1637 _s_t_d_:_:_____u_n_i_n_i_t_i_a_l_i_z_e_d___c_o_p_y___a(__first, __last, __result, │ │ │ │ -1638 _M_get_Tp_allocator()); │ │ │ │ -1639 return __result; │ │ │ │ -1640 } │ │ │ │ -1641 __catch(...) │ │ │ │ -1642 { │ │ │ │ -1643 _M_deallocate(__result, __n); │ │ │ │ -1644 __throw_exception_again; │ │ │ │ -1645 } │ │ │ │ -1646 } │ │ │ │ -1647 │ │ │ │ -1648 │ │ │ │ -1649 // Internal constructor functions follow. │ │ │ │ -1650 │ │ │ │ -1651 // Called by the range constructor to implement [23.1.1]/9 │ │ │ │ -1652 │ │ │ │ -1653#if __cplusplus < 201103L │ │ │ │ -1654 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1655 // 438. Ambiguity in the "do the right thing" clause │ │ │ │ -1656 template │ │ │ │ -1657 void │ │ │ │ -1658 _M_initialize_dispatch(___I_n_t_e_g_e_r __n, ___I_n_t_e_g_e_r __value, __true_type) │ │ │ │ -1659 { │ │ │ │ -1660 this->_M_impl._M_start = _M_allocate(_S_check_init_len( │ │ │ │ -1661 static_cast(__n), _M_get_Tp_allocator())); │ │ │ │ -1662 this->_M_impl._M_end_of_storage = │ │ │ │ -1663 this->_M_impl._M_start + static_cast(__n); │ │ │ │ -1664 _M_fill_initialize(static_cast(__n), __value); │ │ │ │ -1665 } │ │ │ │ -1666 │ │ │ │ -1667 // Called by the range constructor to implement [23.1.1]/9 │ │ │ │ -1668 template │ │ │ │ -1669 void │ │ │ │ -1670 _M_initialize_dispatch(_InputIterator __first, _InputIterator __last, │ │ │ │ -1671 __false_type) │ │ │ │ -1672 { │ │ │ │ -1673 _M_range_initialize(__first, __last, │ │ │ │ -1674 _s_t_d_:_:_____i_t_e_r_a_t_o_r___c_a_t_e_g_o_r_y(__first)); │ │ │ │ -1675 } │ │ │ │ -1676#endif │ │ │ │ -1677 │ │ │ │ -1678 // Called by the second initialize_dispatch above │ │ │ │ -1679 template │ │ │ │ -1680 _GLIBCXX20_CONSTEXPR │ │ │ │ -1681 void │ │ │ │ -1682 _M_range_initialize(_InputIterator __first, _InputIterator __last, │ │ │ │ -1683 _s_t_d_:_:_i_n_p_u_t___i_t_e_r_a_t_o_r___t_a_g) │ │ │ │ -1684 { │ │ │ │ -1685 __try { │ │ │ │ -1686 for (; __first != __last; ++__first) │ │ │ │ -1687#if __cplusplus >= 201103L │ │ │ │ -1688 emplace_back(*__first); │ │ │ │ -1689#else │ │ │ │ -1690 _p_u_s_h___b_a_c_k(*__first); │ │ │ │ -1691#endif │ │ │ │ -1692 } __catch(...) { │ │ │ │ -1693 _c_l_e_a_r(); │ │ │ │ -1694 __throw_exception_again; │ │ │ │ -1695 } │ │ │ │ -1696 } │ │ │ │ -1697 │ │ │ │ -1698 // Called by the second initialize_dispatch above │ │ │ │ -1699 template │ │ │ │ -1700 _GLIBCXX20_CONSTEXPR │ │ │ │ -1701 void │ │ │ │ -1702 _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last, │ │ │ │ -1703 _s_t_d_:_:_f_o_r_w_a_r_d___i_t_e_r_a_t_o_r___t_a_g) │ │ │ │ -1704 { │ │ │ │ -1705 _M_range_initialize_n(__first, __last, │ │ │ │ -1706 _s_t_d_:_:_d_i_s_t_a_n_c_e(__first, __last)); │ │ │ │ -1707 } │ │ │ │ -1708 │ │ │ │ -1709 template │ │ │ │ -1710 _GLIBCXX20_CONSTEXPR │ │ │ │ -1711 void │ │ │ │ -1712 _M_range_initialize_n(_Iterator __first, _Iterator __last, │ │ │ │ -1713 size_type __n) │ │ │ │ -1714 { │ │ │ │ -1715 pointer __start = this->_M_impl._M_start = │ │ │ │ -1716 this->_M_allocate(_S_check_init_len(__n, _M_get_Tp_allocator())); │ │ │ │ -1717 this->_M_impl._M_end_of_storage = __start + __n; │ │ │ │ -1718 this->_M_impl._M_finish │ │ │ │ -1719 = _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, │ │ │ │ -1720 __start, _M_get_Tp_allocator()); │ │ │ │ -1721 } │ │ │ │ -1722 │ │ │ │ -1723 // Called by the first initialize_dispatch above and by the │ │ │ │ -1724 // vector(n,value,a) constructor. │ │ │ │ -1725 _GLIBCXX20_CONSTEXPR │ │ │ │ -1726 void │ │ │ │ -1727 _M_fill_initialize(size_type __n, const value_type& __value) │ │ │ │ -1728 { │ │ │ │ -1729 this->_M_impl._M_finish = │ │ │ │ -1730 _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, │ │ │ │ -1731 _M_get_Tp_allocator()); │ │ │ │ -1732 } │ │ │ │ -1733 │ │ │ │ -1734#if __cplusplus >= 201103L │ │ │ │ -1735 // Called by the vector(n) constructor. │ │ │ │ -1736 _GLIBCXX20_CONSTEXPR │ │ │ │ -1737 void │ │ │ │ -1738 _M_default_initialize(size_type __n) │ │ │ │ -1739 { │ │ │ │ -1740 this->_M_impl._M_finish = │ │ │ │ -1741 _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, │ │ │ │ -1742 _M_get_Tp_allocator()); │ │ │ │ -1743 } │ │ │ │ -1744#endif │ │ │ │ -1745 │ │ │ │ -1746 // Internal assign functions follow. The *_aux functions do the actual │ │ │ │ -1747 // assignment work for the range versions. │ │ │ │ -1748 │ │ │ │ -1749 // Called by the range assign to implement [23.1.1]/9 │ │ │ │ -1750 │ │ │ │ -1751 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1752 // 438. Ambiguity in the "do the right thing" clause │ │ │ │ -1753 template │ │ │ │ -1754 _GLIBCXX20_CONSTEXPR │ │ │ │ -1755 void │ │ │ │ -1756 _M_assign_dispatch(_Integer __n, _Integer __val, __true_type) │ │ │ │ -1757 { _M_fill_assign(__n, __val); } │ │ │ │ -1758 │ │ │ │ -1759 // Called by the range assign to implement [23.1.1]/9 │ │ │ │ -1760 template │ │ │ │ -1761 _GLIBCXX20_CONSTEXPR │ │ │ │ -1762 void │ │ │ │ -1763 _M_assign_dispatch(_InputIterator __first, _InputIterator __last, │ │ │ │ -1764 __false_type) │ │ │ │ -1765 { _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)); } │ │ │ │ -1766 │ │ │ │ -1767 // Called by the second assign_dispatch above │ │ │ │ -1768 template │ │ │ │ -1769 _GLIBCXX20_CONSTEXPR │ │ │ │ -1770 void │ │ │ │ -1771 _M_assign_aux(_InputIterator __first, _InputIterator __last, │ │ │ │ -1772 _s_t_d_:_:_i_n_p_u_t___i_t_e_r_a_t_o_r___t_a_g); │ │ │ │ -1773 │ │ │ │ -1774 // Called by the second assign_dispatch above │ │ │ │ -1775 template │ │ │ │ -1776 _GLIBCXX20_CONSTEXPR │ │ │ │ -1777 void │ │ │ │ -1778 _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, │ │ │ │ -1779 _s_t_d_:_:_f_o_r_w_a_r_d___i_t_e_r_a_t_o_r___t_a_g); │ │ │ │ -1780 │ │ │ │ -1781 // Called by assign(n,t), and the range assign when it turns out │ │ │ │ -1782 // to be the same thing. │ │ │ │ -1783 _GLIBCXX20_CONSTEXPR │ │ │ │ -1784 void │ │ │ │ -1785 _M_fill_assign(size_type __n, const value_type& __val); │ │ │ │ -1786 │ │ │ │ -1787 // Internal insert functions follow. │ │ │ │ -1788 │ │ │ │ -1789 // Called by the range insert to implement [23.1.1]/9 │ │ │ │ -1790 │ │ │ │ -1791 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1792 // 438. Ambiguity in the "do the right thing" clause │ │ │ │ -1793 template │ │ │ │ -1794 _GLIBCXX20_CONSTEXPR │ │ │ │ -1795 void │ │ │ │ -1796 _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __val, │ │ │ │ -1797 __true_type) │ │ │ │ -1798 { _M_fill_insert(__pos, __n, __val); } │ │ │ │ -1799 │ │ │ │ -1800 // Called by the range insert to implement [23.1.1]/9 │ │ │ │ -1801 template │ │ │ │ -1802 _GLIBCXX20_CONSTEXPR │ │ │ │ -1803 void │ │ │ │ -1804 _M_insert_dispatch(iterator __pos, _InputIterator __first, │ │ │ │ -1805 _InputIterator __last, __false_type) │ │ │ │ -1806 { │ │ │ │ -1807 _M_range_insert(__pos, __first, __last, │ │ │ │ -1808 _s_t_d_:_:_____i_t_e_r_a_t_o_r___c_a_t_e_g_o_r_y(__first)); │ │ │ │ -1809 } │ │ │ │ -1810 │ │ │ │ -1811 // Called by the second insert_dispatch above │ │ │ │ -1812 template │ │ │ │ -1813 _GLIBCXX20_CONSTEXPR │ │ │ │ -1814 void │ │ │ │ -1815 _M_range_insert(iterator __pos, _InputIterator __first, │ │ │ │ -1816 _InputIterator __last, _s_t_d_:_:_i_n_p_u_t___i_t_e_r_a_t_o_r___t_a_g); │ │ │ │ -1817 │ │ │ │ -1818 // Called by the second insert_dispatch above │ │ │ │ -1819 template │ │ │ │ -1820 _GLIBCXX20_CONSTEXPR │ │ │ │ -1821 void │ │ │ │ -1822 _M_range_insert(iterator __pos, _ForwardIterator __first, │ │ │ │ -1823 _ForwardIterator __last, _s_t_d_:_:_f_o_r_w_a_r_d___i_t_e_r_a_t_o_r___t_a_g); │ │ │ │ -1824 │ │ │ │ -1825 // Called by insert(p,n,x), and the range insert when it turns out to be │ │ │ │ -1826 // the same thing. │ │ │ │ -1827 _GLIBCXX20_CONSTEXPR │ │ │ │ -1828 void │ │ │ │ -1829 _M_fill_insert(iterator __pos, size_type __n, const value_type& __x); │ │ │ │ -1830 │ │ │ │ -1831#if __cplusplus >= 201103L │ │ │ │ -1832 // Called by resize(n). │ │ │ │ -1833 _GLIBCXX20_CONSTEXPR │ │ │ │ -1834 void │ │ │ │ -1835 _M_default_append(size_type __n); │ │ │ │ -1836 │ │ │ │ -1837 _GLIBCXX20_CONSTEXPR │ │ │ │ -1838 bool │ │ │ │ -1839 _M_shrink_to_fit(); │ │ │ │ -1840#endif │ │ │ │ -1841 │ │ │ │ -1842#if __cplusplus < 201103L │ │ │ │ -1843 // Called by insert(p,x) │ │ │ │ -1844 void │ │ │ │ -1845 _M_insert_aux(iterator __position, const value_type& __x); │ │ │ │ -1846 │ │ │ │ -1847 void │ │ │ │ -1848 _M_realloc_insert(iterator __position, const value_type& __x); │ │ │ │ -1849 │ │ │ │ -1850 void │ │ │ │ -1851 _M_realloc_append(const value_type& __x); │ │ │ │ -1852#else │ │ │ │ -1853 // A value_type object constructed with _Alloc_traits::construct() │ │ │ │ -1854 // and destroyed with _Alloc_traits::destroy(). │ │ │ │ -1855 struct _Temporary_value │ │ │ │ -1856 { │ │ │ │ -1857 template │ │ │ │ -1858 _GLIBCXX20_CONSTEXPR explicit │ │ │ │ -1859 _Temporary_value(_v_e_c_t_o_r* __vec, _Args&&... __args) : _M_this(__vec) │ │ │ │ -1860 { │ │ │ │ -1861 _Alloc_traits::construct(_M_this->_M_impl, _M_ptr(), │ │ │ │ -1862 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ -1863 } │ │ │ │ -1864 │ │ │ │ -1865 _GLIBCXX20_CONSTEXPR │ │ │ │ -1866 ~_Temporary_value() │ │ │ │ -1867 { _Alloc_traits::destroy(_M_this->_M_impl, _M_ptr()); } │ │ │ │ -1868 │ │ │ │ -1869 _GLIBCXX20_CONSTEXPR value_type& │ │ │ │ -1870 _M_val() noexcept { return _M_storage._M_val; } │ │ │ │ -1871 │ │ │ │ -1872 private: │ │ │ │ -1873 _GLIBCXX20_CONSTEXPR _Tp* │ │ │ │ -1874 _M_ptr() noexcept { return _s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_M_storage._M_val); } │ │ │ │ -1875 │ │ │ │ -1876 union _Storage │ │ │ │ -1877 { │ │ │ │ -1878 constexpr _Storage() : _M_byte() { } │ │ │ │ -1879 _GLIBCXX20_CONSTEXPR ~_Storage() { } │ │ │ │ -1880 _Storage& operator=(const _Storage&) = delete; │ │ │ │ -1881 unsigned char _M_byte; │ │ │ │ -1882 _Tp _M_val; │ │ │ │ -1883 }; │ │ │ │ -1884 │ │ │ │ -1885 _v_e_c_t_o_r* _M_this; │ │ │ │ -1886 _Storage _M_storage; │ │ │ │ -1887 }; │ │ │ │ -1888 │ │ │ │ -1889 // Called by insert(p,x) and other functions when insertion needs to │ │ │ │ -1890 // reallocate or move existing elements. _Arg is either _Tp& or _Tp. │ │ │ │ -1891 template │ │ │ │ -1892 _GLIBCXX20_CONSTEXPR │ │ │ │ -1893 void │ │ │ │ -1894 _M_insert_aux(iterator __position, _Arg&& __arg); │ │ │ │ -1895 │ │ │ │ -1896 template │ │ │ │ -1897 _GLIBCXX20_CONSTEXPR │ │ │ │ -1898 void │ │ │ │ -1899 _M_realloc_insert(iterator __position, _Args&&... __args); │ │ │ │ -1900 │ │ │ │ -1901 template │ │ │ │ -1902 _GLIBCXX20_CONSTEXPR │ │ │ │ -1903 void │ │ │ │ -1904 _M_realloc_append(_Args&&... __args); │ │ │ │ -1905 │ │ │ │ -1906 // Either move-construct at the end, or forward to _M_insert_aux. │ │ │ │ -1907 _GLIBCXX20_CONSTEXPR │ │ │ │ -1908 iterator │ │ │ │ -1909 _M_insert_rval(const_iterator __position, value_type&& __v); │ │ │ │ -1910 │ │ │ │ -1911 // Try to emplace at the end, otherwise forward to _M_insert_aux. │ │ │ │ -1912 template │ │ │ │ -1913 _GLIBCXX20_CONSTEXPR │ │ │ │ -1914 iterator │ │ │ │ -1915 _M_emplace_aux(const_iterator __position, _Args&&... __args); │ │ │ │ -1916 │ │ │ │ -1917 // Emplacing an rvalue of the correct type can use _M_insert_rval. │ │ │ │ -1918 _GLIBCXX20_CONSTEXPR │ │ │ │ -1919 iterator │ │ │ │ -1920 _M_emplace_aux(const_iterator __position, value_type&& __v) │ │ │ │ -1921 { return _M_insert_rval(__position, _s_t_d_:_:_m_o_v_e(__v)); } │ │ │ │ -1922#endif │ │ │ │ -1923 │ │ │ │ -1924 // Called by _M_fill_insert, _M_insert_aux etc. │ │ │ │ -1925 _GLIBCXX20_CONSTEXPR │ │ │ │ -1926 size_type │ │ │ │ -1927 _M_check_len(size_type __n, const char* __s) const │ │ │ │ -1928 { │ │ │ │ -1929 if (_m_a_x___s_i_z_e() - _s_i_z_e() < __n) │ │ │ │ -1930 __throw_length_error(__N(__s)); │ │ │ │ -1931 │ │ │ │ -1932 const size_type __len = _s_i_z_e() + (_s_t_d_:_:_m_a_x)(_s_i_z_e(), __n); │ │ │ │ -1933 return (__len < _s_i_z_e() || __len > _m_a_x___s_i_z_e()) ? _m_a_x___s_i_z_e() : __len; │ │ │ │ -1934 } │ │ │ │ -1935 │ │ │ │ -1936 // Called by constructors to check initial size. │ │ │ │ -1937 static _GLIBCXX20_CONSTEXPR size_type │ │ │ │ -1938 _S_check_init_len(size_type __n, const allocator_type& __a) │ │ │ │ -1939 { │ │ │ │ -1940 if (__n > _S_max_size(_Tp_alloc_type(__a))) │ │ │ │ -1941 __throw_length_error( │ │ │ │ -1942 __N("cannot create std::vector larger than max_size()")); │ │ │ │ -1943 return __n; │ │ │ │ -1944 } │ │ │ │ -1945 │ │ │ │ -1946 static _GLIBCXX20_CONSTEXPR size_type │ │ │ │ -1947 _S_max_size(const _Tp_alloc_type& __a) _GLIBCXX_NOEXCEPT │ │ │ │ -1948 { │ │ │ │ -1949 // std::distance(begin(), end()) cannot be greater than PTRDIFF_MAX, │ │ │ │ -1950 // and realistically we can't store more than PTRDIFF_MAX/sizeof(T) │ │ │ │ -1951 // (even if std::allocator_traits::max_size says we can). │ │ │ │ -1952 const size_t __diffmax │ │ │ │ -1953 = __gnu_cxx::__numeric_traits::__max / sizeof(_Tp); │ │ │ │ -1954 const size_t __allocmax = ___A_l_l_o_c___t_r_a_i_t_s_:_:_m_a_x___s_i_z_e(__a); │ │ │ │ -1955 return (_s_t_d_:_:_m_i_n)(__diffmax, __allocmax); │ │ │ │ -1956 } │ │ │ │ -1957 │ │ │ │ -1958 // Internal erase functions follow. │ │ │ │ -1959 │ │ │ │ -1960 // Called by erase(q1,q2), clear(), resize(), _M_fill_assign, │ │ │ │ -1961 // _M_assign_aux. │ │ │ │ -1962 _GLIBCXX20_CONSTEXPR │ │ │ │ -1963 void │ │ │ │ -1964 _M_erase_at_end(pointer __pos) _GLIBCXX_NOEXCEPT │ │ │ │ -1965 { │ │ │ │ -1966 if (size_type __n = this->_M_impl._M_finish - __pos) │ │ │ │ -1967 { │ │ │ │ -1968 _s_t_d_:_:___D_e_s_t_r_o_y(__pos, this->_M_impl._M_finish, │ │ │ │ -1969 _M_get_Tp_allocator()); │ │ │ │ -1970 this->_M_impl._M_finish = __pos; │ │ │ │ -1971 _GLIBCXX_ASAN_ANNOTATE_SHRINK(__n); │ │ │ │ -1972 } │ │ │ │ -1973 } │ │ │ │ -1974 │ │ │ │ -1975 _GLIBCXX20_CONSTEXPR │ │ │ │ -1976 iterator │ │ │ │ -1977 _M_erase(iterator __position); │ │ │ │ -1978 │ │ │ │ -1979 _GLIBCXX20_CONSTEXPR │ │ │ │ -1980 iterator │ │ │ │ -1981 _M_erase(iterator __first, iterator __last); │ │ │ │ -1982 │ │ │ │ -1983#if __cplusplus >= 201103L │ │ │ │ -1984 private: │ │ │ │ -1985 // Constant-time move assignment when source object's memory can be │ │ │ │ -1986 // moved, either because the source's allocator will move too │ │ │ │ -1987 // or because the allocators are equal. │ │ │ │ -1988 _GLIBCXX20_CONSTEXPR │ │ │ │ -1989 void │ │ │ │ -1990 _M_move_assign(_v_e_c_t_o_r&& __x, _t_r_u_e___t_y_p_e) noexcept │ │ │ │ -1991 { │ │ │ │ -1992 _v_e_c_t_o_r __tmp(_g_e_t___a_l_l_o_c_a_t_o_r()); │ │ │ │ -1993 this->_M_impl._M_swap_data(__x._M_impl); │ │ │ │ -1994 __tmp._M_impl._M_swap_data(__x._M_impl); │ │ │ │ -1995 _s_t_d_:_:_____a_l_l_o_c___o_n___m_o_v_e(_M_get_Tp_allocator(), __x._M_get_Tp_allocator()); │ │ │ │ -1996 } │ │ │ │ -1997 │ │ │ │ -1998 // Do move assignment when it might not be possible to move source │ │ │ │ -1999 // object's memory, resulting in a linear-time operation. │ │ │ │ -2000 _GLIBCXX20_CONSTEXPR │ │ │ │ -2001 void │ │ │ │ -2002 _M_move_assign(_v_e_c_t_o_r&& __x, _f_a_l_s_e___t_y_p_e) │ │ │ │ -2003 { │ │ │ │ -2004 if (__x._M_get_Tp_allocator() == this->_M_get_Tp_allocator()) │ │ │ │ -2005 _M_move_assign(_s_t_d_:_:_m_o_v_e(__x), _t_r_u_e___t_y_p_e()); │ │ │ │ -2006 else │ │ │ │ -2007 { │ │ │ │ -2008 // The rvalue's allocator cannot be moved and is not equal, │ │ │ │ -2009 // so we need to individually move each element. │ │ │ │ -2010 this->_M_assign_aux(std::make_move_iterator(__x.begin()), │ │ │ │ -2011 std::make_move_iterator(__x.end()), │ │ │ │ -2012 _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()); │ │ │ │ -2013 __x.clear(); │ │ │ │ -2014 } │ │ │ │ -2015 } │ │ │ │ -2016#endif │ │ │ │ -2017 │ │ │ │ -2018 template │ │ │ │ -2019 _GLIBCXX20_CONSTEXPR │ │ │ │ -2020 _Up* │ │ │ │ -2021 _M_data_ptr(_Up* __ptr) const _GLIBCXX_NOEXCEPT │ │ │ │ -2022 { return __ptr; } │ │ │ │ -2023 │ │ │ │ -2024#if __cplusplus >= 201103L │ │ │ │ -2025 template │ │ │ │ -2026 _GLIBCXX20_CONSTEXPR │ │ │ │ -2027 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* │ │ │ │ -2028 _M_data_ptr(_Ptr __ptr) const │ │ │ │ -2029 { return _e_m_p_t_y() ? nullptr : std::__to_address(__ptr); } │ │ │ │ -2030#else │ │ │ │ -2031 template │ │ │ │ -2032 _Up* │ │ │ │ -2033 _M_data_ptr(_Up* __ptr) _GLIBCXX_NOEXCEPT │ │ │ │ -2034 { return __ptr; } │ │ │ │ -2035 │ │ │ │ -2036 template │ │ │ │ -2037 value_type* │ │ │ │ -2038 _M_data_ptr(_Ptr __ptr) │ │ │ │ -2039 { return _e_m_p_t_y() ? (value_type*)0 : __ptr.operator->(); } │ │ │ │ -2040 │ │ │ │ -2041 template │ │ │ │ -2042 const value_type* │ │ │ │ -2043 _M_data_ptr(_Ptr __ptr) const │ │ │ │ -2044 { return _e_m_p_t_y() ? (const value_type*)0 : __ptr.operator->(); } │ │ │ │ -2045#endif │ │ │ │ -2046 }; │ │ │ │ -2047 │ │ │ │ -2048#if __cpp_deduction_guides >= 201606 │ │ │ │ -2049 template::value_type, │ │ │ │ -2051 typename _Allocator = allocator<_ValT>, │ │ │ │ -2052 typename = _RequireInputIter<_InputIterator>, │ │ │ │ -2053 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2054 vector(_InputIterator, _InputIterator, _Allocator = _Allocator()) │ │ │ │ -2055 -> vector<_ValT, _Allocator>; │ │ │ │ -2056#endif │ │ │ │ -2057 │ │ │ │ -2058 /** │ │ │ │ -2059 * @brief Vector equality comparison. │ │ │ │ -2060 * @param __x A %vector. │ │ │ │ -2061 * @param __y A %vector of the same type as @a __x. │ │ │ │ -2062 * @return True iff the size and elements of the vectors are equal. │ │ │ │ -2063 * │ │ │ │ -2064 * This is an equivalence relation. It is linear in the size of the │ │ │ │ -2065 * vectors. Vectors are considered equivalent if their sizes are equal, │ │ │ │ -2066 * and if corresponding elements compare equal. │ │ │ │ -2067 */ │ │ │ │ -2068 template │ │ │ │ -2069 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR │ │ │ │ -2070 inline bool │ │ │ │ -_2_0_7_1 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) │ │ │ │ -2072 { return (__x.size() == __y.size() │ │ │ │ -2073 && std::equal(__x.begin(), __x.end(), __y.begin())); } │ │ │ │ -2074 │ │ │ │ -2075#if __cpp_lib_three_way_comparison // >= C++20 │ │ │ │ -2076 /** │ │ │ │ -2077 * @brief Vector ordering relation. │ │ │ │ -2078 * @param __x A `vector`. │ │ │ │ -2079 * @param __y A `vector` of the same type as `__x`. │ │ │ │ -2080 * @return A value indicating whether `__x` is less than, equal to, │ │ │ │ -2081 * greater than, or incomparable with `__y`. │ │ │ │ -2082 * │ │ │ │ -2083 * See `std::lexicographical_compare_three_way()` for how the determination │ │ │ │ -2084 * is made. This operator is used to synthesize relational operators like │ │ │ │ -2085 * `<` and `>=` etc. │ │ │ │ -2086 */ │ │ │ │ -2087 template │ │ │ │ -2088 [[nodiscard]] │ │ │ │ -_2_0_8_9 constexpr __detail::__synth3way_t<_Tp> │ │ │ │ -2090 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) │ │ │ │ -2091 { │ │ │ │ -2092 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(), │ │ │ │ -2093 __y.begin(), __y.end(), │ │ │ │ -2094 __detail::__synth3way); │ │ │ │ -2095 } │ │ │ │ -2096#else │ │ │ │ -2097 /** │ │ │ │ -2098 * @brief Vector ordering relation. │ │ │ │ -2099 * @param __x A %vector. │ │ │ │ -2100 * @param __y A %vector of the same type as @a __x. │ │ │ │ -2101 * @return True iff @a __x is lexicographically less than @a __y. │ │ │ │ -2102 * │ │ │ │ -2103 * This is a total ordering relation. It is linear in the size of the │ │ │ │ -2104 * vectors. The elements must be comparable with @c <. │ │ │ │ -2105 * │ │ │ │ -2106 * See std::lexicographical_compare() for how the determination is made. │ │ │ │ -2107 */ │ │ │ │ -2108 template │ │ │ │ -2109 _GLIBCXX_NODISCARD inline bool │ │ │ │ -2110 operator<(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) │ │ │ │ -2111 { return std::lexicographical_compare(__x.begin(), __x.end(), │ │ │ │ -2112 __y.begin(), __y.end()); } │ │ │ │ -2113 │ │ │ │ -2114 /// Based on operator== │ │ │ │ -2115 template │ │ │ │ -2116 _GLIBCXX_NODISCARD inline bool │ │ │ │ -2117 operator!=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) │ │ │ │ -2118 { return !(__x == __y); } │ │ │ │ -2119 │ │ │ │ -2120 /// Based on operator< │ │ │ │ -2121 template │ │ │ │ -2122 _GLIBCXX_NODISCARD inline bool │ │ │ │ -2123 _o_p_e_r_a_t_o_r_>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) │ │ │ │ -2124 { return __y < __x; } │ │ │ │ -2125 │ │ │ │ -2126 /// Based on operator< │ │ │ │ -2127 template │ │ │ │ -2128 _GLIBCXX_NODISCARD inline bool │ │ │ │ -2129 _o_p_e_r_a_t_o_r_<_=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) │ │ │ │ -2130 { return !(__y < __x); } │ │ │ │ -2131 │ │ │ │ -2132 /// Based on operator< │ │ │ │ -2133 template │ │ │ │ -2134 _GLIBCXX_NODISCARD inline bool │ │ │ │ -2135 _o_p_e_r_a_t_o_r_>_=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) │ │ │ │ -2136 { return !(__x < __y); } │ │ │ │ -2137#endif // three-way comparison │ │ │ │ -2138 │ │ │ │ -2139 /// See std::vector::swap(). │ │ │ │ -2140 template │ │ │ │ -2141 _GLIBCXX20_CONSTEXPR │ │ │ │ -2142 inline void │ │ │ │ -_2_1_4_3 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) │ │ │ │ -2144 ___G_L_I_B_C_X_X___N_O_E_X_C_E_P_T___I_F(noexcept(__x.swap(__y))) │ │ │ │ -2145 { __x.swap(__y); } │ │ │ │ -2146 │ │ │ │ -2147_GLIBCXX_END_NAMESPACE_CONTAINER │ │ │ │ -2148 │ │ │ │ -2149#if __cplusplus >= 201703L │ │ │ │ -2150 namespace __detail::__variant │ │ │ │ -2151 { │ │ │ │ -2152 template struct _Never_valueless_alt; // see │ │ │ │ -2153 │ │ │ │ -2154 // Provide the strong exception-safety guarantee when emplacing a │ │ │ │ -2155 // vector into a variant, but only if move assignment cannot throw. │ │ │ │ -2156 template │ │ │ │ -2157 struct _Never_valueless_alt<_GLIBCXX_STD_C::vector<_Tp, _Alloc>> │ │ │ │ -2158 : _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>> │ │ │ │ -2159 { }; │ │ │ │ -2160 } // namespace __detail::__variant │ │ │ │ -2161#endif // C++17 │ │ │ │ -2162 │ │ │ │ -2163_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -2164} // namespace std │ │ │ │ -2165 │ │ │ │ -2166#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___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_5 │ │ │ │ -_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_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_6_2 │ │ │ │ -_s_t_d_:_:_t_r_u_e___t_y_p_e │ │ │ │ -__bool_constant< true > true_type │ │ │ │ -The type used as a compile-time boolean with true value. │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_1_1 │ │ │ │ -_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_4 │ │ │ │ +854 void │ │ │ │ +855 notify_all() noexcept │ │ │ │ +856 { │ │ │ │ +857 _M_impl.notify_all(); │ │ │ │ +858 } │ │ │ │ +859#endif │ │ │ │ +860 │ │ │ │ +861 private: │ │ │ │ +862 _Sp_atomic> _M_impl; │ │ │ │ +863 }; │ │ │ │ +864 /// @} group pointer_abstractions │ │ │ │ +865#endif // C++20 │ │ │ │ +866 │ │ │ │ +867_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +868} // namespace │ │ │ │ +869 │ │ │ │ +870#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_7 │ │ │ │ -_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_1 │ │ │ │ -_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_5_7 │ │ │ │ -_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_7 │ │ │ │ -_s_t_d_:_:_m_i_n │ │ │ │ -constexpr const _Tp & min(const _Tp &, const _Tp &) │ │ │ │ -This does what you think it does. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___a_l_g_o_b_a_s_e_._h_:_2_3_3 │ │ │ │ -_s_t_d_:_:_____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_3_9 │ │ │ │ +_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_5 │ │ │ │ +_s_t_d_:_:_l_o_c_k │ │ │ │ +void lock(_L1 &__l1, _L2 &__l2, _L3 &... __l3) │ │ │ │ +Generic lock. │ │ │ │ +DDeeffiinniittiioonn _m_u_t_e_x_:_6_9_8 │ │ │ │ _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_4_8 │ │ │ │ -_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_:_1_8_2 │ │ │ │ -_s_t_d_:_:_i_s___s_a_m_e │ │ │ │ -is_same │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_4_8_2 │ │ │ │ -_s_t_d_:_:_i_s___n_o_t_h_r_o_w___d_e_f_a_u_l_t___c_o_n_s_t_r_u_c_t_i_b_l_e │ │ │ │ -is_nothrow_default_constructible │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_1_9_4 │ │ │ │ -_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_2_8_0 │ │ │ │ -_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_:_2_6_4 │ │ │ │ -_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_2_9 │ │ │ │ -_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_5 │ │ │ │ -_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_3 │ │ │ │ -_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_:_9_9 │ │ │ │ -_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_7 │ │ │ │ -_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_2_8 │ │ │ │ -_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_:_8_8 │ │ │ │ -_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_3_2 │ │ │ │ -_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_2_9_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_0_4_7 │ │ │ │ -_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_0_1 │ │ │ │ -_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_:_9_2_6 │ │ │ │ -_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_:_9_0_6 │ │ │ │ -_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_0_4 │ │ │ │ -_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_3_6_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_4_0_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_:_9_5_6 │ │ │ │ -_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_:_8_8_6 │ │ │ │ -_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_0_9_1 │ │ │ │ -_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_4_2_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_:_7_4_6 │ │ │ │ -_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_:_8_9_6 │ │ │ │ -_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_4_1 │ │ │ │ -_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_2_1 │ │ │ │ -_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_5_7_7 │ │ │ │ -_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_6_0_1 │ │ │ │ -_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_6_2 │ │ │ │ -_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_2_7_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_5_9 │ │ │ │ -_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_2_3_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_3_3_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_:_7_7_9 │ │ │ │ -_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_2_6_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_1_9_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_0_2_6 │ │ │ │ -_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_1_7_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_2_2_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_4_5_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_1_6_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_4_5 │ │ │ │ -_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_5_4_9 │ │ │ │ -_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_6_3_1 │ │ │ │ -_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_1_0_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_:_9_4_6 │ │ │ │ -_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_:_9_3_6 │ │ │ │ -_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_:_9_8_7 │ │ │ │ -_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_2_1_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_:_9_6_7 │ │ │ │ -_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_0_9 │ │ │ │ -_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_:_6_8_1 │ │ │ │ -_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_:_9_1_6 │ │ │ │ -_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_4_9_7 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_c_l_e_a_r │ │ │ │ -constexpr void clear() noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_6_2_0 │ │ │ │ -_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_:_8_6_8 │ │ │ │ -_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_3 │ │ │ │ -_s_t_d_:_:_v_e_c_t_o_r_:_:_s_i_z_e │ │ │ │ -constexpr size_type size() const noexcept │ │ │ │ -DDeeffiinniittiioonn _s_t_l___v_e_c_t_o_r_._h_:_1_0_0_5 │ │ │ │ -_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_7_2 │ │ │ │ -_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_2_4_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_:_9_9_7 │ │ │ │ -_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_:_9_7_7 │ │ │ │ -_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_1_4_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_0_8_1 │ │ │ │ -_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_0_1_1 │ │ │ │ +_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_:_4_9 │ │ │ │ -_____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_1_0 │ │ │ │ * _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-14-base/libstdc++/user/a00401.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stl_tree.h File Reference │ │ │ +libstdc++: version.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -46,70 +46,2337 @@ │ │ │ /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ │ │ │ $(document).ready(function(){initNavTree('a00401.html',''); initResizable(); }); │ │ │ /* @license-end */ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -Namespaces | │ │ │ -Enumerations | │ │ │ -Functions
│ │ │ -
stl_tree.h File Reference
│ │ │ +Macros
│ │ │ +
version.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ -Namespaces

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

│ │ │ -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 ()
 
│ │ │ -const _Rb_tree_node_base * std::_Rb_tree_decrement (const _Rb_tree_node_base *__x) throw ()
 
│ │ │ -_Rb_tree_node_base * std::_Rb_tree_increment (_Rb_tree_node_base *__x) throw ()
 
│ │ │ -const _Rb_tree_node_base * std::_Rb_tree_increment (const _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)
 

│ │ │ +Macros

#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_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_addressof_constexpr

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define __glibcxx_addressof_constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 363 of file version.h.

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

◆ __glibcxx_allocator_traits_is_always_equal

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

Definition at line 73 of file version.h.

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

◆ __glibcxx_any

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

Definition at line 373 of file version.h.

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

◆ __glibcxx_apply

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

Definition at line 383 of file version.h.

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

◆ __glibcxx_array_constexpr

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

Definition at line 588 of file version.h.

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

◆ __glibcxx_as_const

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

Definition at line 393 of file version.h.

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

◆ __glibcxx_assume_aligned

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

Definition at line 793 of file version.h.

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

◆ __glibcxx_atomic_flag_test

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

Definition at line 803 of file version.h.

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

◆ __glibcxx_atomic_float

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

Definition at line 813 of file version.h.

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

◆ __glibcxx_atomic_is_always_lock_free

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

Definition at line 403 of file version.h.

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

◆ __glibcxx_atomic_ref

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

Definition at line 833 of file version.h.

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

◆ __glibcxx_atomic_shared_ptr

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

Definition at line 1278 of file version.h.

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

◆ __glibcxx_atomic_value_initialization

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

Definition at line 843 of file version.h.

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

◆ __glibcxx_atomic_wait

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

Definition at line 1288 of file version.h.

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

◆ __glibcxx_barrier

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

Definition at line 1303 of file version.h.

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

◆ __glibcxx_bind_front

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

Definition at line 853 of file version.h.

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

◆ __glibcxx_bit_cast

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

Definition at line 883 of file version.h.

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

◆ __glibcxx_bitops

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

Definition at line 893 of file version.h.

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

◆ __glibcxx_bool_constant

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

Definition at line 413 of file version.h.

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

◆ __glibcxx_bounded_array_traits

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

Definition at line 903 of file version.h.

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

◆ __glibcxx_boyer_moore_searcher

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

Definition at line 633 of file version.h.

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

◆ __glibcxx_byte

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

Definition at line 423 of file version.h.

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

◆ __glibcxx_chrono

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

Definition at line 648 of file version.h.

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

◆ __glibcxx_chrono_udls

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

Definition at line 293 of file version.h.

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

◆ __glibcxx_clamp

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

Definition at line 613 of file version.h.

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

◆ __glibcxx_complex_udls

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

Definition at line 303 of file version.h.

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

◆ __glibcxx_concepts

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

Definition at line 913 of file version.h.

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

◆ __glibcxx_constexpr_algorithms

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

Definition at line 1243 of file version.h.

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

◆ __glibcxx_constexpr_char_traits

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

Definition at line 1003 of file version.h.

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

◆ __glibcxx_constexpr_complex

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

Definition at line 1333 of file version.h.

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

◆ __glibcxx_constexpr_dynamic_alloc

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

Definition at line 1343 of file version.h.

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

◆ __glibcxx_constexpr_functional

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

Definition at line 1233 of file version.h.

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

◆ __glibcxx_constexpr_iterator

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

Definition at line 1163 of file version.h.

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

◆ __glibcxx_constexpr_memory

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

Definition at line 1268 of file version.h.

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

◆ __glibcxx_constexpr_numeric

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

Definition at line 1223 of file version.h.

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

◆ __glibcxx_constexpr_string

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

Definition at line 1358 of file version.h.

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

◆ __glibcxx_constexpr_string_view

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

Definition at line 953 of file version.h.

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

◆ __glibcxx_constexpr_tuple

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

Definition at line 1253 of file version.h.

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

◆ __glibcxx_constexpr_utility

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

Definition at line 1183 of file version.h.

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

◆ __glibcxx_constexpr_vector

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

Definition at line 1373 of file version.h.

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

◆ __glibcxx_coroutine

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

Definition at line 158 of file version.h.

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

◆ __glibcxx_enable_shared_from_this

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

Definition at line 138 of file version.h.

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

◆ __glibcxx_endian

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

Definition at line 963 of file version.h.

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

◆ __glibcxx_erase_if

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

Definition at line 1383 of file version.h.

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

◆ __glibcxx_exchange_function

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

Definition at line 168 of file version.h.

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

◆ __glibcxx_execution

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

Definition at line 658 of file version.h.

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

◆ __glibcxx_filesystem

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

Definition at line 668 of file version.h.

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

◆ __glibcxx_format

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

Definition at line 1313 of file version.h.

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

◆ __glibcxx_format_uchar

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

Definition at line 1323 of file version.h.

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

◆ __glibcxx_gcd

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

Definition at line 558 of file version.h.

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

◆ __glibcxx_gcd_lcm

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

Definition at line 568 of file version.h.

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

◆ __glibcxx_generic_associative_lookup

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

Definition at line 313 of file version.h.

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

◆ __glibcxx_generic_unordered_lookup

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

Definition at line 1393 of file version.h.

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

◆ __glibcxx_has_unique_object_representations

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

Definition at line 433 of file version.h.

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

◆ __glibcxx_hypot

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

Definition at line 678 of file version.h.

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

◆ __glibcxx_incomplete_container_elements

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

Definition at line 53 of file version.h.

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

◆ __glibcxx_int_pow2

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

Definition at line 973 of file version.h.

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

◆ __glibcxx_integer_comparison_functions

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

Definition at line 983 of file version.h.

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

◆ __glibcxx_integer_sequence

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

Definition at line 178 of file version.h.

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

◆ __glibcxx_integral_constant_callable

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

Definition at line 188 of file version.h.

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

◆ __glibcxx_interpolate

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

Definition at line 1173 of file version.h.

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

◆ __glibcxx_invoke

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

Definition at line 453 of file version.h.

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

◆ __glibcxx_is_aggregate

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

Definition at line 463 of file version.h.

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

◆ __glibcxx_is_constant_evaluated

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

Definition at line 993 of file version.h.

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

◆ __glibcxx_is_final

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

Definition at line 198 of file version.h.

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

◆ __glibcxx_is_invocable

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

Definition at line 473 of file version.h.

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

◆ __glibcxx_is_layout_compatible

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

Definition at line 1018 of file version.h.

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

◆ __glibcxx_is_nothrow_convertible

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

Definition at line 1028 of file version.h.

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

◆ __glibcxx_is_null_pointer

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

Definition at line 83 of file version.h.

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

◆ __glibcxx_is_pointer_interconvertible

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

Definition at line 1038 of file version.h.

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

◆ __glibcxx_is_swappable

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

Definition at line 118 of file version.h.

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

◆ __glibcxx_jthread

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

Definition at line 1403 of file version.h.

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

◆ __glibcxx_latch

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

Definition at line 1413 of file version.h.

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

◆ __glibcxx_launder

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

Definition at line 483 of file version.h.

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

◆ __glibcxx_lcm

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

Definition at line 548 of file version.h.

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

◆ __glibcxx_list_remove_return_type

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

Definition at line 1423 of file version.h.

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

◆ __glibcxx_logical_traits

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

Definition at line 493 of file version.h.

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

◆ __glibcxx_make_from_tuple

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

Definition at line 503 of file version.h.

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

◆ __glibcxx_make_obj_using_allocator

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

Definition at line 1058 of file version.h.

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

◆ __glibcxx_make_reverse_iterator

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

Definition at line 208 of file version.h.

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

◆ __glibcxx_make_unique

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

Definition at line 323 of file version.h.

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

◆ __glibcxx_map_try_emplace

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

Definition at line 688 of file version.h.

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

◆ __glibcxx_math_constants

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

Definition at line 1048 of file version.h.

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

◆ __glibcxx_math_spec_funcs

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

Definition at line 148 of file version.h.

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

◆ __glibcxx_math_special_functions

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

Definition at line 698 of file version.h.

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

◆ __glibcxx_memory_resource

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

Definition at line 708 of file version.h.

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

◆ __glibcxx_move_iterator_concept

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

Definition at line 1443 of file version.h.

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

◆ __glibcxx_node_extract

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

Definition at line 723 of file version.h.

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

◆ __glibcxx_nonmember_container_access

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

Definition at line 603 of file version.h.

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

◆ __glibcxx_not_fn

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

Definition at line 513 of file version.h.

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

◆ __glibcxx_null_iterators

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

Definition at line 218 of file version.h.

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

◆ __glibcxx_optional

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

Definition at line 928 of file version.h.

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

◆ __glibcxx_parallel_algorithm

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

Definition at line 733 of file version.h.

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

◆ __glibcxx_polymorphic_allocator

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

Definition at line 1433 of file version.h.

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

◆ __glibcxx_quoted_string_io

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

Definition at line 333 of file version.h.

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

◆ __glibcxx_ranges

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

Definition at line 1213 of file version.h.

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

◆ __glibcxx_raw_memory_algorithms

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

Definition at line 578 of file version.h.

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

◆ __glibcxx_remove_cvref

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

Definition at line 1068 of file version.h.

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

◆ __glibcxx_result_of_sfinae

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

Definition at line 93 of file version.h.

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

◆ __glibcxx_robust_nonmodifying_seq_ops

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

Definition at line 268 of file version.h.

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

◆ __glibcxx_sample

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

Definition at line 623 of file version.h.

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

◆ __glibcxx_scoped_lock

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

Definition at line 743 of file version.h.

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

◆ __glibcxx_semaphore

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

Definition at line 1453 of file version.h.

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

◆ __glibcxx_shared_mutex

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

Definition at line 753 of file version.h.

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

◆ __glibcxx_shared_ptr_arrays

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

Definition at line 103 of file version.h.

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

◆ __glibcxx_shared_ptr_weak_type

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

Definition at line 763 of file version.h.

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

◆ __glibcxx_shared_timed_mutex

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

Definition at line 343 of file version.h.

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

◆ __glibcxx_shift

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

Definition at line 1193 of file version.h.

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

◆ __glibcxx_smart_ptr_for_overwrite

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

Definition at line 1463 of file version.h.

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

◆ __glibcxx_source_location

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

Definition at line 1078 of file version.h.

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

◆ __glibcxx_span

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

Definition at line 1093 of file version.h.

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

◆ __glibcxx_ssize

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

Definition at line 1103 of file version.h.

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

◆ __glibcxx_starts_ends_with

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

Definition at line 873 of file version.h.

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

◆ __glibcxx_string_udls

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

Definition at line 353 of file version.h.

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

◆ __glibcxx_string_view

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

Definition at line 773 of file version.h.

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

◆ __glibcxx_three_way_comparison

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

Definition at line 1113 of file version.h.

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

◆ __glibcxx_to_address

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

Definition at line 1123 of file version.h.

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

◆ __glibcxx_transformation_trait_aliases

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

Definition at line 228 of file version.h.

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

◆ __glibcxx_transparent_operators

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

Definition at line 238 of file version.h.

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

◆ __glibcxx_tuple_element_t

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

Definition at line 248 of file version.h.

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

◆ __glibcxx_tuples_by_type

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

Definition at line 258 of file version.h.

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

◆ __glibcxx_type_identity

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

Definition at line 1143 of file version.h.

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

◆ __glibcxx_type_trait_variable_templates

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

Definition at line 523 of file version.h.

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

◆ __glibcxx_uncaught_exceptions

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

Definition at line 63 of file version.h.

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

◆ __glibcxx_unordered_map_try_emplace

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

Definition at line 783 of file version.h.

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

◆ __glibcxx_unwrap_ref

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

Definition at line 1153 of file version.h.

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

◆ __glibcxx_variant

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

Definition at line 538 of file version.h.

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

◆ __glibcxx_void_t

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

Definition at line 128 of file version.h.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,48 +1,653 @@ │ │ │ │ libstdc++ │ │ │ │ -_N_a_m_e_s_p_a_c_e_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___a_d_d_r_e_s_s_o_f___c_o_n_s_t_e_x_p_r │ │ │ │   │ │ │ │ -EEnnuummeerraattiioonnss │ │ │ │ -enum   __RRbb__ttrreeee__ccoolloorr { __SS__rreedd , __SS__bbllaacckk } │ │ │ │ +#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 │ │ │ │   │ │ │ │ -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 () │ │ │ │ -  │ │ │ │ -_c_o_n_s_t _Rb_tree_node_base *  ssttdd::::__RRbb__ttrreeee__ddeeccrreemmeenntt (_c_o_n_s_t _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 () │ │ │ │ -  │ │ │ │ -_c_o_n_s_t _Rb_tree_node_base *  ssttdd::::__RRbb__ttrreeee__iinnccrreemmeenntt (_c_o_n_s_t _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___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_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 │ │ │ │ +  │ │ │ │ +#define  _____g_l_i_b_c_x_x___v_a_r_i_a_n_t │ │ │ │ +  │ │ │ │ +#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__aaddddrreessssooff__ccoonnsstteexxpprr ********** │ │ │ │ +#define __glibcxx_addressof_constexpr │ │ │ │ +Definition at line _3_6_3 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_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aannyy ********** │ │ │ │ +#define __glibcxx_any │ │ │ │ +Definition at line _3_7_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aappppllyy ********** │ │ │ │ +#define __glibcxx_apply │ │ │ │ +Definition at line _3_8_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aarrrraayy__ccoonnsstteexxpprr ********** │ │ │ │ +#define __glibcxx_array_constexpr │ │ │ │ +Definition at line _5_8_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aass__ccoonnsstt ********** │ │ │ │ +#define __glibcxx_as_const │ │ │ │ +Definition at line _3_9_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aassssuummee__aalliiggnneedd ********** │ │ │ │ +#define __glibcxx_assume_aligned │ │ │ │ +Definition at line _7_9_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aattoommiicc__ffllaagg__tteesstt ********** │ │ │ │ +#define __glibcxx_atomic_flag_test │ │ │ │ +Definition at line _8_0_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aattoommiicc__ffllooaatt ********** │ │ │ │ +#define __glibcxx_atomic_float │ │ │ │ +Definition at line _8_1_3 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_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aattoommiicc__rreeff ********** │ │ │ │ +#define __glibcxx_atomic_ref │ │ │ │ +Definition at line _8_3_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aattoommiicc__sshhaarreedd__ppttrr ********** │ │ │ │ +#define __glibcxx_atomic_shared_ptr │ │ │ │ +Definition at line _1_2_7_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aattoommiicc__vvaalluuee__iinniittiiaalliizzaattiioonn ********** │ │ │ │ +#define __glibcxx_atomic_value_initialization │ │ │ │ +Definition at line _8_4_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__aattoommiicc__wwaaiitt ********** │ │ │ │ +#define __glibcxx_atomic_wait │ │ │ │ +Definition at line _1_2_8_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__bbaarrrriieerr ********** │ │ │ │ +#define __glibcxx_barrier │ │ │ │ +Definition at line _1_3_0_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__bbiinndd__ffrroonntt ********** │ │ │ │ +#define __glibcxx_bind_front │ │ │ │ +Definition at line _8_5_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__bbiitt__ccaasstt ********** │ │ │ │ +#define __glibcxx_bit_cast │ │ │ │ +Definition at line _8_8_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__bbiittooppss ********** │ │ │ │ +#define __glibcxx_bitops │ │ │ │ +Definition at line _8_9_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__bbooooll__ccoonnssttaanntt ********** │ │ │ │ +#define __glibcxx_bool_constant │ │ │ │ +Definition at line _4_1_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__bboouunnddeedd__aarrrraayy__ttrraaiittss ********** │ │ │ │ +#define __glibcxx_bounded_array_traits │ │ │ │ +Definition at line _9_0_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__bbooyyeerr__mmoooorree__sseeaarrcchheerr ********** │ │ │ │ +#define __glibcxx_boyer_moore_searcher │ │ │ │ +Definition at line _6_3_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__bbyyttee ********** │ │ │ │ +#define __glibcxx_byte │ │ │ │ +Definition at line _4_2_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__cchhrroonnoo ********** │ │ │ │ +#define __glibcxx_chrono │ │ │ │ +Definition at line _6_4_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__cchhrroonnoo__uuddllss ********** │ │ │ │ +#define __glibcxx_chrono_udls │ │ │ │ +Definition at line _2_9_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccllaammpp ********** │ │ │ │ +#define __glibcxx_clamp │ │ │ │ +Definition at line _6_1_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoommpplleexx__uuddllss ********** │ │ │ │ +#define __glibcxx_complex_udls │ │ │ │ +Definition at line _3_0_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonncceeppttss ********** │ │ │ │ +#define __glibcxx_concepts │ │ │ │ +Definition at line _9_1_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__aallggoorriitthhmmss ********** │ │ │ │ +#define __glibcxx_constexpr_algorithms │ │ │ │ +Definition at line _1_2_4_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__cchhaarr__ttrraaiittss ********** │ │ │ │ +#define __glibcxx_constexpr_char_traits │ │ │ │ +Definition at line _1_0_0_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__ccoommpplleexx ********** │ │ │ │ +#define __glibcxx_constexpr_complex │ │ │ │ +Definition at line _1_3_3_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__ddyynnaammiicc__aalllloocc ********** │ │ │ │ +#define __glibcxx_constexpr_dynamic_alloc │ │ │ │ +Definition at line _1_3_4_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__ffuunnccttiioonnaall ********** │ │ │ │ +#define __glibcxx_constexpr_functional │ │ │ │ +Definition at line _1_2_3_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__iitteerraattoorr ********** │ │ │ │ +#define __glibcxx_constexpr_iterator │ │ │ │ +Definition at line _1_1_6_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__mmeemmoorryy ********** │ │ │ │ +#define __glibcxx_constexpr_memory │ │ │ │ +Definition at line _1_2_6_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__nnuummeerriicc ********** │ │ │ │ +#define __glibcxx_constexpr_numeric │ │ │ │ +Definition at line _1_2_2_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__ssttrriinngg ********** │ │ │ │ +#define __glibcxx_constexpr_string │ │ │ │ +Definition at line _1_3_5_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__ssttrriinngg__vviieeww ********** │ │ │ │ +#define __glibcxx_constexpr_string_view │ │ │ │ +Definition at line _9_5_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__ttuuppllee ********** │ │ │ │ +#define __glibcxx_constexpr_tuple │ │ │ │ +Definition at line _1_2_5_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__uuttiilliittyy ********** │ │ │ │ +#define __glibcxx_constexpr_utility │ │ │ │ +Definition at line _1_1_8_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoonnsstteexxpprr__vveeccttoorr ********** │ │ │ │ +#define __glibcxx_constexpr_vector │ │ │ │ +Definition at line _1_3_7_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ccoorroouuttiinnee ********** │ │ │ │ +#define __glibcxx_coroutine │ │ │ │ +Definition at line _1_5_8 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_3_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__eennddiiaann ********** │ │ │ │ +#define __glibcxx_endian │ │ │ │ +Definition at line _9_6_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__eerraassee__iiff ********** │ │ │ │ +#define __glibcxx_erase_if │ │ │ │ +Definition at line _1_3_8_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__eexxcchhaannggee__ffuunnccttiioonn ********** │ │ │ │ +#define __glibcxx_exchange_function │ │ │ │ +Definition at line _1_6_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__eexxeeccuuttiioonn ********** │ │ │ │ +#define __glibcxx_execution │ │ │ │ +Definition at line _6_5_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ffiilleessyysstteemm ********** │ │ │ │ +#define __glibcxx_filesystem │ │ │ │ +Definition at line _6_6_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ffoorrmmaatt ********** │ │ │ │ +#define __glibcxx_format │ │ │ │ +Definition at line _1_3_1_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ffoorrmmaatt__uucchhaarr ********** │ │ │ │ +#define __glibcxx_format_uchar │ │ │ │ +Definition at line _1_3_2_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ggccdd ********** │ │ │ │ +#define __glibcxx_gcd │ │ │ │ +Definition at line _5_5_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ggccdd__llccmm ********** │ │ │ │ +#define __glibcxx_gcd_lcm │ │ │ │ +Definition at line _5_6_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ggeenneerriicc__aassssoocciiaattiivvee__llooookkuupp ********** │ │ │ │ +#define __glibcxx_generic_associative_lookup │ │ │ │ +Definition at line _3_1_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ggeenneerriicc__uunnoorrddeerreedd__llooookkuupp ********** │ │ │ │ +#define __glibcxx_generic_unordered_lookup │ │ │ │ +Definition at line _1_3_9_3 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_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__hhyyppoott ********** │ │ │ │ +#define __glibcxx_hypot │ │ │ │ +Definition at line _6_7_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iinnccoommpplleettee__ccoonnttaaiinneerr__eelleemmeennttss ********** │ │ │ │ +#define __glibcxx_incomplete_container_elements │ │ │ │ +Definition at line _5_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iinntt__ppooww22 ********** │ │ │ │ +#define __glibcxx_int_pow2 │ │ │ │ +Definition at line _9_7_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iinntteeggeerr__ccoommppaarriissoonn__ffuunnccttiioonnss ********** │ │ │ │ +#define __glibcxx_integer_comparison_functions │ │ │ │ +Definition at line _9_8_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iinntteeggeerr__sseeqquueennccee ********** │ │ │ │ +#define __glibcxx_integer_sequence │ │ │ │ +Definition at line _1_7_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iinntteeggrraall__ccoonnssttaanntt__ccaallllaabbllee ********** │ │ │ │ +#define __glibcxx_integral_constant_callable │ │ │ │ +Definition at line _1_8_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iinntteerrppoollaattee ********** │ │ │ │ +#define __glibcxx_interpolate │ │ │ │ +Definition at line _1_1_7_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iinnvvookkee ********** │ │ │ │ +#define __glibcxx_invoke │ │ │ │ +Definition at line _4_5_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iiss__aaggggrreeggaattee ********** │ │ │ │ +#define __glibcxx_is_aggregate │ │ │ │ +Definition at line _4_6_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iiss__ccoonnssttaanntt__eevvaalluuaatteedd ********** │ │ │ │ +#define __glibcxx_is_constant_evaluated │ │ │ │ +Definition at line _9_9_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iiss__ffiinnaall ********** │ │ │ │ +#define __glibcxx_is_final │ │ │ │ +Definition at line _1_9_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iiss__iinnvvooccaabbllee ********** │ │ │ │ +#define __glibcxx_is_invocable │ │ │ │ +Definition at line _4_7_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iiss__llaayyoouutt__ccoommppaattiibbllee ********** │ │ │ │ +#define __glibcxx_is_layout_compatible │ │ │ │ +Definition at line _1_0_1_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iiss__nnootthhrrooww__ccoonnvveerrttiibbllee ********** │ │ │ │ +#define __glibcxx_is_nothrow_convertible │ │ │ │ +Definition at line _1_0_2_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iiss__nnuullll__ppooiinntteerr ********** │ │ │ │ +#define __glibcxx_is_null_pointer │ │ │ │ +Definition at line _8_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iiss__ppooiinntteerr__iinntteerrccoonnvveerrttiibbllee ********** │ │ │ │ +#define __glibcxx_is_pointer_interconvertible │ │ │ │ +Definition at line _1_0_3_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__iiss__sswwaappppaabbllee ********** │ │ │ │ +#define __glibcxx_is_swappable │ │ │ │ +Definition at line _1_1_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__jjtthhrreeaadd ********** │ │ │ │ +#define __glibcxx_jthread │ │ │ │ +Definition at line _1_4_0_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__llaattcchh ********** │ │ │ │ +#define __glibcxx_latch │ │ │ │ +Definition at line _1_4_1_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__llaauunnddeerr ********** │ │ │ │ +#define __glibcxx_launder │ │ │ │ +Definition at line _4_8_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__llccmm ********** │ │ │ │ +#define __glibcxx_lcm │ │ │ │ +Definition at line _5_4_8 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_2_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__llooggiiccaall__ttrraaiittss ********** │ │ │ │ +#define __glibcxx_logical_traits │ │ │ │ +Definition at line _4_9_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__mmaakkee__ffrroomm__ttuuppllee ********** │ │ │ │ +#define __glibcxx_make_from_tuple │ │ │ │ +Definition at line _5_0_3 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_5_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__mmaakkee__rreevveerrssee__iitteerraattoorr ********** │ │ │ │ +#define __glibcxx_make_reverse_iterator │ │ │ │ +Definition at line _2_0_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__mmaakkee__uunniiqquuee ********** │ │ │ │ +#define __glibcxx_make_unique │ │ │ │ +Definition at line _3_2_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__mmaapp__ttrryy__eemmppllaaccee ********** │ │ │ │ +#define __glibcxx_map_try_emplace │ │ │ │ +Definition at line _6_8_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__mmaatthh__ccoonnssttaannttss ********** │ │ │ │ +#define __glibcxx_math_constants │ │ │ │ +Definition at line _1_0_4_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__mmaatthh__ssppeecc__ffuunnccss ********** │ │ │ │ +#define __glibcxx_math_spec_funcs │ │ │ │ +Definition at line _1_4_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__mmaatthh__ssppeecciiaall__ffuunnccttiioonnss ********** │ │ │ │ +#define __glibcxx_math_special_functions │ │ │ │ +Definition at line _6_9_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__mmeemmoorryy__rreessoouurrccee ********** │ │ │ │ +#define __glibcxx_memory_resource │ │ │ │ +Definition at line _7_0_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__mmoovvee__iitteerraattoorr__ccoonncceepptt ********** │ │ │ │ +#define __glibcxx_move_iterator_concept │ │ │ │ +Definition at line _1_4_4_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__nnooddee__eexxttrraacctt ********** │ │ │ │ +#define __glibcxx_node_extract │ │ │ │ +Definition at line _7_2_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__nnoonnmmeemmbbeerr__ccoonnttaaiinneerr__aacccceessss ********** │ │ │ │ +#define __glibcxx_nonmember_container_access │ │ │ │ +Definition at line _6_0_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__nnoott__ffnn ********** │ │ │ │ +#define __glibcxx_not_fn │ │ │ │ +Definition at line _5_1_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__nnuullll__iitteerraattoorrss ********** │ │ │ │ +#define __glibcxx_null_iterators │ │ │ │ +Definition at line _2_1_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ooppttiioonnaall ********** │ │ │ │ +#define __glibcxx_optional │ │ │ │ +Definition at line _9_2_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ppaarraalllleell__aallggoorriitthhmm ********** │ │ │ │ +#define __glibcxx_parallel_algorithm │ │ │ │ +Definition at line _7_3_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ppoollyymmoorrpphhiicc__aallllooccaattoorr ********** │ │ │ │ +#define __glibcxx_polymorphic_allocator │ │ │ │ +Definition at line _1_4_3_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__qquuootteedd__ssttrriinngg__iioo ********** │ │ │ │ +#define __glibcxx_quoted_string_io │ │ │ │ +Definition at line _3_3_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__rraannggeess ********** │ │ │ │ +#define __glibcxx_ranges │ │ │ │ +Definition at line _1_2_1_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__rraaww__mmeemmoorryy__aallggoorriitthhmmss ********** │ │ │ │ +#define __glibcxx_raw_memory_algorithms │ │ │ │ +Definition at line _5_7_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__rreemmoovvee__ccvvrreeff ********** │ │ │ │ +#define __glibcxx_remove_cvref │ │ │ │ +Definition at line _1_0_6_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__rreessuulltt__ooff__ssffiinnaaee ********** │ │ │ │ +#define __glibcxx_result_of_sfinae │ │ │ │ +Definition at line _9_3 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_6_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ssaammppllee ********** │ │ │ │ +#define __glibcxx_sample │ │ │ │ +Definition at line _6_2_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ssccooppeedd__lloocckk ********** │ │ │ │ +#define __glibcxx_scoped_lock │ │ │ │ +Definition at line _7_4_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__sseemmaapphhoorree ********** │ │ │ │ +#define __glibcxx_semaphore │ │ │ │ +Definition at line _1_4_5_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__sshhaarreedd__mmuutteexx ********** │ │ │ │ +#define __glibcxx_shared_mutex │ │ │ │ +Definition at line _7_5_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__sshhaarreedd__ppttrr__aarrrraayyss ********** │ │ │ │ +#define __glibcxx_shared_ptr_arrays │ │ │ │ +Definition at line _1_0_3 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_6_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__sshhaarreedd__ttiimmeedd__mmuutteexx ********** │ │ │ │ +#define __glibcxx_shared_timed_mutex │ │ │ │ +Definition at line _3_4_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__sshhiifftt ********** │ │ │ │ +#define __glibcxx_shift │ │ │ │ +Definition at line _1_1_9_3 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_4_6_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ssoouurrccee__llooccaattiioonn ********** │ │ │ │ +#define __glibcxx_source_location │ │ │ │ +Definition at line _1_0_7_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ssppaann ********** │ │ │ │ +#define __glibcxx_span │ │ │ │ +Definition at line _1_0_9_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ssssiizzee ********** │ │ │ │ +#define __glibcxx_ssize │ │ │ │ +Definition at line _1_1_0_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ssttaarrttss__eennddss__wwiitthh ********** │ │ │ │ +#define __glibcxx_starts_ends_with │ │ │ │ +Definition at line _8_7_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ssttrriinngg__uuddllss ********** │ │ │ │ +#define __glibcxx_string_udls │ │ │ │ +Definition at line _3_5_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ssttrriinngg__vviieeww ********** │ │ │ │ +#define __glibcxx_string_view │ │ │ │ +Definition at line _7_7_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__tthhrreeee__wwaayy__ccoommppaarriissoonn ********** │ │ │ │ +#define __glibcxx_three_way_comparison │ │ │ │ +Definition at line _1_1_1_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ttoo__aaddddrreessss ********** │ │ │ │ +#define __glibcxx_to_address │ │ │ │ +Definition at line _1_1_2_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ttrraannssffoorrmmaattiioonn__ttrraaiitt__aalliiaasseess ********** │ │ │ │ +#define __glibcxx_transformation_trait_aliases │ │ │ │ +Definition at line _2_2_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ttrraannssppaarreenntt__ooppeerraattoorrss ********** │ │ │ │ +#define __glibcxx_transparent_operators │ │ │ │ +Definition at line _2_3_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ttuuppllee__eelleemmeenntt__tt ********** │ │ │ │ +#define __glibcxx_tuple_element_t │ │ │ │ +Definition at line _2_4_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ttuupplleess__bbyy__ttyyppee ********** │ │ │ │ +#define __glibcxx_tuples_by_type │ │ │ │ +Definition at line _2_5_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__ttyyppee__iiddeennttiittyy ********** │ │ │ │ +#define __glibcxx_type_identity │ │ │ │ +Definition at line _1_1_4_3 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_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__uunnccaauugghhtt__eexxcceeppttiioonnss ********** │ │ │ │ +#define __glibcxx_uncaught_exceptions │ │ │ │ +Definition at line _6_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__uunnoorrddeerreedd__mmaapp__ttrryy__eemmppllaaccee ********** │ │ │ │ +#define __glibcxx_unordered_map_try_emplace │ │ │ │ +Definition at line _7_8_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__uunnwwrraapp__rreeff ********** │ │ │ │ +#define __glibcxx_unwrap_ref │ │ │ │ +Definition at line _1_1_5_3 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__vvaarriiaanntt ********** │ │ │ │ +#define __glibcxx_variant │ │ │ │ +Definition at line _5_3_8 of file _v_e_r_s_i_o_n_._h. │ │ │ │ +********** _?◆_? ____gglliibbccxxxx__vvooiidd__tt ********** │ │ │ │ +#define __glibcxx_void_t │ │ │ │ +Definition at line _1_2_8 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-14-base/libstdc++/user/a00401_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stl_tree.h Source File │ │ │ +libstdc++: version.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,2671 +45,2033 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
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-2024 Free Software Foundation, Inc.
│ │ │
2
│ │ │ -
3// Copyright (C) 2001-2024 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
│ │ │ +
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#pragma GCC system_header
│ │ │ +
48
│ │ │ +
49#include <bits/c++config.h>
│ │ │ +
50
│ │ │ +
51#if !defined(__cpp_lib_incomplete_container_elements)
│ │ │ +
52# if _GLIBCXX_HOSTED
│ │ │ +
53# define __glibcxx_incomplete_container_elements 201505L
│ │ │ +
54# if defined(__glibcxx_want_all) || defined(__glibcxx_want_incomplete_container_elements)
│ │ │ +
55# define __cpp_lib_incomplete_container_elements 201505L
│ │ │ +
56# endif
│ │ │ +
57# endif
│ │ │ +
58#endif /* !defined(__cpp_lib_incomplete_container_elements) && defined(__glibcxx_want_incomplete_container_elements) */
│ │ │ +
59#undef __glibcxx_want_incomplete_container_elements
│ │ │
60
│ │ │ -
61#pragma GCC system_header
│ │ │ -
62
│ │ │ -
63#include <bits/stl_algobase.h>
│ │ │ -
64#include <bits/allocator.h>
│ │ │ -
65#include <bits/stl_function.h>
│ │ │ - │ │ │ -
67#include <ext/alloc_traits.h>
│ │ │ -
68#if __cplusplus >= 201103L
│ │ │ -
69# include <ext/aligned_buffer.h>
│ │ │ -
70#endif
│ │ │ -
71#ifdef __glibcxx_node_extract // >= C++17
│ │ │ -
72# include <bits/node_handle.h>
│ │ │ -
73#endif
│ │ │ -
74
│ │ │ -
75namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
76{
│ │ │ -
77_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
78
│ │ │ -
79 // Red-black tree class, designed for use in implementing STL
│ │ │ -
80 // associative containers (set, multiset, map, and multimap). The
│ │ │ -
81 // insertion and deletion algorithms are based on those in Cormen,
│ │ │ -
82 // Leiserson, and Rivest, Introduction to Algorithms (MIT Press,
│ │ │ -
83 // 1990), except that
│ │ │ -
84 //
│ │ │ -
85 // (1) the header cell is maintained with links not only to the root
│ │ │ -
86 // but also to the leftmost node of the tree, to enable constant
│ │ │ -
87 // time begin(), and to the rightmost node of the tree, to enable
│ │ │ -
88 // linear time performance when used with the generic set algorithms
│ │ │ -
89 // (set_union, etc.)
│ │ │ -
90 //
│ │ │ -
91 // (2) when a node being deleted has two children its successor node
│ │ │ -
92 // is relinked into its place, rather than copied, so that the only
│ │ │ -
93 // iterators invalidated are those referring to the deleted node.
│ │ │ -
94
│ │ │ -
95 enum _Rb_tree_color { _S_red = false, _S_black = true };
│ │ │ -
96
│ │ │ -
97 struct _Rb_tree_node_base
│ │ │ -
98 {
│ │ │ -
99 typedef _Rb_tree_node_base* _Base_ptr;
│ │ │ -
100 typedef const _Rb_tree_node_base* _Const_Base_ptr;
│ │ │ -
101
│ │ │ -
102 _Rb_tree_color _M_color;
│ │ │ -
103 _Base_ptr _M_parent;
│ │ │ -
104 _Base_ptr _M_left;
│ │ │ -
105 _Base_ptr _M_right;
│ │ │ -
106
│ │ │ -
107 static _Base_ptr
│ │ │ -
108 _S_minimum(_Base_ptr __x) _GLIBCXX_NOEXCEPT
│ │ │ -
109 {
│ │ │ -
110 while (__x->_M_left != 0) __x = __x->_M_left;
│ │ │ -
111 return __x;
│ │ │ -
112 }
│ │ │ -
113
│ │ │ -
114 static _Const_Base_ptr
│ │ │ -
115 _S_minimum(_Const_Base_ptr __x) _GLIBCXX_NOEXCEPT
│ │ │ -
116 {
│ │ │ -
117 while (__x->_M_left != 0) __x = __x->_M_left;
│ │ │ -
118 return __x;
│ │ │ -
119 }
│ │ │ -
120
│ │ │ -
121 static _Base_ptr
│ │ │ -
122 _S_maximum(_Base_ptr __x) _GLIBCXX_NOEXCEPT
│ │ │ -
123 {
│ │ │ -
124 while (__x->_M_right != 0) __x = __x->_M_right;
│ │ │ -
125 return __x;
│ │ │ -
126 }
│ │ │ -
127
│ │ │ -
128 static _Const_Base_ptr
│ │ │ -
129 _S_maximum(_Const_Base_ptr __x) _GLIBCXX_NOEXCEPT
│ │ │ -
130 {
│ │ │ -
131 while (__x->_M_right != 0) __x = __x->_M_right;
│ │ │ -
132 return __x;
│ │ │ -
133 }
│ │ │ -
134 };
│ │ │ +
61#if !defined(__cpp_lib_uncaught_exceptions)
│ │ │ +
62# if ((defined(__STRICT_ANSI__) && __cplusplus >= 201703L) || (!defined(__STRICT_ANSI__) && __cplusplus >= 199711L))
│ │ │ +
63# define __glibcxx_uncaught_exceptions 201411L
│ │ │ +
64# if defined(__glibcxx_want_all) || defined(__glibcxx_want_uncaught_exceptions)
│ │ │ +
65# define __cpp_lib_uncaught_exceptions 201411L
│ │ │ +
66# endif
│ │ │ +
67# endif
│ │ │ +
68#endif /* !defined(__cpp_lib_uncaught_exceptions) && defined(__glibcxx_want_uncaught_exceptions) */
│ │ │ +
69#undef __glibcxx_want_uncaught_exceptions
│ │ │ +
70
│ │ │ +
71#if !defined(__cpp_lib_allocator_traits_is_always_equal)
│ │ │ +
72# if (__cplusplus >= 201103L)
│ │ │ +
73# define __glibcxx_allocator_traits_is_always_equal 201411L
│ │ │ +
74# if defined(__glibcxx_want_all) || defined(__glibcxx_want_allocator_traits_is_always_equal)
│ │ │ +
75# define __cpp_lib_allocator_traits_is_always_equal 201411L
│ │ │ +
76# endif
│ │ │ +
77# endif
│ │ │ +
78#endif /* !defined(__cpp_lib_allocator_traits_is_always_equal) && defined(__glibcxx_want_allocator_traits_is_always_equal) */
│ │ │ +
79#undef __glibcxx_want_allocator_traits_is_always_equal
│ │ │ +
80
│ │ │ +
81#if !defined(__cpp_lib_is_null_pointer)
│ │ │ +
82# if (__cplusplus >= 201103L)
│ │ │ +
83# define __glibcxx_is_null_pointer 201309L
│ │ │ +
84# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_null_pointer)
│ │ │ +
85# define __cpp_lib_is_null_pointer 201309L
│ │ │ +
86# endif
│ │ │ +
87# endif
│ │ │ +
88#endif /* !defined(__cpp_lib_is_null_pointer) && defined(__glibcxx_want_is_null_pointer) */
│ │ │ +
89#undef __glibcxx_want_is_null_pointer
│ │ │ +
90
│ │ │ +
91#if !defined(__cpp_lib_result_of_sfinae)
│ │ │ +
92# if (__cplusplus >= 201103L)
│ │ │ +
93# define __glibcxx_result_of_sfinae 201210L
│ │ │ +
94# if defined(__glibcxx_want_all) || defined(__glibcxx_want_result_of_sfinae)
│ │ │ +
95# define __cpp_lib_result_of_sfinae 201210L
│ │ │ +
96# endif
│ │ │ +
97# endif
│ │ │ +
98#endif /* !defined(__cpp_lib_result_of_sfinae) && defined(__glibcxx_want_result_of_sfinae) */
│ │ │ +
99#undef __glibcxx_want_result_of_sfinae
│ │ │ +
100
│ │ │ +
101#if !defined(__cpp_lib_shared_ptr_arrays)
│ │ │ +
102# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
│ │ │ +
103# define __glibcxx_shared_ptr_arrays 201707L
│ │ │ +
104# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_ptr_arrays)
│ │ │ +
105# define __cpp_lib_shared_ptr_arrays 201707L
│ │ │ +
106# endif
│ │ │ +
107# elif (__cplusplus >= 201103L) && _GLIBCXX_HOSTED
│ │ │ +
108# define __glibcxx_shared_ptr_arrays 201611L
│ │ │ +
109# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_ptr_arrays)
│ │ │ +
110# define __cpp_lib_shared_ptr_arrays 201611L
│ │ │ +
111# endif
│ │ │ +
112# endif
│ │ │ +
113#endif /* !defined(__cpp_lib_shared_ptr_arrays) && defined(__glibcxx_want_shared_ptr_arrays) */
│ │ │ +
114#undef __glibcxx_want_shared_ptr_arrays
│ │ │ +
115
│ │ │ +
116#if !defined(__cpp_lib_is_swappable)
│ │ │ +
117# if ((defined(__STRICT_ANSI__) && __cplusplus >= 201703L) || (!defined(__STRICT_ANSI__) && __cplusplus >= 201103L))
│ │ │ +
118# define __glibcxx_is_swappable 201603L
│ │ │ +
119# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_swappable)
│ │ │ +
120# define __cpp_lib_is_swappable 201603L
│ │ │ +
121# endif
│ │ │ +
122# endif
│ │ │ +
123#endif /* !defined(__cpp_lib_is_swappable) && defined(__glibcxx_want_is_swappable) */
│ │ │ +
124#undef __glibcxx_want_is_swappable
│ │ │ +
125
│ │ │ +
126#if !defined(__cpp_lib_void_t)
│ │ │ +
127# if ((defined(__STRICT_ANSI__) && __cplusplus >= 201703L) || (!defined(__STRICT_ANSI__) && __cplusplus >= 201103L))
│ │ │ +
128# define __glibcxx_void_t 201411L
│ │ │ +
129# if defined(__glibcxx_want_all) || defined(__glibcxx_want_void_t)
│ │ │ +
130# define __cpp_lib_void_t 201411L
│ │ │ +
131# endif
│ │ │ +
132# endif
│ │ │ +
133#endif /* !defined(__cpp_lib_void_t) && defined(__glibcxx_want_void_t) */
│ │ │ +
134#undef __glibcxx_want_void_t
│ │ │
135
│ │ │ -
136 // Helper type offering value initialization guarantee on the compare functor.
│ │ │ -
137 template<typename _Key_compare>
│ │ │ -
138 struct _Rb_tree_key_compare
│ │ │ -
139 {
│ │ │ -
140 _Key_compare _M_key_compare;
│ │ │ -
141
│ │ │ -
142 _Rb_tree_key_compare()
│ │ │ -
143 _GLIBCXX_NOEXCEPT_IF(
│ │ │ -
144 is_nothrow_default_constructible<_Key_compare>::value)
│ │ │ -
145 : _M_key_compare()
│ │ │ -
146 { }
│ │ │ -
147
│ │ │ -
148 _Rb_tree_key_compare(const _Key_compare& __comp)
│ │ │ -
149 : _M_key_compare(__comp)
│ │ │ -
150 { }
│ │ │ -
151
│ │ │ -
152#if __cplusplus >= 201103L
│ │ │ -
153 // Copy constructor added for consistency with C++98 mode.
│ │ │ -
154 _Rb_tree_key_compare(const _Rb_tree_key_compare&) = default;
│ │ │ +
136#if !defined(__cpp_lib_enable_shared_from_this)
│ │ │ +
137# if ((defined(__STRICT_ANSI__) && __cplusplus >= 201703L) || (!defined(__STRICT_ANSI__) && __cplusplus >= 201103L)) && _GLIBCXX_HOSTED
│ │ │ +
138# define __glibcxx_enable_shared_from_this 201603L
│ │ │ +
139# if defined(__glibcxx_want_all) || defined(__glibcxx_want_enable_shared_from_this)
│ │ │ +
140# define __cpp_lib_enable_shared_from_this 201603L
│ │ │ +
141# endif
│ │ │ +
142# endif
│ │ │ +
143#endif /* !defined(__cpp_lib_enable_shared_from_this) && defined(__glibcxx_want_enable_shared_from_this) */
│ │ │ +
144#undef __glibcxx_want_enable_shared_from_this
│ │ │ +
145
│ │ │ +
146#if !defined(__cpp_lib_math_spec_funcs)
│ │ │ +
147# if (__cplusplus >= 201103L)
│ │ │ +
148# define __glibcxx_math_spec_funcs 201003L
│ │ │ +
149# if defined(__glibcxx_want_all) || defined(__glibcxx_want_math_spec_funcs)
│ │ │ +
150# define __STDCPP_MATH_SPEC_FUNCS__ 201003L
│ │ │ +
151# endif
│ │ │ +
152# endif
│ │ │ +
153#endif /* !defined(__cpp_lib_math_spec_funcs) && defined(__glibcxx_want_math_spec_funcs) */
│ │ │ +
154#undef __glibcxx_want_math_spec_funcs
│ │ │
155
│ │ │ -
156 _Rb_tree_key_compare(_Rb_tree_key_compare&& __x)
│ │ │ -
157 noexcept(is_nothrow_copy_constructible<_Key_compare>::value)
│ │ │ -
158 : _M_key_compare(__x._M_key_compare)
│ │ │ -
159 { }
│ │ │ -
160#endif
│ │ │ -
161 };
│ │ │ -
162
│ │ │ -
163 // Helper type to manage default initialization of node count and header.
│ │ │ -
164 struct _Rb_tree_header
│ │ │ -
165 {
│ │ │ -
166 _Rb_tree_node_base _M_header;
│ │ │ -
167 size_t _M_node_count; // Keeps track of size of tree.
│ │ │ -
168
│ │ │ -
169 _Rb_tree_header() _GLIBCXX_NOEXCEPT
│ │ │ -
170 {
│ │ │ -
171 _M_header._M_color = _S_red;
│ │ │ -
172 _M_reset();
│ │ │ -
173 }
│ │ │ -
174
│ │ │ -
175#if __cplusplus >= 201103L
│ │ │ -
176 _Rb_tree_header(_Rb_tree_header&& __x) noexcept
│ │ │ -
177 {
│ │ │ -
178 if (__x._M_header._M_parent != nullptr)
│ │ │ -
179 _M_move_data(__x);
│ │ │ -
180 else
│ │ │ -
181 {
│ │ │ -
182 _M_header._M_color = _S_red;
│ │ │ -
183 _M_reset();
│ │ │ -
184 }
│ │ │ -
185 }
│ │ │ -
186#endif
│ │ │ -
187
│ │ │ -
188 void
│ │ │ -
189 _M_move_data(_Rb_tree_header& __from)
│ │ │ -
190 {
│ │ │ -
191 _M_header._M_color = __from._M_header._M_color;
│ │ │ -
192 _M_header._M_parent = __from._M_header._M_parent;
│ │ │ -
193 _M_header._M_left = __from._M_header._M_left;
│ │ │ -
194 _M_header._M_right = __from._M_header._M_right;
│ │ │ -
195 _M_header._M_parent->_M_parent = &_M_header;
│ │ │ -
196 _M_node_count = __from._M_node_count;
│ │ │ -
197
│ │ │ -
198 __from._M_reset();
│ │ │ -
199 }
│ │ │ -
200
│ │ │ -
201 void
│ │ │ -
202 _M_reset()
│ │ │ -
203 {
│ │ │ -
204 _M_header._M_parent = 0;
│ │ │ -
205 _M_header._M_left = &_M_header;
│ │ │ -
206 _M_header._M_right = &_M_header;
│ │ │ -
207 _M_node_count = 0;
│ │ │ -
208 }
│ │ │ -
209 };
│ │ │ -
210
│ │ │ -
211 template<typename _Val>
│ │ │ -
212 struct _Rb_tree_node : public _Rb_tree_node_base
│ │ │ -
213 {
│ │ │ -
214 typedef _Rb_tree_node<_Val>* _Link_type;
│ │ │ +
156#if !defined(__cpp_lib_coroutine)
│ │ │ +
157# if (__cplusplus >= 201402L) && (__cpp_impl_coroutine)
│ │ │ +
158# define __glibcxx_coroutine 201902L
│ │ │ +
159# if defined(__glibcxx_want_all) || defined(__glibcxx_want_coroutine)
│ │ │ +
160# define __cpp_lib_coroutine 201902L
│ │ │ +
161# endif
│ │ │ +
162# endif
│ │ │ +
163#endif /* !defined(__cpp_lib_coroutine) && defined(__glibcxx_want_coroutine) */
│ │ │ +
164#undef __glibcxx_want_coroutine
│ │ │ +
165
│ │ │ +
166#if !defined(__cpp_lib_exchange_function)
│ │ │ +
167# if (__cplusplus >= 201402L)
│ │ │ +
168# define __glibcxx_exchange_function 201304L
│ │ │ +
169# if defined(__glibcxx_want_all) || defined(__glibcxx_want_exchange_function)
│ │ │ +
170# define __cpp_lib_exchange_function 201304L
│ │ │ +
171# endif
│ │ │ +
172# endif
│ │ │ +
173#endif /* !defined(__cpp_lib_exchange_function) && defined(__glibcxx_want_exchange_function) */
│ │ │ +
174#undef __glibcxx_want_exchange_function
│ │ │ +
175
│ │ │ +
176#if !defined(__cpp_lib_integer_sequence)
│ │ │ +
177# if (__cplusplus >= 201402L)
│ │ │ +
178# define __glibcxx_integer_sequence 201304L
│ │ │ +
179# if defined(__glibcxx_want_all) || defined(__glibcxx_want_integer_sequence)
│ │ │ +
180# define __cpp_lib_integer_sequence 201304L
│ │ │ +
181# endif
│ │ │ +
182# endif
│ │ │ +
183#endif /* !defined(__cpp_lib_integer_sequence) && defined(__glibcxx_want_integer_sequence) */
│ │ │ +
184#undef __glibcxx_want_integer_sequence
│ │ │ +
185
│ │ │ +
186#if !defined(__cpp_lib_integral_constant_callable)
│ │ │ +
187# if (__cplusplus >= 201402L)
│ │ │ +
188# define __glibcxx_integral_constant_callable 201304L
│ │ │ +
189# if defined(__glibcxx_want_all) || defined(__glibcxx_want_integral_constant_callable)
│ │ │ +
190# define __cpp_lib_integral_constant_callable 201304L
│ │ │ +
191# endif
│ │ │ +
192# endif
│ │ │ +
193#endif /* !defined(__cpp_lib_integral_constant_callable) && defined(__glibcxx_want_integral_constant_callable) */
│ │ │ +
194#undef __glibcxx_want_integral_constant_callable
│ │ │ +
195
│ │ │ +
196#if !defined(__cpp_lib_is_final)
│ │ │ +
197# if (__cplusplus >= 201402L)
│ │ │ +
198# define __glibcxx_is_final 201402L
│ │ │ +
199# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_final)
│ │ │ +
200# define __cpp_lib_is_final 201402L
│ │ │ +
201# endif
│ │ │ +
202# endif
│ │ │ +
203#endif /* !defined(__cpp_lib_is_final) && defined(__glibcxx_want_is_final) */
│ │ │ +
204#undef __glibcxx_want_is_final
│ │ │ +
205
│ │ │ +
206#if !defined(__cpp_lib_make_reverse_iterator)
│ │ │ +
207# if (__cplusplus >= 201402L)
│ │ │ +
208# define __glibcxx_make_reverse_iterator 201402L
│ │ │ +
209# if defined(__glibcxx_want_all) || defined(__glibcxx_want_make_reverse_iterator)
│ │ │ +
210# define __cpp_lib_make_reverse_iterator 201402L
│ │ │ +
211# endif
│ │ │ +
212# endif
│ │ │ +
213#endif /* !defined(__cpp_lib_make_reverse_iterator) && defined(__glibcxx_want_make_reverse_iterator) */
│ │ │ +
214#undef __glibcxx_want_make_reverse_iterator
│ │ │
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
│ │ │ -
237 };
│ │ │ -
238
│ │ │ -
239 _GLIBCXX_PURE _Rb_tree_node_base*
│ │ │ -
240 _Rb_tree_increment(_Rb_tree_node_base* __x) throw ();
│ │ │ -
241
│ │ │ -
242 _GLIBCXX_PURE const _Rb_tree_node_base*
│ │ │ -
243 _Rb_tree_increment(const _Rb_tree_node_base* __x) throw ();
│ │ │ -
244
│ │ │ -
245 _GLIBCXX_PURE _Rb_tree_node_base*
│ │ │ -
246 _Rb_tree_decrement(_Rb_tree_node_base* __x) throw ();
│ │ │ -
247
│ │ │ -
248 _GLIBCXX_PURE const _Rb_tree_node_base*
│ │ │ -
249 _Rb_tree_decrement(const _Rb_tree_node_base* __x) throw ();
│ │ │ -
250
│ │ │ -
251 template<typename _Tp>
│ │ │ -
252 struct _Rb_tree_iterator
│ │ │ -
253 {
│ │ │ -
254 typedef _Tp value_type;
│ │ │ -
255 typedef _Tp& reference;
│ │ │ -
256 typedef _Tp* pointer;
│ │ │ -
257
│ │ │ -
258 typedef bidirectional_iterator_tag iterator_category;
│ │ │ -
259 typedef ptrdiff_t difference_type;
│ │ │ -
260
│ │ │ -
261 typedef _Rb_tree_iterator<_Tp> _Self;
│ │ │ -
262 typedef _Rb_tree_node_base::_Base_ptr _Base_ptr;
│ │ │ -
263 typedef _Rb_tree_node<_Tp>* _Link_type;
│ │ │ -
264
│ │ │ -
265 _Rb_tree_iterator() _GLIBCXX_NOEXCEPT
│ │ │ -
266 : _M_node() { }
│ │ │ -
267
│ │ │ -
268 explicit
│ │ │ -
269 _Rb_tree_iterator(_Base_ptr __x) _GLIBCXX_NOEXCEPT
│ │ │ -
270 : _M_node(__x) { }
│ │ │ -
271
│ │ │ -
272 reference
│ │ │ -
273 operator*() const _GLIBCXX_NOEXCEPT
│ │ │ -
274 { return *static_cast<_Link_type>(_M_node)->_M_valptr(); }
│ │ │ +
216#if !defined(__cpp_lib_null_iterators)
│ │ │ +
217# if (__cplusplus >= 201402L)
│ │ │ +
218# define __glibcxx_null_iterators 201304L
│ │ │ +
219# if defined(__glibcxx_want_all) || defined(__glibcxx_want_null_iterators)
│ │ │ +
220# define __cpp_lib_null_iterators 201304L
│ │ │ +
221# endif
│ │ │ +
222# endif
│ │ │ +
223#endif /* !defined(__cpp_lib_null_iterators) && defined(__glibcxx_want_null_iterators) */
│ │ │ +
224#undef __glibcxx_want_null_iterators
│ │ │ +
225
│ │ │ +
226#if !defined(__cpp_lib_transformation_trait_aliases)
│ │ │ +
227# if (__cplusplus >= 201402L)
│ │ │ +
228# define __glibcxx_transformation_trait_aliases 201304L
│ │ │ +
229# if defined(__glibcxx_want_all) || defined(__glibcxx_want_transformation_trait_aliases)
│ │ │ +
230# define __cpp_lib_transformation_trait_aliases 201304L
│ │ │ +
231# endif
│ │ │ +
232# endif
│ │ │ +
233#endif /* !defined(__cpp_lib_transformation_trait_aliases) && defined(__glibcxx_want_transformation_trait_aliases) */
│ │ │ +
234#undef __glibcxx_want_transformation_trait_aliases
│ │ │ +
235
│ │ │ +
236#if !defined(__cpp_lib_transparent_operators)
│ │ │ +
237# if (__cplusplus >= 201402L)
│ │ │ +
238# define __glibcxx_transparent_operators 201510L
│ │ │ +
239# if defined(__glibcxx_want_all) || defined(__glibcxx_want_transparent_operators)
│ │ │ +
240# define __cpp_lib_transparent_operators 201510L
│ │ │ +
241# endif
│ │ │ +
242# endif
│ │ │ +
243#endif /* !defined(__cpp_lib_transparent_operators) && defined(__glibcxx_want_transparent_operators) */
│ │ │ +
244#undef __glibcxx_want_transparent_operators
│ │ │ +
245
│ │ │ +
246#if !defined(__cpp_lib_tuple_element_t)
│ │ │ +
247# if (__cplusplus >= 201402L)
│ │ │ +
248# define __glibcxx_tuple_element_t 201402L
│ │ │ +
249# if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuple_element_t)
│ │ │ +
250# define __cpp_lib_tuple_element_t 201402L
│ │ │ +
251# endif
│ │ │ +
252# endif
│ │ │ +
253#endif /* !defined(__cpp_lib_tuple_element_t) && defined(__glibcxx_want_tuple_element_t) */
│ │ │ +
254#undef __glibcxx_want_tuple_element_t
│ │ │ +
255
│ │ │ +
256#if !defined(__cpp_lib_tuples_by_type)
│ │ │ +
257# if (__cplusplus >= 201402L)
│ │ │ +
258# define __glibcxx_tuples_by_type 201304L
│ │ │ +
259# if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuples_by_type)
│ │ │ +
260# define __cpp_lib_tuples_by_type 201304L
│ │ │ +
261# endif
│ │ │ +
262# endif
│ │ │ +
263#endif /* !defined(__cpp_lib_tuples_by_type) && defined(__glibcxx_want_tuples_by_type) */
│ │ │ +
264#undef __glibcxx_want_tuples_by_type
│ │ │ +
265
│ │ │ +
266#if !defined(__cpp_lib_robust_nonmodifying_seq_ops)
│ │ │ +
267# if (__cplusplus >= 201402L)
│ │ │ +
268# define __glibcxx_robust_nonmodifying_seq_ops 201304L
│ │ │ +
269# if defined(__glibcxx_want_all) || defined(__glibcxx_want_robust_nonmodifying_seq_ops)
│ │ │ +
270# define __cpp_lib_robust_nonmodifying_seq_ops 201304L
│ │ │ +
271# endif
│ │ │ +
272# endif
│ │ │ +
273#endif /* !defined(__cpp_lib_robust_nonmodifying_seq_ops) && defined(__glibcxx_want_robust_nonmodifying_seq_ops) */
│ │ │ +
274#undef __glibcxx_want_robust_nonmodifying_seq_ops
│ │ │
275
│ │ │ -
276 pointer
│ │ │ -
277 operator->() const _GLIBCXX_NOEXCEPT
│ │ │ -
278 { return static_cast<_Link_type> (_M_node)->_M_valptr(); }
│ │ │ -
279
│ │ │ -
280 _Self&
│ │ │ -
281 operator++() _GLIBCXX_NOEXCEPT
│ │ │ -
282 {
│ │ │ -
283 _M_node = _Rb_tree_increment(_M_node);
│ │ │ -
284 return *this;
│ │ │ -
285 }
│ │ │ -
286
│ │ │ -
287 _Self
│ │ │ -
288 operator++(int) _GLIBCXX_NOEXCEPT
│ │ │ -
289 {
│ │ │ -
290 _Self __tmp = *this;
│ │ │ -
291 _M_node = _Rb_tree_increment(_M_node);
│ │ │ -
292 return __tmp;
│ │ │ -
293 }
│ │ │ -
294
│ │ │ -
295 _Self&
│ │ │ -
296 operator--() _GLIBCXX_NOEXCEPT
│ │ │ -
297 {
│ │ │ -
298 _M_node = _Rb_tree_decrement(_M_node);
│ │ │ -
299 return *this;
│ │ │ -
300 }
│ │ │ -
301
│ │ │ -
302 _Self
│ │ │ -
303 operator--(int) _GLIBCXX_NOEXCEPT
│ │ │ -
304 {
│ │ │ -
305 _Self __tmp = *this;
│ │ │ -
306 _M_node = _Rb_tree_decrement(_M_node);
│ │ │ -
307 return __tmp;
│ │ │ -
308 }
│ │ │ -
309
│ │ │ -
310 friend bool
│ │ │ -
311 operator==(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
│ │ │ -
312 { return __x._M_node == __y._M_node; }
│ │ │ -
313
│ │ │ -
314#if ! __cpp_lib_three_way_comparison
│ │ │ -
315 friend bool
│ │ │ -
316 operator!=(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
│ │ │ -
317 { return __x._M_node != __y._M_node; }
│ │ │ -
318#endif
│ │ │ -
319
│ │ │ -
320 _Base_ptr _M_node;
│ │ │ -
321 };
│ │ │ -
322
│ │ │ -
323 template<typename _Tp>
│ │ │ -
324 struct _Rb_tree_const_iterator
│ │ │ -
325 {
│ │ │ -
326 typedef _Tp value_type;
│ │ │ -
327 typedef const _Tp& reference;
│ │ │ -
328 typedef const _Tp* pointer;
│ │ │ -
329
│ │ │ -
330 typedef _Rb_tree_iterator<_Tp> iterator;
│ │ │ -
331
│ │ │ -
332 typedef bidirectional_iterator_tag iterator_category;
│ │ │ -
333 typedef ptrdiff_t difference_type;
│ │ │ -
334
│ │ │ -
335 typedef _Rb_tree_const_iterator<_Tp> _Self;
│ │ │ -
336 typedef _Rb_tree_node_base::_Const_Base_ptr _Base_ptr;
│ │ │ -
337 typedef const _Rb_tree_node<_Tp>* _Link_type;
│ │ │ -
338
│ │ │ -
339 _Rb_tree_const_iterator() _GLIBCXX_NOEXCEPT
│ │ │ -
340 : _M_node() { }
│ │ │ -
341
│ │ │ -
342 explicit
│ │ │ -
343 _Rb_tree_const_iterator(_Base_ptr __x) _GLIBCXX_NOEXCEPT
│ │ │ -
344 : _M_node(__x) { }
│ │ │ -
345
│ │ │ -
346 _Rb_tree_const_iterator(const iterator& __it) _GLIBCXX_NOEXCEPT
│ │ │ -
347 : _M_node(__it._M_node) { }
│ │ │ -
348
│ │ │ -
349 iterator
│ │ │ -
350 _M_const_cast() const _GLIBCXX_NOEXCEPT
│ │ │ -
351 { return iterator(const_cast<typename iterator::_Base_ptr>(_M_node)); }
│ │ │ -
352
│ │ │ -
353 reference
│ │ │ -
354 operator*() const _GLIBCXX_NOEXCEPT
│ │ │ -
355 { return *static_cast<_Link_type>(_M_node)->_M_valptr(); }
│ │ │ -
356
│ │ │ -
357 pointer
│ │ │ -
358 operator->() const _GLIBCXX_NOEXCEPT
│ │ │ -
359 { return static_cast<_Link_type>(_M_node)->_M_valptr(); }
│ │ │ +
276#if !defined(__cpp_lib_to_chars)
│ │ │ +
277# if (__cplusplus > 202302L) && (_GLIBCXX_FLOAT_IS_IEEE_BINARY32 && _GLIBCXX_DOUBLE_IS_IEEE_BINARY64 && __SIZE_WIDTH__ >= 32)
│ │ │ +
278# define __glibcxx_to_chars 202306L
│ │ │ +
279# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_chars)
│ │ │ +
280# define __cpp_lib_to_chars 202306L
│ │ │ +
281# endif
│ │ │ +
282# elif (__cplusplus >= 201402L) && (_GLIBCXX_FLOAT_IS_IEEE_BINARY32 && _GLIBCXX_DOUBLE_IS_IEEE_BINARY64 && __SIZE_WIDTH__ >= 32)
│ │ │ +
283# define __glibcxx_to_chars 201611L
│ │ │ +
284# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_chars)
│ │ │ +
285# define __cpp_lib_to_chars 201611L
│ │ │ +
286# endif
│ │ │ +
287# endif
│ │ │ +
288#endif /* !defined(__cpp_lib_to_chars) && defined(__glibcxx_want_to_chars) */
│ │ │ +
289#undef __glibcxx_want_to_chars
│ │ │ +
290
│ │ │ +
291#if !defined(__cpp_lib_chrono_udls)
│ │ │ +
292# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED
│ │ │ +
293# define __glibcxx_chrono_udls 201304L
│ │ │ +
294# if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono_udls)
│ │ │ +
295# define __cpp_lib_chrono_udls 201304L
│ │ │ +
296# endif
│ │ │ +
297# endif
│ │ │ +
298#endif /* !defined(__cpp_lib_chrono_udls) && defined(__glibcxx_want_chrono_udls) */
│ │ │ +
299#undef __glibcxx_want_chrono_udls
│ │ │ +
300
│ │ │ +
301#if !defined(__cpp_lib_complex_udls)
│ │ │ +
302# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED
│ │ │ +
303# define __glibcxx_complex_udls 201309L
│ │ │ +
304# if defined(__glibcxx_want_all) || defined(__glibcxx_want_complex_udls)
│ │ │ +
305# define __cpp_lib_complex_udls 201309L
│ │ │ +
306# endif
│ │ │ +
307# endif
│ │ │ +
308#endif /* !defined(__cpp_lib_complex_udls) && defined(__glibcxx_want_complex_udls) */
│ │ │ +
309#undef __glibcxx_want_complex_udls
│ │ │ +
310
│ │ │ +
311#if !defined(__cpp_lib_generic_associative_lookup)
│ │ │ +
312# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED
│ │ │ +
313# define __glibcxx_generic_associative_lookup 201304L
│ │ │ +
314# if defined(__glibcxx_want_all) || defined(__glibcxx_want_generic_associative_lookup)
│ │ │ +
315# define __cpp_lib_generic_associative_lookup 201304L
│ │ │ +
316# endif
│ │ │ +
317# endif
│ │ │ +
318#endif /* !defined(__cpp_lib_generic_associative_lookup) && defined(__glibcxx_want_generic_associative_lookup) */
│ │ │ +
319#undef __glibcxx_want_generic_associative_lookup
│ │ │ +
320
│ │ │ +
321#if !defined(__cpp_lib_make_unique)
│ │ │ +
322# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED
│ │ │ +
323# define __glibcxx_make_unique 201304L
│ │ │ +
324# if defined(__glibcxx_want_all) || defined(__glibcxx_want_make_unique)
│ │ │ +
325# define __cpp_lib_make_unique 201304L
│ │ │ +
326# endif
│ │ │ +
327# endif
│ │ │ +
328#endif /* !defined(__cpp_lib_make_unique) && defined(__glibcxx_want_make_unique) */
│ │ │ +
329#undef __glibcxx_want_make_unique
│ │ │ +
330
│ │ │ +
331#if !defined(__cpp_lib_quoted_string_io)
│ │ │ +
332# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED
│ │ │ +
333# define __glibcxx_quoted_string_io 201304L
│ │ │ +
334# if defined(__glibcxx_want_all) || defined(__glibcxx_want_quoted_string_io)
│ │ │ +
335# define __cpp_lib_quoted_string_io 201304L
│ │ │ +
336# endif
│ │ │ +
337# endif
│ │ │ +
338#endif /* !defined(__cpp_lib_quoted_string_io) && defined(__glibcxx_want_quoted_string_io) */
│ │ │ +
339#undef __glibcxx_want_quoted_string_io
│ │ │ +
340
│ │ │ +
341#if !defined(__cpp_lib_shared_timed_mutex)
│ │ │ +
342# if (__cplusplus >= 201402L) && defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED
│ │ │ +
343# define __glibcxx_shared_timed_mutex 201402L
│ │ │ +
344# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_timed_mutex)
│ │ │ +
345# define __cpp_lib_shared_timed_mutex 201402L
│ │ │ +
346# endif
│ │ │ +
347# endif
│ │ │ +
348#endif /* !defined(__cpp_lib_shared_timed_mutex) && defined(__glibcxx_want_shared_timed_mutex) */
│ │ │ +
349#undef __glibcxx_want_shared_timed_mutex
│ │ │ +
350
│ │ │ +
351#if !defined(__cpp_lib_string_udls)
│ │ │ +
352# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED
│ │ │ +
353# define __glibcxx_string_udls 201304L
│ │ │ +
354# if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_udls)
│ │ │ +
355# define __cpp_lib_string_udls 201304L
│ │ │ +
356# endif
│ │ │ +
357# endif
│ │ │ +
358#endif /* !defined(__cpp_lib_string_udls) && defined(__glibcxx_want_string_udls) */
│ │ │ +
359#undef __glibcxx_want_string_udls
│ │ │
360
│ │ │ -
361 _Self&
│ │ │ -
362 operator++() _GLIBCXX_NOEXCEPT
│ │ │ -
363 {
│ │ │ -
364 _M_node = _Rb_tree_increment(_M_node);
│ │ │ -
365 return *this;
│ │ │ -
366 }
│ │ │ -
367
│ │ │ -
368 _Self
│ │ │ -
369 operator++(int) _GLIBCXX_NOEXCEPT
│ │ │ -
370 {
│ │ │ -
371 _Self __tmp = *this;
│ │ │ -
372 _M_node = _Rb_tree_increment(_M_node);
│ │ │ -
373 return __tmp;
│ │ │ -
374 }
│ │ │ -
375
│ │ │ -
376 _Self&
│ │ │ -
377 operator--() _GLIBCXX_NOEXCEPT
│ │ │ -
378 {
│ │ │ -
379 _M_node = _Rb_tree_decrement(_M_node);
│ │ │ -
380 return *this;
│ │ │ -
381 }
│ │ │ -
382
│ │ │ -
383 _Self
│ │ │ -
384 operator--(int) _GLIBCXX_NOEXCEPT
│ │ │ -
385 {
│ │ │ -
386 _Self __tmp = *this;
│ │ │ -
387 _M_node = _Rb_tree_decrement(_M_node);
│ │ │ -
388 return __tmp;
│ │ │ -
389 }
│ │ │ +
361#if !defined(__cpp_lib_addressof_constexpr)
│ │ │ +
362# if (__cplusplus >= 201703L)
│ │ │ +
363# define __glibcxx_addressof_constexpr 201603L
│ │ │ +
364# if defined(__glibcxx_want_all) || defined(__glibcxx_want_addressof_constexpr)
│ │ │ +
365# define __cpp_lib_addressof_constexpr 201603L
│ │ │ +
366# endif
│ │ │ +
367# endif
│ │ │ +
368#endif /* !defined(__cpp_lib_addressof_constexpr) && defined(__glibcxx_want_addressof_constexpr) */
│ │ │ +
369#undef __glibcxx_want_addressof_constexpr
│ │ │ +
370
│ │ │ +
371#if !defined(__cpp_lib_any)
│ │ │ +
372# if (__cplusplus >= 201703L)
│ │ │ +
373# define __glibcxx_any 201606L
│ │ │ +
374# if defined(__glibcxx_want_all) || defined(__glibcxx_want_any)
│ │ │ +
375# define __cpp_lib_any 201606L
│ │ │ +
376# endif
│ │ │ +
377# endif
│ │ │ +
378#endif /* !defined(__cpp_lib_any) && defined(__glibcxx_want_any) */
│ │ │ +
379#undef __glibcxx_want_any
│ │ │ +
380
│ │ │ +
381#if !defined(__cpp_lib_apply)
│ │ │ +
382# if (__cplusplus >= 201703L)
│ │ │ +
383# define __glibcxx_apply 201603L
│ │ │ +
384# if defined(__glibcxx_want_all) || defined(__glibcxx_want_apply)
│ │ │ +
385# define __cpp_lib_apply 201603L
│ │ │ +
386# endif
│ │ │ +
387# endif
│ │ │ +
388#endif /* !defined(__cpp_lib_apply) && defined(__glibcxx_want_apply) */
│ │ │ +
389#undef __glibcxx_want_apply
│ │ │
390
│ │ │ -
391 friend bool
│ │ │ -
392 operator==(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
│ │ │ -
393 { return __x._M_node == __y._M_node; }
│ │ │ -
394
│ │ │ -
395#if ! __cpp_lib_three_way_comparison
│ │ │ -
396 friend bool
│ │ │ -
397 operator!=(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
│ │ │ -
398 { return __x._M_node != __y._M_node; }
│ │ │ -
399#endif
│ │ │ +
391#if !defined(__cpp_lib_as_const)
│ │ │ +
392# if (__cplusplus >= 201703L)
│ │ │ +
393# define __glibcxx_as_const 201510L
│ │ │ +
394# if defined(__glibcxx_want_all) || defined(__glibcxx_want_as_const)
│ │ │ +
395# define __cpp_lib_as_const 201510L
│ │ │ +
396# endif
│ │ │ +
397# endif
│ │ │ +
398#endif /* !defined(__cpp_lib_as_const) && defined(__glibcxx_want_as_const) */
│ │ │ +
399#undef __glibcxx_want_as_const
│ │ │
400
│ │ │ -
401 _Base_ptr _M_node;
│ │ │ -
402 };
│ │ │ -
403
│ │ │ -
404 __attribute__((__nonnull__))
│ │ │ -
405 void
│ │ │ -
406 _Rb_tree_insert_and_rebalance(const bool __insert_left,
│ │ │ -
407 _Rb_tree_node_base* __x,
│ │ │ -
408 _Rb_tree_node_base* __p,
│ │ │ -
409 _Rb_tree_node_base& __header) throw ();
│ │ │ +
401#if !defined(__cpp_lib_atomic_is_always_lock_free)
│ │ │ +
402# if (__cplusplus >= 201703L)
│ │ │ +
403# define __glibcxx_atomic_is_always_lock_free 201603L
│ │ │ +
404# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_is_always_lock_free)
│ │ │ +
405# define __cpp_lib_atomic_is_always_lock_free 201603L
│ │ │ +
406# endif
│ │ │ +
407# endif
│ │ │ +
408#endif /* !defined(__cpp_lib_atomic_is_always_lock_free) && defined(__glibcxx_want_atomic_is_always_lock_free) */
│ │ │ +
409#undef __glibcxx_want_atomic_is_always_lock_free
│ │ │
410
│ │ │ -
411 __attribute__((__nonnull__,__returns_nonnull__))
│ │ │ -
412 _Rb_tree_node_base*
│ │ │ -
413 _Rb_tree_rebalance_for_erase(_Rb_tree_node_base* const __z,
│ │ │ -
414 _Rb_tree_node_base& __header) throw ();
│ │ │ -
415
│ │ │ -
416#ifdef __glibcxx_node_extract // >= C++17
│ │ │ -
417 template<typename _Tree1, typename _Cmp2>
│ │ │ -
418 struct _Rb_tree_merge_helper { };
│ │ │ -
419#endif
│ │ │ +
411#if !defined(__cpp_lib_bool_constant)
│ │ │ +
412# if (__cplusplus >= 201703L)
│ │ │ +
413# define __glibcxx_bool_constant 201505L
│ │ │ +
414# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bool_constant)
│ │ │ +
415# define __cpp_lib_bool_constant 201505L
│ │ │ +
416# endif
│ │ │ +
417# endif
│ │ │ +
418#endif /* !defined(__cpp_lib_bool_constant) && defined(__glibcxx_want_bool_constant) */
│ │ │ +
419#undef __glibcxx_want_bool_constant
│ │ │
420
│ │ │ -
421 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
422 typename _Compare, typename _Alloc = allocator<_Val> >
│ │ │ -
423 class _Rb_tree
│ │ │ -
424 {
│ │ │ - │ │ │ -
426 rebind<_Rb_tree_node<_Val> >::other _Node_allocator;
│ │ │ -
427
│ │ │ -
428 typedef __gnu_cxx::__alloc_traits<_Node_allocator> _Alloc_traits;
│ │ │ -
429
│ │ │ -
430 protected:
│ │ │ -
431 typedef _Rb_tree_node_base* _Base_ptr;
│ │ │ -
432 typedef const _Rb_tree_node_base* _Const_Base_ptr;
│ │ │ -
433 typedef _Rb_tree_node<_Val>* _Link_type;
│ │ │ -
434 typedef const _Rb_tree_node<_Val>* _Const_Link_type;
│ │ │ -
435
│ │ │ -
436 private:
│ │ │ -
437 // Functor recycling a pool of nodes and using allocation once the pool
│ │ │ -
438 // is empty.
│ │ │ -
439 struct _Reuse_or_alloc_node
│ │ │ -
440 {
│ │ │ -
441 _Reuse_or_alloc_node(_Rb_tree& __t)
│ │ │ -
442 : _M_root(__t._M_root()), _M_nodes(__t._M_rightmost()), _M_t(__t)
│ │ │ -
443 {
│ │ │ -
444 if (_M_root)
│ │ │ -
445 {
│ │ │ -
446 _M_root->_M_parent = 0;
│ │ │ -
447
│ │ │ -
448 if (_M_nodes->_M_left)
│ │ │ -
449 _M_nodes = _M_nodes->_M_left;
│ │ │ -
450 }
│ │ │ -
451 else
│ │ │ -
452 _M_nodes = 0;
│ │ │ -
453 }
│ │ │ -
454
│ │ │ -
455#if __cplusplus >= 201103L
│ │ │ -
456 _Reuse_or_alloc_node(const _Reuse_or_alloc_node&) = delete;
│ │ │ -
457#endif
│ │ │ -
458
│ │ │ -
459 ~_Reuse_or_alloc_node()
│ │ │ -
460 { _M_t._M_erase(static_cast<_Link_type>(_M_root)); }
│ │ │ -
461
│ │ │ -
462 template<typename _Arg>
│ │ │ -
463 _Link_type
│ │ │ -
464 operator()(_GLIBCXX_FWDREF(_Arg) __arg)
│ │ │ -
465 {
│ │ │ -
466 _Link_type __node = static_cast<_Link_type>(_M_extract());
│ │ │ -
467 if (__node)
│ │ │ -
468 {
│ │ │ -
469 _M_t._M_destroy_node(__node);
│ │ │ -
470 _M_t._M_construct_node(__node, _GLIBCXX_FORWARD(_Arg, __arg));
│ │ │ -
471 return __node;
│ │ │ -
472 }
│ │ │ -
473
│ │ │ -
474 return _M_t._M_create_node(_GLIBCXX_FORWARD(_Arg, __arg));
│ │ │ -
475 }
│ │ │ -
476
│ │ │ -
477 private:
│ │ │ -
478 _Base_ptr
│ │ │ -
479 _M_extract()
│ │ │ -
480 {
│ │ │ -
481 if (!_M_nodes)
│ │ │ -
482 return _M_nodes;
│ │ │ -
483
│ │ │ -
484 _Base_ptr __node = _M_nodes;
│ │ │ -
485 _M_nodes = _M_nodes->_M_parent;
│ │ │ -
486 if (_M_nodes)
│ │ │ -
487 {
│ │ │ -
488 if (_M_nodes->_M_right == __node)
│ │ │ -
489 {
│ │ │ -
490 _M_nodes->_M_right = 0;
│ │ │ -
491
│ │ │ -
492 if (_M_nodes->_M_left)
│ │ │ -
493 {
│ │ │ -
494 _M_nodes = _M_nodes->_M_left;
│ │ │ -
495
│ │ │ -
496 while (_M_nodes->_M_right)
│ │ │ -
497 _M_nodes = _M_nodes->_M_right;
│ │ │ -
498
│ │ │ -
499 if (_M_nodes->_M_left)
│ │ │ -
500 _M_nodes = _M_nodes->_M_left;
│ │ │ -
501 }
│ │ │ -
502 }
│ │ │ -
503 else // __node is on the left.
│ │ │ -
504 _M_nodes->_M_left = 0;
│ │ │ -
505 }
│ │ │ -
506 else
│ │ │ -
507 _M_root = 0;
│ │ │ -
508
│ │ │ -
509 return __node;
│ │ │ -
510 }
│ │ │ -
511
│ │ │ -
512 _Base_ptr _M_root;
│ │ │ -
513 _Base_ptr _M_nodes;
│ │ │ -
514 _Rb_tree& _M_t;
│ │ │ -
515 };
│ │ │ -
516
│ │ │ -
517 // Functor similar to the previous one but without any pool of nodes to
│ │ │ -
518 // recycle.
│ │ │ -
519 struct _Alloc_node
│ │ │ -
520 {
│ │ │ -
521 _Alloc_node(_Rb_tree& __t)
│ │ │ -
522 : _M_t(__t) { }
│ │ │ -
523
│ │ │ -
524 template<typename _Arg>
│ │ │ -
525 _Link_type
│ │ │ -
526 operator()(_GLIBCXX_FWDREF(_Arg) __arg) const
│ │ │ -
527 { return _M_t._M_create_node(_GLIBCXX_FORWARD(_Arg, __arg)); }
│ │ │ -
528
│ │ │ -
529 private:
│ │ │ -
530 _Rb_tree& _M_t;
│ │ │ -
531 };
│ │ │ -
532
│ │ │ -
533 public:
│ │ │ -
534 typedef _Key key_type;
│ │ │ -
535 typedef _Val value_type;
│ │ │ -
536 typedef value_type* pointer;
│ │ │ -
537 typedef const value_type* const_pointer;
│ │ │ -
538 typedef value_type& reference;
│ │ │ -
539 typedef const value_type& const_reference;
│ │ │ -
540 typedef size_t size_type;
│ │ │ -
541 typedef ptrdiff_t difference_type;
│ │ │ -
542 typedef _Alloc allocator_type;
│ │ │ -
543
│ │ │ -
544 _Node_allocator&
│ │ │ -
545 _M_get_Node_allocator() _GLIBCXX_NOEXCEPT
│ │ │ -
546 { return this->_M_impl; }
│ │ │ -
547
│ │ │ -
548 const _Node_allocator&
│ │ │ -
549 _M_get_Node_allocator() const _GLIBCXX_NOEXCEPT
│ │ │ -
550 { return this->_M_impl; }
│ │ │ -
551
│ │ │ -
552 allocator_type
│ │ │ -
553 get_allocator() const _GLIBCXX_NOEXCEPT
│ │ │ -
554 { return allocator_type(_M_get_Node_allocator()); }
│ │ │ +
421#if !defined(__cpp_lib_byte)
│ │ │ +
422# if (__cplusplus >= 201703L)
│ │ │ +
423# define __glibcxx_byte 201603L
│ │ │ +
424# if defined(__glibcxx_want_all) || defined(__glibcxx_want_byte)
│ │ │ +
425# define __cpp_lib_byte 201603L
│ │ │ +
426# endif
│ │ │ +
427# endif
│ │ │ +
428#endif /* !defined(__cpp_lib_byte) && defined(__glibcxx_want_byte) */
│ │ │ +
429#undef __glibcxx_want_byte
│ │ │ +
430
│ │ │ +
431#if !defined(__cpp_lib_has_unique_object_representations)
│ │ │ +
432# if (__cplusplus >= 201703L) && (defined(_GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP))
│ │ │ +
433# define __glibcxx_has_unique_object_representations 201606L
│ │ │ +
434# if defined(__glibcxx_want_all) || defined(__glibcxx_want_has_unique_object_representations)
│ │ │ +
435# define __cpp_lib_has_unique_object_representations 201606L
│ │ │ +
436# endif
│ │ │ +
437# endif
│ │ │ +
438#endif /* !defined(__cpp_lib_has_unique_object_representations) && defined(__glibcxx_want_has_unique_object_representations) */
│ │ │ +
439#undef __glibcxx_want_has_unique_object_representations
│ │ │ +
440
│ │ │ +
441#if !defined(__cpp_lib_hardware_interference_size)
│ │ │ +
442# if (__cplusplus >= 201703L) && (defined(__GCC_DESTRUCTIVE_SIZE))
│ │ │ +
443# define __glibcxx_hardware_interference_size 201703L
│ │ │ +
444# if defined(__glibcxx_want_all) || defined(__glibcxx_want_hardware_interference_size)
│ │ │ +
445# define __cpp_lib_hardware_interference_size 201703L
│ │ │ +
446# endif
│ │ │ +
447# endif
│ │ │ +
448#endif /* !defined(__cpp_lib_hardware_interference_size) && defined(__glibcxx_want_hardware_interference_size) */
│ │ │ +
449#undef __glibcxx_want_hardware_interference_size
│ │ │ +
450
│ │ │ +
451#if !defined(__cpp_lib_invoke)
│ │ │ +
452# if (__cplusplus >= 201703L)
│ │ │ +
453# define __glibcxx_invoke 201411L
│ │ │ +
454# if defined(__glibcxx_want_all) || defined(__glibcxx_want_invoke)
│ │ │ +
455# define __cpp_lib_invoke 201411L
│ │ │ +
456# endif
│ │ │ +
457# endif
│ │ │ +
458#endif /* !defined(__cpp_lib_invoke) && defined(__glibcxx_want_invoke) */
│ │ │ +
459#undef __glibcxx_want_invoke
│ │ │ +
460
│ │ │ +
461#if !defined(__cpp_lib_is_aggregate)
│ │ │ +
462# if (__cplusplus >= 201703L) && (defined(_GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE))
│ │ │ +
463# define __glibcxx_is_aggregate 201703L
│ │ │ +
464# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_aggregate)
│ │ │ +
465# define __cpp_lib_is_aggregate 201703L
│ │ │ +
466# endif
│ │ │ +
467# endif
│ │ │ +
468#endif /* !defined(__cpp_lib_is_aggregate) && defined(__glibcxx_want_is_aggregate) */
│ │ │ +
469#undef __glibcxx_want_is_aggregate
│ │ │ +
470
│ │ │ +
471#if !defined(__cpp_lib_is_invocable)
│ │ │ +
472# if (__cplusplus >= 201703L)
│ │ │ +
473# define __glibcxx_is_invocable 201703L
│ │ │ +
474# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_invocable)
│ │ │ +
475# define __cpp_lib_is_invocable 201703L
│ │ │ +
476# endif
│ │ │ +
477# endif
│ │ │ +
478#endif /* !defined(__cpp_lib_is_invocable) && defined(__glibcxx_want_is_invocable) */
│ │ │ +
479#undef __glibcxx_want_is_invocable
│ │ │ +
480
│ │ │ +
481#if !defined(__cpp_lib_launder)
│ │ │ +
482# if (__cplusplus >= 201703L) && (defined(_GLIBCXX_HAVE_BUILTIN_LAUNDER))
│ │ │ +
483# define __glibcxx_launder 201606L
│ │ │ +
484# if defined(__glibcxx_want_all) || defined(__glibcxx_want_launder)
│ │ │ +
485# define __cpp_lib_launder 201606L
│ │ │ +
486# endif
│ │ │ +
487# endif
│ │ │ +
488#endif /* !defined(__cpp_lib_launder) && defined(__glibcxx_want_launder) */
│ │ │ +
489#undef __glibcxx_want_launder
│ │ │ +
490
│ │ │ +
491#if !defined(__cpp_lib_logical_traits)
│ │ │ +
492# if (__cplusplus >= 201703L)
│ │ │ +
493# define __glibcxx_logical_traits 201510L
│ │ │ +
494# if defined(__glibcxx_want_all) || defined(__glibcxx_want_logical_traits)
│ │ │ +
495# define __cpp_lib_logical_traits 201510L
│ │ │ +
496# endif
│ │ │ +
497# endif
│ │ │ +
498#endif /* !defined(__cpp_lib_logical_traits) && defined(__glibcxx_want_logical_traits) */
│ │ │ +
499#undef __glibcxx_want_logical_traits
│ │ │ +
500
│ │ │ +
501#if !defined(__cpp_lib_make_from_tuple)
│ │ │ +
502# if (__cplusplus >= 201703L)
│ │ │ +
503# define __glibcxx_make_from_tuple 201606L
│ │ │ +
504# if defined(__glibcxx_want_all) || defined(__glibcxx_want_make_from_tuple)
│ │ │ +
505# define __cpp_lib_make_from_tuple 201606L
│ │ │ +
506# endif
│ │ │ +
507# endif
│ │ │ +
508#endif /* !defined(__cpp_lib_make_from_tuple) && defined(__glibcxx_want_make_from_tuple) */
│ │ │ +
509#undef __glibcxx_want_make_from_tuple
│ │ │ +
510
│ │ │ +
511#if !defined(__cpp_lib_not_fn)
│ │ │ +
512# if (__cplusplus >= 201703L)
│ │ │ +
513# define __glibcxx_not_fn 201603L
│ │ │ +
514# if defined(__glibcxx_want_all) || defined(__glibcxx_want_not_fn)
│ │ │ +
515# define __cpp_lib_not_fn 201603L
│ │ │ +
516# endif
│ │ │ +
517# endif
│ │ │ +
518#endif /* !defined(__cpp_lib_not_fn) && defined(__glibcxx_want_not_fn) */
│ │ │ +
519#undef __glibcxx_want_not_fn
│ │ │ +
520
│ │ │ +
521#if !defined(__cpp_lib_type_trait_variable_templates)
│ │ │ +
522# if (__cplusplus >= 201703L)
│ │ │ +
523# define __glibcxx_type_trait_variable_templates 201510L
│ │ │ +
524# if defined(__glibcxx_want_all) || defined(__glibcxx_want_type_trait_variable_templates)
│ │ │ +
525# define __cpp_lib_type_trait_variable_templates 201510L
│ │ │ +
526# endif
│ │ │ +
527# endif
│ │ │ +
528#endif /* !defined(__cpp_lib_type_trait_variable_templates) && defined(__glibcxx_want_type_trait_variable_templates) */
│ │ │ +
529#undef __glibcxx_want_type_trait_variable_templates
│ │ │ +
530
│ │ │ +
531#if !defined(__cpp_lib_variant)
│ │ │ +
532# if (__cplusplus >= 202002L) && (__cpp_concepts >= 202002L && __cpp_constexpr >= 201811L)
│ │ │ +
533# define __glibcxx_variant 202106L
│ │ │ +
534# if defined(__glibcxx_want_all) || defined(__glibcxx_want_variant)
│ │ │ +
535# define __cpp_lib_variant 202106L
│ │ │ +
536# endif
│ │ │ +
537# elif (__cplusplus >= 201703L)
│ │ │ +
538# define __glibcxx_variant 202102L
│ │ │ +
539# if defined(__glibcxx_want_all) || defined(__glibcxx_want_variant)
│ │ │ +
540# define __cpp_lib_variant 202102L
│ │ │ +
541# endif
│ │ │ +
542# endif
│ │ │ +
543#endif /* !defined(__cpp_lib_variant) && defined(__glibcxx_want_variant) */
│ │ │ +
544#undef __glibcxx_want_variant
│ │ │ +
545
│ │ │ +
546#if !defined(__cpp_lib_lcm)
│ │ │ +
547# if (__cplusplus >= 201703L)
│ │ │ +
548# define __glibcxx_lcm 201606L
│ │ │ +
549# if defined(__glibcxx_want_all) || defined(__glibcxx_want_lcm)
│ │ │ +
550# define __cpp_lib_lcm 201606L
│ │ │ +
551# endif
│ │ │ +
552# endif
│ │ │ +
553#endif /* !defined(__cpp_lib_lcm) && defined(__glibcxx_want_lcm) */
│ │ │ +
554#undef __glibcxx_want_lcm
│ │ │
555
│ │ │ -
556 protected:
│ │ │ -
557 _Link_type
│ │ │ -
558 _M_get_node()
│ │ │ -
559 { return _Alloc_traits::allocate(_M_get_Node_allocator(), 1); }
│ │ │ -
560
│ │ │ -
561 void
│ │ │ -
562 _M_put_node(_Link_type __p) _GLIBCXX_NOEXCEPT
│ │ │ -
563 { _Alloc_traits::deallocate(_M_get_Node_allocator(), __p, 1); }
│ │ │ -
564
│ │ │ -
565#if __cplusplus < 201103L
│ │ │ -
566 void
│ │ │ -
567 _M_construct_node(_Link_type __node, const value_type& __x)
│ │ │ -
568 {
│ │ │ -
569 __try
│ │ │ -
570 { get_allocator().construct(__node->_M_valptr(), __x); }
│ │ │ -
571 __catch(...)
│ │ │ -
572 {
│ │ │ -
573 _M_put_node(__node);
│ │ │ -
574 __throw_exception_again;
│ │ │ -
575 }
│ │ │ -
576 }
│ │ │ -
577
│ │ │ -
578 _Link_type
│ │ │ -
579 _M_create_node(const value_type& __x)
│ │ │ -
580 {
│ │ │ -
581 _Link_type __tmp = _M_get_node();
│ │ │ -
582 _M_construct_node(__tmp, __x);
│ │ │ -
583 return __tmp;
│ │ │ -
584 }
│ │ │ -
585#else
│ │ │ -
586 template<typename... _Args>
│ │ │ -
587 void
│ │ │ -
588 _M_construct_node(_Link_type __node, _Args&&... __args)
│ │ │ -
589 {
│ │ │ -
590 __try
│ │ │ -
591 {
│ │ │ -
592 ::new(__node) _Rb_tree_node<_Val>;
│ │ │ -
593 _Alloc_traits::construct(_M_get_Node_allocator(),
│ │ │ -
594 __node->_M_valptr(),
│ │ │ -
595 std::forward<_Args>(__args)...);
│ │ │ -
596 }
│ │ │ -
597 __catch(...)
│ │ │ -
598 {
│ │ │ -
599 __node->~_Rb_tree_node<_Val>();
│ │ │ -
600 _M_put_node(__node);
│ │ │ -
601 __throw_exception_again;
│ │ │ -
602 }
│ │ │ -
603 }
│ │ │ -
604
│ │ │ -
605 template<typename... _Args>
│ │ │ -
606 _Link_type
│ │ │ -
607 _M_create_node(_Args&&... __args)
│ │ │ -
608 {
│ │ │ -
609 _Link_type __tmp = _M_get_node();
│ │ │ -
610 _M_construct_node(__tmp, std::forward<_Args>(__args)...);
│ │ │ -
611 return __tmp;
│ │ │ -
612 }
│ │ │ -
613#endif
│ │ │ -
614
│ │ │ -
615 void
│ │ │ -
616 _M_destroy_node(_Link_type __p) _GLIBCXX_NOEXCEPT
│ │ │ -
617 {
│ │ │ -
618#if __cplusplus < 201103L
│ │ │ -
619 get_allocator().destroy(__p->_M_valptr());
│ │ │ -
620#else
│ │ │ -
621 _Alloc_traits::destroy(_M_get_Node_allocator(), __p->_M_valptr());
│ │ │ -
622 __p->~_Rb_tree_node<_Val>();
│ │ │ -
623#endif
│ │ │ -
624 }
│ │ │ -
625
│ │ │ -
626 void
│ │ │ -
627 _M_drop_node(_Link_type __p) _GLIBCXX_NOEXCEPT
│ │ │ -
628 {
│ │ │ -
629 _M_destroy_node(__p);
│ │ │ -
630 _M_put_node(__p);
│ │ │ -
631 }
│ │ │ -
632
│ │ │ -
633 template<bool _MoveValue, typename _NodeGen>
│ │ │ -
634 _Link_type
│ │ │ -
635 _M_clone_node(_Link_type __x, _NodeGen& __node_gen)
│ │ │ -
636 {
│ │ │ -
637#if __cplusplus >= 201103L
│ │ │ -
638 using _Vp = __conditional_t<_MoveValue,
│ │ │ -
639 value_type&&,
│ │ │ -
640 const value_type&>;
│ │ │ -
641#endif
│ │ │ -
642 _Link_type __tmp
│ │ │ -
643 = __node_gen(_GLIBCXX_FORWARD(_Vp, *__x->_M_valptr()));
│ │ │ -
644 __tmp->_M_color = __x->_M_color;
│ │ │ -
645 __tmp->_M_left = 0;
│ │ │ -
646 __tmp->_M_right = 0;
│ │ │ -
647 return __tmp;
│ │ │ -
648 }
│ │ │ -
649
│ │ │ -
650 protected:
│ │ │ -
651#if _GLIBCXX_INLINE_VERSION
│ │ │ -
652 template<typename _Key_compare>
│ │ │ -
653#else
│ │ │ -
654 // Unused _Is_pod_comparator is kept as it is part of mangled name.
│ │ │ -
655 template<typename _Key_compare,
│ │ │ -
656 bool /* _Is_pod_comparator */ = __is_pod(_Key_compare)>
│ │ │ -
657#endif
│ │ │ -
658 struct _Rb_tree_impl
│ │ │ -
659 : public _Node_allocator
│ │ │ -
660 , public _Rb_tree_key_compare<_Key_compare>
│ │ │ -
661 , public _Rb_tree_header
│ │ │ -
662 {
│ │ │ -
663 typedef _Rb_tree_key_compare<_Key_compare> _Base_key_compare;
│ │ │ -
664
│ │ │ -
665 _Rb_tree_impl()
│ │ │ -
666 _GLIBCXX_NOEXCEPT_IF(
│ │ │ -
667 is_nothrow_default_constructible<_Node_allocator>::value
│ │ │ -
668 && is_nothrow_default_constructible<_Base_key_compare>::value )
│ │ │ -
669 : _Node_allocator()
│ │ │ -
670 { }
│ │ │ -
671
│ │ │ -
672 _Rb_tree_impl(const _Rb_tree_impl& __x)
│ │ │ -
673 : _Node_allocator(_Alloc_traits::_S_select_on_copy(__x))
│ │ │ -
674 , _Base_key_compare(__x._M_key_compare)
│ │ │ -
675 , _Rb_tree_header()
│ │ │ -
676 { }
│ │ │ -
677
│ │ │ -
678#if __cplusplus < 201103L
│ │ │ -
679 _Rb_tree_impl(const _Key_compare& __comp, const _Node_allocator& __a)
│ │ │ -
680 : _Node_allocator(__a), _Base_key_compare(__comp)
│ │ │ -
681 { }
│ │ │ -
682#else
│ │ │ -
683 _Rb_tree_impl(_Rb_tree_impl&&)
│ │ │ -
684 noexcept( is_nothrow_move_constructible<_Base_key_compare>::value )
│ │ │ -
685 = default;
│ │ │ -
686
│ │ │ -
687 explicit
│ │ │ -
688 _Rb_tree_impl(_Node_allocator&& __a)
│ │ │ -
689 : _Node_allocator(std::move(__a))
│ │ │ -
690 { }
│ │ │ -
691
│ │ │ -
692 _Rb_tree_impl(_Rb_tree_impl&& __x, _Node_allocator&& __a)
│ │ │ -
693 : _Node_allocator(std::move(__a)),
│ │ │ -
694 _Base_key_compare(std::move(__x)),
│ │ │ -
695 _Rb_tree_header(std::move(__x))
│ │ │ -
696 { }
│ │ │ -
697
│ │ │ -
698 _Rb_tree_impl(const _Key_compare& __comp, _Node_allocator&& __a)
│ │ │ -
699 : _Node_allocator(std::move(__a)), _Base_key_compare(__comp)
│ │ │ -
700 { }
│ │ │ -
701#endif
│ │ │ -
702 };
│ │ │ -
703
│ │ │ -
704 _Rb_tree_impl<_Compare> _M_impl;
│ │ │ +
556#if !defined(__cpp_lib_gcd)
│ │ │ +
557# if (__cplusplus >= 201703L)
│ │ │ +
558# define __glibcxx_gcd 201606L
│ │ │ +
559# if defined(__glibcxx_want_all) || defined(__glibcxx_want_gcd)
│ │ │ +
560# define __cpp_lib_gcd 201606L
│ │ │ +
561# endif
│ │ │ +
562# endif
│ │ │ +
563#endif /* !defined(__cpp_lib_gcd) && defined(__glibcxx_want_gcd) */
│ │ │ +
564#undef __glibcxx_want_gcd
│ │ │ +
565
│ │ │ +
566#if !defined(__cpp_lib_gcd_lcm)
│ │ │ +
567# if (__cplusplus >= 201703L)
│ │ │ +
568# define __glibcxx_gcd_lcm 201606L
│ │ │ +
569# if defined(__glibcxx_want_all) || defined(__glibcxx_want_gcd_lcm)
│ │ │ +
570# define __cpp_lib_gcd_lcm 201606L
│ │ │ +
571# endif
│ │ │ +
572# endif
│ │ │ +
573#endif /* !defined(__cpp_lib_gcd_lcm) && defined(__glibcxx_want_gcd_lcm) */
│ │ │ +
574#undef __glibcxx_want_gcd_lcm
│ │ │ +
575
│ │ │ +
576#if !defined(__cpp_lib_raw_memory_algorithms)
│ │ │ +
577# if (__cplusplus >= 201703L)
│ │ │ +
578# define __glibcxx_raw_memory_algorithms 201606L
│ │ │ +
579# if defined(__glibcxx_want_all) || defined(__glibcxx_want_raw_memory_algorithms)
│ │ │ +
580# define __cpp_lib_raw_memory_algorithms 201606L
│ │ │ +
581# endif
│ │ │ +
582# endif
│ │ │ +
583#endif /* !defined(__cpp_lib_raw_memory_algorithms) && defined(__glibcxx_want_raw_memory_algorithms) */
│ │ │ +
584#undef __glibcxx_want_raw_memory_algorithms
│ │ │ +
585
│ │ │ +
586#if !defined(__cpp_lib_array_constexpr)
│ │ │ +
587# if (__cplusplus >= 202002L)
│ │ │ +
588# define __glibcxx_array_constexpr 201811L
│ │ │ +
589# if defined(__glibcxx_want_all) || defined(__glibcxx_want_array_constexpr)
│ │ │ +
590# define __cpp_lib_array_constexpr 201811L
│ │ │ +
591# endif
│ │ │ +
592# elif (__cplusplus >= 201703L)
│ │ │ +
593# define __glibcxx_array_constexpr 201803L
│ │ │ +
594# if defined(__glibcxx_want_all) || defined(__glibcxx_want_array_constexpr)
│ │ │ +
595# define __cpp_lib_array_constexpr 201803L
│ │ │ +
596# endif
│ │ │ +
597# endif
│ │ │ +
598#endif /* !defined(__cpp_lib_array_constexpr) && defined(__glibcxx_want_array_constexpr) */
│ │ │ +
599#undef __glibcxx_want_array_constexpr
│ │ │ +
600
│ │ │ +
601#if !defined(__cpp_lib_nonmember_container_access)
│ │ │ +
602# if (__cplusplus >= 201703L)
│ │ │ +
603# define __glibcxx_nonmember_container_access 201411L
│ │ │ +
604# if defined(__glibcxx_want_all) || defined(__glibcxx_want_nonmember_container_access)
│ │ │ +
605# define __cpp_lib_nonmember_container_access 201411L
│ │ │ +
606# endif
│ │ │ +
607# endif
│ │ │ +
608#endif /* !defined(__cpp_lib_nonmember_container_access) && defined(__glibcxx_want_nonmember_container_access) */
│ │ │ +
609#undef __glibcxx_want_nonmember_container_access
│ │ │ +
610
│ │ │ +
611#if !defined(__cpp_lib_clamp)
│ │ │ +
612# if (__cplusplus >= 201703L)
│ │ │ +
613# define __glibcxx_clamp 201603L
│ │ │ +
614# if defined(__glibcxx_want_all) || defined(__glibcxx_want_clamp)
│ │ │ +
615# define __cpp_lib_clamp 201603L
│ │ │ +
616# endif
│ │ │ +
617# endif
│ │ │ +
618#endif /* !defined(__cpp_lib_clamp) && defined(__glibcxx_want_clamp) */
│ │ │ +
619#undef __glibcxx_want_clamp
│ │ │ +
620
│ │ │ +
621#if !defined(__cpp_lib_sample)
│ │ │ +
622# if (__cplusplus >= 201703L)
│ │ │ +
623# define __glibcxx_sample 201603L
│ │ │ +
624# if defined(__glibcxx_want_all) || defined(__glibcxx_want_sample)
│ │ │ +
625# define __cpp_lib_sample 201603L
│ │ │ +
626# endif
│ │ │ +
627# endif
│ │ │ +
628#endif /* !defined(__cpp_lib_sample) && defined(__glibcxx_want_sample) */
│ │ │ +
629#undef __glibcxx_want_sample
│ │ │ +
630
│ │ │ +
631#if !defined(__cpp_lib_boyer_moore_searcher)
│ │ │ +
632# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
633# define __glibcxx_boyer_moore_searcher 201603L
│ │ │ +
634# if defined(__glibcxx_want_all) || defined(__glibcxx_want_boyer_moore_searcher)
│ │ │ +
635# define __cpp_lib_boyer_moore_searcher 201603L
│ │ │ +
636# endif
│ │ │ +
637# endif
│ │ │ +
638#endif /* !defined(__cpp_lib_boyer_moore_searcher) && defined(__glibcxx_want_boyer_moore_searcher) */
│ │ │ +
639#undef __glibcxx_want_boyer_moore_searcher
│ │ │ +
640
│ │ │ +
641#if !defined(__cpp_lib_chrono)
│ │ │ +
642# if (__cplusplus >= 202002L) && _GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED
│ │ │ +
643# define __glibcxx_chrono 201907L
│ │ │ +
644# if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono)
│ │ │ +
645# define __cpp_lib_chrono 201907L
│ │ │ +
646# endif
│ │ │ +
647# elif (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
648# define __glibcxx_chrono 201611L
│ │ │ +
649# if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono)
│ │ │ +
650# define __cpp_lib_chrono 201611L
│ │ │ +
651# endif
│ │ │ +
652# endif
│ │ │ +
653#endif /* !defined(__cpp_lib_chrono) && defined(__glibcxx_want_chrono) */
│ │ │ +
654#undef __glibcxx_want_chrono
│ │ │ +
655
│ │ │ +
656#if !defined(__cpp_lib_execution)
│ │ │ +
657# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
658# define __glibcxx_execution 201902L
│ │ │ +
659# if defined(__glibcxx_want_all) || defined(__glibcxx_want_execution)
│ │ │ +
660# define __cpp_lib_execution 201902L
│ │ │ +
661# endif
│ │ │ +
662# endif
│ │ │ +
663#endif /* !defined(__cpp_lib_execution) && defined(__glibcxx_want_execution) */
│ │ │ +
664#undef __glibcxx_want_execution
│ │ │ +
665
│ │ │ +
666#if !defined(__cpp_lib_filesystem)
│ │ │ +
667# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
668# define __glibcxx_filesystem 201703L
│ │ │ +
669# if defined(__glibcxx_want_all) || defined(__glibcxx_want_filesystem)
│ │ │ +
670# define __cpp_lib_filesystem 201703L
│ │ │ +
671# endif
│ │ │ +
672# endif
│ │ │ +
673#endif /* !defined(__cpp_lib_filesystem) && defined(__glibcxx_want_filesystem) */
│ │ │ +
674#undef __glibcxx_want_filesystem
│ │ │ +
675
│ │ │ +
676#if !defined(__cpp_lib_hypot)
│ │ │ +
677# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
678# define __glibcxx_hypot 201603L
│ │ │ +
679# if defined(__glibcxx_want_all) || defined(__glibcxx_want_hypot)
│ │ │ +
680# define __cpp_lib_hypot 201603L
│ │ │ +
681# endif
│ │ │ +
682# endif
│ │ │ +
683#endif /* !defined(__cpp_lib_hypot) && defined(__glibcxx_want_hypot) */
│ │ │ +
684#undef __glibcxx_want_hypot
│ │ │ +
685
│ │ │ +
686#if !defined(__cpp_lib_map_try_emplace)
│ │ │ +
687# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
688# define __glibcxx_map_try_emplace 201411L
│ │ │ +
689# if defined(__glibcxx_want_all) || defined(__glibcxx_want_map_try_emplace)
│ │ │ +
690# define __cpp_lib_map_try_emplace 201411L
│ │ │ +
691# endif
│ │ │ +
692# endif
│ │ │ +
693#endif /* !defined(__cpp_lib_map_try_emplace) && defined(__glibcxx_want_map_try_emplace) */
│ │ │ +
694#undef __glibcxx_want_map_try_emplace
│ │ │ +
695
│ │ │ +
696#if !defined(__cpp_lib_math_special_functions)
│ │ │ +
697# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
698# define __glibcxx_math_special_functions 201603L
│ │ │ +
699# if defined(__glibcxx_want_all) || defined(__glibcxx_want_math_special_functions)
│ │ │ +
700# define __cpp_lib_math_special_functions 201603L
│ │ │ +
701# endif
│ │ │ +
702# endif
│ │ │ +
703#endif /* !defined(__cpp_lib_math_special_functions) && defined(__glibcxx_want_math_special_functions) */
│ │ │ +
704#undef __glibcxx_want_math_special_functions
│ │ │
705
│ │ │ -
706 protected:
│ │ │ -
707 _Base_ptr&
│ │ │ -
708 _M_root() _GLIBCXX_NOEXCEPT
│ │ │ -
709 { return this->_M_impl._M_header._M_parent; }
│ │ │ -
710
│ │ │ -
711 _Const_Base_ptr
│ │ │ -
712 _M_root() const _GLIBCXX_NOEXCEPT
│ │ │ -
713 { return this->_M_impl._M_header._M_parent; }
│ │ │ -
714
│ │ │ -
715 _Base_ptr&
│ │ │ -
716 _M_leftmost() _GLIBCXX_NOEXCEPT
│ │ │ -
717 { return this->_M_impl._M_header._M_left; }
│ │ │ -
718
│ │ │ -
719 _Const_Base_ptr
│ │ │ -
720 _M_leftmost() const _GLIBCXX_NOEXCEPT
│ │ │ -
721 { return this->_M_impl._M_header._M_left; }
│ │ │ -
722
│ │ │ -
723 _Base_ptr&
│ │ │ -
724 _M_rightmost() _GLIBCXX_NOEXCEPT
│ │ │ -
725 { return this->_M_impl._M_header._M_right; }
│ │ │ -
726
│ │ │ -
727 _Const_Base_ptr
│ │ │ -
728 _M_rightmost() const _GLIBCXX_NOEXCEPT
│ │ │ -
729 { return this->_M_impl._M_header._M_right; }
│ │ │ +
706#if !defined(__cpp_lib_memory_resource)
│ │ │ +
707# if (__cplusplus >= 201703L) && defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED
│ │ │ +
708# define __glibcxx_memory_resource 201603L
│ │ │ +
709# if defined(__glibcxx_want_all) || defined(__glibcxx_want_memory_resource)
│ │ │ +
710# define __cpp_lib_memory_resource 201603L
│ │ │ +
711# endif
│ │ │ +
712# elif (__cplusplus >= 201703L) && !defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED
│ │ │ +
713# define __glibcxx_memory_resource 1L
│ │ │ +
714# if defined(__glibcxx_want_all) || defined(__glibcxx_want_memory_resource)
│ │ │ +
715# define __cpp_lib_memory_resource 1L
│ │ │ +
716# endif
│ │ │ +
717# endif
│ │ │ +
718#endif /* !defined(__cpp_lib_memory_resource) && defined(__glibcxx_want_memory_resource) */
│ │ │ +
719#undef __glibcxx_want_memory_resource
│ │ │ +
720
│ │ │ +
721#if !defined(__cpp_lib_node_extract)
│ │ │ +
722# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
723# define __glibcxx_node_extract 201606L
│ │ │ +
724# if defined(__glibcxx_want_all) || defined(__glibcxx_want_node_extract)
│ │ │ +
725# define __cpp_lib_node_extract 201606L
│ │ │ +
726# endif
│ │ │ +
727# endif
│ │ │ +
728#endif /* !defined(__cpp_lib_node_extract) && defined(__glibcxx_want_node_extract) */
│ │ │ +
729#undef __glibcxx_want_node_extract
│ │ │
730
│ │ │ -
731 _Link_type
│ │ │ -
732 _M_mbegin() const _GLIBCXX_NOEXCEPT
│ │ │ -
733 { return static_cast<_Link_type>(this->_M_impl._M_header._M_parent); }
│ │ │ -
734
│ │ │ -
735 _Link_type
│ │ │ -
736 _M_begin() _GLIBCXX_NOEXCEPT
│ │ │ -
737 { return _M_mbegin(); }
│ │ │ -
738
│ │ │ -
739 _Const_Link_type
│ │ │ -
740 _M_begin() const _GLIBCXX_NOEXCEPT
│ │ │ -
741 {
│ │ │ -
742 return static_cast<_Const_Link_type>
│ │ │ -
743 (this->_M_impl._M_header._M_parent);
│ │ │ -
744 }
│ │ │ -
745
│ │ │ -
746 _Base_ptr
│ │ │ -
747 _M_end() _GLIBCXX_NOEXCEPT
│ │ │ -
748 { return &this->_M_impl._M_header; }
│ │ │ -
749
│ │ │ -
750 _Const_Base_ptr
│ │ │ -
751 _M_end() const _GLIBCXX_NOEXCEPT
│ │ │ -
752 { return &this->_M_impl._M_header; }
│ │ │ -
753
│ │ │ -
754 static const _Key&
│ │ │ -
755 _S_key(_Const_Link_type __x)
│ │ │ -
756 {
│ │ │ -
757#if __cplusplus >= 201103L
│ │ │ -
758 // If we're asking for the key we're presumably using the comparison
│ │ │ -
759 // object, and so this is a good place to sanity check it.
│ │ │ -
760 static_assert(__is_invocable<_Compare&, const _Key&, const _Key&>{},
│ │ │ -
761 "comparison object must be invocable "
│ │ │ -
762 "with two arguments of key type");
│ │ │ -
763# if __cplusplus >= 201703L
│ │ │ -
764 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
765 // 2542. Missing const requirements for associative containers
│ │ │ -
766 if constexpr (__is_invocable<_Compare&, const _Key&, const _Key&>{})
│ │ │ -
767 static_assert(
│ │ │ -
768 is_invocable_v<const _Compare&, const _Key&, const _Key&>,
│ │ │ -
769 "comparison object must be invocable as const");
│ │ │ -
770# endif // C++17
│ │ │ -
771#endif // C++11
│ │ │ -
772
│ │ │ -
773 return _KeyOfValue()(*__x->_M_valptr());
│ │ │ -
774 }
│ │ │ -
775
│ │ │ -
776 static _Link_type
│ │ │ -
777 _S_left(_Base_ptr __x) _GLIBCXX_NOEXCEPT
│ │ │ -
778 { return static_cast<_Link_type>(__x->_M_left); }
│ │ │ -
779
│ │ │ -
780 static _Const_Link_type
│ │ │ -
781 _S_left(_Const_Base_ptr __x) _GLIBCXX_NOEXCEPT
│ │ │ -
782 { return static_cast<_Const_Link_type>(__x->_M_left); }
│ │ │ -
783
│ │ │ -
784 static _Link_type
│ │ │ -
785 _S_right(_Base_ptr __x) _GLIBCXX_NOEXCEPT
│ │ │ -
786 { return static_cast<_Link_type>(__x->_M_right); }
│ │ │ -
787
│ │ │ -
788 static _Const_Link_type
│ │ │ -
789 _S_right(_Const_Base_ptr __x) _GLIBCXX_NOEXCEPT
│ │ │ -
790 { return static_cast<_Const_Link_type>(__x->_M_right); }
│ │ │ -
791
│ │ │ -
792 static const _Key&
│ │ │ -
793 _S_key(_Const_Base_ptr __x)
│ │ │ -
794 { return _S_key(static_cast<_Const_Link_type>(__x)); }
│ │ │ -
795
│ │ │ -
796 static _Base_ptr
│ │ │ -
797 _S_minimum(_Base_ptr __x) _GLIBCXX_NOEXCEPT
│ │ │ -
798 { return _Rb_tree_node_base::_S_minimum(__x); }
│ │ │ -
799
│ │ │ -
800 static _Const_Base_ptr
│ │ │ -
801 _S_minimum(_Const_Base_ptr __x) _GLIBCXX_NOEXCEPT
│ │ │ -
802 { return _Rb_tree_node_base::_S_minimum(__x); }
│ │ │ -
803
│ │ │ -
804 static _Base_ptr
│ │ │ -
805 _S_maximum(_Base_ptr __x) _GLIBCXX_NOEXCEPT
│ │ │ -
806 { return _Rb_tree_node_base::_S_maximum(__x); }
│ │ │ -
807
│ │ │ -
808 static _Const_Base_ptr
│ │ │ -
809 _S_maximum(_Const_Base_ptr __x) _GLIBCXX_NOEXCEPT
│ │ │ -
810 { return _Rb_tree_node_base::_S_maximum(__x); }
│ │ │ -
811
│ │ │ -
812 public:
│ │ │ -
813 typedef _Rb_tree_iterator<value_type> iterator;
│ │ │ -
814 typedef _Rb_tree_const_iterator<value_type> const_iterator;
│ │ │ -
815
│ │ │ -
816 typedef std::reverse_iterator<iterator> reverse_iterator;
│ │ │ -
817 typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
│ │ │ -
818
│ │ │ -
819#ifdef __glibcxx_node_extract // >= C++17
│ │ │ -
820 using node_type = _Node_handle<_Key, _Val, _Node_allocator>;
│ │ │ -
821 using insert_return_type = _Node_insert_return<
│ │ │ -
822 __conditional_t<is_same_v<_Key, _Val>, const_iterator, iterator>,
│ │ │ -
823 node_type>;
│ │ │ -
824#endif
│ │ │ -
825
│ │ │ -
826 pair<_Base_ptr, _Base_ptr>
│ │ │ -
827 _M_get_insert_unique_pos(const key_type& __k);
│ │ │ -
828
│ │ │ -
829 pair<_Base_ptr, _Base_ptr>
│ │ │ -
830 _M_get_insert_equal_pos(const key_type& __k);
│ │ │ -
831
│ │ │ -
832 pair<_Base_ptr, _Base_ptr>
│ │ │ -
833 _M_get_insert_hint_unique_pos(const_iterator __pos,
│ │ │ -
834 const key_type& __k);
│ │ │ -
835
│ │ │ -
836 pair<_Base_ptr, _Base_ptr>
│ │ │ -
837 _M_get_insert_hint_equal_pos(const_iterator __pos,
│ │ │ -
838 const key_type& __k);
│ │ │ -
839
│ │ │ -
840 private:
│ │ │ -
841#if __cplusplus >= 201103L
│ │ │ -
842 template<typename _Arg, typename _NodeGen>
│ │ │ -
843 iterator
│ │ │ -
844 _M_insert_(_Base_ptr __x, _Base_ptr __y, _Arg&& __v, _NodeGen&);
│ │ │ -
845
│ │ │ -
846 iterator
│ │ │ -
847 _M_insert_node(_Base_ptr __x, _Base_ptr __y, _Link_type __z);
│ │ │ -
848
│ │ │ -
849 template<typename _Arg>
│ │ │ -
850 iterator
│ │ │ -
851 _M_insert_lower(_Base_ptr __y, _Arg&& __v);
│ │ │ -
852
│ │ │ -
853 template<typename _Arg>
│ │ │ -
854 iterator
│ │ │ -
855 _M_insert_equal_lower(_Arg&& __x);
│ │ │ -
856
│ │ │ -
857 iterator
│ │ │ -
858 _M_insert_lower_node(_Base_ptr __p, _Link_type __z);
│ │ │ -
859
│ │ │ -
860 iterator
│ │ │ -
861 _M_insert_equal_lower_node(_Link_type __z);
│ │ │ -
862#else
│ │ │ -
863 template<typename _NodeGen>
│ │ │ -
864 iterator
│ │ │ -
865 _M_insert_(_Base_ptr __x, _Base_ptr __y,
│ │ │ -
866 const value_type& __v, _NodeGen&);
│ │ │ -
867
│ │ │ -
868 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
869 // 233. Insertion hints in associative containers.
│ │ │ -
870 iterator
│ │ │ -
871 _M_insert_lower(_Base_ptr __y, const value_type& __v);
│ │ │ -
872
│ │ │ -
873 iterator
│ │ │ -
874 _M_insert_equal_lower(const value_type& __x);
│ │ │ -
875#endif
│ │ │ -
876
│ │ │ -
877 enum { __as_lvalue, __as_rvalue };
│ │ │ -
878
│ │ │ -
879 template<bool _MoveValues, typename _NodeGen>
│ │ │ -
880 _Link_type
│ │ │ -
881 _M_copy(_Link_type, _Base_ptr, _NodeGen&);
│ │ │ -
882
│ │ │ -
883 template<bool _MoveValues, typename _NodeGen>
│ │ │ -
884 _Link_type
│ │ │ -
885 _M_copy(const _Rb_tree& __x, _NodeGen& __gen)
│ │ │ -
886 {
│ │ │ -
887 _Link_type __root =
│ │ │ -
888 _M_copy<_MoveValues>(__x._M_mbegin(), _M_end(), __gen);
│ │ │ -
889 _M_leftmost() = _S_minimum(__root);
│ │ │ -
890 _M_rightmost() = _S_maximum(__root);
│ │ │ -
891 _M_impl._M_node_count = __x._M_impl._M_node_count;
│ │ │ -
892 return __root;
│ │ │ -
893 }
│ │ │ -
894
│ │ │ -
895 _Link_type
│ │ │ -
896 _M_copy(const _Rb_tree& __x)
│ │ │ -
897 {
│ │ │ -
898 _Alloc_node __an(*this);
│ │ │ -
899 return _M_copy<__as_lvalue>(__x, __an);
│ │ │ -
900 }
│ │ │ -
901
│ │ │ -
902 void
│ │ │ -
903 _M_erase(_Link_type __x);
│ │ │ -
904
│ │ │ -
905 iterator
│ │ │ -
906 _M_lower_bound(_Link_type __x, _Base_ptr __y,
│ │ │ -
907 const _Key& __k);
│ │ │ -
908
│ │ │ -
909 const_iterator
│ │ │ -
910 _M_lower_bound(_Const_Link_type __x, _Const_Base_ptr __y,
│ │ │ -
911 const _Key& __k) const;
│ │ │ -
912
│ │ │ -
913 iterator
│ │ │ -
914 _M_upper_bound(_Link_type __x, _Base_ptr __y,
│ │ │ -
915 const _Key& __k);
│ │ │ -
916
│ │ │ -
917 const_iterator
│ │ │ -
918 _M_upper_bound(_Const_Link_type __x, _Const_Base_ptr __y,
│ │ │ -
919 const _Key& __k) const;
│ │ │ +
731#if !defined(__cpp_lib_parallel_algorithm)
│ │ │ +
732# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
733# define __glibcxx_parallel_algorithm 201603L
│ │ │ +
734# if defined(__glibcxx_want_all) || defined(__glibcxx_want_parallel_algorithm)
│ │ │ +
735# define __cpp_lib_parallel_algorithm 201603L
│ │ │ +
736# endif
│ │ │ +
737# endif
│ │ │ +
738#endif /* !defined(__cpp_lib_parallel_algorithm) && defined(__glibcxx_want_parallel_algorithm) */
│ │ │ +
739#undef __glibcxx_want_parallel_algorithm
│ │ │ +
740
│ │ │ +
741#if !defined(__cpp_lib_scoped_lock)
│ │ │ +
742# if (__cplusplus >= 201703L)
│ │ │ +
743# define __glibcxx_scoped_lock 201703L
│ │ │ +
744# if defined(__glibcxx_want_all) || defined(__glibcxx_want_scoped_lock)
│ │ │ +
745# define __cpp_lib_scoped_lock 201703L
│ │ │ +
746# endif
│ │ │ +
747# endif
│ │ │ +
748#endif /* !defined(__cpp_lib_scoped_lock) && defined(__glibcxx_want_scoped_lock) */
│ │ │ +
749#undef __glibcxx_want_scoped_lock
│ │ │ +
750
│ │ │ +
751#if !defined(__cpp_lib_shared_mutex)
│ │ │ +
752# if (__cplusplus >= 201703L) && defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED
│ │ │ +
753# define __glibcxx_shared_mutex 201505L
│ │ │ +
754# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_mutex)
│ │ │ +
755# define __cpp_lib_shared_mutex 201505L
│ │ │ +
756# endif
│ │ │ +
757# endif
│ │ │ +
758#endif /* !defined(__cpp_lib_shared_mutex) && defined(__glibcxx_want_shared_mutex) */
│ │ │ +
759#undef __glibcxx_want_shared_mutex
│ │ │ +
760
│ │ │ +
761#if !defined(__cpp_lib_shared_ptr_weak_type)
│ │ │ +
762# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
763# define __glibcxx_shared_ptr_weak_type 201606L
│ │ │ +
764# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_ptr_weak_type)
│ │ │ +
765# define __cpp_lib_shared_ptr_weak_type 201606L
│ │ │ +
766# endif
│ │ │ +
767# endif
│ │ │ +
768#endif /* !defined(__cpp_lib_shared_ptr_weak_type) && defined(__glibcxx_want_shared_ptr_weak_type) */
│ │ │ +
769#undef __glibcxx_want_shared_ptr_weak_type
│ │ │ +
770
│ │ │ +
771#if !defined(__cpp_lib_string_view)
│ │ │ +
772# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
773# define __glibcxx_string_view 201803L
│ │ │ +
774# if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_view)
│ │ │ +
775# define __cpp_lib_string_view 201803L
│ │ │ +
776# endif
│ │ │ +
777# endif
│ │ │ +
778#endif /* !defined(__cpp_lib_string_view) && defined(__glibcxx_want_string_view) */
│ │ │ +
779#undef __glibcxx_want_string_view
│ │ │ +
780
│ │ │ +
781#if !defined(__cpp_lib_unordered_map_try_emplace)
│ │ │ +
782# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
│ │ │ +
783# define __glibcxx_unordered_map_try_emplace 201411L
│ │ │ +
784# if defined(__glibcxx_want_all) || defined(__glibcxx_want_unordered_map_try_emplace)
│ │ │ +
785# define __cpp_lib_unordered_map_try_emplace 201411L
│ │ │ +
786# endif
│ │ │ +
787# endif
│ │ │ +
788#endif /* !defined(__cpp_lib_unordered_map_try_emplace) && defined(__glibcxx_want_unordered_map_try_emplace) */
│ │ │ +
789#undef __glibcxx_want_unordered_map_try_emplace
│ │ │ +
790
│ │ │ +
791#if !defined(__cpp_lib_assume_aligned)
│ │ │ +
792# if (__cplusplus >= 202002L)
│ │ │ +
793# define __glibcxx_assume_aligned 201811L
│ │ │ +
794# if defined(__glibcxx_want_all) || defined(__glibcxx_want_assume_aligned)
│ │ │ +
795# define __cpp_lib_assume_aligned 201811L
│ │ │ +
796# endif
│ │ │ +
797# endif
│ │ │ +
798#endif /* !defined(__cpp_lib_assume_aligned) && defined(__glibcxx_want_assume_aligned) */
│ │ │ +
799#undef __glibcxx_want_assume_aligned
│ │ │ +
800
│ │ │ +
801#if !defined(__cpp_lib_atomic_flag_test)
│ │ │ +
802# if (__cplusplus >= 202002L)
│ │ │ +
803# define __glibcxx_atomic_flag_test 201907L
│ │ │ +
804# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_flag_test)
│ │ │ +
805# define __cpp_lib_atomic_flag_test 201907L
│ │ │ +
806# endif
│ │ │ +
807# endif
│ │ │ +
808#endif /* !defined(__cpp_lib_atomic_flag_test) && defined(__glibcxx_want_atomic_flag_test) */
│ │ │ +
809#undef __glibcxx_want_atomic_flag_test
│ │ │ +
810
│ │ │ +
811#if !defined(__cpp_lib_atomic_float)
│ │ │ +
812# if (__cplusplus >= 202002L)
│ │ │ +
813# define __glibcxx_atomic_float 201711L
│ │ │ +
814# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_float)
│ │ │ +
815# define __cpp_lib_atomic_float 201711L
│ │ │ +
816# endif
│ │ │ +
817# endif
│ │ │ +
818#endif /* !defined(__cpp_lib_atomic_float) && defined(__glibcxx_want_atomic_float) */
│ │ │ +
819#undef __glibcxx_want_atomic_float
│ │ │ +
820
│ │ │ +
821#if !defined(__cpp_lib_atomic_lock_free_type_aliases)
│ │ │ +
822# if (__cplusplus >= 202002L) && ((__GCC_ATOMIC_INT_LOCK_FREE | __GCC_ATOMIC_LONG_LOCK_FREE | __GCC_ATOMIC_CHAR_LOCK_FREE) & 2)
│ │ │ +
823# define __glibcxx_atomic_lock_free_type_aliases 201907L
│ │ │ +
824# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_lock_free_type_aliases)
│ │ │ +
825# define __cpp_lib_atomic_lock_free_type_aliases 201907L
│ │ │ +
826# endif
│ │ │ +
827# endif
│ │ │ +
828#endif /* !defined(__cpp_lib_atomic_lock_free_type_aliases) && defined(__glibcxx_want_atomic_lock_free_type_aliases) */
│ │ │ +
829#undef __glibcxx_want_atomic_lock_free_type_aliases
│ │ │ +
830
│ │ │ +
831#if !defined(__cpp_lib_atomic_ref)
│ │ │ +
832# if (__cplusplus >= 202002L)
│ │ │ +
833# define __glibcxx_atomic_ref 201806L
│ │ │ +
834# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_ref)
│ │ │ +
835# define __cpp_lib_atomic_ref 201806L
│ │ │ +
836# endif
│ │ │ +
837# endif
│ │ │ +
838#endif /* !defined(__cpp_lib_atomic_ref) && defined(__glibcxx_want_atomic_ref) */
│ │ │ +
839#undef __glibcxx_want_atomic_ref
│ │ │ +
840
│ │ │ +
841#if !defined(__cpp_lib_atomic_value_initialization)
│ │ │ +
842# if (__cplusplus >= 202002L)
│ │ │ +
843# define __glibcxx_atomic_value_initialization 201911L
│ │ │ +
844# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_value_initialization)
│ │ │ +
845# define __cpp_lib_atomic_value_initialization 201911L
│ │ │ +
846# endif
│ │ │ +
847# endif
│ │ │ +
848#endif /* !defined(__cpp_lib_atomic_value_initialization) && defined(__glibcxx_want_atomic_value_initialization) */
│ │ │ +
849#undef __glibcxx_want_atomic_value_initialization
│ │ │ +
850
│ │ │ +
851#if !defined(__cpp_lib_bind_front)
│ │ │ +
852# if (__cplusplus >= 202002L)
│ │ │ +
853# define __glibcxx_bind_front 201907L
│ │ │ +
854# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bind_front)
│ │ │ +
855# define __cpp_lib_bind_front 201907L
│ │ │ +
856# endif
│ │ │ +
857# endif
│ │ │ +
858#endif /* !defined(__cpp_lib_bind_front) && defined(__glibcxx_want_bind_front) */
│ │ │ +
859#undef __glibcxx_want_bind_front
│ │ │ +
860
│ │ │ +
861#if !defined(__cpp_lib_bind_back)
│ │ │ +
862# if (__cplusplus >= 202100L) && (__cpp_explicit_this_parameter)
│ │ │ +
863# define __glibcxx_bind_back 202202L
│ │ │ +
864# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bind_back)
│ │ │ +
865# define __cpp_lib_bind_back 202202L
│ │ │ +
866# endif
│ │ │ +
867# endif
│ │ │ +
868#endif /* !defined(__cpp_lib_bind_back) && defined(__glibcxx_want_bind_back) */
│ │ │ +
869#undef __glibcxx_want_bind_back
│ │ │ +
870
│ │ │ +
871#if !defined(__cpp_lib_starts_ends_with)
│ │ │ +
872# if (__cplusplus >= 202002L)
│ │ │ +
873# define __glibcxx_starts_ends_with 201711L
│ │ │ +
874# if defined(__glibcxx_want_all) || defined(__glibcxx_want_starts_ends_with)
│ │ │ +
875# define __cpp_lib_starts_ends_with 201711L
│ │ │ +
876# endif
│ │ │ +
877# endif
│ │ │ +
878#endif /* !defined(__cpp_lib_starts_ends_with) && defined(__glibcxx_want_starts_ends_with) */
│ │ │ +
879#undef __glibcxx_want_starts_ends_with
│ │ │ +
880
│ │ │ +
881#if !defined(__cpp_lib_bit_cast)
│ │ │ +
882# if (__cplusplus >= 202002L) && (__has_builtin(__builtin_bit_cast))
│ │ │ +
883# define __glibcxx_bit_cast 201806L
│ │ │ +
884# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bit_cast)
│ │ │ +
885# define __cpp_lib_bit_cast 201806L
│ │ │ +
886# endif
│ │ │ +
887# endif
│ │ │ +
888#endif /* !defined(__cpp_lib_bit_cast) && defined(__glibcxx_want_bit_cast) */
│ │ │ +
889#undef __glibcxx_want_bit_cast
│ │ │ +
890
│ │ │ +
891#if !defined(__cpp_lib_bitops)
│ │ │ +
892# if (__cplusplus >= 202002L)
│ │ │ +
893# define __glibcxx_bitops 201907L
│ │ │ +
894# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bitops)
│ │ │ +
895# define __cpp_lib_bitops 201907L
│ │ │ +
896# endif
│ │ │ +
897# endif
│ │ │ +
898#endif /* !defined(__cpp_lib_bitops) && defined(__glibcxx_want_bitops) */
│ │ │ +
899#undef __glibcxx_want_bitops
│ │ │ +
900
│ │ │ +
901#if !defined(__cpp_lib_bounded_array_traits)
│ │ │ +
902# if (__cplusplus >= 202002L)
│ │ │ +
903# define __glibcxx_bounded_array_traits 201902L
│ │ │ +
904# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bounded_array_traits)
│ │ │ +
905# define __cpp_lib_bounded_array_traits 201902L
│ │ │ +
906# endif
│ │ │ +
907# endif
│ │ │ +
908#endif /* !defined(__cpp_lib_bounded_array_traits) && defined(__glibcxx_want_bounded_array_traits) */
│ │ │ +
909#undef __glibcxx_want_bounded_array_traits
│ │ │ +
910
│ │ │ +
911#if !defined(__cpp_lib_concepts)
│ │ │ +
912# if (__cplusplus >= 202002L) && (__cpp_concepts >= 201907L)
│ │ │ +
913# define __glibcxx_concepts 202002L
│ │ │ +
914# if defined(__glibcxx_want_all) || defined(__glibcxx_want_concepts)
│ │ │ +
915# define __cpp_lib_concepts 202002L
│ │ │ +
916# endif
│ │ │ +
917# endif
│ │ │ +
918#endif /* !defined(__cpp_lib_concepts) && defined(__glibcxx_want_concepts) */
│ │ │ +
919#undef __glibcxx_want_concepts
│ │ │
920
│ │ │ -
921 public:
│ │ │ -
922 // allocation/deallocation
│ │ │ -
923#if __cplusplus < 201103L
│ │ │ -
924 _Rb_tree() { }
│ │ │ -
925#else
│ │ │ -
926 _Rb_tree() = default;
│ │ │ -
927#endif
│ │ │ -
928
│ │ │ -
929 _Rb_tree(const _Compare& __comp,
│ │ │ -
930 const allocator_type& __a = allocator_type())
│ │ │ -
931 : _M_impl(__comp, _Node_allocator(__a)) { }
│ │ │ -
932
│ │ │ -
933 _Rb_tree(const _Rb_tree& __x)
│ │ │ -
934 : _M_impl(__x._M_impl)
│ │ │ -
935 {
│ │ │ -
936 if (__x._M_root() != 0)
│ │ │ -
937 _M_root() = _M_copy(__x);
│ │ │ -
938 }
│ │ │ -
939
│ │ │ -
940#if __cplusplus >= 201103L
│ │ │ -
941 _Rb_tree(const allocator_type& __a)
│ │ │ -
942 : _M_impl(_Node_allocator(__a))
│ │ │ -
943 { }
│ │ │ -
944
│ │ │ -
945 _Rb_tree(const _Rb_tree& __x, const allocator_type& __a)
│ │ │ -
946 : _M_impl(__x._M_impl._M_key_compare, _Node_allocator(__a))
│ │ │ -
947 {
│ │ │ -
948 if (__x._M_root() != nullptr)
│ │ │ -
949 _M_root() = _M_copy(__x);
│ │ │ -
950 }
│ │ │ -
951
│ │ │ -
952 _Rb_tree(_Rb_tree&&) = default;
│ │ │ -
953
│ │ │ -
954 _Rb_tree(_Rb_tree&& __x, const allocator_type& __a)
│ │ │ -
955 : _Rb_tree(std::move(__x), _Node_allocator(__a))
│ │ │ -
956 { }
│ │ │ -
957
│ │ │ -
958 private:
│ │ │ -
959 _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a, true_type)
│ │ │ -
960 noexcept(is_nothrow_default_constructible<_Compare>::value)
│ │ │ -
961 : _M_impl(std::move(__x._M_impl), std::move(__a))
│ │ │ -
962 { }
│ │ │ -
963
│ │ │ -
964 _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a, false_type)
│ │ │ -
965 : _M_impl(__x._M_impl._M_key_compare, std::move(__a))
│ │ │ -
966 {
│ │ │ -
967 if (__x._M_root() != nullptr)
│ │ │ -
968 _M_move_data(__x, false_type{});
│ │ │ -
969 }
│ │ │ +
921#if !defined(__cpp_lib_optional)
│ │ │ +
922# if (__cplusplus >= 202100L) && (__glibcxx_concepts)
│ │ │ +
923# define __glibcxx_optional 202110L
│ │ │ +
924# if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional)
│ │ │ +
925# define __cpp_lib_optional 202110L
│ │ │ +
926# endif
│ │ │ +
927# elif (__cplusplus >= 202002L)
│ │ │ +
928# define __glibcxx_optional 202106L
│ │ │ +
929# if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional)
│ │ │ +
930# define __cpp_lib_optional 202106L
│ │ │ +
931# endif
│ │ │ +
932# elif (__cplusplus >= 201703L)
│ │ │ +
933# define __glibcxx_optional 201606L
│ │ │ +
934# if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional)
│ │ │ +
935# define __cpp_lib_optional 201606L
│ │ │ +
936# endif
│ │ │ +
937# endif
│ │ │ +
938#endif /* !defined(__cpp_lib_optional) && defined(__glibcxx_want_optional) */
│ │ │ +
939#undef __glibcxx_want_optional
│ │ │ +
940
│ │ │ +
941#if !defined(__cpp_lib_destroying_delete)
│ │ │ +
942# if (__cplusplus >= 202002L) && (__cpp_impl_destroying_delete)
│ │ │ +
943# define __glibcxx_destroying_delete 201806L
│ │ │ +
944# if defined(__glibcxx_want_all) || defined(__glibcxx_want_destroying_delete)
│ │ │ +
945# define __cpp_lib_destroying_delete 201806L
│ │ │ +
946# endif
│ │ │ +
947# endif
│ │ │ +
948#endif /* !defined(__cpp_lib_destroying_delete) && defined(__glibcxx_want_destroying_delete) */
│ │ │ +
949#undef __glibcxx_want_destroying_delete
│ │ │ +
950
│ │ │ +
951#if !defined(__cpp_lib_constexpr_string_view)
│ │ │ +
952# if (__cplusplus >= 202002L)
│ │ │ +
953# define __glibcxx_constexpr_string_view 201811L
│ │ │ +
954# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_string_view)
│ │ │ +
955# define __cpp_lib_constexpr_string_view 201811L
│ │ │ +
956# endif
│ │ │ +
957# endif
│ │ │ +
958#endif /* !defined(__cpp_lib_constexpr_string_view) && defined(__glibcxx_want_constexpr_string_view) */
│ │ │ +
959#undef __glibcxx_want_constexpr_string_view
│ │ │ +
960
│ │ │ +
961#if !defined(__cpp_lib_endian)
│ │ │ +
962# if (__cplusplus >= 202002L)
│ │ │ +
963# define __glibcxx_endian 201907L
│ │ │ +
964# if defined(__glibcxx_want_all) || defined(__glibcxx_want_endian)
│ │ │ +
965# define __cpp_lib_endian 201907L
│ │ │ +
966# endif
│ │ │ +
967# endif
│ │ │ +
968#endif /* !defined(__cpp_lib_endian) && defined(__glibcxx_want_endian) */
│ │ │ +
969#undef __glibcxx_want_endian
│ │ │
970
│ │ │ -
971 public:
│ │ │ -
972 _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a)
│ │ │ -
973 noexcept( noexcept(
│ │ │ - │ │ │ - │ │ │ -
976 : _Rb_tree(std::move(__x), std::move(__a),
│ │ │ - │ │ │ -
978 { }
│ │ │ -
979#endif
│ │ │ +
971#if !defined(__cpp_lib_int_pow2)
│ │ │ +
972# if (__cplusplus >= 202002L)
│ │ │ +
973# define __glibcxx_int_pow2 202002L
│ │ │ +
974# if defined(__glibcxx_want_all) || defined(__glibcxx_want_int_pow2)
│ │ │ +
975# define __cpp_lib_int_pow2 202002L
│ │ │ +
976# endif
│ │ │ +
977# endif
│ │ │ +
978#endif /* !defined(__cpp_lib_int_pow2) && defined(__glibcxx_want_int_pow2) */
│ │ │ +
979#undef __glibcxx_want_int_pow2
│ │ │
980
│ │ │ -
981 ~_Rb_tree() _GLIBCXX_NOEXCEPT
│ │ │ -
982 { _M_erase(_M_begin()); }
│ │ │ -
983
│ │ │ -
984 _Rb_tree&
│ │ │ -
985 operator=(const _Rb_tree& __x);
│ │ │ -
986
│ │ │ -
987 // Accessors.
│ │ │ -
988 _Compare
│ │ │ -
989 key_comp() const
│ │ │ -
990 { return _M_impl._M_key_compare; }
│ │ │ -
991
│ │ │ -
992 iterator
│ │ │ -
993 begin() _GLIBCXX_NOEXCEPT
│ │ │ -
994 { return iterator(this->_M_impl._M_header._M_left); }
│ │ │ -
995
│ │ │ -
996 const_iterator
│ │ │ -
997 begin() const _GLIBCXX_NOEXCEPT
│ │ │ -
998 { return const_iterator(this->_M_impl._M_header._M_left); }
│ │ │ -
999
│ │ │ -
1000 iterator
│ │ │ -
1001 end() _GLIBCXX_NOEXCEPT
│ │ │ -
1002 { return iterator(&this->_M_impl._M_header); }
│ │ │ -
1003
│ │ │ -
1004 const_iterator
│ │ │ -
1005 end() const _GLIBCXX_NOEXCEPT
│ │ │ -
1006 { return const_iterator(&this->_M_impl._M_header); }
│ │ │ -
1007
│ │ │ -
1008 reverse_iterator
│ │ │ -
1009 rbegin() _GLIBCXX_NOEXCEPT
│ │ │ -
1010 { return reverse_iterator(end()); }
│ │ │ -
1011
│ │ │ -
1012 const_reverse_iterator
│ │ │ -
1013 rbegin() const _GLIBCXX_NOEXCEPT
│ │ │ -
1014 { return const_reverse_iterator(end()); }
│ │ │ +
981#if !defined(__cpp_lib_integer_comparison_functions)
│ │ │ +
982# if (__cplusplus >= 202002L)
│ │ │ +
983# define __glibcxx_integer_comparison_functions 202002L
│ │ │ +
984# if defined(__glibcxx_want_all) || defined(__glibcxx_want_integer_comparison_functions)
│ │ │ +
985# define __cpp_lib_integer_comparison_functions 202002L
│ │ │ +
986# endif
│ │ │ +
987# endif
│ │ │ +
988#endif /* !defined(__cpp_lib_integer_comparison_functions) && defined(__glibcxx_want_integer_comparison_functions) */
│ │ │ +
989#undef __glibcxx_want_integer_comparison_functions
│ │ │ +
990
│ │ │ +
991#if !defined(__cpp_lib_is_constant_evaluated)
│ │ │ +
992# if (__cplusplus >= 202002L) && (defined(_GLIBCXX_HAVE_IS_CONSTANT_EVALUATED))
│ │ │ +
993# define __glibcxx_is_constant_evaluated 201811L
│ │ │ +
994# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_constant_evaluated)
│ │ │ +
995# define __cpp_lib_is_constant_evaluated 201811L
│ │ │ +
996# endif
│ │ │ +
997# endif
│ │ │ +
998#endif /* !defined(__cpp_lib_is_constant_evaluated) && defined(__glibcxx_want_is_constant_evaluated) */
│ │ │ +
999#undef __glibcxx_want_is_constant_evaluated
│ │ │ +
1000
│ │ │ +
1001#if !defined(__cpp_lib_constexpr_char_traits)
│ │ │ +
1002# if (__cplusplus >= 202002L) && (defined(__glibcxx_is_constant_evaluated))
│ │ │ +
1003# define __glibcxx_constexpr_char_traits 201811L
│ │ │ +
1004# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_char_traits)
│ │ │ +
1005# define __cpp_lib_constexpr_char_traits 201811L
│ │ │ +
1006# endif
│ │ │ +
1007# elif (__cplusplus >= 201703L) && (_GLIBCXX_HAVE_IS_CONSTANT_EVALUATED)
│ │ │ +
1008# define __glibcxx_constexpr_char_traits 201611L
│ │ │ +
1009# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_char_traits)
│ │ │ +
1010# define __cpp_lib_constexpr_char_traits 201611L
│ │ │ +
1011# endif
│ │ │ +
1012# endif
│ │ │ +
1013#endif /* !defined(__cpp_lib_constexpr_char_traits) && defined(__glibcxx_want_constexpr_char_traits) */
│ │ │ +
1014#undef __glibcxx_want_constexpr_char_traits
│ │ │
1015
│ │ │ -
1016 reverse_iterator
│ │ │ -
1017 rend() _GLIBCXX_NOEXCEPT
│ │ │ -
1018 { return reverse_iterator(begin()); }
│ │ │ -
1019
│ │ │ -
1020 const_reverse_iterator
│ │ │ -
1021 rend() const _GLIBCXX_NOEXCEPT
│ │ │ -
1022 { return const_reverse_iterator(begin()); }
│ │ │ -
1023
│ │ │ -
1024 _GLIBCXX_NODISCARD bool
│ │ │ -
1025 empty() const _GLIBCXX_NOEXCEPT
│ │ │ -
1026 { return _M_impl._M_node_count == 0; }
│ │ │ -
1027
│ │ │ -
1028 size_type
│ │ │ -
1029 size() const _GLIBCXX_NOEXCEPT
│ │ │ -
1030 { return _M_impl._M_node_count; }
│ │ │ -
1031
│ │ │ -
1032 size_type
│ │ │ -
1033 max_size() const _GLIBCXX_NOEXCEPT
│ │ │ -
1034 { return _Alloc_traits::max_size(_M_get_Node_allocator()); }
│ │ │ +
1016#if !defined(__cpp_lib_is_layout_compatible)
│ │ │ +
1017# if (__cplusplus >= 202002L) && (__has_builtin(__is_layout_compatible) && __has_builtin(__builtin_is_corresponding_member))
│ │ │ +
1018# define __glibcxx_is_layout_compatible 201907L
│ │ │ +
1019# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_layout_compatible)
│ │ │ +
1020# define __cpp_lib_is_layout_compatible 201907L
│ │ │ +
1021# endif
│ │ │ +
1022# endif
│ │ │ +
1023#endif /* !defined(__cpp_lib_is_layout_compatible) && defined(__glibcxx_want_is_layout_compatible) */
│ │ │ +
1024#undef __glibcxx_want_is_layout_compatible
│ │ │ +
1025
│ │ │ +
1026#if !defined(__cpp_lib_is_nothrow_convertible)
│ │ │ +
1027# if (__cplusplus >= 202002L)
│ │ │ +
1028# define __glibcxx_is_nothrow_convertible 201806L
│ │ │ +
1029# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_nothrow_convertible)
│ │ │ +
1030# define __cpp_lib_is_nothrow_convertible 201806L
│ │ │ +
1031# endif
│ │ │ +
1032# endif
│ │ │ +
1033#endif /* !defined(__cpp_lib_is_nothrow_convertible) && defined(__glibcxx_want_is_nothrow_convertible) */
│ │ │ +
1034#undef __glibcxx_want_is_nothrow_convertible
│ │ │
1035
│ │ │ -
1036 void
│ │ │ -
1037 swap(_Rb_tree& __t)
│ │ │ -
1038 _GLIBCXX_NOEXCEPT_IF(__is_nothrow_swappable<_Compare>::value);
│ │ │ -
1039
│ │ │ -
1040 // Insert/erase.
│ │ │ -
1041#if __cplusplus >= 201103L
│ │ │ -
1042 template<typename _Arg>
│ │ │ -
1043 pair<iterator, bool>
│ │ │ -
1044 _M_insert_unique(_Arg&& __x);
│ │ │ +
1036#if !defined(__cpp_lib_is_pointer_interconvertible)
│ │ │ +
1037# if (__cplusplus >= 202002L) && (__has_builtin(__is_pointer_interconvertible_base_of) && __has_builtin(__builtin_is_pointer_interconvertible_with_class))
│ │ │ +
1038# define __glibcxx_is_pointer_interconvertible 201907L
│ │ │ +
1039# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_pointer_interconvertible)
│ │ │ +
1040# define __cpp_lib_is_pointer_interconvertible 201907L
│ │ │ +
1041# endif
│ │ │ +
1042# endif
│ │ │ +
1043#endif /* !defined(__cpp_lib_is_pointer_interconvertible) && defined(__glibcxx_want_is_pointer_interconvertible) */
│ │ │ +
1044#undef __glibcxx_want_is_pointer_interconvertible
│ │ │
1045
│ │ │ -
1046 template<typename _Arg>
│ │ │ -
1047 iterator
│ │ │ -
1048 _M_insert_equal(_Arg&& __x);
│ │ │ -
1049
│ │ │ -
1050 template<typename _Arg, typename _NodeGen>
│ │ │ -
1051 iterator
│ │ │ -
1052 _M_insert_unique_(const_iterator __pos, _Arg&& __x, _NodeGen&);
│ │ │ -
1053
│ │ │ -
1054 template<typename _Arg>
│ │ │ -
1055 iterator
│ │ │ -
1056 _M_insert_unique_(const_iterator __pos, _Arg&& __x)
│ │ │ -
1057 {
│ │ │ -
1058 _Alloc_node __an(*this);
│ │ │ -
1059 return _M_insert_unique_(__pos, std::forward<_Arg>(__x), __an);
│ │ │ -
1060 }
│ │ │ -
1061
│ │ │ -
1062 template<typename _Arg, typename _NodeGen>
│ │ │ -
1063 iterator
│ │ │ -
1064 _M_insert_equal_(const_iterator __pos, _Arg&& __x, _NodeGen&);
│ │ │ +
1046#if !defined(__cpp_lib_math_constants)
│ │ │ +
1047# if (__cplusplus >= 202002L)
│ │ │ +
1048# define __glibcxx_math_constants 201907L
│ │ │ +
1049# if defined(__glibcxx_want_all) || defined(__glibcxx_want_math_constants)
│ │ │ +
1050# define __cpp_lib_math_constants 201907L
│ │ │ +
1051# endif
│ │ │ +
1052# endif
│ │ │ +
1053#endif /* !defined(__cpp_lib_math_constants) && defined(__glibcxx_want_math_constants) */
│ │ │ +
1054#undef __glibcxx_want_math_constants
│ │ │ +
1055
│ │ │ +
1056#if !defined(__cpp_lib_make_obj_using_allocator)
│ │ │ +
1057# if (__cplusplus >= 202002L) && (__cpp_concepts)
│ │ │ +
1058# define __glibcxx_make_obj_using_allocator 201811L
│ │ │ +
1059# if defined(__glibcxx_want_all) || defined(__glibcxx_want_make_obj_using_allocator)
│ │ │ +
1060# define __cpp_lib_make_obj_using_allocator 201811L
│ │ │ +
1061# endif
│ │ │ +
1062# endif
│ │ │ +
1063#endif /* !defined(__cpp_lib_make_obj_using_allocator) && defined(__glibcxx_want_make_obj_using_allocator) */
│ │ │ +
1064#undef __glibcxx_want_make_obj_using_allocator
│ │ │
1065
│ │ │ -
1066 template<typename _Arg>
│ │ │ -
1067 iterator
│ │ │ -
1068 _M_insert_equal_(const_iterator __pos, _Arg&& __x)
│ │ │ -
1069 {
│ │ │ -
1070 _Alloc_node __an(*this);
│ │ │ -
1071 return _M_insert_equal_(__pos, std::forward<_Arg>(__x), __an);
│ │ │ -
1072 }
│ │ │ -
1073
│ │ │ -
1074 template<typename... _Args>
│ │ │ -
1075 pair<iterator, bool>
│ │ │ -
1076 _M_emplace_unique(_Args&&... __args);
│ │ │ -
1077
│ │ │ -
1078 template<typename... _Args>
│ │ │ -
1079 iterator
│ │ │ -
1080 _M_emplace_equal(_Args&&... __args);
│ │ │ -
1081
│ │ │ -
1082 template<typename... _Args>
│ │ │ -
1083 iterator
│ │ │ -
1084 _M_emplace_hint_unique(const_iterator __pos, _Args&&... __args);
│ │ │ +
1066#if !defined(__cpp_lib_remove_cvref)
│ │ │ +
1067# if (__cplusplus >= 202002L)
│ │ │ +
1068# define __glibcxx_remove_cvref 201711L
│ │ │ +
1069# if defined(__glibcxx_want_all) || defined(__glibcxx_want_remove_cvref)
│ │ │ +
1070# define __cpp_lib_remove_cvref 201711L
│ │ │ +
1071# endif
│ │ │ +
1072# endif
│ │ │ +
1073#endif /* !defined(__cpp_lib_remove_cvref) && defined(__glibcxx_want_remove_cvref) */
│ │ │ +
1074#undef __glibcxx_want_remove_cvref
│ │ │ +
1075
│ │ │ +
1076#if !defined(__cpp_lib_source_location)
│ │ │ +
1077# if (__cplusplus >= 202002L) && (__has_builtin(__builtin_source_location))
│ │ │ +
1078# define __glibcxx_source_location 201907L
│ │ │ +
1079# if defined(__glibcxx_want_all) || defined(__glibcxx_want_source_location)
│ │ │ +
1080# define __cpp_lib_source_location 201907L
│ │ │ +
1081# endif
│ │ │ +
1082# endif
│ │ │ +
1083#endif /* !defined(__cpp_lib_source_location) && defined(__glibcxx_want_source_location) */
│ │ │ +
1084#undef __glibcxx_want_source_location
│ │ │
1085
│ │ │ -
1086 template<typename... _Args>
│ │ │ -
1087 iterator
│ │ │ -
1088 _M_emplace_hint_equal(const_iterator __pos, _Args&&... __args);
│ │ │ -
1089
│ │ │ -
1090 template<typename _Iter>
│ │ │ -
1091 using __same_value_type
│ │ │ -
1092 = is_same<value_type, typename iterator_traits<_Iter>::value_type>;
│ │ │ -
1093
│ │ │ -
1094 template<typename _InputIterator>
│ │ │ -
1095 __enable_if_t<__same_value_type<_InputIterator>::value>
│ │ │ -
1096 _M_insert_range_unique(_InputIterator __first, _InputIterator __last)
│ │ │ -
1097 {
│ │ │ -
1098 _Alloc_node __an(*this);
│ │ │ -
1099 for (; __first != __last; ++__first)
│ │ │ -
1100 _M_insert_unique_(end(), *__first, __an);
│ │ │ -
1101 }
│ │ │ -
1102
│ │ │ -
1103 template<typename _InputIterator>
│ │ │ -
1104 __enable_if_t<!__same_value_type<_InputIterator>::value>
│ │ │ -
1105 _M_insert_range_unique(_InputIterator __first, _InputIterator __last)
│ │ │ -
1106 {
│ │ │ -
1107 for (; __first != __last; ++__first)
│ │ │ -
1108 _M_emplace_unique(*__first);
│ │ │ -
1109 }
│ │ │ +
1086#if !defined(__cpp_lib_span)
│ │ │ +
1087# if (__cplusplus > 202302L) && (__glibcxx_concepts)
│ │ │ +
1088# define __glibcxx_span 202311L
│ │ │ +
1089# if defined(__glibcxx_want_all) || defined(__glibcxx_want_span)
│ │ │ +
1090# define __cpp_lib_span 202311L
│ │ │ +
1091# endif
│ │ │ +
1092# elif (__cplusplus >= 202002L) && (__glibcxx_concepts)
│ │ │ +
1093# define __glibcxx_span 202002L
│ │ │ +
1094# if defined(__glibcxx_want_all) || defined(__glibcxx_want_span)
│ │ │ +
1095# define __cpp_lib_span 202002L
│ │ │ +
1096# endif
│ │ │ +
1097# endif
│ │ │ +
1098#endif /* !defined(__cpp_lib_span) && defined(__glibcxx_want_span) */
│ │ │ +
1099#undef __glibcxx_want_span
│ │ │ +
1100
│ │ │ +
1101#if !defined(__cpp_lib_ssize)
│ │ │ +
1102# if (__cplusplus >= 202002L)
│ │ │ +
1103# define __glibcxx_ssize 201902L
│ │ │ +
1104# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ssize)
│ │ │ +
1105# define __cpp_lib_ssize 201902L
│ │ │ +
1106# endif
│ │ │ +
1107# endif
│ │ │ +
1108#endif /* !defined(__cpp_lib_ssize) && defined(__glibcxx_want_ssize) */
│ │ │ +
1109#undef __glibcxx_want_ssize
│ │ │
1110
│ │ │ -
1111 template<typename _InputIterator>
│ │ │ -
1112 __enable_if_t<__same_value_type<_InputIterator>::value>
│ │ │ -
1113 _M_insert_range_equal(_InputIterator __first, _InputIterator __last)
│ │ │ -
1114 {
│ │ │ -
1115 _Alloc_node __an(*this);
│ │ │ -
1116 for (; __first != __last; ++__first)
│ │ │ -
1117 _M_insert_equal_(end(), *__first, __an);
│ │ │ -
1118 }
│ │ │ -
1119
│ │ │ -
1120 template<typename _InputIterator>
│ │ │ -
1121 __enable_if_t<!__same_value_type<_InputIterator>::value>
│ │ │ -
1122 _M_insert_range_equal(_InputIterator __first, _InputIterator __last)
│ │ │ -
1123 {
│ │ │ -
1124 for (; __first != __last; ++__first)
│ │ │ -
1125 _M_emplace_equal(*__first);
│ │ │ -
1126 }
│ │ │ -
1127#else
│ │ │ -
1128 pair<iterator, bool>
│ │ │ -
1129 _M_insert_unique(const value_type& __x);
│ │ │ +
1111#if !defined(__cpp_lib_three_way_comparison)
│ │ │ +
1112# if (__cplusplus >= 202002L) && (__cpp_impl_three_way_comparison >= 201907L && __glibcxx_concepts)
│ │ │ +
1113# define __glibcxx_three_way_comparison 201907L
│ │ │ +
1114# if defined(__glibcxx_want_all) || defined(__glibcxx_want_three_way_comparison)
│ │ │ +
1115# define __cpp_lib_three_way_comparison 201907L
│ │ │ +
1116# endif
│ │ │ +
1117# endif
│ │ │ +
1118#endif /* !defined(__cpp_lib_three_way_comparison) && defined(__glibcxx_want_three_way_comparison) */
│ │ │ +
1119#undef __glibcxx_want_three_way_comparison
│ │ │ +
1120
│ │ │ +
1121#if !defined(__cpp_lib_to_address)
│ │ │ +
1122# if (__cplusplus >= 202002L)
│ │ │ +
1123# define __glibcxx_to_address 201711L
│ │ │ +
1124# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_address)
│ │ │ +
1125# define __cpp_lib_to_address 201711L
│ │ │ +
1126# endif
│ │ │ +
1127# endif
│ │ │ +
1128#endif /* !defined(__cpp_lib_to_address) && defined(__glibcxx_want_to_address) */
│ │ │ +
1129#undef __glibcxx_want_to_address
│ │ │
1130
│ │ │ -
1131 iterator
│ │ │ -
1132 _M_insert_equal(const value_type& __x);
│ │ │ -
1133
│ │ │ -
1134 template<typename _NodeGen>
│ │ │ -
1135 iterator
│ │ │ -
1136 _M_insert_unique_(const_iterator __pos, const value_type& __x,
│ │ │ -
1137 _NodeGen&);
│ │ │ -
1138
│ │ │ -
1139 iterator
│ │ │ -
1140 _M_insert_unique_(const_iterator __pos, const value_type& __x)
│ │ │ -
1141 {
│ │ │ -
1142 _Alloc_node __an(*this);
│ │ │ -
1143 return _M_insert_unique_(__pos, __x, __an);
│ │ │ -
1144 }
│ │ │ -
1145
│ │ │ -
1146 template<typename _NodeGen>
│ │ │ -
1147 iterator
│ │ │ -
1148 _M_insert_equal_(const_iterator __pos, const value_type& __x,
│ │ │ -
1149 _NodeGen&);
│ │ │ -
1150 iterator
│ │ │ -
1151 _M_insert_equal_(const_iterator __pos, const value_type& __x)
│ │ │ -
1152 {
│ │ │ -
1153 _Alloc_node __an(*this);
│ │ │ -
1154 return _M_insert_equal_(__pos, __x, __an);
│ │ │ -
1155 }
│ │ │ -
1156
│ │ │ -
1157 template<typename _InputIterator>
│ │ │ -
1158 void
│ │ │ -
1159 _M_insert_range_unique(_InputIterator __first, _InputIterator __last)
│ │ │ -
1160 {
│ │ │ -
1161 _Alloc_node __an(*this);
│ │ │ -
1162 for (; __first != __last; ++__first)
│ │ │ -
1163 _M_insert_unique_(end(), *__first, __an);
│ │ │ -
1164 }
│ │ │ -
1165
│ │ │ -
1166 template<typename _InputIterator>
│ │ │ -
1167 void
│ │ │ -
1168 _M_insert_range_equal(_InputIterator __first, _InputIterator __last)
│ │ │ -
1169 {
│ │ │ -
1170 _Alloc_node __an(*this);
│ │ │ -
1171 for (; __first != __last; ++__first)
│ │ │ -
1172 _M_insert_equal_(end(), *__first, __an);
│ │ │ -
1173 }
│ │ │ -
1174#endif
│ │ │ -
1175
│ │ │ -
1176 private:
│ │ │ -
1177 void
│ │ │ -
1178 _M_erase_aux(const_iterator __position);
│ │ │ -
1179
│ │ │ -
1180 void
│ │ │ -
1181 _M_erase_aux(const_iterator __first, const_iterator __last);
│ │ │ -
1182
│ │ │ -
1183 public:
│ │ │ -
1184#if __cplusplus >= 201103L
│ │ │ -
1185 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1186 // DR 130. Associative erase should return an iterator.
│ │ │ -
1187 _GLIBCXX_ABI_TAG_CXX11
│ │ │ -
1188 iterator
│ │ │ -
1189 erase(const_iterator __position)
│ │ │ -
1190 {
│ │ │ -
1191 __glibcxx_assert(__position != end());
│ │ │ -
1192 const_iterator __result = __position;
│ │ │ -
1193 ++__result;
│ │ │ -
1194 _M_erase_aux(__position);
│ │ │ -
1195 return __result._M_const_cast();
│ │ │ -
1196 }
│ │ │ -
1197
│ │ │ -
1198 // LWG 2059.
│ │ │ -
1199 _GLIBCXX_ABI_TAG_CXX11
│ │ │ -
1200 iterator
│ │ │ -
1201 erase(iterator __position)
│ │ │ -
1202 {
│ │ │ -
1203 __glibcxx_assert(__position != end());
│ │ │ -
1204 iterator __result = __position;
│ │ │ -
1205 ++__result;
│ │ │ -
1206 _M_erase_aux(__position);
│ │ │ -
1207 return __result;
│ │ │ -
1208 }
│ │ │ -
1209#else
│ │ │ -
1210 void
│ │ │ -
1211 erase(iterator __position)
│ │ │ -
1212 {
│ │ │ -
1213 __glibcxx_assert(__position != end());
│ │ │ -
1214 _M_erase_aux(__position);
│ │ │ -
1215 }
│ │ │ -
1216
│ │ │ -
1217 void
│ │ │ -
1218 erase(const_iterator __position)
│ │ │ -
1219 {
│ │ │ -
1220 __glibcxx_assert(__position != end());
│ │ │ -
1221 _M_erase_aux(__position);
│ │ │ -
1222 }
│ │ │ -
1223#endif
│ │ │ -
1224
│ │ │ -
1225 size_type
│ │ │ -
1226 erase(const key_type& __x);
│ │ │ -
1227
│ │ │ -
1228#if __cplusplus >= 201103L
│ │ │ -
1229 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
1230 // DR 130. Associative erase should return an iterator.
│ │ │ -
1231 _GLIBCXX_ABI_TAG_CXX11
│ │ │ -
1232 iterator
│ │ │ -
1233 erase(const_iterator __first, const_iterator __last)
│ │ │ -
1234 {
│ │ │ -
1235 _M_erase_aux(__first, __last);
│ │ │ -
1236 return __last._M_const_cast();
│ │ │ -
1237 }
│ │ │ -
1238#else
│ │ │ -
1239 void
│ │ │ -
1240 erase(iterator __first, iterator __last)
│ │ │ -
1241 { _M_erase_aux(__first, __last); }
│ │ │ -
1242
│ │ │ -
1243 void
│ │ │ -
1244 erase(const_iterator __first, const_iterator __last)
│ │ │ -
1245 { _M_erase_aux(__first, __last); }
│ │ │ -
1246#endif
│ │ │ -
1247
│ │ │ -
1248 void
│ │ │ -
1249 clear() _GLIBCXX_NOEXCEPT
│ │ │ -
1250 {
│ │ │ -
1251 _M_erase(_M_begin());
│ │ │ -
1252 _M_impl._M_reset();
│ │ │ -
1253 }
│ │ │ -
1254
│ │ │ -
1255 // Set operations.
│ │ │ -
1256 iterator
│ │ │ -
1257 find(const key_type& __k);
│ │ │ -
1258
│ │ │ -
1259 const_iterator
│ │ │ -
1260 find(const key_type& __k) const;
│ │ │ -
1261
│ │ │ -
1262 size_type
│ │ │ -
1263 count(const key_type& __k) const;
│ │ │ -
1264
│ │ │ -
1265 iterator
│ │ │ -
1266 lower_bound(const key_type& __k)
│ │ │ -
1267 { return _M_lower_bound(_M_begin(), _M_end(), __k); }
│ │ │ -
1268
│ │ │ -
1269 const_iterator
│ │ │ -
1270 lower_bound(const key_type& __k) const
│ │ │ -
1271 { return _M_lower_bound(_M_begin(), _M_end(), __k); }
│ │ │ -
1272
│ │ │ -
1273 iterator
│ │ │ -
1274 upper_bound(const key_type& __k)
│ │ │ -
1275 { return _M_upper_bound(_M_begin(), _M_end(), __k); }
│ │ │ -
1276
│ │ │ -
1277 const_iterator
│ │ │ -
1278 upper_bound(const key_type& __k) const
│ │ │ -
1279 { return _M_upper_bound(_M_begin(), _M_end(), __k); }
│ │ │ -
1280
│ │ │ -
1281 pair<iterator, iterator>
│ │ │ -
1282 equal_range(const key_type& __k);
│ │ │ -
1283
│ │ │ -
1284 pair<const_iterator, const_iterator>
│ │ │ -
1285 equal_range(const key_type& __k) const;
│ │ │ -
1286
│ │ │ -
1287#if __cplusplus >= 201402L
│ │ │ -
1288 template<typename _Kt,
│ │ │ -
1289 typename _Req = __has_is_transparent_t<_Compare, _Kt>>
│ │ │ -
1290 iterator
│ │ │ -
1291 _M_find_tr(const _Kt& __k)
│ │ │ -
1292 {
│ │ │ -
1293 const _Rb_tree* __const_this = this;
│ │ │ -
1294 return __const_this->_M_find_tr(__k)._M_const_cast();
│ │ │ -
1295 }
│ │ │ -
1296
│ │ │ -
1297 template<typename _Kt,
│ │ │ -
1298 typename _Req = __has_is_transparent_t<_Compare, _Kt>>
│ │ │ -
1299 const_iterator
│ │ │ -
1300 _M_find_tr(const _Kt& __k) const
│ │ │ -
1301 {
│ │ │ -
1302 auto __j = _M_lower_bound_tr(__k);
│ │ │ -
1303 if (__j != end() && _M_impl._M_key_compare(__k, _S_key(__j._M_node)))
│ │ │ -
1304 __j = end();
│ │ │ -
1305 return __j;
│ │ │ -
1306 }
│ │ │ -
1307
│ │ │ -
1308 template<typename _Kt,
│ │ │ -
1309 typename _Req = __has_is_transparent_t<_Compare, _Kt>>
│ │ │ -
1310 size_type
│ │ │ -
1311 _M_count_tr(const _Kt& __k) const
│ │ │ -
1312 {
│ │ │ -
1313 auto __p = _M_equal_range_tr(__k);
│ │ │ -
1314 return std::distance(__p.first, __p.second);
│ │ │ -
1315 }
│ │ │ -
1316
│ │ │ -
1317 template<typename _Kt,
│ │ │ -
1318 typename _Req = __has_is_transparent_t<_Compare, _Kt>>
│ │ │ -
1319 iterator
│ │ │ -
1320 _M_lower_bound_tr(const _Kt& __k)
│ │ │ -
1321 {
│ │ │ -
1322 const _Rb_tree* __const_this = this;
│ │ │ -
1323 return __const_this->_M_lower_bound_tr(__k)._M_const_cast();
│ │ │ -
1324 }
│ │ │ -
1325
│ │ │ -
1326 template<typename _Kt,
│ │ │ -
1327 typename _Req = __has_is_transparent_t<_Compare, _Kt>>
│ │ │ -
1328 const_iterator
│ │ │ -
1329 _M_lower_bound_tr(const _Kt& __k) const
│ │ │ -
1330 {
│ │ │ -
1331 auto __x = _M_begin();
│ │ │ -
1332 auto __y = _M_end();
│ │ │ -
1333 while (__x != 0)
│ │ │ -
1334 if (!_M_impl._M_key_compare(_S_key(__x), __k))
│ │ │ -
1335 {
│ │ │ -
1336 __y = __x;
│ │ │ -
1337 __x = _S_left(__x);
│ │ │ -
1338 }
│ │ │ -
1339 else
│ │ │ -
1340 __x = _S_right(__x);
│ │ │ -
1341 return const_iterator(__y);
│ │ │ -
1342 }
│ │ │ -
1343
│ │ │ -
1344 template<typename _Kt,
│ │ │ -
1345 typename _Req = __has_is_transparent_t<_Compare, _Kt>>
│ │ │ -
1346 iterator
│ │ │ -
1347 _M_upper_bound_tr(const _Kt& __k)
│ │ │ -
1348 {
│ │ │ -
1349 const _Rb_tree* __const_this = this;
│ │ │ -
1350 return __const_this->_M_upper_bound_tr(__k)._M_const_cast();
│ │ │ -
1351 }
│ │ │ -
1352
│ │ │ -
1353 template<typename _Kt,
│ │ │ -
1354 typename _Req = __has_is_transparent_t<_Compare, _Kt>>
│ │ │ -
1355 const_iterator
│ │ │ -
1356 _M_upper_bound_tr(const _Kt& __k) const
│ │ │ -
1357 {
│ │ │ -
1358 auto __x = _M_begin();
│ │ │ -
1359 auto __y = _M_end();
│ │ │ -
1360 while (__x != 0)
│ │ │ -
1361 if (_M_impl._M_key_compare(__k, _S_key(__x)))
│ │ │ -
1362 {
│ │ │ -
1363 __y = __x;
│ │ │ -
1364 __x = _S_left(__x);
│ │ │ -
1365 }
│ │ │ -
1366 else
│ │ │ -
1367 __x = _S_right(__x);
│ │ │ -
1368 return const_iterator(__y);
│ │ │ -
1369 }
│ │ │ +
1131#if !defined(__cpp_lib_to_array)
│ │ │ +
1132# if (__cplusplus >= 202002L) && (__cpp_generic_lambdas >= 201707L)
│ │ │ +
1133# define __glibcxx_to_array 201907L
│ │ │ +
1134# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_array)
│ │ │ +
1135# define __cpp_lib_to_array 201907L
│ │ │ +
1136# endif
│ │ │ +
1137# endif
│ │ │ +
1138#endif /* !defined(__cpp_lib_to_array) && defined(__glibcxx_want_to_array) */
│ │ │ +
1139#undef __glibcxx_want_to_array
│ │ │ +
1140
│ │ │ +
1141#if !defined(__cpp_lib_type_identity)
│ │ │ +
1142# if (__cplusplus >= 202002L)
│ │ │ +
1143# define __glibcxx_type_identity 201806L
│ │ │ +
1144# if defined(__glibcxx_want_all) || defined(__glibcxx_want_type_identity)
│ │ │ +
1145# define __cpp_lib_type_identity 201806L
│ │ │ +
1146# endif
│ │ │ +
1147# endif
│ │ │ +
1148#endif /* !defined(__cpp_lib_type_identity) && defined(__glibcxx_want_type_identity) */
│ │ │ +
1149#undef __glibcxx_want_type_identity
│ │ │ +
1150
│ │ │ +
1151#if !defined(__cpp_lib_unwrap_ref)
│ │ │ +
1152# if (__cplusplus >= 202002L)
│ │ │ +
1153# define __glibcxx_unwrap_ref 201811L
│ │ │ +
1154# if defined(__glibcxx_want_all) || defined(__glibcxx_want_unwrap_ref)
│ │ │ +
1155# define __cpp_lib_unwrap_ref 201811L
│ │ │ +
1156# endif
│ │ │ +
1157# endif
│ │ │ +
1158#endif /* !defined(__cpp_lib_unwrap_ref) && defined(__glibcxx_want_unwrap_ref) */
│ │ │ +
1159#undef __glibcxx_want_unwrap_ref
│ │ │ +
1160
│ │ │ +
1161#if !defined(__cpp_lib_constexpr_iterator)
│ │ │ +
1162# if (__cplusplus >= 202002L)
│ │ │ +
1163# define __glibcxx_constexpr_iterator 201811L
│ │ │ +
1164# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_iterator)
│ │ │ +
1165# define __cpp_lib_constexpr_iterator 201811L
│ │ │ +
1166# endif
│ │ │ +
1167# endif
│ │ │ +
1168#endif /* !defined(__cpp_lib_constexpr_iterator) && defined(__glibcxx_want_constexpr_iterator) */
│ │ │ +
1169#undef __glibcxx_want_constexpr_iterator
│ │ │ +
1170
│ │ │ +
1171#if !defined(__cpp_lib_interpolate)
│ │ │ +
1172# if (__cplusplus >= 202002L)
│ │ │ +
1173# define __glibcxx_interpolate 201902L
│ │ │ +
1174# if defined(__glibcxx_want_all) || defined(__glibcxx_want_interpolate)
│ │ │ +
1175# define __cpp_lib_interpolate 201902L
│ │ │ +
1176# endif
│ │ │ +
1177# endif
│ │ │ +
1178#endif /* !defined(__cpp_lib_interpolate) && defined(__glibcxx_want_interpolate) */
│ │ │ +
1179#undef __glibcxx_want_interpolate
│ │ │ +
1180
│ │ │ +
1181#if !defined(__cpp_lib_constexpr_utility)
│ │ │ +
1182# if (__cplusplus >= 202002L)
│ │ │ +
1183# define __glibcxx_constexpr_utility 201811L
│ │ │ +
1184# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_utility)
│ │ │ +
1185# define __cpp_lib_constexpr_utility 201811L
│ │ │ +
1186# endif
│ │ │ +
1187# endif
│ │ │ +
1188#endif /* !defined(__cpp_lib_constexpr_utility) && defined(__glibcxx_want_constexpr_utility) */
│ │ │ +
1189#undef __glibcxx_want_constexpr_utility
│ │ │ +
1190
│ │ │ +
1191#if !defined(__cpp_lib_shift)
│ │ │ +
1192# if (__cplusplus >= 202002L)
│ │ │ +
1193# define __glibcxx_shift 201806L
│ │ │ +
1194# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shift)
│ │ │ +
1195# define __cpp_lib_shift 201806L
│ │ │ +
1196# endif
│ │ │ +
1197# endif
│ │ │ +
1198#endif /* !defined(__cpp_lib_shift) && defined(__glibcxx_want_shift) */
│ │ │ +
1199#undef __glibcxx_want_shift
│ │ │ +
1200
│ │ │ +
1201#if !defined(__cpp_lib_ranges)
│ │ │ +
1202# if (__cplusplus > 202302L) && (__glibcxx_concepts)
│ │ │ +
1203# define __glibcxx_ranges 202406L
│ │ │ +
1204# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges)
│ │ │ +
1205# define __cpp_lib_ranges 202406L
│ │ │ +
1206# endif
│ │ │ +
1207# elif (__cplusplus >= 202100L) && (__glibcxx_concepts)
│ │ │ +
1208# define __glibcxx_ranges 202302L
│ │ │ +
1209# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges)
│ │ │ +
1210# define __cpp_lib_ranges 202302L
│ │ │ +
1211# endif
│ │ │ +
1212# elif (__cplusplus >= 202002L) && (__glibcxx_concepts)
│ │ │ +
1213# define __glibcxx_ranges 202110L
│ │ │ +
1214# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges)
│ │ │ +
1215# define __cpp_lib_ranges 202110L
│ │ │ +
1216# endif
│ │ │ +
1217# endif
│ │ │ +
1218#endif /* !defined(__cpp_lib_ranges) && defined(__glibcxx_want_ranges) */
│ │ │ +
1219#undef __glibcxx_want_ranges
│ │ │ +
1220
│ │ │ +
1221#if !defined(__cpp_lib_constexpr_numeric)
│ │ │ +
1222# if (__cplusplus >= 202002L)
│ │ │ +
1223# define __glibcxx_constexpr_numeric 201911L
│ │ │ +
1224# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_numeric)
│ │ │ +
1225# define __cpp_lib_constexpr_numeric 201911L
│ │ │ +
1226# endif
│ │ │ +
1227# endif
│ │ │ +
1228#endif /* !defined(__cpp_lib_constexpr_numeric) && defined(__glibcxx_want_constexpr_numeric) */
│ │ │ +
1229#undef __glibcxx_want_constexpr_numeric
│ │ │ +
1230
│ │ │ +
1231#if !defined(__cpp_lib_constexpr_functional)
│ │ │ +
1232# if (__cplusplus >= 202002L)
│ │ │ +
1233# define __glibcxx_constexpr_functional 201907L
│ │ │ +
1234# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_functional)
│ │ │ +
1235# define __cpp_lib_constexpr_functional 201907L
│ │ │ +
1236# endif
│ │ │ +
1237# endif
│ │ │ +
1238#endif /* !defined(__cpp_lib_constexpr_functional) && defined(__glibcxx_want_constexpr_functional) */
│ │ │ +
1239#undef __glibcxx_want_constexpr_functional
│ │ │ +
1240
│ │ │ +
1241#if !defined(__cpp_lib_constexpr_algorithms)
│ │ │ +
1242# if (__cplusplus >= 202002L)
│ │ │ +
1243# define __glibcxx_constexpr_algorithms 201806L
│ │ │ +
1244# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_algorithms)
│ │ │ +
1245# define __cpp_lib_constexpr_algorithms 201806L
│ │ │ +
1246# endif
│ │ │ +
1247# endif
│ │ │ +
1248#endif /* !defined(__cpp_lib_constexpr_algorithms) && defined(__glibcxx_want_constexpr_algorithms) */
│ │ │ +
1249#undef __glibcxx_want_constexpr_algorithms
│ │ │ +
1250
│ │ │ +
1251#if !defined(__cpp_lib_constexpr_tuple)
│ │ │ +
1252# if (__cplusplus >= 202002L)
│ │ │ +
1253# define __glibcxx_constexpr_tuple 201811L
│ │ │ +
1254# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_tuple)
│ │ │ +
1255# define __cpp_lib_constexpr_tuple 201811L
│ │ │ +
1256# endif
│ │ │ +
1257# endif
│ │ │ +
1258#endif /* !defined(__cpp_lib_constexpr_tuple) && defined(__glibcxx_want_constexpr_tuple) */
│ │ │ +
1259#undef __glibcxx_want_constexpr_tuple
│ │ │ +
1260
│ │ │ +
1261#if !defined(__cpp_lib_constexpr_memory)
│ │ │ +
1262# if (__cplusplus >= 202100L) && (__cpp_constexpr_dynamic_alloc)
│ │ │ +
1263# define __glibcxx_constexpr_memory 202202L
│ │ │ +
1264# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_memory)
│ │ │ +
1265# define __cpp_lib_constexpr_memory 202202L
│ │ │ +
1266# endif
│ │ │ +
1267# elif (__cplusplus >= 202002L)
│ │ │ +
1268# define __glibcxx_constexpr_memory 201811L
│ │ │ +
1269# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_memory)
│ │ │ +
1270# define __cpp_lib_constexpr_memory 201811L
│ │ │ +
1271# endif
│ │ │ +
1272# endif
│ │ │ +
1273#endif /* !defined(__cpp_lib_constexpr_memory) && defined(__glibcxx_want_constexpr_memory) */
│ │ │ +
1274#undef __glibcxx_want_constexpr_memory
│ │ │ +
1275
│ │ │ +
1276#if !defined(__cpp_lib_atomic_shared_ptr)
│ │ │ +
1277# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
│ │ │ +
1278# define __glibcxx_atomic_shared_ptr 201711L
│ │ │ +
1279# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_shared_ptr)
│ │ │ +
1280# define __cpp_lib_atomic_shared_ptr 201711L
│ │ │ +
1281# endif
│ │ │ +
1282# endif
│ │ │ +
1283#endif /* !defined(__cpp_lib_atomic_shared_ptr) && defined(__glibcxx_want_atomic_shared_ptr) */
│ │ │ +
1284#undef __glibcxx_want_atomic_shared_ptr
│ │ │ +
1285
│ │ │ +
1286#if !defined(__cpp_lib_atomic_wait)
│ │ │ +
1287# if (__cplusplus >= 202002L) && defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED
│ │ │ +
1288# define __glibcxx_atomic_wait 201907L
│ │ │ +
1289# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_wait)
│ │ │ +
1290# define __cpp_lib_atomic_wait 201907L
│ │ │ +
1291# endif
│ │ │ +
1292# elif (__cplusplus >= 202002L) && !defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED && (defined(_GLIBCXX_HAVE_LINUX_FUTEX))
│ │ │ +
1293# define __glibcxx_atomic_wait 201907L
│ │ │ +
1294# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_wait)
│ │ │ +
1295# define __cpp_lib_atomic_wait 201907L
│ │ │ +
1296# endif
│ │ │ +
1297# endif
│ │ │ +
1298#endif /* !defined(__cpp_lib_atomic_wait) && defined(__glibcxx_want_atomic_wait) */
│ │ │ +
1299#undef __glibcxx_want_atomic_wait
│ │ │ +
1300
│ │ │ +
1301#if !defined(__cpp_lib_barrier)
│ │ │ +
1302# if (__cplusplus >= 202002L) && (__cpp_aligned_new && __glibcxx_atomic_wait)
│ │ │ +
1303# define __glibcxx_barrier 201907L
│ │ │ +
1304# if defined(__glibcxx_want_all) || defined(__glibcxx_want_barrier)
│ │ │ +
1305# define __cpp_lib_barrier 201907L
│ │ │ +
1306# endif
│ │ │ +
1307# endif
│ │ │ +
1308#endif /* !defined(__cpp_lib_barrier) && defined(__glibcxx_want_barrier) */
│ │ │ +
1309#undef __glibcxx_want_barrier
│ │ │ +
1310
│ │ │ +
1311#if !defined(__cpp_lib_format)
│ │ │ +
1312# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
│ │ │ +
1313# define __glibcxx_format 202110L
│ │ │ +
1314# if defined(__glibcxx_want_all) || defined(__glibcxx_want_format)
│ │ │ +
1315# define __cpp_lib_format 202110L
│ │ │ +
1316# endif
│ │ │ +
1317# endif
│ │ │ +
1318#endif /* !defined(__cpp_lib_format) && defined(__glibcxx_want_format) */
│ │ │ +
1319#undef __glibcxx_want_format
│ │ │ +
1320
│ │ │ +
1321#if !defined(__cpp_lib_format_uchar)
│ │ │ +
1322# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
│ │ │ +
1323# define __glibcxx_format_uchar 202311L
│ │ │ +
1324# if defined(__glibcxx_want_all) || defined(__glibcxx_want_format_uchar)
│ │ │ +
1325# define __cpp_lib_format_uchar 202311L
│ │ │ +
1326# endif
│ │ │ +
1327# endif
│ │ │ +
1328#endif /* !defined(__cpp_lib_format_uchar) && defined(__glibcxx_want_format_uchar) */
│ │ │ +
1329#undef __glibcxx_want_format_uchar
│ │ │ +
1330
│ │ │ +
1331#if !defined(__cpp_lib_constexpr_complex)
│ │ │ +
1332# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
│ │ │ +
1333# define __glibcxx_constexpr_complex 201711L
│ │ │ +
1334# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_complex)
│ │ │ +
1335# define __cpp_lib_constexpr_complex 201711L
│ │ │ +
1336# endif
│ │ │ +
1337# endif
│ │ │ +
1338#endif /* !defined(__cpp_lib_constexpr_complex) && defined(__glibcxx_want_constexpr_complex) */
│ │ │ +
1339#undef __glibcxx_want_constexpr_complex
│ │ │ +
1340
│ │ │ +
1341#if !defined(__cpp_lib_constexpr_dynamic_alloc)
│ │ │ +
1342# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
│ │ │ +
1343# define __glibcxx_constexpr_dynamic_alloc 201907L
│ │ │ +
1344# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_dynamic_alloc)
│ │ │ +
1345# define __cpp_lib_constexpr_dynamic_alloc 201907L
│ │ │ +
1346# endif
│ │ │ +
1347# endif
│ │ │ +
1348#endif /* !defined(__cpp_lib_constexpr_dynamic_alloc) && defined(__glibcxx_want_constexpr_dynamic_alloc) */
│ │ │ +
1349#undef __glibcxx_want_constexpr_dynamic_alloc
│ │ │ +
1350
│ │ │ +
1351#if !defined(__cpp_lib_constexpr_string)
│ │ │ +
1352# if (__cplusplus >= 202002L) && _GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED && (defined(__glibcxx_is_constant_evaluated))
│ │ │ +
1353# define __glibcxx_constexpr_string 201907L
│ │ │ +
1354# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_string)
│ │ │ +
1355# define __cpp_lib_constexpr_string 201907L
│ │ │ +
1356# endif
│ │ │ +
1357# elif (__cplusplus >= 202002L) && !_GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED && (defined(__glibcxx_is_constant_evaluated))
│ │ │ +
1358# define __glibcxx_constexpr_string 201811L
│ │ │ +
1359# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_string)
│ │ │ +
1360# define __cpp_lib_constexpr_string 201811L
│ │ │ +
1361# endif
│ │ │ +
1362# elif (__cplusplus >= 201703L) && _GLIBCXX_HOSTED && (_GLIBCXX_HAVE_IS_CONSTANT_EVALUATED)
│ │ │ +
1363# define __glibcxx_constexpr_string 201611L
│ │ │ +
1364# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_string)
│ │ │ +
1365# define __cpp_lib_constexpr_string 201611L
│ │ │ +
1366# endif
│ │ │ +
1367# endif
│ │ │ +
1368#endif /* !defined(__cpp_lib_constexpr_string) && defined(__glibcxx_want_constexpr_string) */
│ │ │ +
1369#undef __glibcxx_want_constexpr_string
│ │ │
1370
│ │ │ -
1371 template<typename _Kt,
│ │ │ -
1372 typename _Req = __has_is_transparent_t<_Compare, _Kt>>
│ │ │ -
1373 pair<iterator, iterator>
│ │ │ -
1374 _M_equal_range_tr(const _Kt& __k)
│ │ │ -
1375 {
│ │ │ -
1376 const _Rb_tree* __const_this = this;
│ │ │ -
1377 auto __ret = __const_this->_M_equal_range_tr(__k);
│ │ │ -
1378 return { __ret.first._M_const_cast(), __ret.second._M_const_cast() };
│ │ │ -
1379 }
│ │ │ +
1371#if !defined(__cpp_lib_constexpr_vector)
│ │ │ +
1372# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
│ │ │ +
1373# define __glibcxx_constexpr_vector 201907L
│ │ │ +
1374# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_vector)
│ │ │ +
1375# define __cpp_lib_constexpr_vector 201907L
│ │ │ +
1376# endif
│ │ │ +
1377# endif
│ │ │ +
1378#endif /* !defined(__cpp_lib_constexpr_vector) && defined(__glibcxx_want_constexpr_vector) */
│ │ │ +
1379#undef __glibcxx_want_constexpr_vector
│ │ │
1380
│ │ │ -
1381 template<typename _Kt,
│ │ │ -
1382 typename _Req = __has_is_transparent_t<_Compare, _Kt>>
│ │ │ -
1383 pair<const_iterator, const_iterator>
│ │ │ -
1384 _M_equal_range_tr(const _Kt& __k) const
│ │ │ -
1385 {
│ │ │ -
1386 auto __low = _M_lower_bound_tr(__k);
│ │ │ -
1387 auto __high = __low;
│ │ │ -
1388 auto& __cmp = _M_impl._M_key_compare;
│ │ │ -
1389 while (__high != end() && !__cmp(__k, _S_key(__high._M_node)))
│ │ │ -
1390 ++__high;
│ │ │ -
1391 return { __low, __high };
│ │ │ -
1392 }
│ │ │ -
1393#endif
│ │ │ -
1394
│ │ │ -
1395 // Debugging.
│ │ │ -
1396 bool
│ │ │ -
1397 __rb_verify() const;
│ │ │ -
1398
│ │ │ -
1399#if __cplusplus >= 201103L
│ │ │ -
1400 _Rb_tree&
│ │ │ -
1401 operator=(_Rb_tree&&)
│ │ │ -
1402 noexcept(_Alloc_traits::_S_nothrow_move()
│ │ │ -
1403 && is_nothrow_move_assignable<_Compare>::value);
│ │ │ -
1404
│ │ │ -
1405 template<typename _Iterator>
│ │ │ -
1406 void
│ │ │ -
1407 _M_assign_unique(_Iterator, _Iterator);
│ │ │ -
1408
│ │ │ -
1409 template<typename _Iterator>
│ │ │ -
1410 void
│ │ │ -
1411 _M_assign_equal(_Iterator, _Iterator);
│ │ │ -
1412
│ │ │ -
1413 private:
│ │ │ -
1414 // Move elements from container with equal allocator.
│ │ │ -
1415 void
│ │ │ -
1416 _M_move_data(_Rb_tree& __x, true_type)
│ │ │ -
1417 { _M_impl._M_move_data(__x._M_impl); }
│ │ │ -
1418
│ │ │ -
1419 // Move elements from container with possibly non-equal allocator,
│ │ │ -
1420 // which might result in a copy not a move.
│ │ │ -
1421 void
│ │ │ -
1422 _M_move_data(_Rb_tree&, false_type);
│ │ │ -
1423
│ │ │ -
1424 // Move assignment from container with equal allocator.
│ │ │ -
1425 void
│ │ │ -
1426 _M_move_assign(_Rb_tree&, true_type);
│ │ │ -
1427
│ │ │ -
1428 // Move assignment from container with possibly non-equal allocator,
│ │ │ -
1429 // which might result in a copy not a move.
│ │ │ -
1430 void
│ │ │ -
1431 _M_move_assign(_Rb_tree&, false_type);
│ │ │ -
1432#endif
│ │ │ -
1433
│ │ │ -
1434#if __glibcxx_node_extract // >= C++17
│ │ │ -
1435 public:
│ │ │ -
1436 /// Re-insert an extracted node.
│ │ │ -
1437 insert_return_type
│ │ │ -
1438 _M_reinsert_node_unique(node_type&& __nh)
│ │ │ -
1439 {
│ │ │ -
1440 insert_return_type __ret;
│ │ │ -
1441 if (__nh.empty())
│ │ │ -
1442 __ret.position = end();
│ │ │ -
1443 else
│ │ │ -
1444 {
│ │ │ -
1445 __glibcxx_assert(_M_get_Node_allocator() == *__nh._M_alloc);
│ │ │ -
1446
│ │ │ -
1447 auto __res = _M_get_insert_unique_pos(__nh._M_key());
│ │ │ -
1448 if (__res.second)
│ │ │ -
1449 {
│ │ │ -
1450 __ret.position
│ │ │ -
1451 = _M_insert_node(__res.first, __res.second, __nh._M_ptr);
│ │ │ -
1452 __nh.release();
│ │ │ -
1453 __ret.inserted = true;
│ │ │ -
1454 }
│ │ │ -
1455 else
│ │ │ -
1456 {
│ │ │ -
1457 __ret.node = std::move(__nh);
│ │ │ -
1458 __ret.position = iterator(__res.first);
│ │ │ -
1459 __ret.inserted = false;
│ │ │ -
1460 }
│ │ │ -
1461 }
│ │ │ -
1462 return __ret;
│ │ │ -
1463 }
│ │ │ -
1464
│ │ │ -
1465 /// Re-insert an extracted node.
│ │ │ -
1466 iterator
│ │ │ -
1467 _M_reinsert_node_equal(node_type&& __nh)
│ │ │ -
1468 {
│ │ │ -
1469 iterator __ret;
│ │ │ -
1470 if (__nh.empty())
│ │ │ -
1471 __ret = end();
│ │ │ -
1472 else
│ │ │ -
1473 {
│ │ │ -
1474 __glibcxx_assert(_M_get_Node_allocator() == *__nh._M_alloc);
│ │ │ -
1475 auto __res = _M_get_insert_equal_pos(__nh._M_key());
│ │ │ -
1476 if (__res.second)
│ │ │ -
1477 __ret = _M_insert_node(__res.first, __res.second, __nh._M_ptr);
│ │ │ -
1478 else
│ │ │ -
1479 __ret = _M_insert_equal_lower_node(__nh._M_ptr);
│ │ │ -
1480 __nh.release();
│ │ │ -
1481 }
│ │ │ -
1482 return __ret;
│ │ │ -
1483 }
│ │ │ -
1484
│ │ │ -
1485 /// Re-insert an extracted node.
│ │ │ -
1486 iterator
│ │ │ -
1487 _M_reinsert_node_hint_unique(const_iterator __hint, node_type&& __nh)
│ │ │ -
1488 {
│ │ │ -
1489 iterator __ret;
│ │ │ -
1490 if (__nh.empty())
│ │ │ -
1491 __ret = end();
│ │ │ -
1492 else
│ │ │ -
1493 {
│ │ │ -
1494 __glibcxx_assert(_M_get_Node_allocator() == *__nh._M_alloc);
│ │ │ -
1495 auto __res = _M_get_insert_hint_unique_pos(__hint, __nh._M_key());
│ │ │ -
1496 if (__res.second)
│ │ │ -
1497 {
│ │ │ -
1498 __ret = _M_insert_node(__res.first, __res.second, __nh._M_ptr);
│ │ │ -
1499 __nh.release();
│ │ │ -
1500 }
│ │ │ -
1501 else
│ │ │ -
1502 __ret = iterator(__res.first);
│ │ │ -
1503 }
│ │ │ -
1504 return __ret;
│ │ │ -
1505 }
│ │ │ -
1506
│ │ │ -
1507 /// Re-insert an extracted node.
│ │ │ -
1508 iterator
│ │ │ -
1509 _M_reinsert_node_hint_equal(const_iterator __hint, node_type&& __nh)
│ │ │ -
1510 {
│ │ │ -
1511 iterator __ret;
│ │ │ -
1512 if (__nh.empty())
│ │ │ -
1513 __ret = end();
│ │ │ -
1514 else
│ │ │ -
1515 {
│ │ │ -
1516 __glibcxx_assert(_M_get_Node_allocator() == *__nh._M_alloc);
│ │ │ -
1517 auto __res = _M_get_insert_hint_equal_pos(__hint, __nh._M_key());
│ │ │ -
1518 if (__res.second)
│ │ │ -
1519 __ret = _M_insert_node(__res.first, __res.second, __nh._M_ptr);
│ │ │ -
1520 else
│ │ │ -
1521 __ret = _M_insert_equal_lower_node(__nh._M_ptr);
│ │ │ -
1522 __nh.release();
│ │ │ -
1523 }
│ │ │ -
1524 return __ret;
│ │ │ -
1525 }
│ │ │ -
1526
│ │ │ -
1527 /// Extract a node.
│ │ │ -
1528 node_type
│ │ │ -
1529 extract(const_iterator __pos)
│ │ │ -
1530 {
│ │ │ -
1531 auto __ptr = _Rb_tree_rebalance_for_erase(
│ │ │ -
1532 __pos._M_const_cast()._M_node, _M_impl._M_header);
│ │ │ -
1533 --_M_impl._M_node_count;
│ │ │ -
1534 return { static_cast<_Link_type>(__ptr), _M_get_Node_allocator() };
│ │ │ -
1535 }
│ │ │ -
1536
│ │ │ -
1537 /// Extract a node.
│ │ │ -
1538 node_type
│ │ │ -
1539 extract(const key_type& __k)
│ │ │ -
1540 {
│ │ │ -
1541 node_type __nh;
│ │ │ -
1542 auto __pos = find(__k);
│ │ │ -
1543 if (__pos != end())
│ │ │ -
1544 __nh = extract(const_iterator(__pos));
│ │ │ -
1545 return __nh;
│ │ │ -
1546 }
│ │ │ -
1547
│ │ │ -
1548 template<typename _Compare2>
│ │ │ -
1549 using _Compatible_tree
│ │ │ -
1550 = _Rb_tree<_Key, _Val, _KeyOfValue, _Compare2, _Alloc>;
│ │ │ -
1551
│ │ │ -
1552 template<typename, typename>
│ │ │ -
1553 friend struct _Rb_tree_merge_helper;
│ │ │ -
1554
│ │ │ -
1555 /// Merge from a compatible container into one with unique keys.
│ │ │ -
1556 template<typename _Compare2>
│ │ │ -
1557 void
│ │ │ -
1558 _M_merge_unique(_Compatible_tree<_Compare2>& __src) noexcept
│ │ │ -
1559 {
│ │ │ -
1560 using _Merge_helper = _Rb_tree_merge_helper<_Rb_tree, _Compare2>;
│ │ │ -
1561 for (auto __i = __src.begin(), __end = __src.end(); __i != __end;)
│ │ │ -
1562 {
│ │ │ -
1563 auto __pos = __i++;
│ │ │ -
1564 auto __res = _M_get_insert_unique_pos(_KeyOfValue()(*__pos));
│ │ │ -
1565 if (__res.second)
│ │ │ -
1566 {
│ │ │ -
1567 auto& __src_impl = _Merge_helper::_S_get_impl(__src);
│ │ │ -
1568 auto __ptr = _Rb_tree_rebalance_for_erase(
│ │ │ -
1569 __pos._M_node, __src_impl._M_header);
│ │ │ -
1570 --__src_impl._M_node_count;
│ │ │ -
1571 _M_insert_node(__res.first, __res.second,
│ │ │ -
1572 static_cast<_Link_type>(__ptr));
│ │ │ -
1573 }
│ │ │ -
1574 }
│ │ │ -
1575 }
│ │ │ -
1576
│ │ │ -
1577 /// Merge from a compatible container into one with equivalent keys.
│ │ │ -
1578 template<typename _Compare2>
│ │ │ -
1579 void
│ │ │ -
1580 _M_merge_equal(_Compatible_tree<_Compare2>& __src) noexcept
│ │ │ -
1581 {
│ │ │ -
1582 using _Merge_helper = _Rb_tree_merge_helper<_Rb_tree, _Compare2>;
│ │ │ -
1583 for (auto __i = __src.begin(), __end = __src.end(); __i != __end;)
│ │ │ -
1584 {
│ │ │ -
1585 auto __pos = __i++;
│ │ │ -
1586 auto __res = _M_get_insert_equal_pos(_KeyOfValue()(*__pos));
│ │ │ -
1587 if (__res.second)
│ │ │ -
1588 {
│ │ │ -
1589 auto& __src_impl = _Merge_helper::_S_get_impl(__src);
│ │ │ -
1590 auto __ptr = _Rb_tree_rebalance_for_erase(
│ │ │ -
1591 __pos._M_node, __src_impl._M_header);
│ │ │ -
1592 --__src_impl._M_node_count;
│ │ │ -
1593 _M_insert_node(__res.first, __res.second,
│ │ │ -
1594 static_cast<_Link_type>(__ptr));
│ │ │ -
1595 }
│ │ │ -
1596 }
│ │ │ -
1597 }
│ │ │ -
1598#endif // C++17 node_extract
│ │ │ -
1599
│ │ │ -
1600 friend bool
│ │ │ -
1601 operator==(const _Rb_tree& __x, const _Rb_tree& __y)
│ │ │ -
1602 {
│ │ │ -
1603 return __x.size() == __y.size()
│ │ │ -
1604 && std::equal(__x.begin(), __x.end(), __y.begin());
│ │ │ -
1605 }
│ │ │ -
1606
│ │ │ -
1607#if __cpp_lib_three_way_comparison
│ │ │ -
1608 friend auto
│ │ │ -
1609 operator<=>(const _Rb_tree& __x, const _Rb_tree& __y)
│ │ │ -
1610 {
│ │ │ -
1611 if constexpr (requires { typename __detail::__synth3way_t<_Val>; })
│ │ │ -
1612 return std::lexicographical_compare_three_way(__x.begin(), __x.end(),
│ │ │ -
1613 __y.begin(), __y.end(),
│ │ │ -
1614 __detail::__synth3way);
│ │ │ -
1615 }
│ │ │ -
1616#else
│ │ │ -
1617 friend bool
│ │ │ -
1618 operator<(const _Rb_tree& __x, const _Rb_tree& __y)
│ │ │ -
1619 {
│ │ │ -
1620 return std::lexicographical_compare(__x.begin(), __x.end(),
│ │ │ -
1621 __y.begin(), __y.end());
│ │ │ -
1622 }
│ │ │ -
1623#endif
│ │ │ -
1624
│ │ │ -
1625 private:
│ │ │ -
1626#if __cplusplus >= 201103L
│ │ │ -
1627 // An RAII _Node handle
│ │ │ -
1628 struct _Auto_node
│ │ │ -
1629 {
│ │ │ -
1630 template<typename... _Args>
│ │ │ -
1631 _Auto_node(_Rb_tree& __t, _Args&&... __args)
│ │ │ -
1632 : _M_t(__t),
│ │ │ -
1633 _M_node(__t._M_create_node(std::forward<_Args>(__args)...))
│ │ │ -
1634 { }
│ │ │ -
1635
│ │ │ -
1636 ~_Auto_node()
│ │ │ -
1637 {
│ │ │ -
1638 if (_M_node)
│ │ │ -
1639 _M_t._M_drop_node(_M_node);
│ │ │ -
1640 }
│ │ │ -
1641
│ │ │ -
1642 _Auto_node(_Auto_node&& __n)
│ │ │ -
1643 : _M_t(__n._M_t), _M_node(__n._M_node)
│ │ │ -
1644 { __n._M_node = nullptr; }
│ │ │ -
1645
│ │ │ -
1646 const _Key&
│ │ │ -
1647 _M_key() const
│ │ │ -
1648 { return _S_key(_M_node); }
│ │ │ -
1649
│ │ │ -
1650 iterator
│ │ │ -
1651 _M_insert(pair<_Base_ptr, _Base_ptr> __p)
│ │ │ -
1652 {
│ │ │ -
1653 auto __it = _M_t._M_insert_node(__p.first, __p.second, _M_node);
│ │ │ -
1654 _M_node = nullptr;
│ │ │ -
1655 return __it;
│ │ │ -
1656 }
│ │ │ -
1657
│ │ │ -
1658 iterator
│ │ │ -
1659 _M_insert_equal_lower()
│ │ │ -
1660 {
│ │ │ -
1661 auto __it = _M_t._M_insert_equal_lower_node(_M_node);
│ │ │ -
1662 _M_node = nullptr;
│ │ │ -
1663 return __it;
│ │ │ -
1664 }
│ │ │ -
1665
│ │ │ -
1666 _Rb_tree& _M_t;
│ │ │ -
1667 _Link_type _M_node;
│ │ │ -
1668 };
│ │ │ -
1669#endif // C++11
│ │ │ -
1670 };
│ │ │ -
1671
│ │ │ -
1672 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
1673 typename _Compare, typename _Alloc>
│ │ │ -
1674 inline void
│ │ │ -
1675 swap(_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
│ │ │ -
1676 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
│ │ │ -
1677 { __x.swap(__y); }
│ │ │ -
1678
│ │ │ -
1679#if __cplusplus >= 201103L
│ │ │ -
1680 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
1681 typename _Compare, typename _Alloc>
│ │ │ -
1682 void
│ │ │ -
1683 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
1684 _M_move_data(_Rb_tree& __x, false_type)
│ │ │ -
1685 {
│ │ │ -
1686 if (_M_get_Node_allocator() == __x._M_get_Node_allocator())
│ │ │ -
1687 _M_move_data(__x, true_type());
│ │ │ -
1688 else
│ │ │ -
1689 {
│ │ │ -
1690 constexpr bool __move = !__move_if_noexcept_cond<value_type>::value;
│ │ │ -
1691 _Alloc_node __an(*this);
│ │ │ -
1692 _M_root() = _M_copy<__move>(__x, __an);
│ │ │ -
1693 if _GLIBCXX17_CONSTEXPR (__move)
│ │ │ -
1694 __x.clear();
│ │ │ -
1695 }
│ │ │ -
1696 }
│ │ │ -
1697
│ │ │ -
1698 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
1699 typename _Compare, typename _Alloc>
│ │ │ -
1700 inline void
│ │ │ -
1701 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
1702 _M_move_assign(_Rb_tree& __x, true_type)
│ │ │ -
1703 {
│ │ │ -
1704 clear();
│ │ │ -
1705 if (__x._M_root() != nullptr)
│ │ │ -
1706 _M_move_data(__x, true_type());
│ │ │ -
1707 std::__alloc_on_move(_M_get_Node_allocator(),
│ │ │ -
1708 __x._M_get_Node_allocator());
│ │ │ -
1709 }
│ │ │ +
1381#if !defined(__cpp_lib_erase_if)
│ │ │ +
1382# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
│ │ │ +
1383# define __glibcxx_erase_if 202002L
│ │ │ +
1384# if defined(__glibcxx_want_all) || defined(__glibcxx_want_erase_if)
│ │ │ +
1385# define __cpp_lib_erase_if 202002L
│ │ │ +
1386# endif
│ │ │ +
1387# endif
│ │ │ +
1388#endif /* !defined(__cpp_lib_erase_if) && defined(__glibcxx_want_erase_if) */
│ │ │ +
1389#undef __glibcxx_want_erase_if
│ │ │ +
1390
│ │ │ +
1391#if !defined(__cpp_lib_generic_unordered_lookup)
│ │ │ +
1392# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
│ │ │ +
1393# define __glibcxx_generic_unordered_lookup 201811L
│ │ │ +
1394# if defined(__glibcxx_want_all) || defined(__glibcxx_want_generic_unordered_lookup)
│ │ │ +
1395# define __cpp_lib_generic_unordered_lookup 201811L
│ │ │ +
1396# endif
│ │ │ +
1397# endif
│ │ │ +
1398#endif /* !defined(__cpp_lib_generic_unordered_lookup) && defined(__glibcxx_want_generic_unordered_lookup) */
│ │ │ +
1399#undef __glibcxx_want_generic_unordered_lookup
│ │ │ +
1400
│ │ │ +
1401#if !defined(__cpp_lib_jthread)
│ │ │ +
1402# if (__cplusplus >= 202002L) && defined(_GLIBCXX_HAS_GTHREADS) && _GLIBCXX_HOSTED
│ │ │ +
1403# define __glibcxx_jthread 201911L
│ │ │ +
1404# if defined(__glibcxx_want_all) || defined(__glibcxx_want_jthread)
│ │ │ +
1405# define __cpp_lib_jthread 201911L
│ │ │ +
1406# endif
│ │ │ +
1407# endif
│ │ │ +
1408#endif /* !defined(__cpp_lib_jthread) && defined(__glibcxx_want_jthread) */
│ │ │ +
1409#undef __glibcxx_want_jthread
│ │ │ +
1410
│ │ │ +
1411#if !defined(__cpp_lib_latch)
│ │ │ +
1412# if (__cplusplus >= 202002L) && (__glibcxx_atomic_wait)
│ │ │ +
1413# define __glibcxx_latch 201907L
│ │ │ +
1414# if defined(__glibcxx_want_all) || defined(__glibcxx_want_latch)
│ │ │ +
1415# define __cpp_lib_latch 201907L
│ │ │ +
1416# endif
│ │ │ +
1417# endif
│ │ │ +
1418#endif /* !defined(__cpp_lib_latch) && defined(__glibcxx_want_latch) */
│ │ │ +
1419#undef __glibcxx_want_latch
│ │ │ +
1420
│ │ │ +
1421#if !defined(__cpp_lib_list_remove_return_type)
│ │ │ +
1422# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
│ │ │ +
1423# define __glibcxx_list_remove_return_type 201806L
│ │ │ +
1424# if defined(__glibcxx_want_all) || defined(__glibcxx_want_list_remove_return_type)
│ │ │ +
1425# define __cpp_lib_list_remove_return_type 201806L
│ │ │ +
1426# endif
│ │ │ +
1427# endif
│ │ │ +
1428#endif /* !defined(__cpp_lib_list_remove_return_type) && defined(__glibcxx_want_list_remove_return_type) */
│ │ │ +
1429#undef __glibcxx_want_list_remove_return_type
│ │ │ +
1430
│ │ │ +
1431#if !defined(__cpp_lib_polymorphic_allocator)
│ │ │ +
1432# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
│ │ │ +
1433# define __glibcxx_polymorphic_allocator 201902L
│ │ │ +
1434# if defined(__glibcxx_want_all) || defined(__glibcxx_want_polymorphic_allocator)
│ │ │ +
1435# define __cpp_lib_polymorphic_allocator 201902L
│ │ │ +
1436# endif
│ │ │ +
1437# endif
│ │ │ +
1438#endif /* !defined(__cpp_lib_polymorphic_allocator) && defined(__glibcxx_want_polymorphic_allocator) */
│ │ │ +
1439#undef __glibcxx_want_polymorphic_allocator
│ │ │ +
1440
│ │ │ +
1441#if !defined(__cpp_lib_move_iterator_concept)
│ │ │ +
1442# if (__cplusplus >= 202002L) && (__glibcxx_concepts)
│ │ │ +
1443# define __glibcxx_move_iterator_concept 202207L
│ │ │ +
1444# if defined(__glibcxx_want_all) || defined(__glibcxx_want_move_iterator_concept)
│ │ │ +
1445# define __cpp_lib_move_iterator_concept 202207L
│ │ │ +
1446# endif
│ │ │ +
1447# endif
│ │ │ +
1448#endif /* !defined(__cpp_lib_move_iterator_concept) && defined(__glibcxx_want_move_iterator_concept) */
│ │ │ +
1449#undef __glibcxx_want_move_iterator_concept
│ │ │ +
1450
│ │ │ +
1451#if !defined(__cpp_lib_semaphore)
│ │ │ +
1452# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED && (__glibcxx_atomic_wait || _GLIBCXX_HAVE_POSIX_SEMAPHORE)
│ │ │ +
1453# define __glibcxx_semaphore 201907L
│ │ │ +
1454# if defined(__glibcxx_want_all) || defined(__glibcxx_want_semaphore)
│ │ │ +
1455# define __cpp_lib_semaphore 201907L
│ │ │ +
1456# endif
│ │ │ +
1457# endif
│ │ │ +
1458#endif /* !defined(__cpp_lib_semaphore) && defined(__glibcxx_want_semaphore) */
│ │ │ +
1459#undef __glibcxx_want_semaphore
│ │ │ +
1460
│ │ │ +
1461#if !defined(__cpp_lib_smart_ptr_for_overwrite)
│ │ │ +
1462# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED
│ │ │ +
1463# define __glibcxx_smart_ptr_for_overwrite 202002L
│ │ │ +
1464# if defined(__glibcxx_want_all) || defined(__glibcxx_want_smart_ptr_for_overwrite)
│ │ │ +
1465# define __cpp_lib_smart_ptr_for_overwrite 202002L
│ │ │ +
1466# endif
│ │ │ +
1467# endif
│ │ │ +
1468#endif /* !defined(__cpp_lib_smart_ptr_for_overwrite) && defined(__glibcxx_want_smart_ptr_for_overwrite) */
│ │ │ +
1469#undef __glibcxx_want_smart_ptr_for_overwrite
│ │ │ +
1470
│ │ │ +
1471#if !defined(__cpp_lib_syncbuf)
│ │ │ +
1472# if (__cplusplus >= 202002L) && _GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED
│ │ │ +
1473# define __glibcxx_syncbuf 201803L
│ │ │ +
1474# if defined(__glibcxx_want_all) || defined(__glibcxx_want_syncbuf)
│ │ │ +
1475# define __cpp_lib_syncbuf 201803L
│ │ │ +
1476# endif
│ │ │ +
1477# endif
│ │ │ +
1478#endif /* !defined(__cpp_lib_syncbuf) && defined(__glibcxx_want_syncbuf) */
│ │ │ +
1479#undef __glibcxx_want_syncbuf
│ │ │ +
1480
│ │ │ +
1481#if !defined(__cpp_lib_byteswap)
│ │ │ +
1482# if (__cplusplus >= 202100L)
│ │ │ +
1483# define __glibcxx_byteswap 202110L
│ │ │ +
1484# if defined(__glibcxx_want_all) || defined(__glibcxx_want_byteswap)
│ │ │ +
1485# define __cpp_lib_byteswap 202110L
│ │ │ +
1486# endif
│ │ │ +
1487# endif
│ │ │ +
1488#endif /* !defined(__cpp_lib_byteswap) && defined(__glibcxx_want_byteswap) */
│ │ │ +
1489#undef __glibcxx_want_byteswap
│ │ │ +
1490
│ │ │ +
1491#if !defined(__cpp_lib_constexpr_charconv)
│ │ │ +
1492# if (__cplusplus >= 202100L)
│ │ │ +
1493# define __glibcxx_constexpr_charconv 202207L
│ │ │ +
1494# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_charconv)
│ │ │ +
1495# define __cpp_lib_constexpr_charconv 202207L
│ │ │ +
1496# endif
│ │ │ +
1497# endif
│ │ │ +
1498#endif /* !defined(__cpp_lib_constexpr_charconv) && defined(__glibcxx_want_constexpr_charconv) */
│ │ │ +
1499#undef __glibcxx_want_constexpr_charconv
│ │ │ +
1500
│ │ │ +
1501#if !defined(__cpp_lib_constexpr_typeinfo)
│ │ │ +
1502# if (__cplusplus >= 202100L)
│ │ │ +
1503# define __glibcxx_constexpr_typeinfo 202106L
│ │ │ +
1504# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_typeinfo)
│ │ │ +
1505# define __cpp_lib_constexpr_typeinfo 202106L
│ │ │ +
1506# endif
│ │ │ +
1507# endif
│ │ │ +
1508#endif /* !defined(__cpp_lib_constexpr_typeinfo) && defined(__glibcxx_want_constexpr_typeinfo) */
│ │ │ +
1509#undef __glibcxx_want_constexpr_typeinfo
│ │ │ +
1510
│ │ │ +
1511#if !defined(__cpp_lib_expected)
│ │ │ +
1512# if (__cplusplus >= 202100L) && (__cpp_concepts >= 202002L)
│ │ │ +
1513# define __glibcxx_expected 202211L
│ │ │ +
1514# if defined(__glibcxx_want_all) || defined(__glibcxx_want_expected)
│ │ │ +
1515# define __cpp_lib_expected 202211L
│ │ │ +
1516# endif
│ │ │ +
1517# endif
│ │ │ +
1518#endif /* !defined(__cpp_lib_expected) && defined(__glibcxx_want_expected) */
│ │ │ +
1519#undef __glibcxx_want_expected
│ │ │ +
1520
│ │ │ +
1521#if !defined(__cpp_lib_freestanding_algorithm)
│ │ │ +
1522# if (__cplusplus >= 202100L)
│ │ │ +
1523# define __glibcxx_freestanding_algorithm 202311L
│ │ │ +
1524# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_algorithm)
│ │ │ +
1525# define __cpp_lib_freestanding_algorithm 202311L
│ │ │ +
1526# endif
│ │ │ +
1527# endif
│ │ │ +
1528#endif /* !defined(__cpp_lib_freestanding_algorithm) && defined(__glibcxx_want_freestanding_algorithm) */
│ │ │ +
1529#undef __glibcxx_want_freestanding_algorithm
│ │ │ +
1530
│ │ │ +
1531#if !defined(__cpp_lib_freestanding_array)
│ │ │ +
1532# if (__cplusplus >= 202100L)
│ │ │ +
1533# define __glibcxx_freestanding_array 202311L
│ │ │ +
1534# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_array)
│ │ │ +
1535# define __cpp_lib_freestanding_array 202311L
│ │ │ +
1536# endif
│ │ │ +
1537# endif
│ │ │ +
1538#endif /* !defined(__cpp_lib_freestanding_array) && defined(__glibcxx_want_freestanding_array) */
│ │ │ +
1539#undef __glibcxx_want_freestanding_array
│ │ │ +
1540
│ │ │ +
1541#if !defined(__cpp_lib_freestanding_cstring)
│ │ │ +
1542# if (__cplusplus >= 202100L)
│ │ │ +
1543# define __glibcxx_freestanding_cstring 202311L
│ │ │ +
1544# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_cstring)
│ │ │ +
1545# define __cpp_lib_freestanding_cstring 202311L
│ │ │ +
1546# endif
│ │ │ +
1547# endif
│ │ │ +
1548#endif /* !defined(__cpp_lib_freestanding_cstring) && defined(__glibcxx_want_freestanding_cstring) */
│ │ │ +
1549#undef __glibcxx_want_freestanding_cstring
│ │ │ +
1550
│ │ │ +
1551#if !defined(__cpp_lib_freestanding_expected)
│ │ │ +
1552# if (__cplusplus >= 202100L) && (__cpp_lib_expected)
│ │ │ +
1553# define __glibcxx_freestanding_expected 202311L
│ │ │ +
1554# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_expected)
│ │ │ +
1555# define __cpp_lib_freestanding_expected 202311L
│ │ │ +
1556# endif
│ │ │ +
1557# endif
│ │ │ +
1558#endif /* !defined(__cpp_lib_freestanding_expected) && defined(__glibcxx_want_freestanding_expected) */
│ │ │ +
1559#undef __glibcxx_want_freestanding_expected
│ │ │ +
1560
│ │ │ +
1561#if !defined(__cpp_lib_freestanding_optional)
│ │ │ +
1562# if (__cplusplus >= 202100L)
│ │ │ +
1563# define __glibcxx_freestanding_optional 202311L
│ │ │ +
1564# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_optional)
│ │ │ +
1565# define __cpp_lib_freestanding_optional 202311L
│ │ │ +
1566# endif
│ │ │ +
1567# endif
│ │ │ +
1568#endif /* !defined(__cpp_lib_freestanding_optional) && defined(__glibcxx_want_freestanding_optional) */
│ │ │ +
1569#undef __glibcxx_want_freestanding_optional
│ │ │ +
1570
│ │ │ +
1571#if !defined(__cpp_lib_freestanding_string_view)
│ │ │ +
1572# if (__cplusplus >= 202100L)
│ │ │ +
1573# define __glibcxx_freestanding_string_view 202311L
│ │ │ +
1574# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_string_view)
│ │ │ +
1575# define __cpp_lib_freestanding_string_view 202311L
│ │ │ +
1576# endif
│ │ │ +
1577# endif
│ │ │ +
1578#endif /* !defined(__cpp_lib_freestanding_string_view) && defined(__glibcxx_want_freestanding_string_view) */
│ │ │ +
1579#undef __glibcxx_want_freestanding_string_view
│ │ │ +
1580
│ │ │ +
1581#if !defined(__cpp_lib_freestanding_variant)
│ │ │ +
1582# if (__cplusplus >= 202100L)
│ │ │ +
1583# define __glibcxx_freestanding_variant 202311L
│ │ │ +
1584# if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_variant)
│ │ │ +
1585# define __cpp_lib_freestanding_variant 202311L
│ │ │ +
1586# endif
│ │ │ +
1587# endif
│ │ │ +
1588#endif /* !defined(__cpp_lib_freestanding_variant) && defined(__glibcxx_want_freestanding_variant) */
│ │ │ +
1589#undef __glibcxx_want_freestanding_variant
│ │ │ +
1590
│ │ │ +
1591#if !defined(__cpp_lib_invoke_r)
│ │ │ +
1592# if (__cplusplus >= 202100L)
│ │ │ +
1593# define __glibcxx_invoke_r 202106L
│ │ │ +
1594# if defined(__glibcxx_want_all) || defined(__glibcxx_want_invoke_r)
│ │ │ +
1595# define __cpp_lib_invoke_r 202106L
│ │ │ +
1596# endif
│ │ │ +
1597# endif
│ │ │ +
1598#endif /* !defined(__cpp_lib_invoke_r) && defined(__glibcxx_want_invoke_r) */
│ │ │ +
1599#undef __glibcxx_want_invoke_r
│ │ │ +
1600
│ │ │ +
1601#if !defined(__cpp_lib_is_scoped_enum)
│ │ │ +
1602# if (__cplusplus >= 202100L)
│ │ │ +
1603# define __glibcxx_is_scoped_enum 202011L
│ │ │ +
1604# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_scoped_enum)
│ │ │ +
1605# define __cpp_lib_is_scoped_enum 202011L
│ │ │ +
1606# endif
│ │ │ +
1607# endif
│ │ │ +
1608#endif /* !defined(__cpp_lib_is_scoped_enum) && defined(__glibcxx_want_is_scoped_enum) */
│ │ │ +
1609#undef __glibcxx_want_is_scoped_enum
│ │ │ +
1610
│ │ │ +
1611#if !defined(__cpp_lib_reference_from_temporary)
│ │ │ +
1612# if (__cplusplus >= 202100L) && (__has_builtin(__reference_constructs_from_temporary) && __has_builtin(__reference_converts_from_temporary))
│ │ │ +
1613# define __glibcxx_reference_from_temporary 202202L
│ │ │ +
1614# if defined(__glibcxx_want_all) || defined(__glibcxx_want_reference_from_temporary)
│ │ │ +
1615# define __cpp_lib_reference_from_temporary 202202L
│ │ │ +
1616# endif
│ │ │ +
1617# endif
│ │ │ +
1618#endif /* !defined(__cpp_lib_reference_from_temporary) && defined(__glibcxx_want_reference_from_temporary) */
│ │ │ +
1619#undef __glibcxx_want_reference_from_temporary
│ │ │ +
1620
│ │ │ +
1621#if !defined(__cpp_lib_ranges_to_container)
│ │ │ +
1622# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
│ │ │ +
1623# define __glibcxx_ranges_to_container 202202L
│ │ │ +
1624# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_to_container)
│ │ │ +
1625# define __cpp_lib_ranges_to_container 202202L
│ │ │ +
1626# endif
│ │ │ +
1627# endif
│ │ │ +
1628#endif /* !defined(__cpp_lib_ranges_to_container) && defined(__glibcxx_want_ranges_to_container) */
│ │ │ +
1629#undef __glibcxx_want_ranges_to_container
│ │ │ +
1630
│ │ │ +
1631#if !defined(__cpp_lib_ranges_zip)
│ │ │ +
1632# if (__cplusplus >= 202100L)
│ │ │ +
1633# define __glibcxx_ranges_zip 202110L
│ │ │ +
1634# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_zip)
│ │ │ +
1635# define __cpp_lib_ranges_zip 202110L
│ │ │ +
1636# endif
│ │ │ +
1637# endif
│ │ │ +
1638#endif /* !defined(__cpp_lib_ranges_zip) && defined(__glibcxx_want_ranges_zip) */
│ │ │ +
1639#undef __glibcxx_want_ranges_zip
│ │ │ +
1640
│ │ │ +
1641#if !defined(__cpp_lib_ranges_chunk)
│ │ │ +
1642# if (__cplusplus >= 202100L)
│ │ │ +
1643# define __glibcxx_ranges_chunk 202202L
│ │ │ +
1644# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_chunk)
│ │ │ +
1645# define __cpp_lib_ranges_chunk 202202L
│ │ │ +
1646# endif
│ │ │ +
1647# endif
│ │ │ +
1648#endif /* !defined(__cpp_lib_ranges_chunk) && defined(__glibcxx_want_ranges_chunk) */
│ │ │ +
1649#undef __glibcxx_want_ranges_chunk
│ │ │ +
1650
│ │ │ +
1651#if !defined(__cpp_lib_ranges_slide)
│ │ │ +
1652# if (__cplusplus >= 202100L)
│ │ │ +
1653# define __glibcxx_ranges_slide 202202L
│ │ │ +
1654# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_slide)
│ │ │ +
1655# define __cpp_lib_ranges_slide 202202L
│ │ │ +
1656# endif
│ │ │ +
1657# endif
│ │ │ +
1658#endif /* !defined(__cpp_lib_ranges_slide) && defined(__glibcxx_want_ranges_slide) */
│ │ │ +
1659#undef __glibcxx_want_ranges_slide
│ │ │ +
1660
│ │ │ +
1661#if !defined(__cpp_lib_ranges_chunk_by)
│ │ │ +
1662# if (__cplusplus >= 202100L)
│ │ │ +
1663# define __glibcxx_ranges_chunk_by 202202L
│ │ │ +
1664# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_chunk_by)
│ │ │ +
1665# define __cpp_lib_ranges_chunk_by 202202L
│ │ │ +
1666# endif
│ │ │ +
1667# endif
│ │ │ +
1668#endif /* !defined(__cpp_lib_ranges_chunk_by) && defined(__glibcxx_want_ranges_chunk_by) */
│ │ │ +
1669#undef __glibcxx_want_ranges_chunk_by
│ │ │ +
1670
│ │ │ +
1671#if !defined(__cpp_lib_ranges_join_with)
│ │ │ +
1672# if (__cplusplus >= 202100L)
│ │ │ +
1673# define __glibcxx_ranges_join_with 202202L
│ │ │ +
1674# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_join_with)
│ │ │ +
1675# define __cpp_lib_ranges_join_with 202202L
│ │ │ +
1676# endif
│ │ │ +
1677# endif
│ │ │ +
1678#endif /* !defined(__cpp_lib_ranges_join_with) && defined(__glibcxx_want_ranges_join_with) */
│ │ │ +
1679#undef __glibcxx_want_ranges_join_with
│ │ │ +
1680
│ │ │ +
1681#if !defined(__cpp_lib_ranges_repeat)
│ │ │ +
1682# if (__cplusplus >= 202100L)
│ │ │ +
1683# define __glibcxx_ranges_repeat 202207L
│ │ │ +
1684# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_repeat)
│ │ │ +
1685# define __cpp_lib_ranges_repeat 202207L
│ │ │ +
1686# endif
│ │ │ +
1687# endif
│ │ │ +
1688#endif /* !defined(__cpp_lib_ranges_repeat) && defined(__glibcxx_want_ranges_repeat) */
│ │ │ +
1689#undef __glibcxx_want_ranges_repeat
│ │ │ +
1690
│ │ │ +
1691#if !defined(__cpp_lib_ranges_stride)
│ │ │ +
1692# if (__cplusplus >= 202100L)
│ │ │ +
1693# define __glibcxx_ranges_stride 202207L
│ │ │ +
1694# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_stride)
│ │ │ +
1695# define __cpp_lib_ranges_stride 202207L
│ │ │ +
1696# endif
│ │ │ +
1697# endif
│ │ │ +
1698#endif /* !defined(__cpp_lib_ranges_stride) && defined(__glibcxx_want_ranges_stride) */
│ │ │ +
1699#undef __glibcxx_want_ranges_stride
│ │ │ +
1700
│ │ │ +
1701#if !defined(__cpp_lib_ranges_cartesian_product)
│ │ │ +
1702# if (__cplusplus >= 202100L)
│ │ │ +
1703# define __glibcxx_ranges_cartesian_product 202207L
│ │ │ +
1704# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_cartesian_product)
│ │ │ +
1705# define __cpp_lib_ranges_cartesian_product 202207L
│ │ │ +
1706# endif
│ │ │ +
1707# endif
│ │ │ +
1708#endif /* !defined(__cpp_lib_ranges_cartesian_product) && defined(__glibcxx_want_ranges_cartesian_product) */
│ │ │ +
1709#undef __glibcxx_want_ranges_cartesian_product
│ │ │
1710
│ │ │ -
1711 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
1712 typename _Compare, typename _Alloc>
│ │ │ -
1713 void
│ │ │ -
1714 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
1715 _M_move_assign(_Rb_tree& __x, false_type)
│ │ │ -
1716 {
│ │ │ -
1717 if (_M_get_Node_allocator() == __x._M_get_Node_allocator())
│ │ │ -
1718 return _M_move_assign(__x, true_type{});
│ │ │ -
1719
│ │ │ -
1720 // Try to move each node reusing existing nodes and copying __x nodes
│ │ │ -
1721 // structure.
│ │ │ -
1722 _Reuse_or_alloc_node __roan(*this);
│ │ │ -
1723 _M_impl._M_reset();
│ │ │ -
1724 if (__x._M_root() != nullptr)
│ │ │ -
1725 {
│ │ │ -
1726 _M_root() = _M_copy<__as_rvalue>(__x, __roan);
│ │ │ -
1727 __x.clear();
│ │ │ -
1728 }
│ │ │ -
1729 }
│ │ │ +
1711#if !defined(__cpp_lib_ranges_as_rvalue)
│ │ │ +
1712# if (__cplusplus >= 202100L)
│ │ │ +
1713# define __glibcxx_ranges_as_rvalue 202207L
│ │ │ +
1714# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_as_rvalue)
│ │ │ +
1715# define __cpp_lib_ranges_as_rvalue 202207L
│ │ │ +
1716# endif
│ │ │ +
1717# endif
│ │ │ +
1718#endif /* !defined(__cpp_lib_ranges_as_rvalue) && defined(__glibcxx_want_ranges_as_rvalue) */
│ │ │ +
1719#undef __glibcxx_want_ranges_as_rvalue
│ │ │ +
1720
│ │ │ +
1721#if !defined(__cpp_lib_ranges_as_const)
│ │ │ +
1722# if (__cplusplus >= 202100L)
│ │ │ +
1723# define __glibcxx_ranges_as_const 202311L
│ │ │ +
1724# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_as_const)
│ │ │ +
1725# define __cpp_lib_ranges_as_const 202311L
│ │ │ +
1726# endif
│ │ │ +
1727# endif
│ │ │ +
1728#endif /* !defined(__cpp_lib_ranges_as_const) && defined(__glibcxx_want_ranges_as_const) */
│ │ │ +
1729#undef __glibcxx_want_ranges_as_const
│ │ │
1730
│ │ │ -
1731 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
1732 typename _Compare, typename _Alloc>
│ │ │ -
1733 inline _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>&
│ │ │ -
1734 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
1735 operator=(_Rb_tree&& __x)
│ │ │ -
1736 noexcept(_Alloc_traits::_S_nothrow_move()
│ │ │ -
1737 && is_nothrow_move_assignable<_Compare>::value)
│ │ │ -
1738 {
│ │ │ -
1739 _M_impl._M_key_compare = std::move(__x._M_impl._M_key_compare);
│ │ │ -
1740 _M_move_assign(__x, __bool_constant<_Alloc_traits::_S_nothrow_move()>());
│ │ │ -
1741 return *this;
│ │ │ -
1742 }
│ │ │ -
1743
│ │ │ -
1744 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
1745 typename _Compare, typename _Alloc>
│ │ │ -
1746 template<typename _Iterator>
│ │ │ -
1747 void
│ │ │ -
1748 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
1749 _M_assign_unique(_Iterator __first, _Iterator __last)
│ │ │ -
1750 {
│ │ │ -
1751 _Reuse_or_alloc_node __roan(*this);
│ │ │ -
1752 _M_impl._M_reset();
│ │ │ -
1753 for (; __first != __last; ++__first)
│ │ │ -
1754 _M_insert_unique_(end(), *__first, __roan);
│ │ │ -
1755 }
│ │ │ -
1756
│ │ │ -
1757 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
1758 typename _Compare, typename _Alloc>
│ │ │ -
1759 template<typename _Iterator>
│ │ │ -
1760 void
│ │ │ -
1761 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
1762 _M_assign_equal(_Iterator __first, _Iterator __last)
│ │ │ -
1763 {
│ │ │ -
1764 _Reuse_or_alloc_node __roan(*this);
│ │ │ -
1765 _M_impl._M_reset();
│ │ │ -
1766 for (; __first != __last; ++__first)
│ │ │ -
1767 _M_insert_equal_(end(), *__first, __roan);
│ │ │ -
1768 }
│ │ │ -
1769#endif
│ │ │ +
1731#if !defined(__cpp_lib_ranges_enumerate)
│ │ │ +
1732# if (__cplusplus >= 202100L)
│ │ │ +
1733# define __glibcxx_ranges_enumerate 202302L
│ │ │ +
1734# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_enumerate)
│ │ │ +
1735# define __cpp_lib_ranges_enumerate 202302L
│ │ │ +
1736# endif
│ │ │ +
1737# endif
│ │ │ +
1738#endif /* !defined(__cpp_lib_ranges_enumerate) && defined(__glibcxx_want_ranges_enumerate) */
│ │ │ +
1739#undef __glibcxx_want_ranges_enumerate
│ │ │ +
1740
│ │ │ +
1741#if !defined(__cpp_lib_ranges_fold)
│ │ │ +
1742# if (__cplusplus >= 202100L)
│ │ │ +
1743# define __glibcxx_ranges_fold 202207L
│ │ │ +
1744# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_fold)
│ │ │ +
1745# define __cpp_lib_ranges_fold 202207L
│ │ │ +
1746# endif
│ │ │ +
1747# endif
│ │ │ +
1748#endif /* !defined(__cpp_lib_ranges_fold) && defined(__glibcxx_want_ranges_fold) */
│ │ │ +
1749#undef __glibcxx_want_ranges_fold
│ │ │ +
1750
│ │ │ +
1751#if !defined(__cpp_lib_ranges_contains)
│ │ │ +
1752# if (__cplusplus >= 202100L)
│ │ │ +
1753# define __glibcxx_ranges_contains 202207L
│ │ │ +
1754# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_contains)
│ │ │ +
1755# define __cpp_lib_ranges_contains 202207L
│ │ │ +
1756# endif
│ │ │ +
1757# endif
│ │ │ +
1758#endif /* !defined(__cpp_lib_ranges_contains) && defined(__glibcxx_want_ranges_contains) */
│ │ │ +
1759#undef __glibcxx_want_ranges_contains
│ │ │ +
1760
│ │ │ +
1761#if !defined(__cpp_lib_ranges_iota)
│ │ │ +
1762# if (__cplusplus >= 202100L)
│ │ │ +
1763# define __glibcxx_ranges_iota 202202L
│ │ │ +
1764# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_iota)
│ │ │ +
1765# define __cpp_lib_ranges_iota 202202L
│ │ │ +
1766# endif
│ │ │ +
1767# endif
│ │ │ +
1768#endif /* !defined(__cpp_lib_ranges_iota) && defined(__glibcxx_want_ranges_iota) */
│ │ │ +
1769#undef __glibcxx_want_ranges_iota
│ │ │
1770
│ │ │ -
1771 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
1772 typename _Compare, typename _Alloc>
│ │ │ -
1773 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>&
│ │ │ -
1774 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
1775 operator=(const _Rb_tree& __x)
│ │ │ -
1776 {
│ │ │ -
1777 if (this != std::__addressof(__x))
│ │ │ -
1778 {
│ │ │ -
1779 // Note that _Key may be a constant type.
│ │ │ -
1780#if __cplusplus >= 201103L
│ │ │ -
1781 if (_Alloc_traits::_S_propagate_on_copy_assign())
│ │ │ -
1782 {
│ │ │ -
1783 auto& __this_alloc = this->_M_get_Node_allocator();
│ │ │ -
1784 auto& __that_alloc = __x._M_get_Node_allocator();
│ │ │ -
1785 if (!_Alloc_traits::_S_always_equal()
│ │ │ -
1786 && __this_alloc != __that_alloc)
│ │ │ -
1787 {
│ │ │ -
1788 // Replacement allocator cannot free existing storage, we need
│ │ │ -
1789 // to erase nodes first.
│ │ │ -
1790 clear();
│ │ │ -
1791 std::__alloc_on_copy(__this_alloc, __that_alloc);
│ │ │ -
1792 }
│ │ │ -
1793 }
│ │ │ -
1794#endif
│ │ │ -
1795
│ │ │ -
1796 _Reuse_or_alloc_node __roan(*this);
│ │ │ -
1797 _M_impl._M_reset();
│ │ │ -
1798 _M_impl._M_key_compare = __x._M_impl._M_key_compare;
│ │ │ -
1799 if (__x._M_root() != 0)
│ │ │ -
1800 _M_root() = _M_copy<__as_lvalue>(__x, __roan);
│ │ │ -
1801 }
│ │ │ -
1802
│ │ │ -
1803 return *this;
│ │ │ -
1804 }
│ │ │ -
1805
│ │ │ -
1806 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
1807 typename _Compare, typename _Alloc>
│ │ │ -
1808#if __cplusplus >= 201103L
│ │ │ -
1809 template<typename _Arg, typename _NodeGen>
│ │ │ -
1810#else
│ │ │ -
1811 template<typename _NodeGen>
│ │ │ -
1812#endif
│ │ │ -
1813 typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
│ │ │ -
1814 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
1815 _M_insert_(_Base_ptr __x, _Base_ptr __p,
│ │ │ -
1816#if __cplusplus >= 201103L
│ │ │ -
1817 _Arg&& __v,
│ │ │ -
1818#else
│ │ │ -
1819 const _Val& __v,
│ │ │ -
1820#endif
│ │ │ -
1821 _NodeGen& __node_gen)
│ │ │ -
1822 {
│ │ │ -
1823 bool __insert_left = (__x != 0 || __p == _M_end()
│ │ │ -
1824 || _M_impl._M_key_compare(_KeyOfValue()(__v),
│ │ │ -
1825 _S_key(__p)));
│ │ │ -
1826
│ │ │ -
1827 _Link_type __z = __node_gen(_GLIBCXX_FORWARD(_Arg, __v));
│ │ │ -
1828
│ │ │ -
1829 _Rb_tree_insert_and_rebalance(__insert_left, __z, __p,
│ │ │ -
1830 this->_M_impl._M_header);
│ │ │ -
1831 ++_M_impl._M_node_count;
│ │ │ -
1832 return iterator(__z);
│ │ │ -
1833 }
│ │ │ -
1834
│ │ │ -
1835 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
1836 typename _Compare, typename _Alloc>
│ │ │ -
1837#if __cplusplus >= 201103L
│ │ │ -
1838 template<typename _Arg>
│ │ │ -
1839#endif
│ │ │ -
1840 typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
│ │ │ -
1841 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
1842#if __cplusplus >= 201103L
│ │ │ -
1843 _M_insert_lower(_Base_ptr __p, _Arg&& __v)
│ │ │ -
1844#else
│ │ │ -
1845 _M_insert_lower(_Base_ptr __p, const _Val& __v)
│ │ │ -
1846#endif
│ │ │ -
1847 {
│ │ │ -
1848 bool __insert_left = (__p == _M_end()
│ │ │ -
1849 || !_M_impl._M_key_compare(_S_key(__p),
│ │ │ -
1850 _KeyOfValue()(__v)));
│ │ │ -
1851
│ │ │ -
1852 _Link_type __z = _M_create_node(_GLIBCXX_FORWARD(_Arg, __v));
│ │ │ -
1853
│ │ │ -
1854 _Rb_tree_insert_and_rebalance(__insert_left, __z, __p,
│ │ │ -
1855 this->_M_impl._M_header);
│ │ │ -
1856 ++_M_impl._M_node_count;
│ │ │ -
1857 return iterator(__z);
│ │ │ -
1858 }
│ │ │ -
1859
│ │ │ -
1860 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
1861 typename _Compare, typename _Alloc>
│ │ │ -
1862#if __cplusplus >= 201103L
│ │ │ -
1863 template<typename _Arg>
│ │ │ -
1864#endif
│ │ │ -
1865 typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
│ │ │ -
1866 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
1867#if __cplusplus >= 201103L
│ │ │ -
1868 _M_insert_equal_lower(_Arg&& __v)
│ │ │ -
1869#else
│ │ │ -
1870 _M_insert_equal_lower(const _Val& __v)
│ │ │ -
1871#endif
│ │ │ -
1872 {
│ │ │ -
1873 _Link_type __x = _M_begin();
│ │ │ -
1874 _Base_ptr __y = _M_end();
│ │ │ -
1875 while (__x != 0)
│ │ │ -
1876 {
│ │ │ -
1877 __y = __x;
│ │ │ -
1878 __x = !_M_impl._M_key_compare(_S_key(__x), _KeyOfValue()(__v)) ?
│ │ │ -
1879 _S_left(__x) : _S_right(__x);
│ │ │ -
1880 }
│ │ │ -
1881 return _M_insert_lower(__y, _GLIBCXX_FORWARD(_Arg, __v));
│ │ │ -
1882 }
│ │ │ -
1883
│ │ │ -
1884 template<typename _Key, typename _Val, typename _KoV,
│ │ │ -
1885 typename _Compare, typename _Alloc>
│ │ │ -
1886 template<bool _MoveValues, typename _NodeGen>
│ │ │ -
1887 typename _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>::_Link_type
│ │ │ -
1888 _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>::
│ │ │ -
1889 _M_copy(_Link_type __x, _Base_ptr __p, _NodeGen& __node_gen)
│ │ │ -
1890 {
│ │ │ -
1891 // Structural copy. __x and __p must be non-null.
│ │ │ -
1892 _Link_type __top = _M_clone_node<_MoveValues>(__x, __node_gen);
│ │ │ -
1893 __top->_M_parent = __p;
│ │ │ -
1894
│ │ │ -
1895 __try
│ │ │ -
1896 {
│ │ │ -
1897 if (__x->_M_right)
│ │ │ -
1898 __top->_M_right =
│ │ │ -
1899 _M_copy<_MoveValues>(_S_right(__x), __top, __node_gen);
│ │ │ -
1900 __p = __top;
│ │ │ -
1901 __x = _S_left(__x);
│ │ │ -
1902
│ │ │ -
1903 while (__x != 0)
│ │ │ -
1904 {
│ │ │ -
1905 _Link_type __y = _M_clone_node<_MoveValues>(__x, __node_gen);
│ │ │ -
1906 __p->_M_left = __y;
│ │ │ -
1907 __y->_M_parent = __p;
│ │ │ -
1908 if (__x->_M_right)
│ │ │ -
1909 __y->_M_right = _M_copy<_MoveValues>(_S_right(__x),
│ │ │ -
1910 __y, __node_gen);
│ │ │ -
1911 __p = __y;
│ │ │ -
1912 __x = _S_left(__x);
│ │ │ -
1913 }
│ │ │ -
1914 }
│ │ │ -
1915 __catch(...)
│ │ │ -
1916 {
│ │ │ -
1917 _M_erase(__top);
│ │ │ -
1918 __throw_exception_again;
│ │ │ -
1919 }
│ │ │ -
1920 return __top;
│ │ │ -
1921 }
│ │ │ -
1922
│ │ │ -
1923 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
1924 typename _Compare, typename _Alloc>
│ │ │ -
1925 void
│ │ │ -
1926 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
1927 _M_erase(_Link_type __x)
│ │ │ -
1928 {
│ │ │ -
1929 // Erase without rebalancing.
│ │ │ -
1930 while (__x != 0)
│ │ │ -
1931 {
│ │ │ -
1932 _M_erase(_S_right(__x));
│ │ │ -
1933 _Link_type __y = _S_left(__x);
│ │ │ -
1934 _M_drop_node(__x);
│ │ │ -
1935 __x = __y;
│ │ │ -
1936 }
│ │ │ -
1937 }
│ │ │ -
1938
│ │ │ -
1939 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
1940 typename _Compare, typename _Alloc>
│ │ │ -
1941 typename _Rb_tree<_Key, _Val, _KeyOfValue,
│ │ │ -
1942 _Compare, _Alloc>::iterator
│ │ │ -
1943 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
1944 _M_lower_bound(_Link_type __x, _Base_ptr __y,
│ │ │ -
1945 const _Key& __k)
│ │ │ -
1946 {
│ │ │ -
1947 while (__x != 0)
│ │ │ -
1948 if (!_M_impl._M_key_compare(_S_key(__x), __k))
│ │ │ -
1949 __y = __x, __x = _S_left(__x);
│ │ │ -
1950 else
│ │ │ -
1951 __x = _S_right(__x);
│ │ │ -
1952 return iterator(__y);
│ │ │ -
1953 }
│ │ │ -
1954
│ │ │ -
1955 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
1956 typename _Compare, typename _Alloc>
│ │ │ -
1957 typename _Rb_tree<_Key, _Val, _KeyOfValue,
│ │ │ -
1958 _Compare, _Alloc>::const_iterator
│ │ │ -
1959 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
1960 _M_lower_bound(_Const_Link_type __x, _Const_Base_ptr __y,
│ │ │ -
1961 const _Key& __k) const
│ │ │ -
1962 {
│ │ │ -
1963 while (__x != 0)
│ │ │ -
1964 if (!_M_impl._M_key_compare(_S_key(__x), __k))
│ │ │ -
1965 __y = __x, __x = _S_left(__x);
│ │ │ -
1966 else
│ │ │ -
1967 __x = _S_right(__x);
│ │ │ -
1968 return const_iterator(__y);
│ │ │ -
1969 }
│ │ │ +
1771#if !defined(__cpp_lib_ranges_find_last)
│ │ │ +
1772# if (__cplusplus >= 202100L)
│ │ │ +
1773# define __glibcxx_ranges_find_last 202207L
│ │ │ +
1774# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_find_last)
│ │ │ +
1775# define __cpp_lib_ranges_find_last 202207L
│ │ │ +
1776# endif
│ │ │ +
1777# endif
│ │ │ +
1778#endif /* !defined(__cpp_lib_ranges_find_last) && defined(__glibcxx_want_ranges_find_last) */
│ │ │ +
1779#undef __glibcxx_want_ranges_find_last
│ │ │ +
1780
│ │ │ +
1781#if !defined(__cpp_lib_constexpr_bitset)
│ │ │ +
1782# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && (__cpp_constexpr_dynamic_alloc)
│ │ │ +
1783# define __glibcxx_constexpr_bitset 202202L
│ │ │ +
1784# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_bitset)
│ │ │ +
1785# define __cpp_lib_constexpr_bitset 202202L
│ │ │ +
1786# endif
│ │ │ +
1787# endif
│ │ │ +
1788#endif /* !defined(__cpp_lib_constexpr_bitset) && defined(__glibcxx_want_constexpr_bitset) */
│ │ │ +
1789#undef __glibcxx_want_constexpr_bitset
│ │ │ +
1790
│ │ │ +
1791#if !defined(__cpp_lib_stdatomic_h)
│ │ │ +
1792# if (__cplusplus >= 202100L)
│ │ │ +
1793# define __glibcxx_stdatomic_h 202011L
│ │ │ +
1794# if defined(__glibcxx_want_all) || defined(__glibcxx_want_stdatomic_h)
│ │ │ +
1795# define __cpp_lib_stdatomic_h 202011L
│ │ │ +
1796# endif
│ │ │ +
1797# endif
│ │ │ +
1798#endif /* !defined(__cpp_lib_stdatomic_h) && defined(__glibcxx_want_stdatomic_h) */
│ │ │ +
1799#undef __glibcxx_want_stdatomic_h
│ │ │ +
1800
│ │ │ +
1801#if !defined(__cpp_lib_adaptor_iterator_pair_constructor)
│ │ │ +
1802# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
│ │ │ +
1803# define __glibcxx_adaptor_iterator_pair_constructor 202106L
│ │ │ +
1804# if defined(__glibcxx_want_all) || defined(__glibcxx_want_adaptor_iterator_pair_constructor)
│ │ │ +
1805# define __cpp_lib_adaptor_iterator_pair_constructor 202106L
│ │ │ +
1806# endif
│ │ │ +
1807# endif
│ │ │ +
1808#endif /* !defined(__cpp_lib_adaptor_iterator_pair_constructor) && defined(__glibcxx_want_adaptor_iterator_pair_constructor) */
│ │ │ +
1809#undef __glibcxx_want_adaptor_iterator_pair_constructor
│ │ │ +
1810
│ │ │ +
1811#if !defined(__cpp_lib_formatters)
│ │ │ +
1812# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
│ │ │ +
1813# define __glibcxx_formatters 202302L
│ │ │ +
1814# if defined(__glibcxx_want_all) || defined(__glibcxx_want_formatters)
│ │ │ +
1815# define __cpp_lib_formatters 202302L
│ │ │ +
1816# endif
│ │ │ +
1817# endif
│ │ │ +
1818#endif /* !defined(__cpp_lib_formatters) && defined(__glibcxx_want_formatters) */
│ │ │ +
1819#undef __glibcxx_want_formatters
│ │ │ +
1820
│ │ │ +
1821#if !defined(__cpp_lib_forward_like)
│ │ │ +
1822# if (__cplusplus >= 202100L)
│ │ │ +
1823# define __glibcxx_forward_like 202207L
│ │ │ +
1824# if defined(__glibcxx_want_all) || defined(__glibcxx_want_forward_like)
│ │ │ +
1825# define __cpp_lib_forward_like 202207L
│ │ │ +
1826# endif
│ │ │ +
1827# endif
│ │ │ +
1828#endif /* !defined(__cpp_lib_forward_like) && defined(__glibcxx_want_forward_like) */
│ │ │ +
1829#undef __glibcxx_want_forward_like
│ │ │ +
1830
│ │ │ +
1831#if !defined(__cpp_lib_generator)
│ │ │ +
1832# if (__cplusplus >= 202100L) && (__glibcxx_coroutine && __cpp_sized_deallocation)
│ │ │ +
1833# define __glibcxx_generator 202207L
│ │ │ +
1834# if defined(__glibcxx_want_all) || defined(__glibcxx_want_generator)
│ │ │ +
1835# define __cpp_lib_generator 202207L
│ │ │ +
1836# endif
│ │ │ +
1837# endif
│ │ │ +
1838#endif /* !defined(__cpp_lib_generator) && defined(__glibcxx_want_generator) */
│ │ │ +
1839#undef __glibcxx_want_generator
│ │ │ +
1840
│ │ │ +
1841#if !defined(__cpp_lib_ios_noreplace)
│ │ │ +
1842# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
│ │ │ +
1843# define __glibcxx_ios_noreplace 202207L
│ │ │ +
1844# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ios_noreplace)
│ │ │ +
1845# define __cpp_lib_ios_noreplace 202207L
│ │ │ +
1846# endif
│ │ │ +
1847# endif
│ │ │ +
1848#endif /* !defined(__cpp_lib_ios_noreplace) && defined(__glibcxx_want_ios_noreplace) */
│ │ │ +
1849#undef __glibcxx_want_ios_noreplace
│ │ │ +
1850
│ │ │ +
1851#if !defined(__cpp_lib_move_only_function)
│ │ │ +
1852# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
│ │ │ +
1853# define __glibcxx_move_only_function 202110L
│ │ │ +
1854# if defined(__glibcxx_want_all) || defined(__glibcxx_want_move_only_function)
│ │ │ +
1855# define __cpp_lib_move_only_function 202110L
│ │ │ +
1856# endif
│ │ │ +
1857# endif
│ │ │ +
1858#endif /* !defined(__cpp_lib_move_only_function) && defined(__glibcxx_want_move_only_function) */
│ │ │ +
1859#undef __glibcxx_want_move_only_function
│ │ │ +
1860
│ │ │ +
1861#if !defined(__cpp_lib_out_ptr)
│ │ │ +
1862# if (__cplusplus >= 202100L)
│ │ │ +
1863# define __glibcxx_out_ptr 202311L
│ │ │ +
1864# if defined(__glibcxx_want_all) || defined(__glibcxx_want_out_ptr)
│ │ │ +
1865# define __cpp_lib_out_ptr 202311L
│ │ │ +
1866# endif
│ │ │ +
1867# endif
│ │ │ +
1868#endif /* !defined(__cpp_lib_out_ptr) && defined(__glibcxx_want_out_ptr) */
│ │ │ +
1869#undef __glibcxx_want_out_ptr
│ │ │ +
1870
│ │ │ +
1871#if !defined(__cpp_lib_print)
│ │ │ +
1872# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
│ │ │ +
1873# define __glibcxx_print 202211L
│ │ │ +
1874# if defined(__glibcxx_want_all) || defined(__glibcxx_want_print)
│ │ │ +
1875# define __cpp_lib_print 202211L
│ │ │ +
1876# endif
│ │ │ +
1877# endif
│ │ │ +
1878#endif /* !defined(__cpp_lib_print) && defined(__glibcxx_want_print) */
│ │ │ +
1879#undef __glibcxx_want_print
│ │ │ +
1880
│ │ │ +
1881#if !defined(__cpp_lib_spanstream)
│ │ │ +
1882# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && (__glibcxx_span)
│ │ │ +
1883# define __glibcxx_spanstream 202106L
│ │ │ +
1884# if defined(__glibcxx_want_all) || defined(__glibcxx_want_spanstream)
│ │ │ +
1885# define __cpp_lib_spanstream 202106L
│ │ │ +
1886# endif
│ │ │ +
1887# endif
│ │ │ +
1888#endif /* !defined(__cpp_lib_spanstream) && defined(__glibcxx_want_spanstream) */
│ │ │ +
1889#undef __glibcxx_want_spanstream
│ │ │ +
1890
│ │ │ +
1891#if !defined(__cpp_lib_stacktrace)
│ │ │ +
1892# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && (_GLIBCXX_HAVE_STACKTRACE)
│ │ │ +
1893# define __glibcxx_stacktrace 202011L
│ │ │ +
1894# if defined(__glibcxx_want_all) || defined(__glibcxx_want_stacktrace)
│ │ │ +
1895# define __cpp_lib_stacktrace 202011L
│ │ │ +
1896# endif
│ │ │ +
1897# endif
│ │ │ +
1898#endif /* !defined(__cpp_lib_stacktrace) && defined(__glibcxx_want_stacktrace) */
│ │ │ +
1899#undef __glibcxx_want_stacktrace
│ │ │ +
1900
│ │ │ +
1901#if !defined(__cpp_lib_string_contains)
│ │ │ +
1902# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
│ │ │ +
1903# define __glibcxx_string_contains 202011L
│ │ │ +
1904# if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_contains)
│ │ │ +
1905# define __cpp_lib_string_contains 202011L
│ │ │ +
1906# endif
│ │ │ +
1907# endif
│ │ │ +
1908#endif /* !defined(__cpp_lib_string_contains) && defined(__glibcxx_want_string_contains) */
│ │ │ +
1909#undef __glibcxx_want_string_contains
│ │ │ +
1910
│ │ │ +
1911#if !defined(__cpp_lib_string_resize_and_overwrite)
│ │ │ +
1912# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
│ │ │ +
1913# define __glibcxx_string_resize_and_overwrite 202110L
│ │ │ +
1914# if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_resize_and_overwrite)
│ │ │ +
1915# define __cpp_lib_string_resize_and_overwrite 202110L
│ │ │ +
1916# endif
│ │ │ +
1917# endif
│ │ │ +
1918#endif /* !defined(__cpp_lib_string_resize_and_overwrite) && defined(__glibcxx_want_string_resize_and_overwrite) */
│ │ │ +
1919#undef __glibcxx_want_string_resize_and_overwrite
│ │ │ +
1920
│ │ │ +
1921#if !defined(__cpp_lib_to_underlying)
│ │ │ +
1922# if (__cplusplus >= 202100L)
│ │ │ +
1923# define __glibcxx_to_underlying 202102L
│ │ │ +
1924# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_underlying)
│ │ │ +
1925# define __cpp_lib_to_underlying 202102L
│ │ │ +
1926# endif
│ │ │ +
1927# endif
│ │ │ +
1928#endif /* !defined(__cpp_lib_to_underlying) && defined(__glibcxx_want_to_underlying) */
│ │ │ +
1929#undef __glibcxx_want_to_underlying
│ │ │ +
1930
│ │ │ +
1931#if !defined(__cpp_lib_tuple_like)
│ │ │ +
1932# if (__cplusplus >= 202100L)
│ │ │ +
1933# define __glibcxx_tuple_like 202207L
│ │ │ +
1934# if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuple_like)
│ │ │ +
1935# define __cpp_lib_tuple_like 202207L
│ │ │ +
1936# endif
│ │ │ +
1937# endif
│ │ │ +
1938#endif /* !defined(__cpp_lib_tuple_like) && defined(__glibcxx_want_tuple_like) */
│ │ │ +
1939#undef __glibcxx_want_tuple_like
│ │ │ +
1940
│ │ │ +
1941#if !defined(__cpp_lib_unreachable)
│ │ │ +
1942# if (__cplusplus >= 202100L)
│ │ │ +
1943# define __glibcxx_unreachable 202202L
│ │ │ +
1944# if defined(__glibcxx_want_all) || defined(__glibcxx_want_unreachable)
│ │ │ +
1945# define __cpp_lib_unreachable 202202L
│ │ │ +
1946# endif
│ │ │ +
1947# endif
│ │ │ +
1948#endif /* !defined(__cpp_lib_unreachable) && defined(__glibcxx_want_unreachable) */
│ │ │ +
1949#undef __glibcxx_want_unreachable
│ │ │ +
1950
│ │ │ +
1951#if !defined(__cpp_lib_fstream_native_handle)
│ │ │ +
1952# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED
│ │ │ +
1953# define __glibcxx_fstream_native_handle 202306L
│ │ │ +
1954# if defined(__glibcxx_want_all) || defined(__glibcxx_want_fstream_native_handle)
│ │ │ +
1955# define __cpp_lib_fstream_native_handle 202306L
│ │ │ +
1956# endif
│ │ │ +
1957# endif
│ │ │ +
1958#endif /* !defined(__cpp_lib_fstream_native_handle) && defined(__glibcxx_want_fstream_native_handle) */
│ │ │ +
1959#undef __glibcxx_want_fstream_native_handle
│ │ │ +
1960
│ │ │ +
1961#if !defined(__cpp_lib_ratio)
│ │ │ +
1962# if (__cplusplus > 202302L)
│ │ │ +
1963# define __glibcxx_ratio 202306L
│ │ │ +
1964# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ratio)
│ │ │ +
1965# define __cpp_lib_ratio 202306L
│ │ │ +
1966# endif
│ │ │ +
1967# endif
│ │ │ +
1968#endif /* !defined(__cpp_lib_ratio) && defined(__glibcxx_want_ratio) */
│ │ │ +
1969#undef __glibcxx_want_ratio
│ │ │
1970
│ │ │ -
1971 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
1972 typename _Compare, typename _Alloc>
│ │ │ -
1973 typename _Rb_tree<_Key, _Val, _KeyOfValue,
│ │ │ -
1974 _Compare, _Alloc>::iterator
│ │ │ -
1975 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
1976 _M_upper_bound(_Link_type __x, _Base_ptr __y,
│ │ │ -
1977 const _Key& __k)
│ │ │ -
1978 {
│ │ │ -
1979 while (__x != 0)
│ │ │ -
1980 if (_M_impl._M_key_compare(__k, _S_key(__x)))
│ │ │ -
1981 __y = __x, __x = _S_left(__x);
│ │ │ -
1982 else
│ │ │ -
1983 __x = _S_right(__x);
│ │ │ -
1984 return iterator(__y);
│ │ │ -
1985 }
│ │ │ -
1986
│ │ │ -
1987 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
1988 typename _Compare, typename _Alloc>
│ │ │ -
1989 typename _Rb_tree<_Key, _Val, _KeyOfValue,
│ │ │ -
1990 _Compare, _Alloc>::const_iterator
│ │ │ -
1991 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
1992 _M_upper_bound(_Const_Link_type __x, _Const_Base_ptr __y,
│ │ │ -
1993 const _Key& __k) const
│ │ │ -
1994 {
│ │ │ -
1995 while (__x != 0)
│ │ │ -
1996 if (_M_impl._M_key_compare(__k, _S_key(__x)))
│ │ │ -
1997 __y = __x, __x = _S_left(__x);
│ │ │ -
1998 else
│ │ │ -
1999 __x = _S_right(__x);
│ │ │ -
2000 return const_iterator(__y);
│ │ │ -
2001 }
│ │ │ -
2002
│ │ │ -
2003 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2004 typename _Compare, typename _Alloc>
│ │ │ -
2005 pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
│ │ │ -
2006 _Compare, _Alloc>::iterator,
│ │ │ -
2007 typename _Rb_tree<_Key, _Val, _KeyOfValue,
│ │ │ -
2008 _Compare, _Alloc>::iterator>
│ │ │ -
2009 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2010 equal_range(const _Key& __k)
│ │ │ -
2011 {
│ │ │ -
2012 _Link_type __x = _M_begin();
│ │ │ -
2013 _Base_ptr __y = _M_end();
│ │ │ -
2014 while (__x != 0)
│ │ │ -
2015 {
│ │ │ -
2016 if (_M_impl._M_key_compare(_S_key(__x), __k))
│ │ │ -
2017 __x = _S_right(__x);
│ │ │ -
2018 else if (_M_impl._M_key_compare(__k, _S_key(__x)))
│ │ │ -
2019 __y = __x, __x = _S_left(__x);
│ │ │ -
2020 else
│ │ │ -
2021 {
│ │ │ -
2022 _Link_type __xu(__x);
│ │ │ -
2023 _Base_ptr __yu(__y);
│ │ │ -
2024 __y = __x, __x = _S_left(__x);
│ │ │ -
2025 __xu = _S_right(__xu);
│ │ │ -
2026 return pair<iterator,
│ │ │ -
2027 iterator>(_M_lower_bound(__x, __y, __k),
│ │ │ -
2028 _M_upper_bound(__xu, __yu, __k));
│ │ │ -
2029 }
│ │ │ -
2030 }
│ │ │ -
2031 return pair<iterator, iterator>(iterator(__y),
│ │ │ -
2032 iterator(__y));
│ │ │ -
2033 }
│ │ │ -
2034
│ │ │ -
2035 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2036 typename _Compare, typename _Alloc>
│ │ │ -
2037 pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
│ │ │ -
2038 _Compare, _Alloc>::const_iterator,
│ │ │ -
2039 typename _Rb_tree<_Key, _Val, _KeyOfValue,
│ │ │ -
2040 _Compare, _Alloc>::const_iterator>
│ │ │ -
2041 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2042 equal_range(const _Key& __k) const
│ │ │ -
2043 {
│ │ │ -
2044 _Const_Link_type __x = _M_begin();
│ │ │ -
2045 _Const_Base_ptr __y = _M_end();
│ │ │ -
2046 while (__x != 0)
│ │ │ -
2047 {
│ │ │ -
2048 if (_M_impl._M_key_compare(_S_key(__x), __k))
│ │ │ -
2049 __x = _S_right(__x);
│ │ │ -
2050 else if (_M_impl._M_key_compare(__k, _S_key(__x)))
│ │ │ -
2051 __y = __x, __x = _S_left(__x);
│ │ │ -
2052 else
│ │ │ -
2053 {
│ │ │ -
2054 _Const_Link_type __xu(__x);
│ │ │ -
2055 _Const_Base_ptr __yu(__y);
│ │ │ -
2056 __y = __x, __x = _S_left(__x);
│ │ │ -
2057 __xu = _S_right(__xu);
│ │ │ -
2058 return pair<const_iterator,
│ │ │ -
2059 const_iterator>(_M_lower_bound(__x, __y, __k),
│ │ │ -
2060 _M_upper_bound(__xu, __yu, __k));
│ │ │ -
2061 }
│ │ │ -
2062 }
│ │ │ -
2063 return pair<const_iterator, const_iterator>(const_iterator(__y),
│ │ │ -
2064 const_iterator(__y));
│ │ │ -
2065 }
│ │ │ -
2066
│ │ │ -
2067 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2068 typename _Compare, typename _Alloc>
│ │ │ -
2069 void
│ │ │ -
2070 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2071 swap(_Rb_tree& __t)
│ │ │ -
2072 _GLIBCXX_NOEXCEPT_IF(__is_nothrow_swappable<_Compare>::value)
│ │ │ -
2073 {
│ │ │ -
2074 if (_M_root() == 0)
│ │ │ -
2075 {
│ │ │ -
2076 if (__t._M_root() != 0)
│ │ │ -
2077 _M_impl._M_move_data(__t._M_impl);
│ │ │ -
2078 }
│ │ │ -
2079 else if (__t._M_root() == 0)
│ │ │ -
2080 __t._M_impl._M_move_data(_M_impl);
│ │ │ -
2081 else
│ │ │ -
2082 {
│ │ │ -
2083 std::swap(_M_root(),__t._M_root());
│ │ │ -
2084 std::swap(_M_leftmost(),__t._M_leftmost());
│ │ │ -
2085 std::swap(_M_rightmost(),__t._M_rightmost());
│ │ │ -
2086
│ │ │ -
2087 _M_root()->_M_parent = _M_end();
│ │ │ -
2088 __t._M_root()->_M_parent = __t._M_end();
│ │ │ -
2089 std::swap(this->_M_impl._M_node_count, __t._M_impl._M_node_count);
│ │ │ -
2090 }
│ │ │ -
2091 // No need to swap header's color as it does not change.
│ │ │ -
2092
│ │ │ -
2093 using std::swap;
│ │ │ -
2094 swap(this->_M_impl._M_key_compare, __t._M_impl._M_key_compare);
│ │ │ -
2095
│ │ │ -
2096 _Alloc_traits::_S_on_swap(_M_get_Node_allocator(),
│ │ │ -
2097 __t._M_get_Node_allocator());
│ │ │ -
2098 }
│ │ │ -
2099
│ │ │ -
2100 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2101 typename _Compare, typename _Alloc>
│ │ │ -
2102 pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
│ │ │ -
2103 _Compare, _Alloc>::_Base_ptr,
│ │ │ -
2104 typename _Rb_tree<_Key, _Val, _KeyOfValue,
│ │ │ -
2105 _Compare, _Alloc>::_Base_ptr>
│ │ │ -
2106 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2107 _M_get_insert_unique_pos(const key_type& __k)
│ │ │ -
2108 {
│ │ │ -
2109 typedef pair<_Base_ptr, _Base_ptr> _Res;
│ │ │ -
2110 _Link_type __x = _M_begin();
│ │ │ -
2111 _Base_ptr __y = _M_end();
│ │ │ -
2112 bool __comp = true;
│ │ │ -
2113 while (__x != 0)
│ │ │ -
2114 {
│ │ │ -
2115 __y = __x;
│ │ │ -
2116 __comp = _M_impl._M_key_compare(__k, _S_key(__x));
│ │ │ -
2117 __x = __comp ? _S_left(__x) : _S_right(__x);
│ │ │ -
2118 }
│ │ │ -
2119 iterator __j = iterator(__y);
│ │ │ -
2120 if (__comp)
│ │ │ -
2121 {
│ │ │ -
2122 if (__j == begin())
│ │ │ -
2123 return _Res(__x, __y);
│ │ │ -
2124 else
│ │ │ -
2125 --__j;
│ │ │ -
2126 }
│ │ │ -
2127 if (_M_impl._M_key_compare(_S_key(__j._M_node), __k))
│ │ │ -
2128 return _Res(__x, __y);
│ │ │ -
2129 return _Res(__j._M_node, 0);
│ │ │ -
2130 }
│ │ │ -
2131
│ │ │ -
2132 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2133 typename _Compare, typename _Alloc>
│ │ │ -
2134 pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
│ │ │ -
2135 _Compare, _Alloc>::_Base_ptr,
│ │ │ -
2136 typename _Rb_tree<_Key, _Val, _KeyOfValue,
│ │ │ -
2137 _Compare, _Alloc>::_Base_ptr>
│ │ │ -
2138 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2139 _M_get_insert_equal_pos(const key_type& __k)
│ │ │ -
2140 {
│ │ │ -
2141 typedef pair<_Base_ptr, _Base_ptr> _Res;
│ │ │ -
2142 _Link_type __x = _M_begin();
│ │ │ -
2143 _Base_ptr __y = _M_end();
│ │ │ -
2144 while (__x != 0)
│ │ │ -
2145 {
│ │ │ -
2146 __y = __x;
│ │ │ -
2147 __x = _M_impl._M_key_compare(__k, _S_key(__x)) ?
│ │ │ -
2148 _S_left(__x) : _S_right(__x);
│ │ │ -
2149 }
│ │ │ -
2150 return _Res(__x, __y);
│ │ │ -
2151 }
│ │ │ -
2152
│ │ │ -
2153 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2154 typename _Compare, typename _Alloc>
│ │ │ -
2155#if __cplusplus >= 201103L
│ │ │ -
2156 template<typename _Arg>
│ │ │ -
2157#endif
│ │ │ -
2158 pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
│ │ │ -
2159 _Compare, _Alloc>::iterator, bool>
│ │ │ -
2160 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2161#if __cplusplus >= 201103L
│ │ │ -
2162 _M_insert_unique(_Arg&& __v)
│ │ │ -
2163#else
│ │ │ -
2164 _M_insert_unique(const _Val& __v)
│ │ │ -
2165#endif
│ │ │ -
2166 {
│ │ │ -
2167 typedef pair<iterator, bool> _Res;
│ │ │ -
2168 pair<_Base_ptr, _Base_ptr> __res
│ │ │ -
2169 = _M_get_insert_unique_pos(_KeyOfValue()(__v));
│ │ │ -
2170
│ │ │ -
2171 if (__res.second)
│ │ │ -
2172 {
│ │ │ -
2173 _Alloc_node __an(*this);
│ │ │ -
2174 return _Res(_M_insert_(__res.first, __res.second,
│ │ │ -
2175 _GLIBCXX_FORWARD(_Arg, __v), __an),
│ │ │ -
2176 true);
│ │ │ -
2177 }
│ │ │ -
2178
│ │ │ -
2179 return _Res(iterator(__res.first), false);
│ │ │ -
2180 }
│ │ │ -
2181
│ │ │ -
2182 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2183 typename _Compare, typename _Alloc>
│ │ │ -
2184#if __cplusplus >= 201103L
│ │ │ -
2185 template<typename _Arg>
│ │ │ -
2186#endif
│ │ │ -
2187 typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
│ │ │ -
2188 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2189#if __cplusplus >= 201103L
│ │ │ -
2190 _M_insert_equal(_Arg&& __v)
│ │ │ -
2191#else
│ │ │ -
2192 _M_insert_equal(const _Val& __v)
│ │ │ -
2193#endif
│ │ │ -
2194 {
│ │ │ -
2195 pair<_Base_ptr, _Base_ptr> __res
│ │ │ -
2196 = _M_get_insert_equal_pos(_KeyOfValue()(__v));
│ │ │ -
2197 _Alloc_node __an(*this);
│ │ │ -
2198 return _M_insert_(__res.first, __res.second,
│ │ │ -
2199 _GLIBCXX_FORWARD(_Arg, __v), __an);
│ │ │ -
2200 }
│ │ │ -
2201
│ │ │ -
2202 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2203 typename _Compare, typename _Alloc>
│ │ │ -
2204 pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
│ │ │ -
2205 _Compare, _Alloc>::_Base_ptr,
│ │ │ -
2206 typename _Rb_tree<_Key, _Val, _KeyOfValue,
│ │ │ -
2207 _Compare, _Alloc>::_Base_ptr>
│ │ │ -
2208 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2209 _M_get_insert_hint_unique_pos(const_iterator __position,
│ │ │ -
2210 const key_type& __k)
│ │ │ -
2211 {
│ │ │ -
2212 iterator __pos = __position._M_const_cast();
│ │ │ -
2213 typedef pair<_Base_ptr, _Base_ptr> _Res;
│ │ │ -
2214
│ │ │ -
2215 // end()
│ │ │ -
2216 if (__pos._M_node == _M_end())
│ │ │ -
2217 {
│ │ │ -
2218 if (size() > 0
│ │ │ -
2219 && _M_impl._M_key_compare(_S_key(_M_rightmost()), __k))
│ │ │ -
2220 return _Res(0, _M_rightmost());
│ │ │ -
2221 else
│ │ │ -
2222 return _M_get_insert_unique_pos(__k);
│ │ │ -
2223 }
│ │ │ -
2224 else if (_M_impl._M_key_compare(__k, _S_key(__pos._M_node)))
│ │ │ -
2225 {
│ │ │ -
2226 // First, try before...
│ │ │ -
2227 iterator __before = __pos;
│ │ │ -
2228 if (__pos._M_node == _M_leftmost()) // begin()
│ │ │ -
2229 return _Res(_M_leftmost(), _M_leftmost());
│ │ │ -
2230 else if (_M_impl._M_key_compare(_S_key((--__before)._M_node), __k))
│ │ │ -
2231 {
│ │ │ -
2232 if (_S_right(__before._M_node) == 0)
│ │ │ -
2233 return _Res(0, __before._M_node);
│ │ │ -
2234 else
│ │ │ -
2235 return _Res(__pos._M_node, __pos._M_node);
│ │ │ -
2236 }
│ │ │ -
2237 else
│ │ │ -
2238 return _M_get_insert_unique_pos(__k);
│ │ │ -
2239 }
│ │ │ -
2240 else if (_M_impl._M_key_compare(_S_key(__pos._M_node), __k))
│ │ │ -
2241 {
│ │ │ -
2242 // ... then try after.
│ │ │ -
2243 iterator __after = __pos;
│ │ │ -
2244 if (__pos._M_node == _M_rightmost())
│ │ │ -
2245 return _Res(0, _M_rightmost());
│ │ │ -
2246 else if (_M_impl._M_key_compare(__k, _S_key((++__after)._M_node)))
│ │ │ -
2247 {
│ │ │ -
2248 if (_S_right(__pos._M_node) == 0)
│ │ │ -
2249 return _Res(0, __pos._M_node);
│ │ │ -
2250 else
│ │ │ -
2251 return _Res(__after._M_node, __after._M_node);
│ │ │ -
2252 }
│ │ │ -
2253 else
│ │ │ -
2254 return _M_get_insert_unique_pos(__k);
│ │ │ -
2255 }
│ │ │ -
2256 else
│ │ │ -
2257 // Equivalent keys.
│ │ │ -
2258 return _Res(__pos._M_node, 0);
│ │ │ -
2259 }
│ │ │ -
2260
│ │ │ -
2261 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2262 typename _Compare, typename _Alloc>
│ │ │ -
2263#if __cplusplus >= 201103L
│ │ │ -
2264 template<typename _Arg, typename _NodeGen>
│ │ │ -
2265#else
│ │ │ -
2266 template<typename _NodeGen>
│ │ │ -
2267#endif
│ │ │ -
2268 typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
│ │ │ -
2269 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2270 _M_insert_unique_(const_iterator __position,
│ │ │ -
2271#if __cplusplus >= 201103L
│ │ │ -
2272 _Arg&& __v,
│ │ │ -
2273#else
│ │ │ -
2274 const _Val& __v,
│ │ │ -
2275#endif
│ │ │ -
2276 _NodeGen& __node_gen)
│ │ │ -
2277 {
│ │ │ -
2278 pair<_Base_ptr, _Base_ptr> __res
│ │ │ -
2279 = _M_get_insert_hint_unique_pos(__position, _KeyOfValue()(__v));
│ │ │ -
2280
│ │ │ -
2281 if (__res.second)
│ │ │ -
2282 return _M_insert_(__res.first, __res.second,
│ │ │ -
2283 _GLIBCXX_FORWARD(_Arg, __v),
│ │ │ -
2284 __node_gen);
│ │ │ -
2285 return iterator(__res.first);
│ │ │ -
2286 }
│ │ │ -
2287
│ │ │ -
2288 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2289 typename _Compare, typename _Alloc>
│ │ │ -
2290 pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
│ │ │ -
2291 _Compare, _Alloc>::_Base_ptr,
│ │ │ -
2292 typename _Rb_tree<_Key, _Val, _KeyOfValue,
│ │ │ -
2293 _Compare, _Alloc>::_Base_ptr>
│ │ │ -
2294 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2295 _M_get_insert_hint_equal_pos(const_iterator __position, const key_type& __k)
│ │ │ -
2296 {
│ │ │ -
2297 iterator __pos = __position._M_const_cast();
│ │ │ -
2298 typedef pair<_Base_ptr, _Base_ptr> _Res;
│ │ │ -
2299
│ │ │ -
2300 // end()
│ │ │ -
2301 if (__pos._M_node == _M_end())
│ │ │ -
2302 {
│ │ │ -
2303 if (size() > 0
│ │ │ -
2304 && !_M_impl._M_key_compare(__k, _S_key(_M_rightmost())))
│ │ │ -
2305 return _Res(0, _M_rightmost());
│ │ │ -
2306 else
│ │ │ -
2307 return _M_get_insert_equal_pos(__k);
│ │ │ -
2308 }
│ │ │ -
2309 else if (!_M_impl._M_key_compare(_S_key(__pos._M_node), __k))
│ │ │ -
2310 {
│ │ │ -
2311 // First, try before...
│ │ │ -
2312 iterator __before = __pos;
│ │ │ -
2313 if (__pos._M_node == _M_leftmost()) // begin()
│ │ │ -
2314 return _Res(_M_leftmost(), _M_leftmost());
│ │ │ -
2315 else if (!_M_impl._M_key_compare(__k, _S_key((--__before)._M_node)))
│ │ │ -
2316 {
│ │ │ -
2317 if (_S_right(__before._M_node) == 0)
│ │ │ -
2318 return _Res(0, __before._M_node);
│ │ │ -
2319 else
│ │ │ -
2320 return _Res(__pos._M_node, __pos._M_node);
│ │ │ -
2321 }
│ │ │ -
2322 else
│ │ │ -
2323 return _M_get_insert_equal_pos(__k);
│ │ │ -
2324 }
│ │ │ -
2325 else
│ │ │ -
2326 {
│ │ │ -
2327 // ... then try after.
│ │ │ -
2328 iterator __after = __pos;
│ │ │ -
2329 if (__pos._M_node == _M_rightmost())
│ │ │ -
2330 return _Res(0, _M_rightmost());
│ │ │ -
2331 else if (!_M_impl._M_key_compare(_S_key((++__after)._M_node), __k))
│ │ │ -
2332 {
│ │ │ -
2333 if (_S_right(__pos._M_node) == 0)
│ │ │ -
2334 return _Res(0, __pos._M_node);
│ │ │ -
2335 else
│ │ │ -
2336 return _Res(__after._M_node, __after._M_node);
│ │ │ -
2337 }
│ │ │ -
2338 else
│ │ │ -
2339 return _Res(0, 0);
│ │ │ -
2340 }
│ │ │ -
2341 }
│ │ │ -
2342
│ │ │ -
2343 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2344 typename _Compare, typename _Alloc>
│ │ │ -
2345#if __cplusplus >= 201103L
│ │ │ -
2346 template<typename _Arg, typename _NodeGen>
│ │ │ -
2347#else
│ │ │ -
2348 template<typename _NodeGen>
│ │ │ -
2349#endif
│ │ │ -
2350 typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
│ │ │ -
2351 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2352 _M_insert_equal_(const_iterator __position,
│ │ │ -
2353#if __cplusplus >= 201103L
│ │ │ -
2354 _Arg&& __v,
│ │ │ -
2355#else
│ │ │ -
2356 const _Val& __v,
│ │ │ -
2357#endif
│ │ │ -
2358 _NodeGen& __node_gen)
│ │ │ -
2359 {
│ │ │ -
2360 pair<_Base_ptr, _Base_ptr> __res
│ │ │ -
2361 = _M_get_insert_hint_equal_pos(__position, _KeyOfValue()(__v));
│ │ │ -
2362
│ │ │ -
2363 if (__res.second)
│ │ │ -
2364 return _M_insert_(__res.first, __res.second,
│ │ │ -
2365 _GLIBCXX_FORWARD(_Arg, __v),
│ │ │ -
2366 __node_gen);
│ │ │ -
2367
│ │ │ -
2368 return _M_insert_equal_lower(_GLIBCXX_FORWARD(_Arg, __v));
│ │ │ -
2369 }
│ │ │ -
2370
│ │ │ -
2371#if __cplusplus >= 201103L
│ │ │ -
2372 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2373 typename _Compare, typename _Alloc>
│ │ │ -
2374 auto
│ │ │ -
2375 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2376 _M_insert_node(_Base_ptr __x, _Base_ptr __p, _Link_type __z)
│ │ │ -
2377 -> iterator
│ │ │ -
2378 {
│ │ │ -
2379 bool __insert_left = (__x != 0 || __p == _M_end()
│ │ │ -
2380 || _M_impl._M_key_compare(_S_key(__z),
│ │ │ -
2381 _S_key(__p)));
│ │ │ -
2382
│ │ │ -
2383 _Rb_tree_insert_and_rebalance(__insert_left, __z, __p,
│ │ │ -
2384 this->_M_impl._M_header);
│ │ │ -
2385 ++_M_impl._M_node_count;
│ │ │ -
2386 return iterator(__z);
│ │ │ -
2387 }
│ │ │ -
2388
│ │ │ -
2389 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2390 typename _Compare, typename _Alloc>
│ │ │ -
2391 auto
│ │ │ -
2392 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2393 _M_insert_lower_node(_Base_ptr __p, _Link_type __z)
│ │ │ -
2394 -> iterator
│ │ │ -
2395 {
│ │ │ -
2396 bool __insert_left = (__p == _M_end()
│ │ │ -
2397 || !_M_impl._M_key_compare(_S_key(__p),
│ │ │ -
2398 _S_key(__z)));
│ │ │ -
2399
│ │ │ -
2400 _Rb_tree_insert_and_rebalance(__insert_left, __z, __p,
│ │ │ -
2401 this->_M_impl._M_header);
│ │ │ -
2402 ++_M_impl._M_node_count;
│ │ │ -
2403 return iterator(__z);
│ │ │ -
2404 }
│ │ │ -
2405
│ │ │ -
2406 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2407 typename _Compare, typename _Alloc>
│ │ │ -
2408 auto
│ │ │ -
2409 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2410 _M_insert_equal_lower_node(_Link_type __z)
│ │ │ -
2411 -> iterator
│ │ │ -
2412 {
│ │ │ -
2413 _Link_type __x = _M_begin();
│ │ │ -
2414 _Base_ptr __y = _M_end();
│ │ │ -
2415 while (__x != 0)
│ │ │ -
2416 {
│ │ │ -
2417 __y = __x;
│ │ │ -
2418 __x = !_M_impl._M_key_compare(_S_key(__x), _S_key(__z)) ?
│ │ │ -
2419 _S_left(__x) : _S_right(__x);
│ │ │ -
2420 }
│ │ │ -
2421 return _M_insert_lower_node(__y, __z);
│ │ │ -
2422 }
│ │ │ -
2423
│ │ │ -
2424 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2425 typename _Compare, typename _Alloc>
│ │ │ -
2426 template<typename... _Args>
│ │ │ -
2427 auto
│ │ │ -
2428 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2429 _M_emplace_unique(_Args&&... __args)
│ │ │ -
2430 -> pair<iterator, bool>
│ │ │ -
2431 {
│ │ │ -
2432 _Auto_node __z(*this, std::forward<_Args>(__args)...);
│ │ │ -
2433 auto __res = _M_get_insert_unique_pos(__z._M_key());
│ │ │ -
2434 if (__res.second)
│ │ │ -
2435 return {__z._M_insert(__res), true};
│ │ │ -
2436 return {iterator(__res.first), false};
│ │ │ -
2437 }
│ │ │ -
2438
│ │ │ -
2439 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2440 typename _Compare, typename _Alloc>
│ │ │ -
2441 template<typename... _Args>
│ │ │ -
2442 auto
│ │ │ -
2443 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2444 _M_emplace_equal(_Args&&... __args)
│ │ │ -
2445 -> iterator
│ │ │ -
2446 {
│ │ │ -
2447 _Auto_node __z(*this, std::forward<_Args>(__args)...);
│ │ │ -
2448 auto __res = _M_get_insert_equal_pos(__z._M_key());
│ │ │ -
2449 return __z._M_insert(__res);
│ │ │ -
2450 }
│ │ │ -
2451
│ │ │ -
2452 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2453 typename _Compare, typename _Alloc>
│ │ │ -
2454 template<typename... _Args>
│ │ │ -
2455 auto
│ │ │ -
2456 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2457 _M_emplace_hint_unique(const_iterator __pos, _Args&&... __args)
│ │ │ -
2458 -> iterator
│ │ │ -
2459 {
│ │ │ -
2460 _Auto_node __z(*this, std::forward<_Args>(__args)...);
│ │ │ -
2461 auto __res = _M_get_insert_hint_unique_pos(__pos, __z._M_key());
│ │ │ -
2462 if (__res.second)
│ │ │ -
2463 return __z._M_insert(__res);
│ │ │ -
2464 return iterator(__res.first);
│ │ │ -
2465 }
│ │ │ -
2466
│ │ │ -
2467 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2468 typename _Compare, typename _Alloc>
│ │ │ -
2469 template<typename... _Args>
│ │ │ -
2470 auto
│ │ │ -
2471 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2472 _M_emplace_hint_equal(const_iterator __pos, _Args&&... __args)
│ │ │ -
2473 -> iterator
│ │ │ -
2474 {
│ │ │ -
2475 _Auto_node __z(*this, std::forward<_Args>(__args)...);
│ │ │ -
2476 auto __res = _M_get_insert_hint_equal_pos(__pos, __z._M_key());
│ │ │ -
2477 if (__res.second)
│ │ │ -
2478 return __z._M_insert(__res);
│ │ │ -
2479 return __z._M_insert_equal_lower();
│ │ │ -
2480 }
│ │ │ -
2481#endif
│ │ │ -
2482
│ │ │ -
2483
│ │ │ -
2484 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2485 typename _Compare, typename _Alloc>
│ │ │ -
2486 void
│ │ │ -
2487 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2488 _M_erase_aux(const_iterator __position)
│ │ │ -
2489 {
│ │ │ -
2490 _Link_type __y =
│ │ │ -
2491 static_cast<_Link_type>(_Rb_tree_rebalance_for_erase
│ │ │ -
2492 (const_cast<_Base_ptr>(__position._M_node),
│ │ │ -
2493 this->_M_impl._M_header));
│ │ │ -
2494 _M_drop_node(__y);
│ │ │ -
2495 --_M_impl._M_node_count;
│ │ │ -
2496 }
│ │ │ -
2497
│ │ │ -
2498 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2499 typename _Compare, typename _Alloc>
│ │ │ -
2500 void
│ │ │ -
2501 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2502 _M_erase_aux(const_iterator __first, const_iterator __last)
│ │ │ -
2503 {
│ │ │ -
2504 if (__first == begin() && __last == end())
│ │ │ -
2505 clear();
│ │ │ -
2506 else
│ │ │ -
2507 while (__first != __last)
│ │ │ -
2508 _M_erase_aux(__first++);
│ │ │ -
2509 }
│ │ │ -
2510
│ │ │ -
2511 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2512 typename _Compare, typename _Alloc>
│ │ │ -
2513 typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type
│ │ │ -
2514 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2515 erase(const _Key& __x)
│ │ │ -
2516 {
│ │ │ -
2517 pair<iterator, iterator> __p = equal_range(__x);
│ │ │ -
2518 const size_type __old_size = size();
│ │ │ -
2519 _M_erase_aux(__p.first, __p.second);
│ │ │ -
2520 return __old_size - size();
│ │ │ -
2521 }
│ │ │ -
2522
│ │ │ -
2523 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2524 typename _Compare, typename _Alloc>
│ │ │ -
2525 typename _Rb_tree<_Key, _Val, _KeyOfValue,
│ │ │ -
2526 _Compare, _Alloc>::iterator
│ │ │ -
2527 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2528 find(const _Key& __k)
│ │ │ -
2529 {
│ │ │ -
2530 iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k);
│ │ │ -
2531 return (__j == end()
│ │ │ -
2532 || _M_impl._M_key_compare(__k,
│ │ │ -
2533 _S_key(__j._M_node))) ? end() : __j;
│ │ │ -
2534 }
│ │ │ -
2535
│ │ │ -
2536 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2537 typename _Compare, typename _Alloc>
│ │ │ -
2538 typename _Rb_tree<_Key, _Val, _KeyOfValue,
│ │ │ -
2539 _Compare, _Alloc>::const_iterator
│ │ │ -
2540 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2541 find(const _Key& __k) const
│ │ │ -
2542 {
│ │ │ -
2543 const_iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k);
│ │ │ -
2544 return (__j == end()
│ │ │ -
2545 || _M_impl._M_key_compare(__k,
│ │ │ -
2546 _S_key(__j._M_node))) ? end() : __j;
│ │ │ -
2547 }
│ │ │ -
2548
│ │ │ -
2549 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2550 typename _Compare, typename _Alloc>
│ │ │ -
2551 typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type
│ │ │ -
2552 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
│ │ │ -
2553 count(const _Key& __k) const
│ │ │ -
2554 {
│ │ │ -
2555 pair<const_iterator, const_iterator> __p = equal_range(__k);
│ │ │ -
2556 const size_type __n = std::distance(__p.first, __p.second);
│ │ │ -
2557 return __n;
│ │ │ -
2558 }
│ │ │ -
2559
│ │ │ -
2560 _GLIBCXX_PURE unsigned int
│ │ │ -
2561 _Rb_tree_black_count(const _Rb_tree_node_base* __node,
│ │ │ -
2562 const _Rb_tree_node_base* __root) throw ();
│ │ │ -
2563
│ │ │ -
2564 template<typename _Key, typename _Val, typename _KeyOfValue,
│ │ │ -
2565 typename _Compare, typename _Alloc>
│ │ │ -
2566 bool
│ │ │ -
2567 _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::__rb_verify() const
│ │ │ -
2568 {
│ │ │ -
2569 if (_M_impl._M_node_count == 0 || begin() == end())
│ │ │ -
2570 return _M_impl._M_node_count == 0 && begin() == end()
│ │ │ -
2571 && this->_M_impl._M_header._M_left == _M_end()
│ │ │ -
2572 && this->_M_impl._M_header._M_right == _M_end();
│ │ │ -
2573
│ │ │ -
2574 unsigned int __len = _Rb_tree_black_count(_M_leftmost(), _M_root());
│ │ │ -
2575 for (const_iterator __it = begin(); __it != end(); ++__it)
│ │ │ -
2576 {
│ │ │ -
2577 _Const_Link_type __x = static_cast<_Const_Link_type>(__it._M_node);
│ │ │ -
2578 _Const_Link_type __L = _S_left(__x);
│ │ │ -
2579 _Const_Link_type __R = _S_right(__x);
│ │ │ -
2580
│ │ │ -
2581 if (__x->_M_color == _S_red)
│ │ │ -
2582 if ((__L && __L->_M_color == _S_red)
│ │ │ -
2583 || (__R && __R->_M_color == _S_red))
│ │ │ -
2584 return false;
│ │ │ -
2585
│ │ │ -
2586 if (__L && _M_impl._M_key_compare(_S_key(__x), _S_key(__L)))
│ │ │ -
2587 return false;
│ │ │ -
2588 if (__R && _M_impl._M_key_compare(_S_key(__R), _S_key(__x)))
│ │ │ -
2589 return false;
│ │ │ -
2590
│ │ │ -
2591 if (!__L && !__R && _Rb_tree_black_count(__x, _M_root()) != __len)
│ │ │ -
2592 return false;
│ │ │ -
2593 }
│ │ │ -
2594
│ │ │ -
2595 if (_M_leftmost() != _Rb_tree_node_base::_S_minimum(_M_root()))
│ │ │ -
2596 return false;
│ │ │ -
2597 if (_M_rightmost() != _Rb_tree_node_base::_S_maximum(_M_root()))
│ │ │ -
2598 return false;
│ │ │ -
2599 return true;
│ │ │ -
2600 }
│ │ │ -
2601
│ │ │ -
2602#ifdef __glibcxx_node_extract // >= C++17
│ │ │ -
2603 // Allow access to internals of compatible _Rb_tree specializations.
│ │ │ -
2604 template<typename _Key, typename _Val, typename _Sel, typename _Cmp1,
│ │ │ -
2605 typename _Alloc, typename _Cmp2>
│ │ │ -
2606 struct _Rb_tree_merge_helper<_Rb_tree<_Key, _Val, _Sel, _Cmp1, _Alloc>,
│ │ │ -
2607 _Cmp2>
│ │ │ -
2608 {
│ │ │ -
2609 private:
│ │ │ -
2610 friend class _Rb_tree<_Key, _Val, _Sel, _Cmp1, _Alloc>;
│ │ │ -
2611
│ │ │ -
2612 static auto&
│ │ │ -
2613 _S_get_impl(_Rb_tree<_Key, _Val, _Sel, _Cmp2, _Alloc>& __tree)
│ │ │ -
2614 { return __tree._M_impl; }
│ │ │ -
2615 };
│ │ │ -
2616#endif // C++17
│ │ │ -
2617
│ │ │ -
2618_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
2619} // namespace
│ │ │ -
2620
│ │ │ -
2621#endif
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
constexpr bool operator<(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:822
│ │ │ -
constexpr complex< _Tp > operator*(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x times y.
Definition complex:400
│ │ │ -
__bool_constant< true > true_type
The type used as a compile-time boolean with true value.
Definition type_traits:111
│ │ │ -
__bool_constant< false > false_type
The type used as a compile-time boolean with false value.
Definition type_traits:114
│ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │ -
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:51
│ │ │ -
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:71
│ │ │ -
_Tp * end(valarray< _Tp > &__va) noexcept
Return an iterator pointing to one past the last element of the valarray.
Definition valarray:1249
│ │ │ -
_Tp * begin(valarray< _Tp > &__va) noexcept
Return an iterator pointing to the first element of the valarray.
Definition valarray:1227
│ │ │ -
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.
│ │ │ -
constexpr auto rend(_Container &__cont) -> decltype(__cont.rend())
Return a reverse iterator pointing one past the first element of the container.
│ │ │ -
constexpr iterator_traits< _InputIterator >::difference_type distance(_InputIterator __first, _InputIterator __last)
A generalization of pointer arithmetic.
│ │ │ -
constexpr auto empty(const _Container &__cont) noexcept(noexcept(__cont.empty())) -> decltype(__cont.empty())
Return whether a container is empty.
│ │ │ -
constexpr auto size(const _Container &__cont) noexcept(noexcept(__cont.size())) -> decltype(__cont.size())
Return the size of a container.
│ │ │ -
constexpr auto rbegin(_Container &__cont) -> decltype(__cont.rbegin())
Return a reverse iterator pointing to the last element of the container.
│ │ │ -
typename __detected_or_t< is_empty< _Alloc >, __equal, _Alloc >::type is_always_equal
Whether all instances of the allocator type compare equal.
│ │ │ - │ │ │ -
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.
│ │ │ - │ │ │ +
1971#if !defined(__cpp_lib_reference_wrapper)
│ │ │ +
1972# if (__cplusplus > 202302L)
│ │ │ +
1973# define __glibcxx_reference_wrapper 202403L
│ │ │ +
1974# if defined(__glibcxx_want_all) || defined(__glibcxx_want_reference_wrapper)
│ │ │ +
1975# define __cpp_lib_reference_wrapper 202403L
│ │ │ +
1976# endif
│ │ │ +
1977# endif
│ │ │ +
1978#endif /* !defined(__cpp_lib_reference_wrapper) && defined(__glibcxx_want_reference_wrapper) */
│ │ │ +
1979#undef __glibcxx_want_reference_wrapper
│ │ │ +
1980
│ │ │ +
1981#if !defined(__cpp_lib_saturation_arithmetic)
│ │ │ +
1982# if (__cplusplus > 202302L)
│ │ │ +
1983# define __glibcxx_saturation_arithmetic 202311L
│ │ │ +
1984# if defined(__glibcxx_want_all) || defined(__glibcxx_want_saturation_arithmetic)
│ │ │ +
1985# define __cpp_lib_saturation_arithmetic 202311L
│ │ │ +
1986# endif
│ │ │ +
1987# endif
│ │ │ +
1988#endif /* !defined(__cpp_lib_saturation_arithmetic) && defined(__glibcxx_want_saturation_arithmetic) */
│ │ │ +
1989#undef __glibcxx_want_saturation_arithmetic
│ │ │ +
1990
│ │ │ +
1991#if !defined(__cpp_lib_text_encoding)
│ │ │ +
1992# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED && (_GLIBCXX_USE_NL_LANGINFO_L)
│ │ │ +
1993# define __glibcxx_text_encoding 202306L
│ │ │ +
1994# if defined(__glibcxx_want_all) || defined(__glibcxx_want_text_encoding)
│ │ │ +
1995# define __cpp_lib_text_encoding 202306L
│ │ │ +
1996# endif
│ │ │ +
1997# endif
│ │ │ +
1998#endif /* !defined(__cpp_lib_text_encoding) && defined(__glibcxx_want_text_encoding) */
│ │ │ +
1999#undef __glibcxx_want_text_encoding
│ │ │ +
2000
│ │ │ +
2001#if !defined(__cpp_lib_to_string)
│ │ │ +
2002# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED && (__glibcxx_to_chars)
│ │ │ +
2003# define __glibcxx_to_string 202306L
│ │ │ +
2004# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_string)
│ │ │ +
2005# define __cpp_lib_to_string 202306L
│ │ │ +
2006# endif
│ │ │ +
2007# endif
│ │ │ +
2008#endif /* !defined(__cpp_lib_to_string) && defined(__glibcxx_want_to_string) */
│ │ │ +
2009#undef __glibcxx_want_to_string
│ │ │ +
2010
│ │ │ +
2011#undef __glibcxx_want_all
│ │ │ + │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,2727 +1,2294 @@ │ │ │ │ libstdc++ │ │ │ │ -stl_tree.h │ │ │ │ +version.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// RB tree implementation -*- C++ -*- │ │ │ │ +1// Copyright (C) 2023-2024 Free Software Foundation, Inc. │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2001-2024 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/* │ │ │ │ -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 │ │ │ │ +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// . │ │ │ │ +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 │ │ │ │ +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#pragma GCC system_header │ │ │ │ +48 │ │ │ │ +49#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ +50 │ │ │ │ +51#if !defined(__cpp_lib_incomplete_container_elements) │ │ │ │ +52# if _GLIBCXX_HOSTED │ │ │ │ +53# define __glibcxx_incomplete_container_elements 201505L │ │ │ │ +54# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_incomplete_container_elements) │ │ │ │ +55# define __cpp_lib_incomplete_container_elements 201505L │ │ │ │ +56# endif │ │ │ │ +57# endif │ │ │ │ +58#endif /* !defined(__cpp_lib_incomplete_container_elements) && defined │ │ │ │ +(__glibcxx_want_incomplete_container_elements) */ │ │ │ │ +59#undef __glibcxx_want_incomplete_container_elements │ │ │ │ 60 │ │ │ │ -61#pragma GCC system_header │ │ │ │ -62 │ │ │ │ -63#include <_b_i_t_s_/_s_t_l___a_l_g_o_b_a_s_e_._h> │ │ │ │ -64#include <_b_i_t_s_/_a_l_l_o_c_a_t_o_r_._h> │ │ │ │ -65#include <_b_i_t_s_/_s_t_l___f_u_n_c_t_i_o_n_._h> │ │ │ │ -66#include <_b_i_t_s_/_c_p_p___t_y_p_e___t_r_a_i_t_s_._h> │ │ │ │ -67#include <_e_x_t_/_a_l_l_o_c___t_r_a_i_t_s_._h> │ │ │ │ -68#if __cplusplus >= 201103L │ │ │ │ -69# include <_e_x_t_/_a_l_i_g_n_e_d___b_u_f_f_e_r_._h> │ │ │ │ -70#endif │ │ │ │ -71#ifdef __glibcxx_node_extract // >= C++17 │ │ │ │ -72# include <_b_i_t_s_/_n_o_d_e___h_a_n_d_l_e_._h> │ │ │ │ -73#endif │ │ │ │ -74 │ │ │ │ -75namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -76{ │ │ │ │ -77_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -78 │ │ │ │ -79 // Red-black tree class, designed for use in implementing STL │ │ │ │ -80 // associative containers (set, multiset, map, and multimap). The │ │ │ │ -81 // insertion and deletion algorithms are based on those in Cormen, │ │ │ │ -82 // Leiserson, and Rivest, Introduction to Algorithms (MIT Press, │ │ │ │ -83 // 1990), except that │ │ │ │ -84 // │ │ │ │ -85 // (1) the header cell is maintained with links not only to the root │ │ │ │ -86 // but also to the leftmost node of the tree, to enable constant │ │ │ │ -87 // time begin(), and to the rightmost node of the tree, to enable │ │ │ │ -88 // linear time performance when used with the generic set algorithms │ │ │ │ -89 // (set_union, etc.) │ │ │ │ -90 // │ │ │ │ -91 // (2) when a node being deleted has two children its successor node │ │ │ │ -92 // is relinked into its place, rather than copied, so that the only │ │ │ │ -93 // iterators invalidated are those referring to the deleted node. │ │ │ │ -94 │ │ │ │ -95 enum _Rb_tree_color { _S_red = false, _S_black = true }; │ │ │ │ -96 │ │ │ │ -97 struct _Rb_tree_node_base │ │ │ │ -98 { │ │ │ │ -99 typedef _Rb_tree_node_base* _Base_ptr; │ │ │ │ -100 typedef const _Rb_tree_node_base* _Const_Base_ptr; │ │ │ │ -101 │ │ │ │ -102 _Rb_tree_color _M_color; │ │ │ │ -103 _Base_ptr _M_parent; │ │ │ │ -104 _Base_ptr _M_left; │ │ │ │ -105 _Base_ptr _M_right; │ │ │ │ -106 │ │ │ │ -107 static _Base_ptr │ │ │ │ -108 _S_minimum(_Base_ptr __x) _GLIBCXX_NOEXCEPT │ │ │ │ -109 { │ │ │ │ -110 while (__x->_M_left != 0) __x = __x->_M_left; │ │ │ │ -111 return __x; │ │ │ │ -112 } │ │ │ │ -113 │ │ │ │ -114 static _Const_Base_ptr │ │ │ │ -115 _S_minimum(_Const_Base_ptr __x) _GLIBCXX_NOEXCEPT │ │ │ │ -116 { │ │ │ │ -117 while (__x->_M_left != 0) __x = __x->_M_left; │ │ │ │ -118 return __x; │ │ │ │ -119 } │ │ │ │ -120 │ │ │ │ -121 static _Base_ptr │ │ │ │ -122 _S_maximum(_Base_ptr __x) _GLIBCXX_NOEXCEPT │ │ │ │ -123 { │ │ │ │ -124 while (__x->_M_right != 0) __x = __x->_M_right; │ │ │ │ -125 return __x; │ │ │ │ -126 } │ │ │ │ -127 │ │ │ │ -128 static _Const_Base_ptr │ │ │ │ -129 _S_maximum(_Const_Base_ptr __x) _GLIBCXX_NOEXCEPT │ │ │ │ -130 { │ │ │ │ -131 while (__x->_M_right != 0) __x = __x->_M_right; │ │ │ │ -132 return __x; │ │ │ │ -133 } │ │ │ │ -134 }; │ │ │ │ +61#if !defined(__cpp_lib_uncaught_exceptions) │ │ │ │ +62# if ((defined(__STRICT_ANSI__) && __cplusplus >= 201703L) || (!defined │ │ │ │ +(__STRICT_ANSI__) && __cplusplus >= 199711L)) │ │ │ │ +63# define __glibcxx_uncaught_exceptions 201411L │ │ │ │ +64# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_uncaught_exceptions) │ │ │ │ +65# define __cpp_lib_uncaught_exceptions 201411L │ │ │ │ +66# endif │ │ │ │ +67# endif │ │ │ │ +68#endif /* !defined(__cpp_lib_uncaught_exceptions) && defined │ │ │ │ +(__glibcxx_want_uncaught_exceptions) */ │ │ │ │ +69#undef __glibcxx_want_uncaught_exceptions │ │ │ │ +70 │ │ │ │ +71#if !defined(__cpp_lib_allocator_traits_is_always_equal) │ │ │ │ +72# if (__cplusplus >= 201103L) │ │ │ │ +73# define __glibcxx_allocator_traits_is_always_equal 201411L │ │ │ │ +74# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_allocator_traits_is_always_equal) │ │ │ │ +75# define __cpp_lib_allocator_traits_is_always_equal 201411L │ │ │ │ +76# endif │ │ │ │ +77# endif │ │ │ │ +78#endif /* !defined(__cpp_lib_allocator_traits_is_always_equal) && defined │ │ │ │ +(__glibcxx_want_allocator_traits_is_always_equal) */ │ │ │ │ +79#undef __glibcxx_want_allocator_traits_is_always_equal │ │ │ │ +80 │ │ │ │ +81#if !defined(__cpp_lib_is_null_pointer) │ │ │ │ +82# if (__cplusplus >= 201103L) │ │ │ │ +83# define __glibcxx_is_null_pointer 201309L │ │ │ │ +84# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_null_pointer) │ │ │ │ +85# define __cpp_lib_is_null_pointer 201309L │ │ │ │ +86# endif │ │ │ │ +87# endif │ │ │ │ +88#endif /* !defined(__cpp_lib_is_null_pointer) && defined │ │ │ │ +(__glibcxx_want_is_null_pointer) */ │ │ │ │ +89#undef __glibcxx_want_is_null_pointer │ │ │ │ +90 │ │ │ │ +91#if !defined(__cpp_lib_result_of_sfinae) │ │ │ │ +92# if (__cplusplus >= 201103L) │ │ │ │ +93# define __glibcxx_result_of_sfinae 201210L │ │ │ │ +94# if defined(__glibcxx_want_all) || defined(__glibcxx_want_result_of_sfinae) │ │ │ │ +95# define __cpp_lib_result_of_sfinae 201210L │ │ │ │ +96# endif │ │ │ │ +97# endif │ │ │ │ +98#endif /* !defined(__cpp_lib_result_of_sfinae) && defined │ │ │ │ +(__glibcxx_want_result_of_sfinae) */ │ │ │ │ +99#undef __glibcxx_want_result_of_sfinae │ │ │ │ +100 │ │ │ │ +101#if !defined(__cpp_lib_shared_ptr_arrays) │ │ │ │ +102# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED │ │ │ │ +103# define __glibcxx_shared_ptr_arrays 201707L │ │ │ │ +104# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_shared_ptr_arrays) │ │ │ │ +105# define __cpp_lib_shared_ptr_arrays 201707L │ │ │ │ +106# endif │ │ │ │ +107# elif (__cplusplus >= 201103L) && _GLIBCXX_HOSTED │ │ │ │ +108# define __glibcxx_shared_ptr_arrays 201611L │ │ │ │ +109# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_shared_ptr_arrays) │ │ │ │ +110# define __cpp_lib_shared_ptr_arrays 201611L │ │ │ │ +111# endif │ │ │ │ +112# endif │ │ │ │ +113#endif /* !defined(__cpp_lib_shared_ptr_arrays) && defined │ │ │ │ +(__glibcxx_want_shared_ptr_arrays) */ │ │ │ │ +114#undef __glibcxx_want_shared_ptr_arrays │ │ │ │ +115 │ │ │ │ +116#if !defined(__cpp_lib_is_swappable) │ │ │ │ +117# if ((defined(__STRICT_ANSI__) && __cplusplus >= 201703L) || (!defined │ │ │ │ +(__STRICT_ANSI__) && __cplusplus >= 201103L)) │ │ │ │ +118# define __glibcxx_is_swappable 201603L │ │ │ │ +119# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_swappable) │ │ │ │ +120# define __cpp_lib_is_swappable 201603L │ │ │ │ +121# endif │ │ │ │ +122# endif │ │ │ │ +123#endif /* !defined(__cpp_lib_is_swappable) && defined │ │ │ │ +(__glibcxx_want_is_swappable) */ │ │ │ │ +124#undef __glibcxx_want_is_swappable │ │ │ │ +125 │ │ │ │ +126#if !defined(__cpp_lib_void_t) │ │ │ │ +127# if ((defined(__STRICT_ANSI__) && __cplusplus >= 201703L) || (!defined │ │ │ │ +(__STRICT_ANSI__) && __cplusplus >= 201103L)) │ │ │ │ +128# define __glibcxx_void_t 201411L │ │ │ │ +129# if defined(__glibcxx_want_all) || defined(__glibcxx_want_void_t) │ │ │ │ +130# define __cpp_lib_void_t 201411L │ │ │ │ +131# endif │ │ │ │ +132# endif │ │ │ │ +133#endif /* !defined(__cpp_lib_void_t) && defined(__glibcxx_want_void_t) */ │ │ │ │ +134#undef __glibcxx_want_void_t │ │ │ │ 135 │ │ │ │ -136 // Helper type offering value initialization guarantee on the compare │ │ │ │ -functor. │ │ │ │ -137 template │ │ │ │ -138 struct _Rb_tree_key_compare │ │ │ │ -139 { │ │ │ │ -140 _Key_compare _M_key_compare; │ │ │ │ -141 │ │ │ │ -142 _Rb_tree_key_compare() │ │ │ │ -143 _GLIBCXX_NOEXCEPT_IF( │ │ │ │ -144 is_nothrow_default_constructible<_Key_compare>::value) │ │ │ │ -145 : _M_key_compare() │ │ │ │ -146 { } │ │ │ │ -147 │ │ │ │ -148 _Rb_tree_key_compare(const _Key_compare& __comp) │ │ │ │ -149 : _M_key_compare(__comp) │ │ │ │ -150 { } │ │ │ │ -151 │ │ │ │ -152#if __cplusplus >= 201103L │ │ │ │ -153 // Copy constructor added for consistency with C++98 mode. │ │ │ │ -154 _Rb_tree_key_compare(const _Rb_tree_key_compare&) = default; │ │ │ │ +136#if !defined(__cpp_lib_enable_shared_from_this) │ │ │ │ +137# if ((defined(__STRICT_ANSI__) && __cplusplus >= 201703L) || (!defined │ │ │ │ +(__STRICT_ANSI__) && __cplusplus >= 201103L)) && _GLIBCXX_HOSTED │ │ │ │ +138# define __glibcxx_enable_shared_from_this 201603L │ │ │ │ +139# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_enable_shared_from_this) │ │ │ │ +140# define __cpp_lib_enable_shared_from_this 201603L │ │ │ │ +141# endif │ │ │ │ +142# endif │ │ │ │ +143#endif /* !defined(__cpp_lib_enable_shared_from_this) && defined │ │ │ │ +(__glibcxx_want_enable_shared_from_this) */ │ │ │ │ +144#undef __glibcxx_want_enable_shared_from_this │ │ │ │ +145 │ │ │ │ +146#if !defined(__cpp_lib_math_spec_funcs) │ │ │ │ +147# if (__cplusplus >= 201103L) │ │ │ │ +148# define __glibcxx_math_spec_funcs 201003L │ │ │ │ +149# if defined(__glibcxx_want_all) || defined(__glibcxx_want_math_spec_funcs) │ │ │ │ +150# define __STDCPP_MATH_SPEC_FUNCS__ 201003L │ │ │ │ +151# endif │ │ │ │ +152# endif │ │ │ │ +153#endif /* !defined(__cpp_lib_math_spec_funcs) && defined │ │ │ │ +(__glibcxx_want_math_spec_funcs) */ │ │ │ │ +154#undef __glibcxx_want_math_spec_funcs │ │ │ │ 155 │ │ │ │ -156 _Rb_tree_key_compare(_Rb_tree_key_compare&& __x) │ │ │ │ -157 noexcept(is_nothrow_copy_constructible<_Key_compare>::value) │ │ │ │ -158 : _M_key_compare(__x._M_key_compare) │ │ │ │ -159 { } │ │ │ │ -160#endif │ │ │ │ -161 }; │ │ │ │ -162 │ │ │ │ -163 // Helper type to manage default initialization of node count and header. │ │ │ │ -164 struct _Rb_tree_header │ │ │ │ -165 { │ │ │ │ -166 _Rb_tree_node_base _M_header; │ │ │ │ -167 size_t _M_node_count; // Keeps track of size of tree. │ │ │ │ -168 │ │ │ │ -169 _Rb_tree_header() _GLIBCXX_NOEXCEPT │ │ │ │ -170 { │ │ │ │ -171 _M_header._M_color = _S_red; │ │ │ │ -172 _M_reset(); │ │ │ │ -173 } │ │ │ │ -174 │ │ │ │ -175#if __cplusplus >= 201103L │ │ │ │ -176 _Rb_tree_header(_Rb_tree_header&& __x) noexcept │ │ │ │ -177 { │ │ │ │ -178 if (__x._M_header._M_parent != nullptr) │ │ │ │ -179 _M_move_data(__x); │ │ │ │ -180 else │ │ │ │ -181 { │ │ │ │ -182 _M_header._M_color = _S_red; │ │ │ │ -183 _M_reset(); │ │ │ │ -184 } │ │ │ │ -185 } │ │ │ │ -186#endif │ │ │ │ -187 │ │ │ │ -188 void │ │ │ │ -189 _M_move_data(_Rb_tree_header& __from) │ │ │ │ -190 { │ │ │ │ -191 _M_header._M_color = __from._M_header._M_color; │ │ │ │ -192 _M_header._M_parent = __from._M_header._M_parent; │ │ │ │ -193 _M_header._M_left = __from._M_header._M_left; │ │ │ │ -194 _M_header._M_right = __from._M_header._M_right; │ │ │ │ -195 _M_header._M_parent->_M_parent = &_M_header; │ │ │ │ -196 _M_node_count = __from._M_node_count; │ │ │ │ -197 │ │ │ │ -198 __from._M_reset(); │ │ │ │ -199 } │ │ │ │ -200 │ │ │ │ -201 void │ │ │ │ -202 _M_reset() │ │ │ │ -203 { │ │ │ │ -204 _M_header._M_parent = 0; │ │ │ │ -205 _M_header._M_left = &_M_header; │ │ │ │ -206 _M_header._M_right = &_M_header; │ │ │ │ -207 _M_node_count = 0; │ │ │ │ -208 } │ │ │ │ -209 }; │ │ │ │ -210 │ │ │ │ -211 template │ │ │ │ -212 struct _Rb_tree_node : public _Rb_tree_node_base │ │ │ │ -213 { │ │ │ │ -214 typedef _Rb_tree_node<_Val>* _Link_type; │ │ │ │ +156#if !defined(__cpp_lib_coroutine) │ │ │ │ +157# if (__cplusplus >= 201402L) && (__cpp_impl_coroutine) │ │ │ │ +158# define __glibcxx_coroutine 201902L │ │ │ │ +159# if defined(__glibcxx_want_all) || defined(__glibcxx_want_coroutine) │ │ │ │ +160# define __cpp_lib_coroutine 201902L │ │ │ │ +161# endif │ │ │ │ +162# endif │ │ │ │ +163#endif /* !defined(__cpp_lib_coroutine) && defined(__glibcxx_want_coroutine) │ │ │ │ +*/ │ │ │ │ +164#undef __glibcxx_want_coroutine │ │ │ │ +165 │ │ │ │ +166#if !defined(__cpp_lib_exchange_function) │ │ │ │ +167# if (__cplusplus >= 201402L) │ │ │ │ +168# define __glibcxx_exchange_function 201304L │ │ │ │ +169# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_exchange_function) │ │ │ │ +170# define __cpp_lib_exchange_function 201304L │ │ │ │ +171# endif │ │ │ │ +172# endif │ │ │ │ +173#endif /* !defined(__cpp_lib_exchange_function) && defined │ │ │ │ +(__glibcxx_want_exchange_function) */ │ │ │ │ +174#undef __glibcxx_want_exchange_function │ │ │ │ +175 │ │ │ │ +176#if !defined(__cpp_lib_integer_sequence) │ │ │ │ +177# if (__cplusplus >= 201402L) │ │ │ │ +178# define __glibcxx_integer_sequence 201304L │ │ │ │ +179# if defined(__glibcxx_want_all) || defined(__glibcxx_want_integer_sequence) │ │ │ │ +180# define __cpp_lib_integer_sequence 201304L │ │ │ │ +181# endif │ │ │ │ +182# endif │ │ │ │ +183#endif /* !defined(__cpp_lib_integer_sequence) && defined │ │ │ │ +(__glibcxx_want_integer_sequence) */ │ │ │ │ +184#undef __glibcxx_want_integer_sequence │ │ │ │ +185 │ │ │ │ +186#if !defined(__cpp_lib_integral_constant_callable) │ │ │ │ +187# if (__cplusplus >= 201402L) │ │ │ │ +188# define __glibcxx_integral_constant_callable 201304L │ │ │ │ +189# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_integral_constant_callable) │ │ │ │ +190# define __cpp_lib_integral_constant_callable 201304L │ │ │ │ +191# endif │ │ │ │ +192# endif │ │ │ │ +193#endif /* !defined(__cpp_lib_integral_constant_callable) && defined │ │ │ │ +(__glibcxx_want_integral_constant_callable) */ │ │ │ │ +194#undef __glibcxx_want_integral_constant_callable │ │ │ │ +195 │ │ │ │ +196#if !defined(__cpp_lib_is_final) │ │ │ │ +197# if (__cplusplus >= 201402L) │ │ │ │ +198# define __glibcxx_is_final 201402L │ │ │ │ +199# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_final) │ │ │ │ +200# define __cpp_lib_is_final 201402L │ │ │ │ +201# endif │ │ │ │ +202# endif │ │ │ │ +203#endif /* !defined(__cpp_lib_is_final) && defined(__glibcxx_want_is_final) │ │ │ │ +*/ │ │ │ │ +204#undef __glibcxx_want_is_final │ │ │ │ +205 │ │ │ │ +206#if !defined(__cpp_lib_make_reverse_iterator) │ │ │ │ +207# if (__cplusplus >= 201402L) │ │ │ │ +208# define __glibcxx_make_reverse_iterator 201402L │ │ │ │ +209# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_make_reverse_iterator) │ │ │ │ +210# define __cpp_lib_make_reverse_iterator 201402L │ │ │ │ +211# endif │ │ │ │ +212# endif │ │ │ │ +213#endif /* !defined(__cpp_lib_make_reverse_iterator) && defined │ │ │ │ +(__glibcxx_want_make_reverse_iterator) */ │ │ │ │ +214#undef __glibcxx_want_make_reverse_iterator │ │ │ │ 215 │ │ │ │ -216#if __cplusplus < 201103L │ │ │ │ -217 _Val _M_value_field; │ │ │ │ -218 │ │ │ │ -219 _Val* │ │ │ │ -220 _M_valptr() │ │ │ │ -221 { return _s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_M_value_field); } │ │ │ │ -222 │ │ │ │ -223 const _Val* │ │ │ │ -224 _M_valptr() const │ │ │ │ -225 { return _s_t_d_:_:_____a_d_d_r_e_s_s_o_f(_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 │ │ │ │ -237 }; │ │ │ │ -238 │ │ │ │ -239 _GLIBCXX_PURE _Rb_tree_node_base* │ │ │ │ -240 _Rb_tree_increment(_Rb_tree_node_base* __x) throw (); │ │ │ │ -241 │ │ │ │ -242 _GLIBCXX_PURE const _Rb_tree_node_base* │ │ │ │ -243 _Rb_tree_increment(const _Rb_tree_node_base* __x) throw (); │ │ │ │ -244 │ │ │ │ -245 _GLIBCXX_PURE _Rb_tree_node_base* │ │ │ │ -246 _Rb_tree_decrement(_Rb_tree_node_base* __x) throw (); │ │ │ │ -247 │ │ │ │ -248 _GLIBCXX_PURE const _Rb_tree_node_base* │ │ │ │ -249 _Rb_tree_decrement(const _Rb_tree_node_base* __x) throw (); │ │ │ │ -250 │ │ │ │ -251 template │ │ │ │ -252 struct _Rb_tree_iterator │ │ │ │ -253 { │ │ │ │ -254 typedef _Tp value_type; │ │ │ │ -255 typedef _Tp& reference; │ │ │ │ -256 typedef _Tp* pointer; │ │ │ │ -257 │ │ │ │ -258 typedef bidirectional_iterator_tag iterator_category; │ │ │ │ -259 typedef ptrdiff_t difference_type; │ │ │ │ -260 │ │ │ │ -261 typedef _Rb_tree_iterator<_Tp> _Self; │ │ │ │ -262 typedef _Rb_tree_node_base::_Base_ptr _Base_ptr; │ │ │ │ -263 typedef _Rb_tree_node<_Tp>* _Link_type; │ │ │ │ -264 │ │ │ │ -265 _Rb_tree_iterator() _GLIBCXX_NOEXCEPT │ │ │ │ -266 : _M_node() { } │ │ │ │ -267 │ │ │ │ -268 explicit │ │ │ │ -269 _Rb_tree_iterator(_Base_ptr __x) _GLIBCXX_NOEXCEPT │ │ │ │ -270 : _M_node(__x) { } │ │ │ │ -271 │ │ │ │ -272 reference │ │ │ │ -273 _o_p_e_r_a_t_o_r_*() const _GLIBCXX_NOEXCEPT │ │ │ │ -274 { return *static_cast<_Link_type>(_M_node)->_M_valptr(); } │ │ │ │ +216#if !defined(__cpp_lib_null_iterators) │ │ │ │ +217# if (__cplusplus >= 201402L) │ │ │ │ +218# define __glibcxx_null_iterators 201304L │ │ │ │ +219# if defined(__glibcxx_want_all) || defined(__glibcxx_want_null_iterators) │ │ │ │ +220# define __cpp_lib_null_iterators 201304L │ │ │ │ +221# endif │ │ │ │ +222# endif │ │ │ │ +223#endif /* !defined(__cpp_lib_null_iterators) && defined │ │ │ │ +(__glibcxx_want_null_iterators) */ │ │ │ │ +224#undef __glibcxx_want_null_iterators │ │ │ │ +225 │ │ │ │ +226#if !defined(__cpp_lib_transformation_trait_aliases) │ │ │ │ +227# if (__cplusplus >= 201402L) │ │ │ │ +228# define __glibcxx_transformation_trait_aliases 201304L │ │ │ │ +229# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_transformation_trait_aliases) │ │ │ │ +230# define __cpp_lib_transformation_trait_aliases 201304L │ │ │ │ +231# endif │ │ │ │ +232# endif │ │ │ │ +233#endif /* !defined(__cpp_lib_transformation_trait_aliases) && defined │ │ │ │ +(__glibcxx_want_transformation_trait_aliases) */ │ │ │ │ +234#undef __glibcxx_want_transformation_trait_aliases │ │ │ │ +235 │ │ │ │ +236#if !defined(__cpp_lib_transparent_operators) │ │ │ │ +237# if (__cplusplus >= 201402L) │ │ │ │ +238# define __glibcxx_transparent_operators 201510L │ │ │ │ +239# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_transparent_operators) │ │ │ │ +240# define __cpp_lib_transparent_operators 201510L │ │ │ │ +241# endif │ │ │ │ +242# endif │ │ │ │ +243#endif /* !defined(__cpp_lib_transparent_operators) && defined │ │ │ │ +(__glibcxx_want_transparent_operators) */ │ │ │ │ +244#undef __glibcxx_want_transparent_operators │ │ │ │ +245 │ │ │ │ +246#if !defined(__cpp_lib_tuple_element_t) │ │ │ │ +247# if (__cplusplus >= 201402L) │ │ │ │ +248# define __glibcxx_tuple_element_t 201402L │ │ │ │ +249# if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuple_element_t) │ │ │ │ +250# define __cpp_lib_tuple_element_t 201402L │ │ │ │ +251# endif │ │ │ │ +252# endif │ │ │ │ +253#endif /* !defined(__cpp_lib_tuple_element_t) && defined │ │ │ │ +(__glibcxx_want_tuple_element_t) */ │ │ │ │ +254#undef __glibcxx_want_tuple_element_t │ │ │ │ +255 │ │ │ │ +256#if !defined(__cpp_lib_tuples_by_type) │ │ │ │ +257# if (__cplusplus >= 201402L) │ │ │ │ +258# define __glibcxx_tuples_by_type 201304L │ │ │ │ +259# if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuples_by_type) │ │ │ │ +260# define __cpp_lib_tuples_by_type 201304L │ │ │ │ +261# endif │ │ │ │ +262# endif │ │ │ │ +263#endif /* !defined(__cpp_lib_tuples_by_type) && defined │ │ │ │ +(__glibcxx_want_tuples_by_type) */ │ │ │ │ +264#undef __glibcxx_want_tuples_by_type │ │ │ │ +265 │ │ │ │ +266#if !defined(__cpp_lib_robust_nonmodifying_seq_ops) │ │ │ │ +267# if (__cplusplus >= 201402L) │ │ │ │ +268# define __glibcxx_robust_nonmodifying_seq_ops 201304L │ │ │ │ +269# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_robust_nonmodifying_seq_ops) │ │ │ │ +270# define __cpp_lib_robust_nonmodifying_seq_ops 201304L │ │ │ │ +271# endif │ │ │ │ +272# endif │ │ │ │ +273#endif /* !defined(__cpp_lib_robust_nonmodifying_seq_ops) && defined │ │ │ │ +(__glibcxx_want_robust_nonmodifying_seq_ops) */ │ │ │ │ +274#undef __glibcxx_want_robust_nonmodifying_seq_ops │ │ │ │ 275 │ │ │ │ -276 pointer │ │ │ │ -277 operator->() const _GLIBCXX_NOEXCEPT │ │ │ │ -278 { return static_cast<_Link_type> (_M_node)->_M_valptr(); } │ │ │ │ -279 │ │ │ │ -280 _Self& │ │ │ │ -281 operator++() _GLIBCXX_NOEXCEPT │ │ │ │ -282 { │ │ │ │ -283 _M_node = _Rb_tree_increment(_M_node); │ │ │ │ -284 return *this; │ │ │ │ -285 } │ │ │ │ -286 │ │ │ │ -287 _Self │ │ │ │ -288 operator++(int) _GLIBCXX_NOEXCEPT │ │ │ │ -289 { │ │ │ │ -290 _Self __tmp = *this; │ │ │ │ -291 _M_node = _Rb_tree_increment(_M_node); │ │ │ │ -292 return __tmp; │ │ │ │ -293 } │ │ │ │ -294 │ │ │ │ -295 _Self& │ │ │ │ -296 operator--() _GLIBCXX_NOEXCEPT │ │ │ │ -297 { │ │ │ │ -298 _M_node = _Rb_tree_decrement(_M_node); │ │ │ │ -299 return *this; │ │ │ │ -300 } │ │ │ │ -301 │ │ │ │ -302 _Self │ │ │ │ -303 operator--(int) _GLIBCXX_NOEXCEPT │ │ │ │ -304 { │ │ │ │ -305 _Self __tmp = *this; │ │ │ │ -306 _M_node = _Rb_tree_decrement(_M_node); │ │ │ │ -307 return __tmp; │ │ │ │ -308 } │ │ │ │ -309 │ │ │ │ -310 friend bool │ │ │ │ -311 operator==(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT │ │ │ │ -312 { return __x._M_node == __y._M_node; } │ │ │ │ -313 │ │ │ │ -314#if ! __cpp_lib_three_way_comparison │ │ │ │ -315 friend bool │ │ │ │ -316 operator!=(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT │ │ │ │ -317 { return __x._M_node != __y._M_node; } │ │ │ │ -318#endif │ │ │ │ -319 │ │ │ │ -320 _Base_ptr _M_node; │ │ │ │ -321 }; │ │ │ │ -322 │ │ │ │ -323 template │ │ │ │ -324 struct _Rb_tree_const_iterator │ │ │ │ -325 { │ │ │ │ -326 typedef _Tp value_type; │ │ │ │ -327 typedef const _Tp& reference; │ │ │ │ -328 typedef const _Tp* pointer; │ │ │ │ -329 │ │ │ │ -330 typedef _Rb_tree_iterator<_Tp> iterator; │ │ │ │ -331 │ │ │ │ -332 typedef bidirectional_iterator_tag iterator_category; │ │ │ │ -333 typedef ptrdiff_t difference_type; │ │ │ │ -334 │ │ │ │ -335 typedef _Rb_tree_const_iterator<_Tp> _Self; │ │ │ │ -336 typedef _Rb_tree_node_base::_Const_Base_ptr _Base_ptr; │ │ │ │ -337 typedef const _Rb_tree_node<_Tp>* _Link_type; │ │ │ │ -338 │ │ │ │ -339 _Rb_tree_const_iterator() _GLIBCXX_NOEXCEPT │ │ │ │ -340 : _M_node() { } │ │ │ │ -341 │ │ │ │ -342 explicit │ │ │ │ -343 _Rb_tree_const_iterator(_Base_ptr __x) _GLIBCXX_NOEXCEPT │ │ │ │ -344 : _M_node(__x) { } │ │ │ │ -345 │ │ │ │ -346 _Rb_tree_const_iterator(const iterator& __it) _GLIBCXX_NOEXCEPT │ │ │ │ -347 : _M_node(__it._M_node) { } │ │ │ │ -348 │ │ │ │ -349 iterator │ │ │ │ -350 _M_const_cast() const _GLIBCXX_NOEXCEPT │ │ │ │ -351 { return iterator(const_cast(_M_node)); } │ │ │ │ -352 │ │ │ │ -353 reference │ │ │ │ -354 _o_p_e_r_a_t_o_r_*() const _GLIBCXX_NOEXCEPT │ │ │ │ -355 { return *static_cast<_Link_type>(_M_node)->_M_valptr(); } │ │ │ │ -356 │ │ │ │ -357 pointer │ │ │ │ -358 operator->() const _GLIBCXX_NOEXCEPT │ │ │ │ -359 { return static_cast<_Link_type>(_M_node)->_M_valptr(); } │ │ │ │ +276#if !defined(__cpp_lib_to_chars) │ │ │ │ +277# if (__cplusplus > 202302L) && (_GLIBCXX_FLOAT_IS_IEEE_BINARY32 && │ │ │ │ +_GLIBCXX_DOUBLE_IS_IEEE_BINARY64 && __SIZE_WIDTH__ >= 32) │ │ │ │ +278# define __glibcxx_to_chars 202306L │ │ │ │ +279# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_chars) │ │ │ │ +280# define __cpp_lib_to_chars 202306L │ │ │ │ +281# endif │ │ │ │ +282# elif (__cplusplus >= 201402L) && (_GLIBCXX_FLOAT_IS_IEEE_BINARY32 && │ │ │ │ +_GLIBCXX_DOUBLE_IS_IEEE_BINARY64 && __SIZE_WIDTH__ >= 32) │ │ │ │ +283# define __glibcxx_to_chars 201611L │ │ │ │ +284# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_chars) │ │ │ │ +285# define __cpp_lib_to_chars 201611L │ │ │ │ +286# endif │ │ │ │ +287# endif │ │ │ │ +288#endif /* !defined(__cpp_lib_to_chars) && defined(__glibcxx_want_to_chars) │ │ │ │ +*/ │ │ │ │ +289#undef __glibcxx_want_to_chars │ │ │ │ +290 │ │ │ │ +291#if !defined(__cpp_lib_chrono_udls) │ │ │ │ +292# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED │ │ │ │ +293# define __glibcxx_chrono_udls 201304L │ │ │ │ +294# if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono_udls) │ │ │ │ +295# define __cpp_lib_chrono_udls 201304L │ │ │ │ +296# endif │ │ │ │ +297# endif │ │ │ │ +298#endif /* !defined(__cpp_lib_chrono_udls) && defined │ │ │ │ +(__glibcxx_want_chrono_udls) */ │ │ │ │ +299#undef __glibcxx_want_chrono_udls │ │ │ │ +300 │ │ │ │ +301#if !defined(__cpp_lib_complex_udls) │ │ │ │ +302# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED │ │ │ │ +303# define __glibcxx_complex_udls 201309L │ │ │ │ +304# if defined(__glibcxx_want_all) || defined(__glibcxx_want_complex_udls) │ │ │ │ +305# define __cpp_lib_complex_udls 201309L │ │ │ │ +306# endif │ │ │ │ +307# endif │ │ │ │ +308#endif /* !defined(__cpp_lib_complex_udls) && defined │ │ │ │ +(__glibcxx_want_complex_udls) */ │ │ │ │ +309#undef __glibcxx_want_complex_udls │ │ │ │ +310 │ │ │ │ +311#if !defined(__cpp_lib_generic_associative_lookup) │ │ │ │ +312# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED │ │ │ │ +313# define __glibcxx_generic_associative_lookup 201304L │ │ │ │ +314# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_generic_associative_lookup) │ │ │ │ +315# define __cpp_lib_generic_associative_lookup 201304L │ │ │ │ +316# endif │ │ │ │ +317# endif │ │ │ │ +318#endif /* !defined(__cpp_lib_generic_associative_lookup) && defined │ │ │ │ +(__glibcxx_want_generic_associative_lookup) */ │ │ │ │ +319#undef __glibcxx_want_generic_associative_lookup │ │ │ │ +320 │ │ │ │ +321#if !defined(__cpp_lib_make_unique) │ │ │ │ +322# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED │ │ │ │ +323# define __glibcxx_make_unique 201304L │ │ │ │ +324# if defined(__glibcxx_want_all) || defined(__glibcxx_want_make_unique) │ │ │ │ +325# define __cpp_lib_make_unique 201304L │ │ │ │ +326# endif │ │ │ │ +327# endif │ │ │ │ +328#endif /* !defined(__cpp_lib_make_unique) && defined │ │ │ │ +(__glibcxx_want_make_unique) */ │ │ │ │ +329#undef __glibcxx_want_make_unique │ │ │ │ +330 │ │ │ │ +331#if !defined(__cpp_lib_quoted_string_io) │ │ │ │ +332# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED │ │ │ │ +333# define __glibcxx_quoted_string_io 201304L │ │ │ │ +334# if defined(__glibcxx_want_all) || defined(__glibcxx_want_quoted_string_io) │ │ │ │ +335# define __cpp_lib_quoted_string_io 201304L │ │ │ │ +336# endif │ │ │ │ +337# endif │ │ │ │ +338#endif /* !defined(__cpp_lib_quoted_string_io) && defined │ │ │ │ +(__glibcxx_want_quoted_string_io) */ │ │ │ │ +339#undef __glibcxx_want_quoted_string_io │ │ │ │ +340 │ │ │ │ +341#if !defined(__cpp_lib_shared_timed_mutex) │ │ │ │ +342# if (__cplusplus >= 201402L) && defined(_GLIBCXX_HAS_GTHREADS) && │ │ │ │ +_GLIBCXX_HOSTED │ │ │ │ +343# define __glibcxx_shared_timed_mutex 201402L │ │ │ │ +344# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_shared_timed_mutex) │ │ │ │ +345# define __cpp_lib_shared_timed_mutex 201402L │ │ │ │ +346# endif │ │ │ │ +347# endif │ │ │ │ +348#endif /* !defined(__cpp_lib_shared_timed_mutex) && defined │ │ │ │ +(__glibcxx_want_shared_timed_mutex) */ │ │ │ │ +349#undef __glibcxx_want_shared_timed_mutex │ │ │ │ +350 │ │ │ │ +351#if !defined(__cpp_lib_string_udls) │ │ │ │ +352# if (__cplusplus >= 201402L) && _GLIBCXX_HOSTED │ │ │ │ +353# define __glibcxx_string_udls 201304L │ │ │ │ +354# if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_udls) │ │ │ │ +355# define __cpp_lib_string_udls 201304L │ │ │ │ +356# endif │ │ │ │ +357# endif │ │ │ │ +358#endif /* !defined(__cpp_lib_string_udls) && defined │ │ │ │ +(__glibcxx_want_string_udls) */ │ │ │ │ +359#undef __glibcxx_want_string_udls │ │ │ │ 360 │ │ │ │ -361 _Self& │ │ │ │ -362 operator++() _GLIBCXX_NOEXCEPT │ │ │ │ -363 { │ │ │ │ -364 _M_node = _Rb_tree_increment(_M_node); │ │ │ │ -365 return *this; │ │ │ │ -366 } │ │ │ │ -367 │ │ │ │ -368 _Self │ │ │ │ -369 operator++(int) _GLIBCXX_NOEXCEPT │ │ │ │ -370 { │ │ │ │ -371 _Self __tmp = *this; │ │ │ │ -372 _M_node = _Rb_tree_increment(_M_node); │ │ │ │ -373 return __tmp; │ │ │ │ -374 } │ │ │ │ -375 │ │ │ │ -376 _Self& │ │ │ │ -377 operator--() _GLIBCXX_NOEXCEPT │ │ │ │ -378 { │ │ │ │ -379 _M_node = _Rb_tree_decrement(_M_node); │ │ │ │ -380 return *this; │ │ │ │ -381 } │ │ │ │ -382 │ │ │ │ -383 _Self │ │ │ │ -384 operator--(int) _GLIBCXX_NOEXCEPT │ │ │ │ -385 { │ │ │ │ -386 _Self __tmp = *this; │ │ │ │ -387 _M_node = _Rb_tree_decrement(_M_node); │ │ │ │ -388 return __tmp; │ │ │ │ -389 } │ │ │ │ +361#if !defined(__cpp_lib_addressof_constexpr) │ │ │ │ +362# if (__cplusplus >= 201703L) │ │ │ │ +363# define __glibcxx_addressof_constexpr 201603L │ │ │ │ +364# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_addressof_constexpr) │ │ │ │ +365# define __cpp_lib_addressof_constexpr 201603L │ │ │ │ +366# endif │ │ │ │ +367# endif │ │ │ │ +368#endif /* !defined(__cpp_lib_addressof_constexpr) && defined │ │ │ │ +(__glibcxx_want_addressof_constexpr) */ │ │ │ │ +369#undef __glibcxx_want_addressof_constexpr │ │ │ │ +370 │ │ │ │ +371#if !defined(__cpp_lib_any) │ │ │ │ +372# if (__cplusplus >= 201703L) │ │ │ │ +373# define __glibcxx_any 201606L │ │ │ │ +374# if defined(__glibcxx_want_all) || defined(__glibcxx_want_any) │ │ │ │ +375# define __cpp_lib_any 201606L │ │ │ │ +376# endif │ │ │ │ +377# endif │ │ │ │ +378#endif /* !defined(__cpp_lib_any) && defined(__glibcxx_want_any) */ │ │ │ │ +379#undef __glibcxx_want_any │ │ │ │ +380 │ │ │ │ +381#if !defined(__cpp_lib_apply) │ │ │ │ +382# if (__cplusplus >= 201703L) │ │ │ │ +383# define __glibcxx_apply 201603L │ │ │ │ +384# if defined(__glibcxx_want_all) || defined(__glibcxx_want_apply) │ │ │ │ +385# define __cpp_lib_apply 201603L │ │ │ │ +386# endif │ │ │ │ +387# endif │ │ │ │ +388#endif /* !defined(__cpp_lib_apply) && defined(__glibcxx_want_apply) */ │ │ │ │ +389#undef __glibcxx_want_apply │ │ │ │ 390 │ │ │ │ -391 friend bool │ │ │ │ -392 operator==(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT │ │ │ │ -393 { return __x._M_node == __y._M_node; } │ │ │ │ -394 │ │ │ │ -395#if ! __cpp_lib_three_way_comparison │ │ │ │ -396 friend bool │ │ │ │ -397 operator!=(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT │ │ │ │ -398 { return __x._M_node != __y._M_node; } │ │ │ │ -399#endif │ │ │ │ +391#if !defined(__cpp_lib_as_const) │ │ │ │ +392# if (__cplusplus >= 201703L) │ │ │ │ +393# define __glibcxx_as_const 201510L │ │ │ │ +394# if defined(__glibcxx_want_all) || defined(__glibcxx_want_as_const) │ │ │ │ +395# define __cpp_lib_as_const 201510L │ │ │ │ +396# endif │ │ │ │ +397# endif │ │ │ │ +398#endif /* !defined(__cpp_lib_as_const) && defined(__glibcxx_want_as_const) │ │ │ │ +*/ │ │ │ │ +399#undef __glibcxx_want_as_const │ │ │ │ 400 │ │ │ │ -401 _Base_ptr _M_node; │ │ │ │ -402 }; │ │ │ │ -403 │ │ │ │ -404 __attribute__((__nonnull__)) │ │ │ │ -405 void │ │ │ │ -406 _Rb_tree_insert_and_rebalance(const bool __insert_left, │ │ │ │ -407 _Rb_tree_node_base* __x, │ │ │ │ -408 _Rb_tree_node_base* __p, │ │ │ │ -409 _Rb_tree_node_base& __header) throw (); │ │ │ │ +401#if !defined(__cpp_lib_atomic_is_always_lock_free) │ │ │ │ +402# if (__cplusplus >= 201703L) │ │ │ │ +403# define __glibcxx_atomic_is_always_lock_free 201603L │ │ │ │ +404# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_atomic_is_always_lock_free) │ │ │ │ +405# define __cpp_lib_atomic_is_always_lock_free 201603L │ │ │ │ +406# endif │ │ │ │ +407# endif │ │ │ │ +408#endif /* !defined(__cpp_lib_atomic_is_always_lock_free) && defined │ │ │ │ +(__glibcxx_want_atomic_is_always_lock_free) */ │ │ │ │ +409#undef __glibcxx_want_atomic_is_always_lock_free │ │ │ │ 410 │ │ │ │ -411 __attribute__((__nonnull__,__returns_nonnull__)) │ │ │ │ -412 _Rb_tree_node_base* │ │ │ │ -413 _Rb_tree_rebalance_for_erase(_Rb_tree_node_base* const __z, │ │ │ │ -414 _Rb_tree_node_base& __header) throw (); │ │ │ │ -415 │ │ │ │ -416#ifdef __glibcxx_node_extract // >= C++17 │ │ │ │ -417 template │ │ │ │ -418 struct _Rb_tree_merge_helper { }; │ │ │ │ -419#endif │ │ │ │ +411#if !defined(__cpp_lib_bool_constant) │ │ │ │ +412# if (__cplusplus >= 201703L) │ │ │ │ +413# define __glibcxx_bool_constant 201505L │ │ │ │ +414# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bool_constant) │ │ │ │ +415# define __cpp_lib_bool_constant 201505L │ │ │ │ +416# endif │ │ │ │ +417# endif │ │ │ │ +418#endif /* !defined(__cpp_lib_bool_constant) && defined │ │ │ │ +(__glibcxx_want_bool_constant) */ │ │ │ │ +419#undef __glibcxx_want_bool_constant │ │ │ │ 420 │ │ │ │ -421 template > │ │ │ │ -423 class _Rb_tree │ │ │ │ -424 { │ │ │ │ -425 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 │ │ │ │ -426 rebind<_Rb_tree_node<_Val> >::other _Node_allocator; │ │ │ │ -427 │ │ │ │ -428 typedef _____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_a_t_o_r_> _Alloc_traits; │ │ │ │ -429 │ │ │ │ -430 protected: │ │ │ │ -431 typedef _Rb_tree_node_base* _Base_ptr; │ │ │ │ -432 typedef const _Rb_tree_node_base* _Const_Base_ptr; │ │ │ │ -433 typedef _Rb_tree_node<_Val>* _Link_type; │ │ │ │ -434 typedef const _Rb_tree_node<_Val>* _Const_Link_type; │ │ │ │ -435 │ │ │ │ -436 private: │ │ │ │ -437 // Functor recycling a pool of nodes and using allocation once the pool │ │ │ │ -438 // is empty. │ │ │ │ -439 struct _Reuse_or_alloc_node │ │ │ │ -440 { │ │ │ │ -441 _Reuse_or_alloc_node(_Rb_tree& __t) │ │ │ │ -442 : _M_root(__t._M_root()), _M_nodes(__t._M_rightmost()), _M_t(__t) │ │ │ │ -443 { │ │ │ │ -444 if (_M_root) │ │ │ │ -445 { │ │ │ │ -446 _M_root->_M_parent = 0; │ │ │ │ -447 │ │ │ │ -448 if (_M_nodes->_M_left) │ │ │ │ -449 _M_nodes = _M_nodes->_M_left; │ │ │ │ -450 } │ │ │ │ -451 else │ │ │ │ -452 _M_nodes = 0; │ │ │ │ -453 } │ │ │ │ -454 │ │ │ │ -455#if __cplusplus >= 201103L │ │ │ │ -456 _Reuse_or_alloc_node(const _Reuse_or_alloc_node&) = delete; │ │ │ │ -457#endif │ │ │ │ -458 │ │ │ │ -459 ~_Reuse_or_alloc_node() │ │ │ │ -460 { _M_t._M_erase(static_cast<_Link_type>(_M_root)); } │ │ │ │ -461 │ │ │ │ -462 template │ │ │ │ -463 _Link_type │ │ │ │ -464 operator()(_GLIBCXX_FWDREF(_Arg) __arg) │ │ │ │ -465 { │ │ │ │ -466 _Link_type __node = static_cast<_Link_type>(_M_extract()); │ │ │ │ -467 if (__node) │ │ │ │ -468 { │ │ │ │ -469 _M_t._M_destroy_node(__node); │ │ │ │ -470 _M_t._M_construct_node(__node, _GLIBCXX_FORWARD(_Arg, __arg)); │ │ │ │ -471 return __node; │ │ │ │ -472 } │ │ │ │ -473 │ │ │ │ -474 return _M_t._M_create_node(_GLIBCXX_FORWARD(_Arg, __arg)); │ │ │ │ -475 } │ │ │ │ -476 │ │ │ │ -477 private: │ │ │ │ -478 _Base_ptr │ │ │ │ -479 _M_extract() │ │ │ │ -480 { │ │ │ │ -481 if (!_M_nodes) │ │ │ │ -482 return _M_nodes; │ │ │ │ -483 │ │ │ │ -484 _Base_ptr __node = _M_nodes; │ │ │ │ -485 _M_nodes = _M_nodes->_M_parent; │ │ │ │ -486 if (_M_nodes) │ │ │ │ -487 { │ │ │ │ -488 if (_M_nodes->_M_right == __node) │ │ │ │ -489 { │ │ │ │ -490 _M_nodes->_M_right = 0; │ │ │ │ -491 │ │ │ │ -492 if (_M_nodes->_M_left) │ │ │ │ -493 { │ │ │ │ -494 _M_nodes = _M_nodes->_M_left; │ │ │ │ -495 │ │ │ │ -496 while (_M_nodes->_M_right) │ │ │ │ -497 _M_nodes = _M_nodes->_M_right; │ │ │ │ -498 │ │ │ │ -499 if (_M_nodes->_M_left) │ │ │ │ -500 _M_nodes = _M_nodes->_M_left; │ │ │ │ -501 } │ │ │ │ -502 } │ │ │ │ -503 else // __node is on the left. │ │ │ │ -504 _M_nodes->_M_left = 0; │ │ │ │ -505 } │ │ │ │ -506 else │ │ │ │ -507 _M_root = 0; │ │ │ │ -508 │ │ │ │ -509 return __node; │ │ │ │ -510 } │ │ │ │ -511 │ │ │ │ -512 _Base_ptr _M_root; │ │ │ │ -513 _Base_ptr _M_nodes; │ │ │ │ -514 _Rb_tree& _M_t; │ │ │ │ -515 }; │ │ │ │ -516 │ │ │ │ -517 // Functor similar to the previous one but without any pool of nodes to │ │ │ │ -518 // recycle. │ │ │ │ -519 struct _Alloc_node │ │ │ │ -520 { │ │ │ │ -521 _Alloc_node(_Rb_tree& __t) │ │ │ │ -522 : _M_t(__t) { } │ │ │ │ -523 │ │ │ │ -524 template │ │ │ │ -525 _Link_type │ │ │ │ -526 operator()(_GLIBCXX_FWDREF(_Arg) __arg) const │ │ │ │ -527 { return _M_t._M_create_node(_GLIBCXX_FORWARD(_Arg, __arg)); } │ │ │ │ -528 │ │ │ │ -529 private: │ │ │ │ -530 _Rb_tree& _M_t; │ │ │ │ -531 }; │ │ │ │ -532 │ │ │ │ -533 public: │ │ │ │ -534 typedef _Key key_type; │ │ │ │ -535 typedef _Val value_type; │ │ │ │ -536 typedef value_type* pointer; │ │ │ │ -537 typedef const value_type* const_pointer; │ │ │ │ -538 typedef value_type& reference; │ │ │ │ -539 typedef const value_type& const_reference; │ │ │ │ -540 typedef size_t size_type; │ │ │ │ -541 typedef ptrdiff_t difference_type; │ │ │ │ -542 typedef _Alloc allocator_type; │ │ │ │ -543 │ │ │ │ -544 _Node_allocator& │ │ │ │ -545 _M_get_Node_allocator() _GLIBCXX_NOEXCEPT │ │ │ │ -546 { return this->_M_impl; } │ │ │ │ -547 │ │ │ │ -548 const _Node_allocator& │ │ │ │ -549 _M_get_Node_allocator() const _GLIBCXX_NOEXCEPT │ │ │ │ -550 { return this->_M_impl; } │ │ │ │ -551 │ │ │ │ -552 allocator_type │ │ │ │ -553 get_allocator() const _GLIBCXX_NOEXCEPT │ │ │ │ -554 { return allocator_type(_M_get_Node_allocator()); } │ │ │ │ +421#if !defined(__cpp_lib_byte) │ │ │ │ +422# if (__cplusplus >= 201703L) │ │ │ │ +423# define __glibcxx_byte 201603L │ │ │ │ +424# if defined(__glibcxx_want_all) || defined(__glibcxx_want_byte) │ │ │ │ +425# define __cpp_lib_byte 201603L │ │ │ │ +426# endif │ │ │ │ +427# endif │ │ │ │ +428#endif /* !defined(__cpp_lib_byte) && defined(__glibcxx_want_byte) */ │ │ │ │ +429#undef __glibcxx_want_byte │ │ │ │ +430 │ │ │ │ +431#if !defined(__cpp_lib_has_unique_object_representations) │ │ │ │ +432# if (__cplusplus >= 201703L) && (defined │ │ │ │ +(_GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP)) │ │ │ │ +433# define __glibcxx_has_unique_object_representations 201606L │ │ │ │ +434# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_has_unique_object_representations) │ │ │ │ +435# define __cpp_lib_has_unique_object_representations 201606L │ │ │ │ +436# endif │ │ │ │ +437# endif │ │ │ │ +438#endif /* !defined(__cpp_lib_has_unique_object_representations) && defined │ │ │ │ +(__glibcxx_want_has_unique_object_representations) */ │ │ │ │ +439#undef __glibcxx_want_has_unique_object_representations │ │ │ │ +440 │ │ │ │ +441#if !defined(__cpp_lib_hardware_interference_size) │ │ │ │ +442# if (__cplusplus >= 201703L) && (defined(__GCC_DESTRUCTIVE_SIZE)) │ │ │ │ +443# define __glibcxx_hardware_interference_size 201703L │ │ │ │ +444# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_hardware_interference_size) │ │ │ │ +445# define __cpp_lib_hardware_interference_size 201703L │ │ │ │ +446# endif │ │ │ │ +447# endif │ │ │ │ +448#endif /* !defined(__cpp_lib_hardware_interference_size) && defined │ │ │ │ +(__glibcxx_want_hardware_interference_size) */ │ │ │ │ +449#undef __glibcxx_want_hardware_interference_size │ │ │ │ +450 │ │ │ │ +451#if !defined(__cpp_lib_invoke) │ │ │ │ +452# if (__cplusplus >= 201703L) │ │ │ │ +453# define __glibcxx_invoke 201411L │ │ │ │ +454# if defined(__glibcxx_want_all) || defined(__glibcxx_want_invoke) │ │ │ │ +455# define __cpp_lib_invoke 201411L │ │ │ │ +456# endif │ │ │ │ +457# endif │ │ │ │ +458#endif /* !defined(__cpp_lib_invoke) && defined(__glibcxx_want_invoke) */ │ │ │ │ +459#undef __glibcxx_want_invoke │ │ │ │ +460 │ │ │ │ +461#if !defined(__cpp_lib_is_aggregate) │ │ │ │ +462# if (__cplusplus >= 201703L) && (defined │ │ │ │ +(_GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE)) │ │ │ │ +463# define __glibcxx_is_aggregate 201703L │ │ │ │ +464# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_aggregate) │ │ │ │ +465# define __cpp_lib_is_aggregate 201703L │ │ │ │ +466# endif │ │ │ │ +467# endif │ │ │ │ +468#endif /* !defined(__cpp_lib_is_aggregate) && defined │ │ │ │ +(__glibcxx_want_is_aggregate) */ │ │ │ │ +469#undef __glibcxx_want_is_aggregate │ │ │ │ +470 │ │ │ │ +471#if !defined(__cpp_lib_is_invocable) │ │ │ │ +472# if (__cplusplus >= 201703L) │ │ │ │ +473# define __glibcxx_is_invocable 201703L │ │ │ │ +474# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_invocable) │ │ │ │ +475# define __cpp_lib_is_invocable 201703L │ │ │ │ +476# endif │ │ │ │ +477# endif │ │ │ │ +478#endif /* !defined(__cpp_lib_is_invocable) && defined │ │ │ │ +(__glibcxx_want_is_invocable) */ │ │ │ │ +479#undef __glibcxx_want_is_invocable │ │ │ │ +480 │ │ │ │ +481#if !defined(__cpp_lib_launder) │ │ │ │ +482# if (__cplusplus >= 201703L) && (defined(_GLIBCXX_HAVE_BUILTIN_LAUNDER)) │ │ │ │ +483# define __glibcxx_launder 201606L │ │ │ │ +484# if defined(__glibcxx_want_all) || defined(__glibcxx_want_launder) │ │ │ │ +485# define __cpp_lib_launder 201606L │ │ │ │ +486# endif │ │ │ │ +487# endif │ │ │ │ +488#endif /* !defined(__cpp_lib_launder) && defined(__glibcxx_want_launder) */ │ │ │ │ +489#undef __glibcxx_want_launder │ │ │ │ +490 │ │ │ │ +491#if !defined(__cpp_lib_logical_traits) │ │ │ │ +492# if (__cplusplus >= 201703L) │ │ │ │ +493# define __glibcxx_logical_traits 201510L │ │ │ │ +494# if defined(__glibcxx_want_all) || defined(__glibcxx_want_logical_traits) │ │ │ │ +495# define __cpp_lib_logical_traits 201510L │ │ │ │ +496# endif │ │ │ │ +497# endif │ │ │ │ +498#endif /* !defined(__cpp_lib_logical_traits) && defined │ │ │ │ +(__glibcxx_want_logical_traits) */ │ │ │ │ +499#undef __glibcxx_want_logical_traits │ │ │ │ +500 │ │ │ │ +501#if !defined(__cpp_lib_make_from_tuple) │ │ │ │ +502# if (__cplusplus >= 201703L) │ │ │ │ +503# define __glibcxx_make_from_tuple 201606L │ │ │ │ +504# if defined(__glibcxx_want_all) || defined(__glibcxx_want_make_from_tuple) │ │ │ │ +505# define __cpp_lib_make_from_tuple 201606L │ │ │ │ +506# endif │ │ │ │ +507# endif │ │ │ │ +508#endif /* !defined(__cpp_lib_make_from_tuple) && defined │ │ │ │ +(__glibcxx_want_make_from_tuple) */ │ │ │ │ +509#undef __glibcxx_want_make_from_tuple │ │ │ │ +510 │ │ │ │ +511#if !defined(__cpp_lib_not_fn) │ │ │ │ +512# if (__cplusplus >= 201703L) │ │ │ │ +513# define __glibcxx_not_fn 201603L │ │ │ │ +514# if defined(__glibcxx_want_all) || defined(__glibcxx_want_not_fn) │ │ │ │ +515# define __cpp_lib_not_fn 201603L │ │ │ │ +516# endif │ │ │ │ +517# endif │ │ │ │ +518#endif /* !defined(__cpp_lib_not_fn) && defined(__glibcxx_want_not_fn) */ │ │ │ │ +519#undef __glibcxx_want_not_fn │ │ │ │ +520 │ │ │ │ +521#if !defined(__cpp_lib_type_trait_variable_templates) │ │ │ │ +522# if (__cplusplus >= 201703L) │ │ │ │ +523# define __glibcxx_type_trait_variable_templates 201510L │ │ │ │ +524# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_type_trait_variable_templates) │ │ │ │ +525# define __cpp_lib_type_trait_variable_templates 201510L │ │ │ │ +526# endif │ │ │ │ +527# endif │ │ │ │ +528#endif /* !defined(__cpp_lib_type_trait_variable_templates) && defined │ │ │ │ +(__glibcxx_want_type_trait_variable_templates) */ │ │ │ │ +529#undef __glibcxx_want_type_trait_variable_templates │ │ │ │ +530 │ │ │ │ +531#if !defined(__cpp_lib_variant) │ │ │ │ +532# if (__cplusplus >= 202002L) && (__cpp_concepts >= 202002L && │ │ │ │ +__cpp_constexpr >= 201811L) │ │ │ │ +533# define __glibcxx_variant 202106L │ │ │ │ +534# if defined(__glibcxx_want_all) || defined(__glibcxx_want_variant) │ │ │ │ +535# define __cpp_lib_variant 202106L │ │ │ │ +536# endif │ │ │ │ +537# elif (__cplusplus >= 201703L) │ │ │ │ +538# define __glibcxx_variant 202102L │ │ │ │ +539# if defined(__glibcxx_want_all) || defined(__glibcxx_want_variant) │ │ │ │ +540# define __cpp_lib_variant 202102L │ │ │ │ +541# endif │ │ │ │ +542# endif │ │ │ │ +543#endif /* !defined(__cpp_lib_variant) && defined(__glibcxx_want_variant) */ │ │ │ │ +544#undef __glibcxx_want_variant │ │ │ │ +545 │ │ │ │ +546#if !defined(__cpp_lib_lcm) │ │ │ │ +547# if (__cplusplus >= 201703L) │ │ │ │ +548# define __glibcxx_lcm 201606L │ │ │ │ +549# if defined(__glibcxx_want_all) || defined(__glibcxx_want_lcm) │ │ │ │ +550# define __cpp_lib_lcm 201606L │ │ │ │ +551# endif │ │ │ │ +552# endif │ │ │ │ +553#endif /* !defined(__cpp_lib_lcm) && defined(__glibcxx_want_lcm) */ │ │ │ │ +554#undef __glibcxx_want_lcm │ │ │ │ 555 │ │ │ │ -556 protected: │ │ │ │ -557 _Link_type │ │ │ │ -558 _M_get_node() │ │ │ │ -559 { return ___A_l_l_o_c___t_r_a_i_t_s_:_:_a_l_l_o_c_a_t_e(_M_get_Node_allocator(), 1); } │ │ │ │ -560 │ │ │ │ -561 void │ │ │ │ -562 _M_put_node(_Link_type __p) _GLIBCXX_NOEXCEPT │ │ │ │ -563 { ___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); } │ │ │ │ -564 │ │ │ │ -565#if __cplusplus < 201103L │ │ │ │ -566 void │ │ │ │ -567 _M_construct_node(_Link_type __node, const value_type& __x) │ │ │ │ -568 { │ │ │ │ -569 __try │ │ │ │ -570 { get_allocator().construct(__node->_M_valptr(), __x); } │ │ │ │ -571 __catch(...) │ │ │ │ -572 { │ │ │ │ -573 _M_put_node(__node); │ │ │ │ -574 __throw_exception_again; │ │ │ │ -575 } │ │ │ │ -576 } │ │ │ │ -577 │ │ │ │ -578 _Link_type │ │ │ │ -579 _M_create_node(const value_type& __x) │ │ │ │ -580 { │ │ │ │ -581 _Link_type __tmp = _M_get_node(); │ │ │ │ -582 _M_construct_node(__tmp, __x); │ │ │ │ -583 return __tmp; │ │ │ │ -584 } │ │ │ │ -585#else │ │ │ │ -586 template │ │ │ │ -587 void │ │ │ │ -588 _M_construct_node(_Link_type __node, _Args&&... __args) │ │ │ │ -589 { │ │ │ │ -590 __try │ │ │ │ -591 { │ │ │ │ -592 ::new(__node) _Rb_tree_node<_Val>; │ │ │ │ -593 _Alloc_traits::construct(_M_get_Node_allocator(), │ │ │ │ -594 __node->_M_valptr(), │ │ │ │ -595 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ -596 } │ │ │ │ -597 __catch(...) │ │ │ │ -598 { │ │ │ │ -599 __node->~_Rb_tree_node<_Val>(); │ │ │ │ -600 _M_put_node(__node); │ │ │ │ -601 __throw_exception_again; │ │ │ │ -602 } │ │ │ │ -603 } │ │ │ │ -604 │ │ │ │ -605 template │ │ │ │ -606 _Link_type │ │ │ │ -607 _M_create_node(_Args&&... __args) │ │ │ │ -608 { │ │ │ │ -609 _Link_type __tmp = _M_get_node(); │ │ │ │ -610 _M_construct_node(__tmp, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ -611 return __tmp; │ │ │ │ -612 } │ │ │ │ -613#endif │ │ │ │ -614 │ │ │ │ -615 void │ │ │ │ -616 _M_destroy_node(_Link_type __p) _GLIBCXX_NOEXCEPT │ │ │ │ -617 { │ │ │ │ -618#if __cplusplus < 201103L │ │ │ │ -619 get_allocator().destroy(__p->_M_valptr()); │ │ │ │ -620#else │ │ │ │ -621 _Alloc_traits::destroy(_M_get_Node_allocator(), __p->_M_valptr()); │ │ │ │ -622 __p->~_Rb_tree_node<_Val>(); │ │ │ │ -623#endif │ │ │ │ -624 } │ │ │ │ -625 │ │ │ │ -626 void │ │ │ │ -627 _M_drop_node(_Link_type __p) _GLIBCXX_NOEXCEPT │ │ │ │ -628 { │ │ │ │ -629 _M_destroy_node(__p); │ │ │ │ -630 _M_put_node(__p); │ │ │ │ -631 } │ │ │ │ -632 │ │ │ │ -633 template │ │ │ │ -634 _Link_type │ │ │ │ -635 _M_clone_node(_Link_type __x, _NodeGen& __node_gen) │ │ │ │ -636 { │ │ │ │ -637#if __cplusplus >= 201103L │ │ │ │ -638 using _Vp = __conditional_t<_MoveValue, │ │ │ │ -639 value_type&&, │ │ │ │ -640 const value_type&>; │ │ │ │ -641#endif │ │ │ │ -642 _Link_type __tmp │ │ │ │ -643 = __node_gen(_GLIBCXX_FORWARD(_Vp, *__x->_M_valptr())); │ │ │ │ -644 __tmp->_M_color = __x->_M_color; │ │ │ │ -645 __tmp->_M_left = 0; │ │ │ │ -646 __tmp->_M_right = 0; │ │ │ │ -647 return __tmp; │ │ │ │ -648 } │ │ │ │ -649 │ │ │ │ -650 protected: │ │ │ │ -651#if _GLIBCXX_INLINE_VERSION │ │ │ │ -652 template │ │ │ │ -653#else │ │ │ │ -654 // Unused _Is_pod_comparator is kept as it is part of mangled name. │ │ │ │ -655 template │ │ │ │ -657#endif │ │ │ │ -658 struct _Rb_tree_impl │ │ │ │ -659 : public _Node_allocator │ │ │ │ -660 , public _Rb_tree_key_compare<_Key_compare> │ │ │ │ -661 , public _Rb_tree_header │ │ │ │ -662 { │ │ │ │ -663 typedef _Rb_tree_key_compare<_Key_compare> _Base_key_compare; │ │ │ │ -664 │ │ │ │ -665 _Rb_tree_impl() │ │ │ │ -666 _GLIBCXX_NOEXCEPT_IF( │ │ │ │ -667 is_nothrow_default_constructible<_Node_allocator>::value │ │ │ │ -668 && is_nothrow_default_constructible<_Base_key_compare>::value ) │ │ │ │ -669 : _Node_allocator() │ │ │ │ -670 { } │ │ │ │ -671 │ │ │ │ -672 _Rb_tree_impl(const _Rb_tree_impl& __x) │ │ │ │ -673 : _Node_allocator(_Alloc_traits::_S_select_on_copy(__x)) │ │ │ │ -674 , _Base_key_compare(__x._M_key_compare) │ │ │ │ -675 , _Rb_tree_header() │ │ │ │ -676 { } │ │ │ │ -677 │ │ │ │ -678#if __cplusplus < 201103L │ │ │ │ -679 _Rb_tree_impl(const _Key_compare& __comp, const _Node_allocator& __a) │ │ │ │ -680 : _Node_allocator(__a), _Base_key_compare(__comp) │ │ │ │ -681 { } │ │ │ │ -682#else │ │ │ │ -683 _Rb_tree_impl(_Rb_tree_impl&&) │ │ │ │ -684 noexcept( is_nothrow_move_constructible<_Base_key_compare>::value ) │ │ │ │ -685 = default; │ │ │ │ -686 │ │ │ │ -687 explicit │ │ │ │ -688 _Rb_tree_impl(_Node_allocator&& __a) │ │ │ │ -689 : _Node_allocator(_s_t_d::_m_o_v_e(__a)) │ │ │ │ -690 { } │ │ │ │ -691 │ │ │ │ -692 _Rb_tree_impl(_Rb_tree_impl&& __x, _Node_allocator&& __a) │ │ │ │ -693 : _Node_allocator(_s_t_d::_m_o_v_e(__a)), │ │ │ │ -694 _Base_key_compare(_s_t_d::_m_o_v_e(__x)), │ │ │ │ -695 _Rb_tree_header(_s_t_d::_m_o_v_e(__x)) │ │ │ │ -696 { } │ │ │ │ -697 │ │ │ │ -698 _Rb_tree_impl(const _Key_compare& __comp, _Node_allocator&& __a) │ │ │ │ -699 : _Node_allocator(_s_t_d::_m_o_v_e(__a)), _Base_key_compare(__comp) │ │ │ │ -700 { } │ │ │ │ -701#endif │ │ │ │ -702 }; │ │ │ │ -703 │ │ │ │ -704 _Rb_tree_impl<_Compare> _M_impl; │ │ │ │ +556#if !defined(__cpp_lib_gcd) │ │ │ │ +557# if (__cplusplus >= 201703L) │ │ │ │ +558# define __glibcxx_gcd 201606L │ │ │ │ +559# if defined(__glibcxx_want_all) || defined(__glibcxx_want_gcd) │ │ │ │ +560# define __cpp_lib_gcd 201606L │ │ │ │ +561# endif │ │ │ │ +562# endif │ │ │ │ +563#endif /* !defined(__cpp_lib_gcd) && defined(__glibcxx_want_gcd) */ │ │ │ │ +564#undef __glibcxx_want_gcd │ │ │ │ +565 │ │ │ │ +566#if !defined(__cpp_lib_gcd_lcm) │ │ │ │ +567# if (__cplusplus >= 201703L) │ │ │ │ +568# define __glibcxx_gcd_lcm 201606L │ │ │ │ +569# if defined(__glibcxx_want_all) || defined(__glibcxx_want_gcd_lcm) │ │ │ │ +570# define __cpp_lib_gcd_lcm 201606L │ │ │ │ +571# endif │ │ │ │ +572# endif │ │ │ │ +573#endif /* !defined(__cpp_lib_gcd_lcm) && defined(__glibcxx_want_gcd_lcm) */ │ │ │ │ +574#undef __glibcxx_want_gcd_lcm │ │ │ │ +575 │ │ │ │ +576#if !defined(__cpp_lib_raw_memory_algorithms) │ │ │ │ +577# if (__cplusplus >= 201703L) │ │ │ │ +578# define __glibcxx_raw_memory_algorithms 201606L │ │ │ │ +579# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_raw_memory_algorithms) │ │ │ │ +580# define __cpp_lib_raw_memory_algorithms 201606L │ │ │ │ +581# endif │ │ │ │ +582# endif │ │ │ │ +583#endif /* !defined(__cpp_lib_raw_memory_algorithms) && defined │ │ │ │ +(__glibcxx_want_raw_memory_algorithms) */ │ │ │ │ +584#undef __glibcxx_want_raw_memory_algorithms │ │ │ │ +585 │ │ │ │ +586#if !defined(__cpp_lib_array_constexpr) │ │ │ │ +587# if (__cplusplus >= 202002L) │ │ │ │ +588# define __glibcxx_array_constexpr 201811L │ │ │ │ +589# if defined(__glibcxx_want_all) || defined(__glibcxx_want_array_constexpr) │ │ │ │ +590# define __cpp_lib_array_constexpr 201811L │ │ │ │ +591# endif │ │ │ │ +592# elif (__cplusplus >= 201703L) │ │ │ │ +593# define __glibcxx_array_constexpr 201803L │ │ │ │ +594# if defined(__glibcxx_want_all) || defined(__glibcxx_want_array_constexpr) │ │ │ │ +595# define __cpp_lib_array_constexpr 201803L │ │ │ │ +596# endif │ │ │ │ +597# endif │ │ │ │ +598#endif /* !defined(__cpp_lib_array_constexpr) && defined │ │ │ │ +(__glibcxx_want_array_constexpr) */ │ │ │ │ +599#undef __glibcxx_want_array_constexpr │ │ │ │ +600 │ │ │ │ +601#if !defined(__cpp_lib_nonmember_container_access) │ │ │ │ +602# if (__cplusplus >= 201703L) │ │ │ │ +603# define __glibcxx_nonmember_container_access 201411L │ │ │ │ +604# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_nonmember_container_access) │ │ │ │ +605# define __cpp_lib_nonmember_container_access 201411L │ │ │ │ +606# endif │ │ │ │ +607# endif │ │ │ │ +608#endif /* !defined(__cpp_lib_nonmember_container_access) && defined │ │ │ │ +(__glibcxx_want_nonmember_container_access) */ │ │ │ │ +609#undef __glibcxx_want_nonmember_container_access │ │ │ │ +610 │ │ │ │ +611#if !defined(__cpp_lib_clamp) │ │ │ │ +612# if (__cplusplus >= 201703L) │ │ │ │ +613# define __glibcxx_clamp 201603L │ │ │ │ +614# if defined(__glibcxx_want_all) || defined(__glibcxx_want_clamp) │ │ │ │ +615# define __cpp_lib_clamp 201603L │ │ │ │ +616# endif │ │ │ │ +617# endif │ │ │ │ +618#endif /* !defined(__cpp_lib_clamp) && defined(__glibcxx_want_clamp) */ │ │ │ │ +619#undef __glibcxx_want_clamp │ │ │ │ +620 │ │ │ │ +621#if !defined(__cpp_lib_sample) │ │ │ │ +622# if (__cplusplus >= 201703L) │ │ │ │ +623# define __glibcxx_sample 201603L │ │ │ │ +624# if defined(__glibcxx_want_all) || defined(__glibcxx_want_sample) │ │ │ │ +625# define __cpp_lib_sample 201603L │ │ │ │ +626# endif │ │ │ │ +627# endif │ │ │ │ +628#endif /* !defined(__cpp_lib_sample) && defined(__glibcxx_want_sample) */ │ │ │ │ +629#undef __glibcxx_want_sample │ │ │ │ +630 │ │ │ │ +631#if !defined(__cpp_lib_boyer_moore_searcher) │ │ │ │ +632# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED │ │ │ │ +633# define __glibcxx_boyer_moore_searcher 201603L │ │ │ │ +634# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_boyer_moore_searcher) │ │ │ │ +635# define __cpp_lib_boyer_moore_searcher 201603L │ │ │ │ +636# endif │ │ │ │ +637# endif │ │ │ │ +638#endif /* !defined(__cpp_lib_boyer_moore_searcher) && defined │ │ │ │ +(__glibcxx_want_boyer_moore_searcher) */ │ │ │ │ +639#undef __glibcxx_want_boyer_moore_searcher │ │ │ │ +640 │ │ │ │ +641#if !defined(__cpp_lib_chrono) │ │ │ │ +642# if (__cplusplus >= 202002L) && _GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED │ │ │ │ +643# define __glibcxx_chrono 201907L │ │ │ │ +644# if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono) │ │ │ │ +645# define __cpp_lib_chrono 201907L │ │ │ │ +646# endif │ │ │ │ +647# elif (__cplusplus >= 201703L) && _GLIBCXX_HOSTED │ │ │ │ +648# define __glibcxx_chrono 201611L │ │ │ │ +649# if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono) │ │ │ │ +650# define __cpp_lib_chrono 201611L │ │ │ │ +651# endif │ │ │ │ +652# endif │ │ │ │ +653#endif /* !defined(__cpp_lib_chrono) && defined(__glibcxx_want_chrono) */ │ │ │ │ +654#undef __glibcxx_want_chrono │ │ │ │ +655 │ │ │ │ +656#if !defined(__cpp_lib_execution) │ │ │ │ +657# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED │ │ │ │ +658# define __glibcxx_execution 201902L │ │ │ │ +659# if defined(__glibcxx_want_all) || defined(__glibcxx_want_execution) │ │ │ │ +660# define __cpp_lib_execution 201902L │ │ │ │ +661# endif │ │ │ │ +662# endif │ │ │ │ +663#endif /* !defined(__cpp_lib_execution) && defined(__glibcxx_want_execution) │ │ │ │ +*/ │ │ │ │ +664#undef __glibcxx_want_execution │ │ │ │ +665 │ │ │ │ +666#if !defined(__cpp_lib_filesystem) │ │ │ │ +667# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED │ │ │ │ +668# define __glibcxx_filesystem 201703L │ │ │ │ +669# if defined(__glibcxx_want_all) || defined(__glibcxx_want_filesystem) │ │ │ │ +670# define __cpp_lib_filesystem 201703L │ │ │ │ +671# endif │ │ │ │ +672# endif │ │ │ │ +673#endif /* !defined(__cpp_lib_filesystem) && defined │ │ │ │ +(__glibcxx_want_filesystem) */ │ │ │ │ +674#undef __glibcxx_want_filesystem │ │ │ │ +675 │ │ │ │ +676#if !defined(__cpp_lib_hypot) │ │ │ │ +677# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED │ │ │ │ +678# define __glibcxx_hypot 201603L │ │ │ │ +679# if defined(__glibcxx_want_all) || defined(__glibcxx_want_hypot) │ │ │ │ +680# define __cpp_lib_hypot 201603L │ │ │ │ +681# endif │ │ │ │ +682# endif │ │ │ │ +683#endif /* !defined(__cpp_lib_hypot) && defined(__glibcxx_want_hypot) */ │ │ │ │ +684#undef __glibcxx_want_hypot │ │ │ │ +685 │ │ │ │ +686#if !defined(__cpp_lib_map_try_emplace) │ │ │ │ +687# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED │ │ │ │ +688# define __glibcxx_map_try_emplace 201411L │ │ │ │ +689# if defined(__glibcxx_want_all) || defined(__glibcxx_want_map_try_emplace) │ │ │ │ +690# define __cpp_lib_map_try_emplace 201411L │ │ │ │ +691# endif │ │ │ │ +692# endif │ │ │ │ +693#endif /* !defined(__cpp_lib_map_try_emplace) && defined │ │ │ │ +(__glibcxx_want_map_try_emplace) */ │ │ │ │ +694#undef __glibcxx_want_map_try_emplace │ │ │ │ +695 │ │ │ │ +696#if !defined(__cpp_lib_math_special_functions) │ │ │ │ +697# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED │ │ │ │ +698# define __glibcxx_math_special_functions 201603L │ │ │ │ +699# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_math_special_functions) │ │ │ │ +700# define __cpp_lib_math_special_functions 201603L │ │ │ │ +701# endif │ │ │ │ +702# endif │ │ │ │ +703#endif /* !defined(__cpp_lib_math_special_functions) && defined │ │ │ │ +(__glibcxx_want_math_special_functions) */ │ │ │ │ +704#undef __glibcxx_want_math_special_functions │ │ │ │ 705 │ │ │ │ -706 protected: │ │ │ │ -707 _Base_ptr& │ │ │ │ -708 _M_root() _GLIBCXX_NOEXCEPT │ │ │ │ -709 { return this->_M_impl._M_header._M_parent; } │ │ │ │ -710 │ │ │ │ -711 _Const_Base_ptr │ │ │ │ -712 _M_root() const _GLIBCXX_NOEXCEPT │ │ │ │ -713 { return this->_M_impl._M_header._M_parent; } │ │ │ │ -714 │ │ │ │ -715 _Base_ptr& │ │ │ │ -716 _M_leftmost() _GLIBCXX_NOEXCEPT │ │ │ │ -717 { return this->_M_impl._M_header._M_left; } │ │ │ │ -718 │ │ │ │ -719 _Const_Base_ptr │ │ │ │ -720 _M_leftmost() const _GLIBCXX_NOEXCEPT │ │ │ │ -721 { return this->_M_impl._M_header._M_left; } │ │ │ │ -722 │ │ │ │ -723 _Base_ptr& │ │ │ │ -724 _M_rightmost() _GLIBCXX_NOEXCEPT │ │ │ │ -725 { return this->_M_impl._M_header._M_right; } │ │ │ │ -726 │ │ │ │ -727 _Const_Base_ptr │ │ │ │ -728 _M_rightmost() const _GLIBCXX_NOEXCEPT │ │ │ │ -729 { return this->_M_impl._M_header._M_right; } │ │ │ │ +706#if !defined(__cpp_lib_memory_resource) │ │ │ │ +707# if (__cplusplus >= 201703L) && defined(_GLIBCXX_HAS_GTHREADS) && │ │ │ │ +_GLIBCXX_HOSTED │ │ │ │ +708# define __glibcxx_memory_resource 201603L │ │ │ │ +709# if defined(__glibcxx_want_all) || defined(__glibcxx_want_memory_resource) │ │ │ │ +710# define __cpp_lib_memory_resource 201603L │ │ │ │ +711# endif │ │ │ │ +712# elif (__cplusplus >= 201703L) && !defined(_GLIBCXX_HAS_GTHREADS) && │ │ │ │ +_GLIBCXX_HOSTED │ │ │ │ +713# define __glibcxx_memory_resource 1L │ │ │ │ +714# if defined(__glibcxx_want_all) || defined(__glibcxx_want_memory_resource) │ │ │ │ +715# define __cpp_lib_memory_resource 1L │ │ │ │ +716# endif │ │ │ │ +717# endif │ │ │ │ +718#endif /* !defined(__cpp_lib_memory_resource) && defined │ │ │ │ +(__glibcxx_want_memory_resource) */ │ │ │ │ +719#undef __glibcxx_want_memory_resource │ │ │ │ +720 │ │ │ │ +721#if !defined(__cpp_lib_node_extract) │ │ │ │ +722# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED │ │ │ │ +723# define __glibcxx_node_extract 201606L │ │ │ │ +724# if defined(__glibcxx_want_all) || defined(__glibcxx_want_node_extract) │ │ │ │ +725# define __cpp_lib_node_extract 201606L │ │ │ │ +726# endif │ │ │ │ +727# endif │ │ │ │ +728#endif /* !defined(__cpp_lib_node_extract) && defined │ │ │ │ +(__glibcxx_want_node_extract) */ │ │ │ │ +729#undef __glibcxx_want_node_extract │ │ │ │ 730 │ │ │ │ -731 _Link_type │ │ │ │ -732 _M_mbegin() const _GLIBCXX_NOEXCEPT │ │ │ │ -733 { return static_cast<_Link_type>(this->_M_impl._M_header._M_parent); } │ │ │ │ -734 │ │ │ │ -735 _Link_type │ │ │ │ -736 _M_begin() _GLIBCXX_NOEXCEPT │ │ │ │ -737 { return _M_mbegin(); } │ │ │ │ -738 │ │ │ │ -739 _Const_Link_type │ │ │ │ -740 _M_begin() const _GLIBCXX_NOEXCEPT │ │ │ │ -741 { │ │ │ │ -742 return static_cast<_Const_Link_type> │ │ │ │ -743 (this->_M_impl._M_header._M_parent); │ │ │ │ -744 } │ │ │ │ -745 │ │ │ │ -746 _Base_ptr │ │ │ │ -747 _M_end() _GLIBCXX_NOEXCEPT │ │ │ │ -748 { return &this->_M_impl._M_header; } │ │ │ │ -749 │ │ │ │ -750 _Const_Base_ptr │ │ │ │ -751 _M_end() const _GLIBCXX_NOEXCEPT │ │ │ │ -752 { return &this->_M_impl._M_header; } │ │ │ │ -753 │ │ │ │ -754 static const _Key& │ │ │ │ -755 _S_key(_Const_Link_type __x) │ │ │ │ -756 { │ │ │ │ -757#if __cplusplus >= 201103L │ │ │ │ -758 // If we're asking for the key we're presumably using the comparison │ │ │ │ -759 // object, and so this is a good place to sanity check it. │ │ │ │ -760 static_assert(__is_invocable<_Compare&, const _Key&, const _Key&>{}, │ │ │ │ -761 "comparison object must be invocable " │ │ │ │ -762 "with two arguments of key type"); │ │ │ │ -763# if __cplusplus >= 201703L │ │ │ │ -764 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -765 // 2542. Missing const requirements for associative containers │ │ │ │ -766 if constexpr (__is_invocable<_Compare&, const _Key&, const _Key&>{}) │ │ │ │ -767 static_assert( │ │ │ │ -768 is_invocable_v, │ │ │ │ -769 "comparison object must be invocable as const"); │ │ │ │ -770# endif // C++17 │ │ │ │ -771#endif // C++11 │ │ │ │ -772 │ │ │ │ -773 return _KeyOfValue()(*__x->_M_valptr()); │ │ │ │ -774 } │ │ │ │ -775 │ │ │ │ -776 static _Link_type │ │ │ │ -777 _S_left(_Base_ptr __x) _GLIBCXX_NOEXCEPT │ │ │ │ -778 { return static_cast<_Link_type>(__x->_M_left); } │ │ │ │ -779 │ │ │ │ -780 static _Const_Link_type │ │ │ │ -781 _S_left(_Const_Base_ptr __x) _GLIBCXX_NOEXCEPT │ │ │ │ -782 { return static_cast<_Const_Link_type>(__x->_M_left); } │ │ │ │ -783 │ │ │ │ -784 static _Link_type │ │ │ │ -785 _S_right(_Base_ptr __x) _GLIBCXX_NOEXCEPT │ │ │ │ -786 { return static_cast<_Link_type>(__x->_M_right); } │ │ │ │ -787 │ │ │ │ -788 static _Const_Link_type │ │ │ │ -789 _S_right(_Const_Base_ptr __x) _GLIBCXX_NOEXCEPT │ │ │ │ -790 { return static_cast<_Const_Link_type>(__x->_M_right); } │ │ │ │ -791 │ │ │ │ -792 static const _Key& │ │ │ │ -793 _S_key(_Const_Base_ptr __x) │ │ │ │ -794 { return _S_key(static_cast<_Const_Link_type>(__x)); } │ │ │ │ -795 │ │ │ │ -796 static _Base_ptr │ │ │ │ -797 _S_minimum(_Base_ptr __x) _GLIBCXX_NOEXCEPT │ │ │ │ -798 { return _Rb_tree_node_base::_S_minimum(__x); } │ │ │ │ -799 │ │ │ │ -800 static _Const_Base_ptr │ │ │ │ -801 _S_minimum(_Const_Base_ptr __x) _GLIBCXX_NOEXCEPT │ │ │ │ -802 { return _Rb_tree_node_base::_S_minimum(__x); } │ │ │ │ -803 │ │ │ │ -804 static _Base_ptr │ │ │ │ -805 _S_maximum(_Base_ptr __x) _GLIBCXX_NOEXCEPT │ │ │ │ -806 { return _Rb_tree_node_base::_S_maximum(__x); } │ │ │ │ -807 │ │ │ │ -808 static _Const_Base_ptr │ │ │ │ -809 _S_maximum(_Const_Base_ptr __x) _GLIBCXX_NOEXCEPT │ │ │ │ -810 { return _Rb_tree_node_base::_S_maximum(__x); } │ │ │ │ -811 │ │ │ │ -812 public: │ │ │ │ -813 typedef _Rb_tree_iterator iterator; │ │ │ │ -814 typedef _Rb_tree_const_iterator const_iterator; │ │ │ │ -815 │ │ │ │ -816 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_> reverse_iterator; │ │ │ │ -817 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_> const_reverse_iterator; │ │ │ │ -818 │ │ │ │ -819#ifdef __glibcxx_node_extract // >= C++17 │ │ │ │ -820 using node_type = _Node_handle<_Key, _Val, _Node_allocator>; │ │ │ │ -821 using insert_return_type = _Node_insert_return< │ │ │ │ -822 __conditional_t, const_iterator, iterator>, │ │ │ │ -823 node_type>; │ │ │ │ -824#endif │ │ │ │ -825 │ │ │ │ -826 pair<_Base_ptr, _Base_ptr> │ │ │ │ -827 _M_get_insert_unique_pos(const key_type& __k); │ │ │ │ -828 │ │ │ │ -829 pair<_Base_ptr, _Base_ptr> │ │ │ │ -830 _M_get_insert_equal_pos(const key_type& __k); │ │ │ │ -831 │ │ │ │ -832 pair<_Base_ptr, _Base_ptr> │ │ │ │ -833 _M_get_insert_hint_unique_pos(const_iterator __pos, │ │ │ │ -834 const key_type& __k); │ │ │ │ -835 │ │ │ │ -836 pair<_Base_ptr, _Base_ptr> │ │ │ │ -837 _M_get_insert_hint_equal_pos(const_iterator __pos, │ │ │ │ -838 const key_type& __k); │ │ │ │ -839 │ │ │ │ -840 private: │ │ │ │ -841#if __cplusplus >= 201103L │ │ │ │ -842 template │ │ │ │ -843 iterator │ │ │ │ -844 _M_insert_(_Base_ptr __x, _Base_ptr __y, _Arg&& __v, _NodeGen&); │ │ │ │ -845 │ │ │ │ -846 iterator │ │ │ │ -847 _M_insert_node(_Base_ptr __x, _Base_ptr __y, _Link_type __z); │ │ │ │ -848 │ │ │ │ -849 template │ │ │ │ -850 iterator │ │ │ │ -851 _M_insert_lower(_Base_ptr __y, _Arg&& __v); │ │ │ │ -852 │ │ │ │ -853 template │ │ │ │ -854 iterator │ │ │ │ -855 _M_insert_equal_lower(_Arg&& __x); │ │ │ │ -856 │ │ │ │ -857 iterator │ │ │ │ -858 _M_insert_lower_node(_Base_ptr __p, _Link_type __z); │ │ │ │ -859 │ │ │ │ -860 iterator │ │ │ │ -861 _M_insert_equal_lower_node(_Link_type __z); │ │ │ │ -862#else │ │ │ │ -863 template │ │ │ │ -864 iterator │ │ │ │ -865 _M_insert_(_Base_ptr __x, _Base_ptr __y, │ │ │ │ -866 const value_type& __v, _NodeGen&); │ │ │ │ -867 │ │ │ │ -868 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -869 // 233. Insertion hints in associative containers. │ │ │ │ -870 iterator │ │ │ │ -871 _M_insert_lower(_Base_ptr __y, const value_type& __v); │ │ │ │ -872 │ │ │ │ -873 iterator │ │ │ │ -874 _M_insert_equal_lower(const value_type& __x); │ │ │ │ -875#endif │ │ │ │ -876 │ │ │ │ -877 enum { __as_lvalue, __as_rvalue }; │ │ │ │ -878 │ │ │ │ -879 template │ │ │ │ -880 _Link_type │ │ │ │ -881 _M_copy(_Link_type, _Base_ptr, _NodeGen&); │ │ │ │ -882 │ │ │ │ -883 template │ │ │ │ -884 _Link_type │ │ │ │ -885 _M_copy(const _Rb_tree& __x, _NodeGen& __gen) │ │ │ │ -886 { │ │ │ │ -887 _Link_type __root = │ │ │ │ -888 _M_copy<_MoveValues>(__x._M_mbegin(), _M_end(), __gen); │ │ │ │ -889 _M_leftmost() = _S_minimum(__root); │ │ │ │ -890 _M_rightmost() = _S_maximum(__root); │ │ │ │ -891 _M_impl._M_node_count = __x._M_impl._M_node_count; │ │ │ │ -892 return __root; │ │ │ │ -893 } │ │ │ │ -894 │ │ │ │ -895 _Link_type │ │ │ │ -896 _M_copy(const _Rb_tree& __x) │ │ │ │ -897 { │ │ │ │ -898 _Alloc_node __an(*this); │ │ │ │ -899 return _M_copy<__as_lvalue>(__x, __an); │ │ │ │ -900 } │ │ │ │ -901 │ │ │ │ -902 void │ │ │ │ -903 _M_erase(_Link_type __x); │ │ │ │ -904 │ │ │ │ -905 iterator │ │ │ │ -906 _M_lower_bound(_Link_type __x, _Base_ptr __y, │ │ │ │ -907 const _Key& __k); │ │ │ │ -908 │ │ │ │ -909 const_iterator │ │ │ │ -910 _M_lower_bound(_Const_Link_type __x, _Const_Base_ptr __y, │ │ │ │ -911 const _Key& __k) const; │ │ │ │ -912 │ │ │ │ -913 iterator │ │ │ │ -914 _M_upper_bound(_Link_type __x, _Base_ptr __y, │ │ │ │ -915 const _Key& __k); │ │ │ │ -916 │ │ │ │ -917 const_iterator │ │ │ │ -918 _M_upper_bound(_Const_Link_type __x, _Const_Base_ptr __y, │ │ │ │ -919 const _Key& __k) const; │ │ │ │ +731#if !defined(__cpp_lib_parallel_algorithm) │ │ │ │ +732# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED │ │ │ │ +733# define __glibcxx_parallel_algorithm 201603L │ │ │ │ +734# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_parallel_algorithm) │ │ │ │ +735# define __cpp_lib_parallel_algorithm 201603L │ │ │ │ +736# endif │ │ │ │ +737# endif │ │ │ │ +738#endif /* !defined(__cpp_lib_parallel_algorithm) && defined │ │ │ │ +(__glibcxx_want_parallel_algorithm) */ │ │ │ │ +739#undef __glibcxx_want_parallel_algorithm │ │ │ │ +740 │ │ │ │ +741#if !defined(__cpp_lib_scoped_lock) │ │ │ │ +742# if (__cplusplus >= 201703L) │ │ │ │ +743# define __glibcxx_scoped_lock 201703L │ │ │ │ +744# if defined(__glibcxx_want_all) || defined(__glibcxx_want_scoped_lock) │ │ │ │ +745# define __cpp_lib_scoped_lock 201703L │ │ │ │ +746# endif │ │ │ │ +747# endif │ │ │ │ +748#endif /* !defined(__cpp_lib_scoped_lock) && defined │ │ │ │ +(__glibcxx_want_scoped_lock) */ │ │ │ │ +749#undef __glibcxx_want_scoped_lock │ │ │ │ +750 │ │ │ │ +751#if !defined(__cpp_lib_shared_mutex) │ │ │ │ +752# if (__cplusplus >= 201703L) && defined(_GLIBCXX_HAS_GTHREADS) && │ │ │ │ +_GLIBCXX_HOSTED │ │ │ │ +753# define __glibcxx_shared_mutex 201505L │ │ │ │ +754# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shared_mutex) │ │ │ │ +755# define __cpp_lib_shared_mutex 201505L │ │ │ │ +756# endif │ │ │ │ +757# endif │ │ │ │ +758#endif /* !defined(__cpp_lib_shared_mutex) && defined │ │ │ │ +(__glibcxx_want_shared_mutex) */ │ │ │ │ +759#undef __glibcxx_want_shared_mutex │ │ │ │ +760 │ │ │ │ +761#if !defined(__cpp_lib_shared_ptr_weak_type) │ │ │ │ +762# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED │ │ │ │ +763# define __glibcxx_shared_ptr_weak_type 201606L │ │ │ │ +764# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_shared_ptr_weak_type) │ │ │ │ +765# define __cpp_lib_shared_ptr_weak_type 201606L │ │ │ │ +766# endif │ │ │ │ +767# endif │ │ │ │ +768#endif /* !defined(__cpp_lib_shared_ptr_weak_type) && defined │ │ │ │ +(__glibcxx_want_shared_ptr_weak_type) */ │ │ │ │ +769#undef __glibcxx_want_shared_ptr_weak_type │ │ │ │ +770 │ │ │ │ +771#if !defined(__cpp_lib_string_view) │ │ │ │ +772# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED │ │ │ │ +773# define __glibcxx_string_view 201803L │ │ │ │ +774# if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_view) │ │ │ │ +775# define __cpp_lib_string_view 201803L │ │ │ │ +776# endif │ │ │ │ +777# endif │ │ │ │ +778#endif /* !defined(__cpp_lib_string_view) && defined │ │ │ │ +(__glibcxx_want_string_view) */ │ │ │ │ +779#undef __glibcxx_want_string_view │ │ │ │ +780 │ │ │ │ +781#if !defined(__cpp_lib_unordered_map_try_emplace) │ │ │ │ +782# if (__cplusplus >= 201703L) && _GLIBCXX_HOSTED │ │ │ │ +783# define __glibcxx_unordered_map_try_emplace 201411L │ │ │ │ +784# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_unordered_map_try_emplace) │ │ │ │ +785# define __cpp_lib_unordered_map_try_emplace 201411L │ │ │ │ +786# endif │ │ │ │ +787# endif │ │ │ │ +788#endif /* !defined(__cpp_lib_unordered_map_try_emplace) && defined │ │ │ │ +(__glibcxx_want_unordered_map_try_emplace) */ │ │ │ │ +789#undef __glibcxx_want_unordered_map_try_emplace │ │ │ │ +790 │ │ │ │ +791#if !defined(__cpp_lib_assume_aligned) │ │ │ │ +792# if (__cplusplus >= 202002L) │ │ │ │ +793# define __glibcxx_assume_aligned 201811L │ │ │ │ +794# if defined(__glibcxx_want_all) || defined(__glibcxx_want_assume_aligned) │ │ │ │ +795# define __cpp_lib_assume_aligned 201811L │ │ │ │ +796# endif │ │ │ │ +797# endif │ │ │ │ +798#endif /* !defined(__cpp_lib_assume_aligned) && defined │ │ │ │ +(__glibcxx_want_assume_aligned) */ │ │ │ │ +799#undef __glibcxx_want_assume_aligned │ │ │ │ +800 │ │ │ │ +801#if !defined(__cpp_lib_atomic_flag_test) │ │ │ │ +802# if (__cplusplus >= 202002L) │ │ │ │ +803# define __glibcxx_atomic_flag_test 201907L │ │ │ │ +804# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_flag_test) │ │ │ │ +805# define __cpp_lib_atomic_flag_test 201907L │ │ │ │ +806# endif │ │ │ │ +807# endif │ │ │ │ +808#endif /* !defined(__cpp_lib_atomic_flag_test) && defined │ │ │ │ +(__glibcxx_want_atomic_flag_test) */ │ │ │ │ +809#undef __glibcxx_want_atomic_flag_test │ │ │ │ +810 │ │ │ │ +811#if !defined(__cpp_lib_atomic_float) │ │ │ │ +812# if (__cplusplus >= 202002L) │ │ │ │ +813# define __glibcxx_atomic_float 201711L │ │ │ │ +814# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_float) │ │ │ │ +815# define __cpp_lib_atomic_float 201711L │ │ │ │ +816# endif │ │ │ │ +817# endif │ │ │ │ +818#endif /* !defined(__cpp_lib_atomic_float) && defined │ │ │ │ +(__glibcxx_want_atomic_float) */ │ │ │ │ +819#undef __glibcxx_want_atomic_float │ │ │ │ +820 │ │ │ │ +821#if !defined(__cpp_lib_atomic_lock_free_type_aliases) │ │ │ │ +822# if (__cplusplus >= 202002L) && ((__GCC_ATOMIC_INT_LOCK_FREE | │ │ │ │ +__GCC_ATOMIC_LONG_LOCK_FREE | __GCC_ATOMIC_CHAR_LOCK_FREE) & 2) │ │ │ │ +823# define __glibcxx_atomic_lock_free_type_aliases 201907L │ │ │ │ +824# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_atomic_lock_free_type_aliases) │ │ │ │ +825# define __cpp_lib_atomic_lock_free_type_aliases 201907L │ │ │ │ +826# endif │ │ │ │ +827# endif │ │ │ │ +828#endif /* !defined(__cpp_lib_atomic_lock_free_type_aliases) && defined │ │ │ │ +(__glibcxx_want_atomic_lock_free_type_aliases) */ │ │ │ │ +829#undef __glibcxx_want_atomic_lock_free_type_aliases │ │ │ │ +830 │ │ │ │ +831#if !defined(__cpp_lib_atomic_ref) │ │ │ │ +832# if (__cplusplus >= 202002L) │ │ │ │ +833# define __glibcxx_atomic_ref 201806L │ │ │ │ +834# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_ref) │ │ │ │ +835# define __cpp_lib_atomic_ref 201806L │ │ │ │ +836# endif │ │ │ │ +837# endif │ │ │ │ +838#endif /* !defined(__cpp_lib_atomic_ref) && defined │ │ │ │ +(__glibcxx_want_atomic_ref) */ │ │ │ │ +839#undef __glibcxx_want_atomic_ref │ │ │ │ +840 │ │ │ │ +841#if !defined(__cpp_lib_atomic_value_initialization) │ │ │ │ +842# if (__cplusplus >= 202002L) │ │ │ │ +843# define __glibcxx_atomic_value_initialization 201911L │ │ │ │ +844# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_atomic_value_initialization) │ │ │ │ +845# define __cpp_lib_atomic_value_initialization 201911L │ │ │ │ +846# endif │ │ │ │ +847# endif │ │ │ │ +848#endif /* !defined(__cpp_lib_atomic_value_initialization) && defined │ │ │ │ +(__glibcxx_want_atomic_value_initialization) */ │ │ │ │ +849#undef __glibcxx_want_atomic_value_initialization │ │ │ │ +850 │ │ │ │ +851#if !defined(__cpp_lib_bind_front) │ │ │ │ +852# if (__cplusplus >= 202002L) │ │ │ │ +853# define __glibcxx_bind_front 201907L │ │ │ │ +854# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bind_front) │ │ │ │ +855# define __cpp_lib_bind_front 201907L │ │ │ │ +856# endif │ │ │ │ +857# endif │ │ │ │ +858#endif /* !defined(__cpp_lib_bind_front) && defined │ │ │ │ +(__glibcxx_want_bind_front) */ │ │ │ │ +859#undef __glibcxx_want_bind_front │ │ │ │ +860 │ │ │ │ +861#if !defined(__cpp_lib_bind_back) │ │ │ │ +862# if (__cplusplus >= 202100L) && (__cpp_explicit_this_parameter) │ │ │ │ +863# define __glibcxx_bind_back 202202L │ │ │ │ +864# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bind_back) │ │ │ │ +865# define __cpp_lib_bind_back 202202L │ │ │ │ +866# endif │ │ │ │ +867# endif │ │ │ │ +868#endif /* !defined(__cpp_lib_bind_back) && defined(__glibcxx_want_bind_back) │ │ │ │ +*/ │ │ │ │ +869#undef __glibcxx_want_bind_back │ │ │ │ +870 │ │ │ │ +871#if !defined(__cpp_lib_starts_ends_with) │ │ │ │ +872# if (__cplusplus >= 202002L) │ │ │ │ +873# define __glibcxx_starts_ends_with 201711L │ │ │ │ +874# if defined(__glibcxx_want_all) || defined(__glibcxx_want_starts_ends_with) │ │ │ │ +875# define __cpp_lib_starts_ends_with 201711L │ │ │ │ +876# endif │ │ │ │ +877# endif │ │ │ │ +878#endif /* !defined(__cpp_lib_starts_ends_with) && defined │ │ │ │ +(__glibcxx_want_starts_ends_with) */ │ │ │ │ +879#undef __glibcxx_want_starts_ends_with │ │ │ │ +880 │ │ │ │ +881#if !defined(__cpp_lib_bit_cast) │ │ │ │ +882# if (__cplusplus >= 202002L) && (__has_builtin(__builtin_bit_cast)) │ │ │ │ +883# define __glibcxx_bit_cast 201806L │ │ │ │ +884# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bit_cast) │ │ │ │ +885# define __cpp_lib_bit_cast 201806L │ │ │ │ +886# endif │ │ │ │ +887# endif │ │ │ │ +888#endif /* !defined(__cpp_lib_bit_cast) && defined(__glibcxx_want_bit_cast) │ │ │ │ +*/ │ │ │ │ +889#undef __glibcxx_want_bit_cast │ │ │ │ +890 │ │ │ │ +891#if !defined(__cpp_lib_bitops) │ │ │ │ +892# if (__cplusplus >= 202002L) │ │ │ │ +893# define __glibcxx_bitops 201907L │ │ │ │ +894# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bitops) │ │ │ │ +895# define __cpp_lib_bitops 201907L │ │ │ │ +896# endif │ │ │ │ +897# endif │ │ │ │ +898#endif /* !defined(__cpp_lib_bitops) && defined(__glibcxx_want_bitops) */ │ │ │ │ +899#undef __glibcxx_want_bitops │ │ │ │ +900 │ │ │ │ +901#if !defined(__cpp_lib_bounded_array_traits) │ │ │ │ +902# if (__cplusplus >= 202002L) │ │ │ │ +903# define __glibcxx_bounded_array_traits 201902L │ │ │ │ +904# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_bounded_array_traits) │ │ │ │ +905# define __cpp_lib_bounded_array_traits 201902L │ │ │ │ +906# endif │ │ │ │ +907# endif │ │ │ │ +908#endif /* !defined(__cpp_lib_bounded_array_traits) && defined │ │ │ │ +(__glibcxx_want_bounded_array_traits) */ │ │ │ │ +909#undef __glibcxx_want_bounded_array_traits │ │ │ │ +910 │ │ │ │ +911#if !defined(__cpp_lib_concepts) │ │ │ │ +912# if (__cplusplus >= 202002L) && (__cpp_concepts >= 201907L) │ │ │ │ +913# define __glibcxx_concepts 202002L │ │ │ │ +914# if defined(__glibcxx_want_all) || defined(__glibcxx_want_concepts) │ │ │ │ +915# define __cpp_lib_concepts 202002L │ │ │ │ +916# endif │ │ │ │ +917# endif │ │ │ │ +918#endif /* !defined(__cpp_lib_concepts) && defined(__glibcxx_want_concepts) │ │ │ │ +*/ │ │ │ │ +919#undef __glibcxx_want_concepts │ │ │ │ 920 │ │ │ │ -921 public: │ │ │ │ -922 // allocation/deallocation │ │ │ │ -923#if __cplusplus < 201103L │ │ │ │ -924 _Rb_tree() { } │ │ │ │ -925#else │ │ │ │ -926 _Rb_tree() = default; │ │ │ │ -927#endif │ │ │ │ -928 │ │ │ │ -929 _Rb_tree(const _Compare& __comp, │ │ │ │ -930 const allocator_type& __a = allocator_type()) │ │ │ │ -931 : _M_impl(__comp, _Node_allocator(__a)) { } │ │ │ │ -932 │ │ │ │ -933 _Rb_tree(const _Rb_tree& __x) │ │ │ │ -934 : _M_impl(__x._M_impl) │ │ │ │ -935 { │ │ │ │ -936 if (__x._M_root() != 0) │ │ │ │ -937 _M_root() = _M_copy(__x); │ │ │ │ -938 } │ │ │ │ -939 │ │ │ │ -940#if __cplusplus >= 201103L │ │ │ │ -941 _Rb_tree(const allocator_type& __a) │ │ │ │ -942 : _M_impl(_Node_allocator(__a)) │ │ │ │ -943 { } │ │ │ │ -944 │ │ │ │ -945 _Rb_tree(const _Rb_tree& __x, const allocator_type& __a) │ │ │ │ -946 : _M_impl(__x._M_impl._M_key_compare, _Node_allocator(__a)) │ │ │ │ -947 { │ │ │ │ -948 if (__x._M_root() != nullptr) │ │ │ │ -949 _M_root() = _M_copy(__x); │ │ │ │ -950 } │ │ │ │ -951 │ │ │ │ -952 _Rb_tree(_Rb_tree&&) = default; │ │ │ │ -953 │ │ │ │ -954 _Rb_tree(_Rb_tree&& __x, const allocator_type& __a) │ │ │ │ -955 : _Rb_tree(_s_t_d::_m_o_v_e(__x), _Node_allocator(__a)) │ │ │ │ -956 { } │ │ │ │ -957 │ │ │ │ -958 private: │ │ │ │ -959 _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a, _t_r_u_e___t_y_p_e) │ │ │ │ -960 noexcept(is_nothrow_default_constructible<_Compare>::value) │ │ │ │ -961 : _M_impl(_s_t_d::_m_o_v_e(__x._M_impl), _s_t_d::_m_o_v_e(__a)) │ │ │ │ -962 { } │ │ │ │ -963 │ │ │ │ -964 _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a, _f_a_l_s_e___t_y_p_e) │ │ │ │ -965 : _M_impl(__x._M_impl._M_key_compare, _s_t_d::_m_o_v_e(__a)) │ │ │ │ -966 { │ │ │ │ -967 if (__x._M_root() != nullptr) │ │ │ │ -968 _M_move_data(__x, _f_a_l_s_e___t_y_p_e{}); │ │ │ │ -969 } │ │ │ │ +921#if !defined(__cpp_lib_optional) │ │ │ │ +922# if (__cplusplus >= 202100L) && (__glibcxx_concepts) │ │ │ │ +923# define __glibcxx_optional 202110L │ │ │ │ +924# if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional) │ │ │ │ +925# define __cpp_lib_optional 202110L │ │ │ │ +926# endif │ │ │ │ +927# elif (__cplusplus >= 202002L) │ │ │ │ +928# define __glibcxx_optional 202106L │ │ │ │ +929# if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional) │ │ │ │ +930# define __cpp_lib_optional 202106L │ │ │ │ +931# endif │ │ │ │ +932# elif (__cplusplus >= 201703L) │ │ │ │ +933# define __glibcxx_optional 201606L │ │ │ │ +934# if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional) │ │ │ │ +935# define __cpp_lib_optional 201606L │ │ │ │ +936# endif │ │ │ │ +937# endif │ │ │ │ +938#endif /* !defined(__cpp_lib_optional) && defined(__glibcxx_want_optional) │ │ │ │ +*/ │ │ │ │ +939#undef __glibcxx_want_optional │ │ │ │ +940 │ │ │ │ +941#if !defined(__cpp_lib_destroying_delete) │ │ │ │ +942# if (__cplusplus >= 202002L) && (__cpp_impl_destroying_delete) │ │ │ │ +943# define __glibcxx_destroying_delete 201806L │ │ │ │ +944# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_destroying_delete) │ │ │ │ +945# define __cpp_lib_destroying_delete 201806L │ │ │ │ +946# endif │ │ │ │ +947# endif │ │ │ │ +948#endif /* !defined(__cpp_lib_destroying_delete) && defined │ │ │ │ +(__glibcxx_want_destroying_delete) */ │ │ │ │ +949#undef __glibcxx_want_destroying_delete │ │ │ │ +950 │ │ │ │ +951#if !defined(__cpp_lib_constexpr_string_view) │ │ │ │ +952# if (__cplusplus >= 202002L) │ │ │ │ +953# define __glibcxx_constexpr_string_view 201811L │ │ │ │ +954# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_constexpr_string_view) │ │ │ │ +955# define __cpp_lib_constexpr_string_view 201811L │ │ │ │ +956# endif │ │ │ │ +957# endif │ │ │ │ +958#endif /* !defined(__cpp_lib_constexpr_string_view) && defined │ │ │ │ +(__glibcxx_want_constexpr_string_view) */ │ │ │ │ +959#undef __glibcxx_want_constexpr_string_view │ │ │ │ +960 │ │ │ │ +961#if !defined(__cpp_lib_endian) │ │ │ │ +962# if (__cplusplus >= 202002L) │ │ │ │ +963# define __glibcxx_endian 201907L │ │ │ │ +964# if defined(__glibcxx_want_all) || defined(__glibcxx_want_endian) │ │ │ │ +965# define __cpp_lib_endian 201907L │ │ │ │ +966# endif │ │ │ │ +967# endif │ │ │ │ +968#endif /* !defined(__cpp_lib_endian) && defined(__glibcxx_want_endian) */ │ │ │ │ +969#undef __glibcxx_want_endian │ │ │ │ 970 │ │ │ │ -971 public: │ │ │ │ -972 _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a) │ │ │ │ -973 noexcept( noexcept( │ │ │ │ -974 _Rb_tree(_s_t_d_:_:_d_e_c_l_v_a_l_<___R_b___t_r_e_e_&_&_>(), _s_t_d_:_:_d_e_c_l_v_a_l_<___N_o_d_e___a_l_l_o_c_a_t_o_r_&_&_>(), │ │ │ │ -975 _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_>())) ) │ │ │ │ -976 : _Rb_tree(_s_t_d_:_:_m_o_v_e(__x), _s_t_d_:_:_m_o_v_e(__a), │ │ │ │ -977 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{}) │ │ │ │ -978 { } │ │ │ │ -979#endif │ │ │ │ +971#if !defined(__cpp_lib_int_pow2) │ │ │ │ +972# if (__cplusplus >= 202002L) │ │ │ │ +973# define __glibcxx_int_pow2 202002L │ │ │ │ +974# if defined(__glibcxx_want_all) || defined(__glibcxx_want_int_pow2) │ │ │ │ +975# define __cpp_lib_int_pow2 202002L │ │ │ │ +976# endif │ │ │ │ +977# endif │ │ │ │ +978#endif /* !defined(__cpp_lib_int_pow2) && defined(__glibcxx_want_int_pow2) │ │ │ │ +*/ │ │ │ │ +979#undef __glibcxx_want_int_pow2 │ │ │ │ 980 │ │ │ │ -981 ~_Rb_tree() _GLIBCXX_NOEXCEPT │ │ │ │ -982 { _M_erase(_M_begin()); } │ │ │ │ -983 │ │ │ │ -984 _Rb_tree& │ │ │ │ -985 operator=(const _Rb_tree& __x); │ │ │ │ -986 │ │ │ │ -987 // Accessors. │ │ │ │ -988 _Compare │ │ │ │ -989 key_comp() const │ │ │ │ -990 { return _M_impl._M_key_compare; } │ │ │ │ -991 │ │ │ │ -992 iterator │ │ │ │ -993 _b_e_g_i_n() _GLIBCXX_NOEXCEPT │ │ │ │ -994 { return iterator(this->_M_impl._M_header._M_left); } │ │ │ │ -995 │ │ │ │ -996 const_iterator │ │ │ │ -997 _b_e_g_i_n() const _GLIBCXX_NOEXCEPT │ │ │ │ -998 { return const_iterator(this->_M_impl._M_header._M_left); } │ │ │ │ -999 │ │ │ │ -1000 iterator │ │ │ │ -1001 _e_n_d() _GLIBCXX_NOEXCEPT │ │ │ │ -1002 { return iterator(&this->_M_impl._M_header); } │ │ │ │ -1003 │ │ │ │ -1004 const_iterator │ │ │ │ -1005 _e_n_d() const _GLIBCXX_NOEXCEPT │ │ │ │ -1006 { return const_iterator(&this->_M_impl._M_header); } │ │ │ │ -1007 │ │ │ │ -1008 reverse_iterator │ │ │ │ -1009 _r_b_e_g_i_n() _GLIBCXX_NOEXCEPT │ │ │ │ -1010 { return reverse_iterator(_e_n_d()); } │ │ │ │ -1011 │ │ │ │ -1012 const_reverse_iterator │ │ │ │ -1013 _r_b_e_g_i_n() const _GLIBCXX_NOEXCEPT │ │ │ │ -1014 { return const_reverse_iterator(_e_n_d()); } │ │ │ │ +981#if !defined(__cpp_lib_integer_comparison_functions) │ │ │ │ +982# if (__cplusplus >= 202002L) │ │ │ │ +983# define __glibcxx_integer_comparison_functions 202002L │ │ │ │ +984# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_integer_comparison_functions) │ │ │ │ +985# define __cpp_lib_integer_comparison_functions 202002L │ │ │ │ +986# endif │ │ │ │ +987# endif │ │ │ │ +988#endif /* !defined(__cpp_lib_integer_comparison_functions) && defined │ │ │ │ +(__glibcxx_want_integer_comparison_functions) */ │ │ │ │ +989#undef __glibcxx_want_integer_comparison_functions │ │ │ │ +990 │ │ │ │ +991#if !defined(__cpp_lib_is_constant_evaluated) │ │ │ │ +992# if (__cplusplus >= 202002L) && (defined │ │ │ │ +(_GLIBCXX_HAVE_IS_CONSTANT_EVALUATED)) │ │ │ │ +993# define __glibcxx_is_constant_evaluated 201811L │ │ │ │ +994# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_is_constant_evaluated) │ │ │ │ +995# define __cpp_lib_is_constant_evaluated 201811L │ │ │ │ +996# endif │ │ │ │ +997# endif │ │ │ │ +998#endif /* !defined(__cpp_lib_is_constant_evaluated) && defined │ │ │ │ +(__glibcxx_want_is_constant_evaluated) */ │ │ │ │ +999#undef __glibcxx_want_is_constant_evaluated │ │ │ │ +1000 │ │ │ │ +1001#if !defined(__cpp_lib_constexpr_char_traits) │ │ │ │ +1002# if (__cplusplus >= 202002L) && (defined(__glibcxx_is_constant_evaluated)) │ │ │ │ +1003# define __glibcxx_constexpr_char_traits 201811L │ │ │ │ +1004# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_constexpr_char_traits) │ │ │ │ +1005# define __cpp_lib_constexpr_char_traits 201811L │ │ │ │ +1006# endif │ │ │ │ +1007# elif (__cplusplus >= 201703L) && (_GLIBCXX_HAVE_IS_CONSTANT_EVALUATED) │ │ │ │ +1008# define __glibcxx_constexpr_char_traits 201611L │ │ │ │ +1009# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_constexpr_char_traits) │ │ │ │ +1010# define __cpp_lib_constexpr_char_traits 201611L │ │ │ │ +1011# endif │ │ │ │ +1012# endif │ │ │ │ +1013#endif /* !defined(__cpp_lib_constexpr_char_traits) && defined │ │ │ │ +(__glibcxx_want_constexpr_char_traits) */ │ │ │ │ +1014#undef __glibcxx_want_constexpr_char_traits │ │ │ │ 1015 │ │ │ │ -1016 reverse_iterator │ │ │ │ -1017 _r_e_n_d() _GLIBCXX_NOEXCEPT │ │ │ │ -1018 { return reverse_iterator(_b_e_g_i_n()); } │ │ │ │ -1019 │ │ │ │ -1020 const_reverse_iterator │ │ │ │ -1021 _r_e_n_d() const _GLIBCXX_NOEXCEPT │ │ │ │ -1022 { return const_reverse_iterator(_b_e_g_i_n()); } │ │ │ │ -1023 │ │ │ │ -1024 _GLIBCXX_NODISCARD bool │ │ │ │ -1025 _e_m_p_t_y() const _GLIBCXX_NOEXCEPT │ │ │ │ -1026 { return _M_impl._M_node_count == 0; } │ │ │ │ -1027 │ │ │ │ -1028 size_type │ │ │ │ -1029 _s_i_z_e() const _GLIBCXX_NOEXCEPT │ │ │ │ -1030 { return _M_impl._M_node_count; } │ │ │ │ -1031 │ │ │ │ -1032 size_type │ │ │ │ -1033 max_size() const _GLIBCXX_NOEXCEPT │ │ │ │ -1034 { return ___A_l_l_o_c___t_r_a_i_t_s_:_:_m_a_x___s_i_z_e(_M_get_Node_allocator()); } │ │ │ │ +1016#if !defined(__cpp_lib_is_layout_compatible) │ │ │ │ +1017# if (__cplusplus >= 202002L) && (__has_builtin(__is_layout_compatible) && │ │ │ │ +__has_builtin(__builtin_is_corresponding_member)) │ │ │ │ +1018# define __glibcxx_is_layout_compatible 201907L │ │ │ │ +1019# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_is_layout_compatible) │ │ │ │ +1020# define __cpp_lib_is_layout_compatible 201907L │ │ │ │ +1021# endif │ │ │ │ +1022# endif │ │ │ │ +1023#endif /* !defined(__cpp_lib_is_layout_compatible) && defined │ │ │ │ +(__glibcxx_want_is_layout_compatible) */ │ │ │ │ +1024#undef __glibcxx_want_is_layout_compatible │ │ │ │ +1025 │ │ │ │ +1026#if !defined(__cpp_lib_is_nothrow_convertible) │ │ │ │ +1027# if (__cplusplus >= 202002L) │ │ │ │ +1028# define __glibcxx_is_nothrow_convertible 201806L │ │ │ │ +1029# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_is_nothrow_convertible) │ │ │ │ +1030# define __cpp_lib_is_nothrow_convertible 201806L │ │ │ │ +1031# endif │ │ │ │ +1032# endif │ │ │ │ +1033#endif /* !defined(__cpp_lib_is_nothrow_convertible) && defined │ │ │ │ +(__glibcxx_want_is_nothrow_convertible) */ │ │ │ │ +1034#undef __glibcxx_want_is_nothrow_convertible │ │ │ │ 1035 │ │ │ │ -1036 void │ │ │ │ -1037 swap(_Rb_tree& __t) │ │ │ │ -1038 _GLIBCXX_NOEXCEPT_IF(__is_nothrow_swappable<_Compare>::value); │ │ │ │ -1039 │ │ │ │ -1040 // Insert/erase. │ │ │ │ -1041#if __cplusplus >= 201103L │ │ │ │ -1042 template │ │ │ │ -1043 pair │ │ │ │ -1044 _M_insert_unique(_Arg&& __x); │ │ │ │ +1036#if !defined(__cpp_lib_is_pointer_interconvertible) │ │ │ │ +1037# if (__cplusplus >= 202002L) && (__has_builtin │ │ │ │ +(__is_pointer_interconvertible_base_of) && __has_builtin │ │ │ │ +(__builtin_is_pointer_interconvertible_with_class)) │ │ │ │ +1038# define __glibcxx_is_pointer_interconvertible 201907L │ │ │ │ +1039# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_is_pointer_interconvertible) │ │ │ │ +1040# define __cpp_lib_is_pointer_interconvertible 201907L │ │ │ │ +1041# endif │ │ │ │ +1042# endif │ │ │ │ +1043#endif /* !defined(__cpp_lib_is_pointer_interconvertible) && defined │ │ │ │ +(__glibcxx_want_is_pointer_interconvertible) */ │ │ │ │ +1044#undef __glibcxx_want_is_pointer_interconvertible │ │ │ │ 1045 │ │ │ │ -1046 template │ │ │ │ -1047 iterator │ │ │ │ -1048 _M_insert_equal(_Arg&& __x); │ │ │ │ -1049 │ │ │ │ -1050 template │ │ │ │ -1051 iterator │ │ │ │ -1052 _M_insert_unique_(const_iterator __pos, _Arg&& __x, _NodeGen&); │ │ │ │ -1053 │ │ │ │ -1054 template │ │ │ │ -1055 iterator │ │ │ │ -1056 _M_insert_unique_(const_iterator __pos, _Arg&& __x) │ │ │ │ -1057 { │ │ │ │ -1058 _Alloc_node __an(*this); │ │ │ │ -1059 return _M_insert_unique_(__pos, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_>(__x), __an); │ │ │ │ -1060 } │ │ │ │ -1061 │ │ │ │ -1062 template │ │ │ │ -1063 iterator │ │ │ │ -1064 _M_insert_equal_(const_iterator __pos, _Arg&& __x, _NodeGen&); │ │ │ │ +1046#if !defined(__cpp_lib_math_constants) │ │ │ │ +1047# if (__cplusplus >= 202002L) │ │ │ │ +1048# define __glibcxx_math_constants 201907L │ │ │ │ +1049# if defined(__glibcxx_want_all) || defined(__glibcxx_want_math_constants) │ │ │ │ +1050# define __cpp_lib_math_constants 201907L │ │ │ │ +1051# endif │ │ │ │ +1052# endif │ │ │ │ +1053#endif /* !defined(__cpp_lib_math_constants) && defined │ │ │ │ +(__glibcxx_want_math_constants) */ │ │ │ │ +1054#undef __glibcxx_want_math_constants │ │ │ │ +1055 │ │ │ │ +1056#if !defined(__cpp_lib_make_obj_using_allocator) │ │ │ │ +1057# if (__cplusplus >= 202002L) && (__cpp_concepts) │ │ │ │ +1058# define __glibcxx_make_obj_using_allocator 201811L │ │ │ │ +1059# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_make_obj_using_allocator) │ │ │ │ +1060# define __cpp_lib_make_obj_using_allocator 201811L │ │ │ │ +1061# endif │ │ │ │ +1062# endif │ │ │ │ +1063#endif /* !defined(__cpp_lib_make_obj_using_allocator) && defined │ │ │ │ +(__glibcxx_want_make_obj_using_allocator) */ │ │ │ │ +1064#undef __glibcxx_want_make_obj_using_allocator │ │ │ │ 1065 │ │ │ │ -1066 template │ │ │ │ -1067 iterator │ │ │ │ -1068 _M_insert_equal_(const_iterator __pos, _Arg&& __x) │ │ │ │ -1069 { │ │ │ │ -1070 _Alloc_node __an(*this); │ │ │ │ -1071 return _M_insert_equal_(__pos, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_>(__x), __an); │ │ │ │ -1072 } │ │ │ │ -1073 │ │ │ │ -1074 template │ │ │ │ -1075 pair │ │ │ │ -1076 _M_emplace_unique(_Args&&... __args); │ │ │ │ -1077 │ │ │ │ -1078 template │ │ │ │ -1079 iterator │ │ │ │ -1080 _M_emplace_equal(_Args&&... __args); │ │ │ │ -1081 │ │ │ │ -1082 template │ │ │ │ -1083 iterator │ │ │ │ -1084 _M_emplace_hint_unique(const_iterator __pos, _Args&&... __args); │ │ │ │ +1066#if !defined(__cpp_lib_remove_cvref) │ │ │ │ +1067# if (__cplusplus >= 202002L) │ │ │ │ +1068# define __glibcxx_remove_cvref 201711L │ │ │ │ +1069# if defined(__glibcxx_want_all) || defined(__glibcxx_want_remove_cvref) │ │ │ │ +1070# define __cpp_lib_remove_cvref 201711L │ │ │ │ +1071# endif │ │ │ │ +1072# endif │ │ │ │ +1073#endif /* !defined(__cpp_lib_remove_cvref) && defined │ │ │ │ +(__glibcxx_want_remove_cvref) */ │ │ │ │ +1074#undef __glibcxx_want_remove_cvref │ │ │ │ +1075 │ │ │ │ +1076#if !defined(__cpp_lib_source_location) │ │ │ │ +1077# if (__cplusplus >= 202002L) && (__has_builtin(__builtin_source_location)) │ │ │ │ +1078# define __glibcxx_source_location 201907L │ │ │ │ +1079# if defined(__glibcxx_want_all) || defined(__glibcxx_want_source_location) │ │ │ │ +1080# define __cpp_lib_source_location 201907L │ │ │ │ +1081# endif │ │ │ │ +1082# endif │ │ │ │ +1083#endif /* !defined(__cpp_lib_source_location) && defined │ │ │ │ +(__glibcxx_want_source_location) */ │ │ │ │ +1084#undef __glibcxx_want_source_location │ │ │ │ 1085 │ │ │ │ -1086 template │ │ │ │ -1087 iterator │ │ │ │ -1088 _M_emplace_hint_equal(const_iterator __pos, _Args&&... __args); │ │ │ │ -1089 │ │ │ │ -1090 template │ │ │ │ -1091 using __same_value_type │ │ │ │ -1092 = is_same::value_type>; │ │ │ │ -1093 │ │ │ │ -1094 template │ │ │ │ -1095 __enable_if_t<__same_value_type<_InputIterator>::value> │ │ │ │ -1096 _M_insert_range_unique(_InputIterator __first, _InputIterator __last) │ │ │ │ -1097 { │ │ │ │ -1098 _Alloc_node __an(*this); │ │ │ │ -1099 for (; __first != __last; ++__first) │ │ │ │ -1100 _M_insert_unique_(_e_n_d(), *__first, __an); │ │ │ │ -1101 } │ │ │ │ -1102 │ │ │ │ -1103 template │ │ │ │ -1104 __enable_if_t::value> │ │ │ │ -1105 _M_insert_range_unique(_InputIterator __first, _InputIterator __last) │ │ │ │ -1106 { │ │ │ │ -1107 for (; __first != __last; ++__first) │ │ │ │ -1108 _M_emplace_unique(*__first); │ │ │ │ -1109 } │ │ │ │ +1086#if !defined(__cpp_lib_span) │ │ │ │ +1087# if (__cplusplus > 202302L) && (__glibcxx_concepts) │ │ │ │ +1088# define __glibcxx_span 202311L │ │ │ │ +1089# if defined(__glibcxx_want_all) || defined(__glibcxx_want_span) │ │ │ │ +1090# define __cpp_lib_span 202311L │ │ │ │ +1091# endif │ │ │ │ +1092# elif (__cplusplus >= 202002L) && (__glibcxx_concepts) │ │ │ │ +1093# define __glibcxx_span 202002L │ │ │ │ +1094# if defined(__glibcxx_want_all) || defined(__glibcxx_want_span) │ │ │ │ +1095# define __cpp_lib_span 202002L │ │ │ │ +1096# endif │ │ │ │ +1097# endif │ │ │ │ +1098#endif /* !defined(__cpp_lib_span) && defined(__glibcxx_want_span) */ │ │ │ │ +1099#undef __glibcxx_want_span │ │ │ │ +1100 │ │ │ │ +1101#if !defined(__cpp_lib_ssize) │ │ │ │ +1102# if (__cplusplus >= 202002L) │ │ │ │ +1103# define __glibcxx_ssize 201902L │ │ │ │ +1104# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ssize) │ │ │ │ +1105# define __cpp_lib_ssize 201902L │ │ │ │ +1106# endif │ │ │ │ +1107# endif │ │ │ │ +1108#endif /* !defined(__cpp_lib_ssize) && defined(__glibcxx_want_ssize) */ │ │ │ │ +1109#undef __glibcxx_want_ssize │ │ │ │ 1110 │ │ │ │ -1111 template │ │ │ │ -1112 __enable_if_t<__same_value_type<_InputIterator>::value> │ │ │ │ -1113 _M_insert_range_equal(_InputIterator __first, _InputIterator __last) │ │ │ │ -1114 { │ │ │ │ -1115 _Alloc_node __an(*this); │ │ │ │ -1116 for (; __first != __last; ++__first) │ │ │ │ -1117 _M_insert_equal_(_e_n_d(), *__first, __an); │ │ │ │ -1118 } │ │ │ │ -1119 │ │ │ │ -1120 template │ │ │ │ -1121 __enable_if_t::value> │ │ │ │ -1122 _M_insert_range_equal(_InputIterator __first, _InputIterator __last) │ │ │ │ -1123 { │ │ │ │ -1124 for (; __first != __last; ++__first) │ │ │ │ -1125 _M_emplace_equal(*__first); │ │ │ │ -1126 } │ │ │ │ -1127#else │ │ │ │ -1128 pair │ │ │ │ -1129 _M_insert_unique(const value_type& __x); │ │ │ │ +1111#if !defined(__cpp_lib_three_way_comparison) │ │ │ │ +1112# if (__cplusplus >= 202002L) && (__cpp_impl_three_way_comparison >= │ │ │ │ +201907L && __glibcxx_concepts) │ │ │ │ +1113# define __glibcxx_three_way_comparison 201907L │ │ │ │ +1114# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_three_way_comparison) │ │ │ │ +1115# define __cpp_lib_three_way_comparison 201907L │ │ │ │ +1116# endif │ │ │ │ +1117# endif │ │ │ │ +1118#endif /* !defined(__cpp_lib_three_way_comparison) && defined │ │ │ │ +(__glibcxx_want_three_way_comparison) */ │ │ │ │ +1119#undef __glibcxx_want_three_way_comparison │ │ │ │ +1120 │ │ │ │ +1121#if !defined(__cpp_lib_to_address) │ │ │ │ +1122# if (__cplusplus >= 202002L) │ │ │ │ +1123# define __glibcxx_to_address 201711L │ │ │ │ +1124# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_address) │ │ │ │ +1125# define __cpp_lib_to_address 201711L │ │ │ │ +1126# endif │ │ │ │ +1127# endif │ │ │ │ +1128#endif /* !defined(__cpp_lib_to_address) && defined │ │ │ │ +(__glibcxx_want_to_address) */ │ │ │ │ +1129#undef __glibcxx_want_to_address │ │ │ │ 1130 │ │ │ │ -1131 iterator │ │ │ │ -1132 _M_insert_equal(const value_type& __x); │ │ │ │ -1133 │ │ │ │ -1134 template │ │ │ │ -1135 iterator │ │ │ │ -1136 _M_insert_unique_(const_iterator __pos, const value_type& __x, │ │ │ │ -1137 _NodeGen&); │ │ │ │ -1138 │ │ │ │ -1139 iterator │ │ │ │ -1140 _M_insert_unique_(const_iterator __pos, const value_type& __x) │ │ │ │ -1141 { │ │ │ │ -1142 _Alloc_node __an(*this); │ │ │ │ -1143 return _M_insert_unique_(__pos, __x, __an); │ │ │ │ -1144 } │ │ │ │ -1145 │ │ │ │ -1146 template │ │ │ │ -1147 iterator │ │ │ │ -1148 _M_insert_equal_(const_iterator __pos, const value_type& __x, │ │ │ │ -1149 _NodeGen&); │ │ │ │ -1150 iterator │ │ │ │ -1151 _M_insert_equal_(const_iterator __pos, const value_type& __x) │ │ │ │ -1152 { │ │ │ │ -1153 _Alloc_node __an(*this); │ │ │ │ -1154 return _M_insert_equal_(__pos, __x, __an); │ │ │ │ -1155 } │ │ │ │ -1156 │ │ │ │ -1157 template │ │ │ │ -1158 void │ │ │ │ -1159 _M_insert_range_unique(_InputIterator __first, _InputIterator __last) │ │ │ │ -1160 { │ │ │ │ -1161 _Alloc_node __an(*this); │ │ │ │ -1162 for (; __first != __last; ++__first) │ │ │ │ -1163 _M_insert_unique_(_e_n_d(), *__first, __an); │ │ │ │ -1164 } │ │ │ │ -1165 │ │ │ │ -1166 template │ │ │ │ -1167 void │ │ │ │ -1168 _M_insert_range_equal(_InputIterator __first, _InputIterator __last) │ │ │ │ -1169 { │ │ │ │ -1170 _Alloc_node __an(*this); │ │ │ │ -1171 for (; __first != __last; ++__first) │ │ │ │ -1172 _M_insert_equal_(_e_n_d(), *__first, __an); │ │ │ │ -1173 } │ │ │ │ -1174#endif │ │ │ │ -1175 │ │ │ │ -1176 private: │ │ │ │ -1177 void │ │ │ │ -1178 _M_erase_aux(const_iterator __position); │ │ │ │ -1179 │ │ │ │ -1180 void │ │ │ │ -1181 _M_erase_aux(const_iterator __first, const_iterator __last); │ │ │ │ -1182 │ │ │ │ -1183 public: │ │ │ │ -1184#if __cplusplus >= 201103L │ │ │ │ -1185 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1186 // DR 130. Associative erase should return an iterator. │ │ │ │ -1187 _GLIBCXX_ABI_TAG_CXX11 │ │ │ │ -1188 iterator │ │ │ │ -1189 erase(const_iterator __position) │ │ │ │ -1190 { │ │ │ │ -1191 __glibcxx_assert(__position != _e_n_d()); │ │ │ │ -1192 const_iterator __result = __position; │ │ │ │ -1193 ++__result; │ │ │ │ -1194 _M_erase_aux(__position); │ │ │ │ -1195 return __result._M_const_cast(); │ │ │ │ -1196 } │ │ │ │ -1197 │ │ │ │ -1198 // LWG 2059. │ │ │ │ -1199 _GLIBCXX_ABI_TAG_CXX11 │ │ │ │ -1200 iterator │ │ │ │ -1201 erase(iterator __position) │ │ │ │ -1202 { │ │ │ │ -1203 __glibcxx_assert(__position != _e_n_d()); │ │ │ │ -1204 iterator __result = __position; │ │ │ │ -1205 ++__result; │ │ │ │ -1206 _M_erase_aux(__position); │ │ │ │ -1207 return __result; │ │ │ │ -1208 } │ │ │ │ -1209#else │ │ │ │ -1210 void │ │ │ │ -1211 erase(iterator __position) │ │ │ │ -1212 { │ │ │ │ -1213 __glibcxx_assert(__position != _e_n_d()); │ │ │ │ -1214 _M_erase_aux(__position); │ │ │ │ -1215 } │ │ │ │ -1216 │ │ │ │ -1217 void │ │ │ │ -1218 erase(const_iterator __position) │ │ │ │ -1219 { │ │ │ │ -1220 __glibcxx_assert(__position != _e_n_d()); │ │ │ │ -1221 _M_erase_aux(__position); │ │ │ │ -1222 } │ │ │ │ -1223#endif │ │ │ │ -1224 │ │ │ │ -1225 size_type │ │ │ │ -1226 erase(const key_type& __x); │ │ │ │ -1227 │ │ │ │ -1228#if __cplusplus >= 201103L │ │ │ │ -1229 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -1230 // DR 130. Associative erase should return an iterator. │ │ │ │ -1231 _GLIBCXX_ABI_TAG_CXX11 │ │ │ │ -1232 iterator │ │ │ │ -1233 erase(const_iterator __first, const_iterator __last) │ │ │ │ -1234 { │ │ │ │ -1235 _M_erase_aux(__first, __last); │ │ │ │ -1236 return __last._M_const_cast(); │ │ │ │ -1237 } │ │ │ │ -1238#else │ │ │ │ -1239 void │ │ │ │ -1240 erase(iterator __first, iterator __last) │ │ │ │ -1241 { _M_erase_aux(__first, __last); } │ │ │ │ -1242 │ │ │ │ -1243 void │ │ │ │ -1244 erase(const_iterator __first, const_iterator __last) │ │ │ │ -1245 { _M_erase_aux(__first, __last); } │ │ │ │ -1246#endif │ │ │ │ -1247 │ │ │ │ -1248 void │ │ │ │ -1249 clear() _GLIBCXX_NOEXCEPT │ │ │ │ -1250 { │ │ │ │ -1251 _M_erase(_M_begin()); │ │ │ │ -1252 _M_impl._M_reset(); │ │ │ │ -1253 } │ │ │ │ -1254 │ │ │ │ -1255 // Set operations. │ │ │ │ -1256 iterator │ │ │ │ -1257 find(const key_type& __k); │ │ │ │ -1258 │ │ │ │ -1259 const_iterator │ │ │ │ -1260 find(const key_type& __k) const; │ │ │ │ -1261 │ │ │ │ -1262 size_type │ │ │ │ -1263 count(const key_type& __k) const; │ │ │ │ -1264 │ │ │ │ -1265 iterator │ │ │ │ -1266 lower_bound(const key_type& __k) │ │ │ │ -1267 { return _M_lower_bound(_M_begin(), _M_end(), __k); } │ │ │ │ -1268 │ │ │ │ -1269 const_iterator │ │ │ │ -1270 lower_bound(const key_type& __k) const │ │ │ │ -1271 { return _M_lower_bound(_M_begin(), _M_end(), __k); } │ │ │ │ -1272 │ │ │ │ -1273 iterator │ │ │ │ -1274 upper_bound(const key_type& __k) │ │ │ │ -1275 { return _M_upper_bound(_M_begin(), _M_end(), __k); } │ │ │ │ -1276 │ │ │ │ -1277 const_iterator │ │ │ │ -1278 upper_bound(const key_type& __k) const │ │ │ │ -1279 { return _M_upper_bound(_M_begin(), _M_end(), __k); } │ │ │ │ -1280 │ │ │ │ -1281 pair │ │ │ │ -1282 equal_range(const key_type& __k); │ │ │ │ -1283 │ │ │ │ -1284 pair │ │ │ │ -1285 equal_range(const key_type& __k) const; │ │ │ │ -1286 │ │ │ │ -1287#if __cplusplus >= 201402L │ │ │ │ -1288 template> │ │ │ │ -1290 iterator │ │ │ │ -1291 _M_find_tr(const _Kt& __k) │ │ │ │ -1292 { │ │ │ │ -1293 const _Rb_tree* __const_this = this; │ │ │ │ -1294 return __const_this->_M_find_tr(__k)._M_const_cast(); │ │ │ │ -1295 } │ │ │ │ -1296 │ │ │ │ -1297 template> │ │ │ │ -1299 const_iterator │ │ │ │ -1300 _M_find_tr(const _Kt& __k) const │ │ │ │ -1301 { │ │ │ │ -1302 auto __j = _M_lower_bound_tr(__k); │ │ │ │ -1303 if (__j != _e_n_d() && _M_impl._M_key_compare(__k, _S_key(__j._M_node))) │ │ │ │ -1304 __j = _e_n_d(); │ │ │ │ -1305 return __j; │ │ │ │ -1306 } │ │ │ │ -1307 │ │ │ │ -1308 template> │ │ │ │ -1310 size_type │ │ │ │ -1311 _M_count_tr(const _Kt& __k) const │ │ │ │ -1312 { │ │ │ │ -1313 auto __p = _M_equal_range_tr(__k); │ │ │ │ -1314 return _s_t_d_:_:_d_i_s_t_a_n_c_e(__p.first, __p.second); │ │ │ │ -1315 } │ │ │ │ -1316 │ │ │ │ -1317 template> │ │ │ │ -1319 iterator │ │ │ │ -1320 _M_lower_bound_tr(const _Kt& __k) │ │ │ │ -1321 { │ │ │ │ -1322 const _Rb_tree* __const_this = this; │ │ │ │ -1323 return __const_this->_M_lower_bound_tr(__k)._M_const_cast(); │ │ │ │ -1324 } │ │ │ │ -1325 │ │ │ │ -1326 template> │ │ │ │ -1328 const_iterator │ │ │ │ -1329 _M_lower_bound_tr(const _Kt& __k) const │ │ │ │ -1330 { │ │ │ │ -1331 auto __x = _M_begin(); │ │ │ │ -1332 auto __y = _M_end(); │ │ │ │ -1333 while (__x != 0) │ │ │ │ -1334 if (!_M_impl._M_key_compare(_S_key(__x), __k)) │ │ │ │ -1335 { │ │ │ │ -1336 __y = __x; │ │ │ │ -1337 __x = _S_left(__x); │ │ │ │ -1338 } │ │ │ │ -1339 else │ │ │ │ -1340 __x = _S_right(__x); │ │ │ │ -1341 return const_iterator(__y); │ │ │ │ -1342 } │ │ │ │ -1343 │ │ │ │ -1344 template> │ │ │ │ -1346 iterator │ │ │ │ -1347 _M_upper_bound_tr(const _Kt& __k) │ │ │ │ -1348 { │ │ │ │ -1349 const _Rb_tree* __const_this = this; │ │ │ │ -1350 return __const_this->_M_upper_bound_tr(__k)._M_const_cast(); │ │ │ │ -1351 } │ │ │ │ -1352 │ │ │ │ -1353 template> │ │ │ │ -1355 const_iterator │ │ │ │ -1356 _M_upper_bound_tr(const _Kt& __k) const │ │ │ │ -1357 { │ │ │ │ -1358 auto __x = _M_begin(); │ │ │ │ -1359 auto __y = _M_end(); │ │ │ │ -1360 while (__x != 0) │ │ │ │ -1361 if (_M_impl._M_key_compare(__k, _S_key(__x))) │ │ │ │ -1362 { │ │ │ │ -1363 __y = __x; │ │ │ │ -1364 __x = _S_left(__x); │ │ │ │ -1365 } │ │ │ │ -1366 else │ │ │ │ -1367 __x = _S_right(__x); │ │ │ │ -1368 return const_iterator(__y); │ │ │ │ -1369 } │ │ │ │ +1131#if !defined(__cpp_lib_to_array) │ │ │ │ +1132# if (__cplusplus >= 202002L) && (__cpp_generic_lambdas >= 201707L) │ │ │ │ +1133# define __glibcxx_to_array 201907L │ │ │ │ +1134# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_array) │ │ │ │ +1135# define __cpp_lib_to_array 201907L │ │ │ │ +1136# endif │ │ │ │ +1137# endif │ │ │ │ +1138#endif /* !defined(__cpp_lib_to_array) && defined(__glibcxx_want_to_array) │ │ │ │ +*/ │ │ │ │ +1139#undef __glibcxx_want_to_array │ │ │ │ +1140 │ │ │ │ +1141#if !defined(__cpp_lib_type_identity) │ │ │ │ +1142# if (__cplusplus >= 202002L) │ │ │ │ +1143# define __glibcxx_type_identity 201806L │ │ │ │ +1144# if defined(__glibcxx_want_all) || defined(__glibcxx_want_type_identity) │ │ │ │ +1145# define __cpp_lib_type_identity 201806L │ │ │ │ +1146# endif │ │ │ │ +1147# endif │ │ │ │ +1148#endif /* !defined(__cpp_lib_type_identity) && defined │ │ │ │ +(__glibcxx_want_type_identity) */ │ │ │ │ +1149#undef __glibcxx_want_type_identity │ │ │ │ +1150 │ │ │ │ +1151#if !defined(__cpp_lib_unwrap_ref) │ │ │ │ +1152# if (__cplusplus >= 202002L) │ │ │ │ +1153# define __glibcxx_unwrap_ref 201811L │ │ │ │ +1154# if defined(__glibcxx_want_all) || defined(__glibcxx_want_unwrap_ref) │ │ │ │ +1155# define __cpp_lib_unwrap_ref 201811L │ │ │ │ +1156# endif │ │ │ │ +1157# endif │ │ │ │ +1158#endif /* !defined(__cpp_lib_unwrap_ref) && defined │ │ │ │ +(__glibcxx_want_unwrap_ref) */ │ │ │ │ +1159#undef __glibcxx_want_unwrap_ref │ │ │ │ +1160 │ │ │ │ +1161#if !defined(__cpp_lib_constexpr_iterator) │ │ │ │ +1162# if (__cplusplus >= 202002L) │ │ │ │ +1163# define __glibcxx_constexpr_iterator 201811L │ │ │ │ +1164# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_constexpr_iterator) │ │ │ │ +1165# define __cpp_lib_constexpr_iterator 201811L │ │ │ │ +1166# endif │ │ │ │ +1167# endif │ │ │ │ +1168#endif /* !defined(__cpp_lib_constexpr_iterator) && defined │ │ │ │ +(__glibcxx_want_constexpr_iterator) */ │ │ │ │ +1169#undef __glibcxx_want_constexpr_iterator │ │ │ │ +1170 │ │ │ │ +1171#if !defined(__cpp_lib_interpolate) │ │ │ │ +1172# if (__cplusplus >= 202002L) │ │ │ │ +1173# define __glibcxx_interpolate 201902L │ │ │ │ +1174# if defined(__glibcxx_want_all) || defined(__glibcxx_want_interpolate) │ │ │ │ +1175# define __cpp_lib_interpolate 201902L │ │ │ │ +1176# endif │ │ │ │ +1177# endif │ │ │ │ +1178#endif /* !defined(__cpp_lib_interpolate) && defined │ │ │ │ +(__glibcxx_want_interpolate) */ │ │ │ │ +1179#undef __glibcxx_want_interpolate │ │ │ │ +1180 │ │ │ │ +1181#if !defined(__cpp_lib_constexpr_utility) │ │ │ │ +1182# if (__cplusplus >= 202002L) │ │ │ │ +1183# define __glibcxx_constexpr_utility 201811L │ │ │ │ +1184# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_constexpr_utility) │ │ │ │ +1185# define __cpp_lib_constexpr_utility 201811L │ │ │ │ +1186# endif │ │ │ │ +1187# endif │ │ │ │ +1188#endif /* !defined(__cpp_lib_constexpr_utility) && defined │ │ │ │ +(__glibcxx_want_constexpr_utility) */ │ │ │ │ +1189#undef __glibcxx_want_constexpr_utility │ │ │ │ +1190 │ │ │ │ +1191#if !defined(__cpp_lib_shift) │ │ │ │ +1192# if (__cplusplus >= 202002L) │ │ │ │ +1193# define __glibcxx_shift 201806L │ │ │ │ +1194# if defined(__glibcxx_want_all) || defined(__glibcxx_want_shift) │ │ │ │ +1195# define __cpp_lib_shift 201806L │ │ │ │ +1196# endif │ │ │ │ +1197# endif │ │ │ │ +1198#endif /* !defined(__cpp_lib_shift) && defined(__glibcxx_want_shift) */ │ │ │ │ +1199#undef __glibcxx_want_shift │ │ │ │ +1200 │ │ │ │ +1201#if !defined(__cpp_lib_ranges) │ │ │ │ +1202# if (__cplusplus > 202302L) && (__glibcxx_concepts) │ │ │ │ +1203# define __glibcxx_ranges 202406L │ │ │ │ +1204# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges) │ │ │ │ +1205# define __cpp_lib_ranges 202406L │ │ │ │ +1206# endif │ │ │ │ +1207# elif (__cplusplus >= 202100L) && (__glibcxx_concepts) │ │ │ │ +1208# define __glibcxx_ranges 202302L │ │ │ │ +1209# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges) │ │ │ │ +1210# define __cpp_lib_ranges 202302L │ │ │ │ +1211# endif │ │ │ │ +1212# elif (__cplusplus >= 202002L) && (__glibcxx_concepts) │ │ │ │ +1213# define __glibcxx_ranges 202110L │ │ │ │ +1214# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges) │ │ │ │ +1215# define __cpp_lib_ranges 202110L │ │ │ │ +1216# endif │ │ │ │ +1217# endif │ │ │ │ +1218#endif /* !defined(__cpp_lib_ranges) && defined(__glibcxx_want_ranges) */ │ │ │ │ +1219#undef __glibcxx_want_ranges │ │ │ │ +1220 │ │ │ │ +1221#if !defined(__cpp_lib_constexpr_numeric) │ │ │ │ +1222# if (__cplusplus >= 202002L) │ │ │ │ +1223# define __glibcxx_constexpr_numeric 201911L │ │ │ │ +1224# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_constexpr_numeric) │ │ │ │ +1225# define __cpp_lib_constexpr_numeric 201911L │ │ │ │ +1226# endif │ │ │ │ +1227# endif │ │ │ │ +1228#endif /* !defined(__cpp_lib_constexpr_numeric) && defined │ │ │ │ +(__glibcxx_want_constexpr_numeric) */ │ │ │ │ +1229#undef __glibcxx_want_constexpr_numeric │ │ │ │ +1230 │ │ │ │ +1231#if !defined(__cpp_lib_constexpr_functional) │ │ │ │ +1232# if (__cplusplus >= 202002L) │ │ │ │ +1233# define __glibcxx_constexpr_functional 201907L │ │ │ │ +1234# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_constexpr_functional) │ │ │ │ +1235# define __cpp_lib_constexpr_functional 201907L │ │ │ │ +1236# endif │ │ │ │ +1237# endif │ │ │ │ +1238#endif /* !defined(__cpp_lib_constexpr_functional) && defined │ │ │ │ +(__glibcxx_want_constexpr_functional) */ │ │ │ │ +1239#undef __glibcxx_want_constexpr_functional │ │ │ │ +1240 │ │ │ │ +1241#if !defined(__cpp_lib_constexpr_algorithms) │ │ │ │ +1242# if (__cplusplus >= 202002L) │ │ │ │ +1243# define __glibcxx_constexpr_algorithms 201806L │ │ │ │ +1244# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_constexpr_algorithms) │ │ │ │ +1245# define __cpp_lib_constexpr_algorithms 201806L │ │ │ │ +1246# endif │ │ │ │ +1247# endif │ │ │ │ +1248#endif /* !defined(__cpp_lib_constexpr_algorithms) && defined │ │ │ │ +(__glibcxx_want_constexpr_algorithms) */ │ │ │ │ +1249#undef __glibcxx_want_constexpr_algorithms │ │ │ │ +1250 │ │ │ │ +1251#if !defined(__cpp_lib_constexpr_tuple) │ │ │ │ +1252# if (__cplusplus >= 202002L) │ │ │ │ +1253# define __glibcxx_constexpr_tuple 201811L │ │ │ │ +1254# if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_tuple) │ │ │ │ +1255# define __cpp_lib_constexpr_tuple 201811L │ │ │ │ +1256# endif │ │ │ │ +1257# endif │ │ │ │ +1258#endif /* !defined(__cpp_lib_constexpr_tuple) && defined │ │ │ │ +(__glibcxx_want_constexpr_tuple) */ │ │ │ │ +1259#undef __glibcxx_want_constexpr_tuple │ │ │ │ +1260 │ │ │ │ +1261#if !defined(__cpp_lib_constexpr_memory) │ │ │ │ +1262# if (__cplusplus >= 202100L) && (__cpp_constexpr_dynamic_alloc) │ │ │ │ +1263# define __glibcxx_constexpr_memory 202202L │ │ │ │ +1264# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_constexpr_memory) │ │ │ │ +1265# define __cpp_lib_constexpr_memory 202202L │ │ │ │ +1266# endif │ │ │ │ +1267# elif (__cplusplus >= 202002L) │ │ │ │ +1268# define __glibcxx_constexpr_memory 201811L │ │ │ │ +1269# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_constexpr_memory) │ │ │ │ +1270# define __cpp_lib_constexpr_memory 201811L │ │ │ │ +1271# endif │ │ │ │ +1272# endif │ │ │ │ +1273#endif /* !defined(__cpp_lib_constexpr_memory) && defined │ │ │ │ +(__glibcxx_want_constexpr_memory) */ │ │ │ │ +1274#undef __glibcxx_want_constexpr_memory │ │ │ │ +1275 │ │ │ │ +1276#if !defined(__cpp_lib_atomic_shared_ptr) │ │ │ │ +1277# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED │ │ │ │ +1278# define __glibcxx_atomic_shared_ptr 201711L │ │ │ │ +1279# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_atomic_shared_ptr) │ │ │ │ +1280# define __cpp_lib_atomic_shared_ptr 201711L │ │ │ │ +1281# endif │ │ │ │ +1282# endif │ │ │ │ +1283#endif /* !defined(__cpp_lib_atomic_shared_ptr) && defined │ │ │ │ +(__glibcxx_want_atomic_shared_ptr) */ │ │ │ │ +1284#undef __glibcxx_want_atomic_shared_ptr │ │ │ │ +1285 │ │ │ │ +1286#if !defined(__cpp_lib_atomic_wait) │ │ │ │ +1287# if (__cplusplus >= 202002L) && defined(_GLIBCXX_HAS_GTHREADS) && │ │ │ │ +_GLIBCXX_HOSTED │ │ │ │ +1288# define __glibcxx_atomic_wait 201907L │ │ │ │ +1289# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_wait) │ │ │ │ +1290# define __cpp_lib_atomic_wait 201907L │ │ │ │ +1291# endif │ │ │ │ +1292# elif (__cplusplus >= 202002L) && !defined(_GLIBCXX_HAS_GTHREADS) && │ │ │ │ +_GLIBCXX_HOSTED && (defined(_GLIBCXX_HAVE_LINUX_FUTEX)) │ │ │ │ +1293# define __glibcxx_atomic_wait 201907L │ │ │ │ +1294# if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_wait) │ │ │ │ +1295# define __cpp_lib_atomic_wait 201907L │ │ │ │ +1296# endif │ │ │ │ +1297# endif │ │ │ │ +1298#endif /* !defined(__cpp_lib_atomic_wait) && defined │ │ │ │ +(__glibcxx_want_atomic_wait) */ │ │ │ │ +1299#undef __glibcxx_want_atomic_wait │ │ │ │ +1300 │ │ │ │ +1301#if !defined(__cpp_lib_barrier) │ │ │ │ +1302# if (__cplusplus >= 202002L) && (__cpp_aligned_new && │ │ │ │ +__glibcxx_atomic_wait) │ │ │ │ +1303# define __glibcxx_barrier 201907L │ │ │ │ +1304# if defined(__glibcxx_want_all) || defined(__glibcxx_want_barrier) │ │ │ │ +1305# define __cpp_lib_barrier 201907L │ │ │ │ +1306# endif │ │ │ │ +1307# endif │ │ │ │ +1308#endif /* !defined(__cpp_lib_barrier) && defined(__glibcxx_want_barrier) */ │ │ │ │ +1309#undef __glibcxx_want_barrier │ │ │ │ +1310 │ │ │ │ +1311#if !defined(__cpp_lib_format) │ │ │ │ +1312# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED │ │ │ │ +1313# define __glibcxx_format 202110L │ │ │ │ +1314# if defined(__glibcxx_want_all) || defined(__glibcxx_want_format) │ │ │ │ +1315# define __cpp_lib_format 202110L │ │ │ │ +1316# endif │ │ │ │ +1317# endif │ │ │ │ +1318#endif /* !defined(__cpp_lib_format) && defined(__glibcxx_want_format) */ │ │ │ │ +1319#undef __glibcxx_want_format │ │ │ │ +1320 │ │ │ │ +1321#if !defined(__cpp_lib_format_uchar) │ │ │ │ +1322# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED │ │ │ │ +1323# define __glibcxx_format_uchar 202311L │ │ │ │ +1324# if defined(__glibcxx_want_all) || defined(__glibcxx_want_format_uchar) │ │ │ │ +1325# define __cpp_lib_format_uchar 202311L │ │ │ │ +1326# endif │ │ │ │ +1327# endif │ │ │ │ +1328#endif /* !defined(__cpp_lib_format_uchar) && defined │ │ │ │ +(__glibcxx_want_format_uchar) */ │ │ │ │ +1329#undef __glibcxx_want_format_uchar │ │ │ │ +1330 │ │ │ │ +1331#if !defined(__cpp_lib_constexpr_complex) │ │ │ │ +1332# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED │ │ │ │ +1333# define __glibcxx_constexpr_complex 201711L │ │ │ │ +1334# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_constexpr_complex) │ │ │ │ +1335# define __cpp_lib_constexpr_complex 201711L │ │ │ │ +1336# endif │ │ │ │ +1337# endif │ │ │ │ +1338#endif /* !defined(__cpp_lib_constexpr_complex) && defined │ │ │ │ +(__glibcxx_want_constexpr_complex) */ │ │ │ │ +1339#undef __glibcxx_want_constexpr_complex │ │ │ │ +1340 │ │ │ │ +1341#if !defined(__cpp_lib_constexpr_dynamic_alloc) │ │ │ │ +1342# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED │ │ │ │ +1343# define __glibcxx_constexpr_dynamic_alloc 201907L │ │ │ │ +1344# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_constexpr_dynamic_alloc) │ │ │ │ +1345# define __cpp_lib_constexpr_dynamic_alloc 201907L │ │ │ │ +1346# endif │ │ │ │ +1347# endif │ │ │ │ +1348#endif /* !defined(__cpp_lib_constexpr_dynamic_alloc) && defined │ │ │ │ +(__glibcxx_want_constexpr_dynamic_alloc) */ │ │ │ │ +1349#undef __glibcxx_want_constexpr_dynamic_alloc │ │ │ │ +1350 │ │ │ │ +1351#if !defined(__cpp_lib_constexpr_string) │ │ │ │ +1352# if (__cplusplus >= 202002L) && _GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED │ │ │ │ +&& (defined(__glibcxx_is_constant_evaluated)) │ │ │ │ +1353# define __glibcxx_constexpr_string 201907L │ │ │ │ +1354# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_constexpr_string) │ │ │ │ +1355# define __cpp_lib_constexpr_string 201907L │ │ │ │ +1356# endif │ │ │ │ +1357# elif (__cplusplus >= 202002L) && !_GLIBCXX_USE_CXX11_ABI && │ │ │ │ +_GLIBCXX_HOSTED && (defined(__glibcxx_is_constant_evaluated)) │ │ │ │ +1358# define __glibcxx_constexpr_string 201811L │ │ │ │ +1359# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_constexpr_string) │ │ │ │ +1360# define __cpp_lib_constexpr_string 201811L │ │ │ │ +1361# endif │ │ │ │ +1362# elif (__cplusplus >= 201703L) && _GLIBCXX_HOSTED && │ │ │ │ +(_GLIBCXX_HAVE_IS_CONSTANT_EVALUATED) │ │ │ │ +1363# define __glibcxx_constexpr_string 201611L │ │ │ │ +1364# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_constexpr_string) │ │ │ │ +1365# define __cpp_lib_constexpr_string 201611L │ │ │ │ +1366# endif │ │ │ │ +1367# endif │ │ │ │ +1368#endif /* !defined(__cpp_lib_constexpr_string) && defined │ │ │ │ +(__glibcxx_want_constexpr_string) */ │ │ │ │ +1369#undef __glibcxx_want_constexpr_string │ │ │ │ 1370 │ │ │ │ -1371 template> │ │ │ │ -1373 pair │ │ │ │ -1374 _M_equal_range_tr(const _Kt& __k) │ │ │ │ -1375 { │ │ │ │ -1376 const _Rb_tree* __const_this = this; │ │ │ │ -1377 auto __ret = __const_this->_M_equal_range_tr(__k); │ │ │ │ -1378 return { __ret.first._M_const_cast(), __ret.second._M_const_cast() }; │ │ │ │ -1379 } │ │ │ │ +1371#if !defined(__cpp_lib_constexpr_vector) │ │ │ │ +1372# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED │ │ │ │ +1373# define __glibcxx_constexpr_vector 201907L │ │ │ │ +1374# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_constexpr_vector) │ │ │ │ +1375# define __cpp_lib_constexpr_vector 201907L │ │ │ │ +1376# endif │ │ │ │ +1377# endif │ │ │ │ +1378#endif /* !defined(__cpp_lib_constexpr_vector) && defined │ │ │ │ +(__glibcxx_want_constexpr_vector) */ │ │ │ │ +1379#undef __glibcxx_want_constexpr_vector │ │ │ │ 1380 │ │ │ │ -1381 template> │ │ │ │ -1383 pair │ │ │ │ -1384 _M_equal_range_tr(const _Kt& __k) const │ │ │ │ -1385 { │ │ │ │ -1386 auto __low = _M_lower_bound_tr(__k); │ │ │ │ -1387 auto __high = __low; │ │ │ │ -1388 auto& __cmp = _M_impl._M_key_compare; │ │ │ │ -1389 while (__high != _e_n_d() && !__cmp(__k, _S_key(__high._M_node))) │ │ │ │ -1390 ++__high; │ │ │ │ -1391 return { __low, __high }; │ │ │ │ -1392 } │ │ │ │ -1393#endif │ │ │ │ -1394 │ │ │ │ -1395 // Debugging. │ │ │ │ -1396 bool │ │ │ │ -1397 __rb_verify() const; │ │ │ │ -1398 │ │ │ │ -1399#if __cplusplus >= 201103L │ │ │ │ -1400 _Rb_tree& │ │ │ │ -1401 operator=(_Rb_tree&&) │ │ │ │ -1402 noexcept(_Alloc_traits::_S_nothrow_move() │ │ │ │ -1403 && is_nothrow_move_assignable<_Compare>::value); │ │ │ │ -1404 │ │ │ │ -1405 template │ │ │ │ -1406 void │ │ │ │ -1407 _M_assign_unique(_Iterator, _Iterator); │ │ │ │ -1408 │ │ │ │ -1409 template │ │ │ │ -1410 void │ │ │ │ -1411 _M_assign_equal(_Iterator, _Iterator); │ │ │ │ -1412 │ │ │ │ -1413 private: │ │ │ │ -1414 // Move elements from container with equal allocator. │ │ │ │ -1415 void │ │ │ │ -1416 _M_move_data(_Rb_tree& __x, _t_r_u_e___t_y_p_e) │ │ │ │ -1417 { _M_impl._M_move_data(__x._M_impl); } │ │ │ │ -1418 │ │ │ │ -1419 // Move elements from container with possibly non-equal allocator, │ │ │ │ -1420 // which might result in a copy not a move. │ │ │ │ -1421 void │ │ │ │ -1422 _M_move_data(_Rb_tree&, _f_a_l_s_e___t_y_p_e); │ │ │ │ -1423 │ │ │ │ -1424 // Move assignment from container with equal allocator. │ │ │ │ -1425 void │ │ │ │ -1426 _M_move_assign(_Rb_tree&, _t_r_u_e___t_y_p_e); │ │ │ │ -1427 │ │ │ │ -1428 // Move assignment from container with possibly non-equal allocator, │ │ │ │ -1429 // which might result in a copy not a move. │ │ │ │ -1430 void │ │ │ │ -1431 _M_move_assign(_Rb_tree&, _f_a_l_s_e___t_y_p_e); │ │ │ │ -1432#endif │ │ │ │ -1433 │ │ │ │ -1434#if __glibcxx_node_extract // >= C++17 │ │ │ │ -1435 public: │ │ │ │ -1436 /// Re-insert an extracted node. │ │ │ │ -1437 insert_return_type │ │ │ │ -1438 _M_reinsert_node_unique(node_type&& __nh) │ │ │ │ -1439 { │ │ │ │ -1440 insert_return_type __ret; │ │ │ │ -1441 if (__nh.empty()) │ │ │ │ -1442 __ret.position = _e_n_d(); │ │ │ │ -1443 else │ │ │ │ -1444 { │ │ │ │ -1445 __glibcxx_assert(_M_get_Node_allocator() == *__nh._M_alloc); │ │ │ │ -1446 │ │ │ │ -1447 auto __res = _M_get_insert_unique_pos(__nh._M_key()); │ │ │ │ -1448 if (__res.second) │ │ │ │ -1449 { │ │ │ │ -1450 __ret.position │ │ │ │ -1451 = _M_insert_node(__res.first, __res.second, __nh._M_ptr); │ │ │ │ -1452 __nh.release(); │ │ │ │ -1453 __ret.inserted = true; │ │ │ │ -1454 } │ │ │ │ -1455 else │ │ │ │ -1456 { │ │ │ │ -1457 __ret.node = _s_t_d_:_:_m_o_v_e(__nh); │ │ │ │ -1458 __ret.position = iterator(__res.first); │ │ │ │ -1459 __ret.inserted = false; │ │ │ │ -1460 } │ │ │ │ -1461 } │ │ │ │ -1462 return __ret; │ │ │ │ -1463 } │ │ │ │ -1464 │ │ │ │ -1465 /// Re-insert an extracted node. │ │ │ │ -1466 iterator │ │ │ │ -1467 _M_reinsert_node_equal(node_type&& __nh) │ │ │ │ -1468 { │ │ │ │ -1469 iterator __ret; │ │ │ │ -1470 if (__nh.empty()) │ │ │ │ -1471 __ret = _e_n_d(); │ │ │ │ -1472 else │ │ │ │ -1473 { │ │ │ │ -1474 __glibcxx_assert(_M_get_Node_allocator() == *__nh._M_alloc); │ │ │ │ -1475 auto __res = _M_get_insert_equal_pos(__nh._M_key()); │ │ │ │ -1476 if (__res.second) │ │ │ │ -1477 __ret = _M_insert_node(__res.first, __res.second, __nh._M_ptr); │ │ │ │ -1478 else │ │ │ │ -1479 __ret = _M_insert_equal_lower_node(__nh._M_ptr); │ │ │ │ -1480 __nh.release(); │ │ │ │ -1481 } │ │ │ │ -1482 return __ret; │ │ │ │ -1483 } │ │ │ │ -1484 │ │ │ │ -1485 /// Re-insert an extracted node. │ │ │ │ -1486 iterator │ │ │ │ -1487 _M_reinsert_node_hint_unique(const_iterator __hint, node_type&& __nh) │ │ │ │ -1488 { │ │ │ │ -1489 iterator __ret; │ │ │ │ -1490 if (__nh.empty()) │ │ │ │ -1491 __ret = _e_n_d(); │ │ │ │ -1492 else │ │ │ │ -1493 { │ │ │ │ -1494 __glibcxx_assert(_M_get_Node_allocator() == *__nh._M_alloc); │ │ │ │ -1495 auto __res = _M_get_insert_hint_unique_pos(__hint, __nh._M_key()); │ │ │ │ -1496 if (__res.second) │ │ │ │ -1497 { │ │ │ │ -1498 __ret = _M_insert_node(__res.first, __res.second, __nh._M_ptr); │ │ │ │ -1499 __nh.release(); │ │ │ │ -1500 } │ │ │ │ -1501 else │ │ │ │ -1502 __ret = iterator(__res.first); │ │ │ │ -1503 } │ │ │ │ -1504 return __ret; │ │ │ │ -1505 } │ │ │ │ -1506 │ │ │ │ -1507 /// Re-insert an extracted node. │ │ │ │ -1508 iterator │ │ │ │ -1509 _M_reinsert_node_hint_equal(const_iterator __hint, node_type&& __nh) │ │ │ │ -1510 { │ │ │ │ -1511 iterator __ret; │ │ │ │ -1512 if (__nh.empty()) │ │ │ │ -1513 __ret = _e_n_d(); │ │ │ │ -1514 else │ │ │ │ -1515 { │ │ │ │ -1516 __glibcxx_assert(_M_get_Node_allocator() == *__nh._M_alloc); │ │ │ │ -1517 auto __res = _M_get_insert_hint_equal_pos(__hint, __nh._M_key()); │ │ │ │ -1518 if (__res.second) │ │ │ │ -1519 __ret = _M_insert_node(__res.first, __res.second, __nh._M_ptr); │ │ │ │ -1520 else │ │ │ │ -1521 __ret = _M_insert_equal_lower_node(__nh._M_ptr); │ │ │ │ -1522 __nh.release(); │ │ │ │ -1523 } │ │ │ │ -1524 return __ret; │ │ │ │ -1525 } │ │ │ │ -1526 │ │ │ │ -1527 /// Extract a node. │ │ │ │ -1528 node_type │ │ │ │ -1529 extract(const_iterator __pos) │ │ │ │ -1530 { │ │ │ │ -1531 auto __ptr = _Rb_tree_rebalance_for_erase( │ │ │ │ -1532 __pos._M_const_cast()._M_node, _M_impl._M_header); │ │ │ │ -1533 --_M_impl._M_node_count; │ │ │ │ -1534 return { static_cast<_Link_type>(__ptr), _M_get_Node_allocator() }; │ │ │ │ -1535 } │ │ │ │ -1536 │ │ │ │ -1537 /// Extract a node. │ │ │ │ -1538 node_type │ │ │ │ -1539 extract(const key_type& __k) │ │ │ │ -1540 { │ │ │ │ -1541 node_type __nh; │ │ │ │ -1542 auto __pos = find(__k); │ │ │ │ -1543 if (__pos != _e_n_d()) │ │ │ │ -1544 __nh = extract(const_iterator(__pos)); │ │ │ │ -1545 return __nh; │ │ │ │ -1546 } │ │ │ │ -1547 │ │ │ │ -1548 template │ │ │ │ -1549 using _Compatible_tree │ │ │ │ -1550 = _Rb_tree<_Key, _Val, _KeyOfValue, _Compare2, _Alloc>; │ │ │ │ -1551 │ │ │ │ -1552 template │ │ │ │ -1553 friend struct _Rb_tree_merge_helper; │ │ │ │ -1554 │ │ │ │ -1555 /// Merge from a compatible container into one with unique keys. │ │ │ │ -1556 template │ │ │ │ -1557 void │ │ │ │ -1558 _M_merge_unique(_Compatible_tree<_Compare2>& __src) noexcept │ │ │ │ -1559 { │ │ │ │ -1560 using _Merge_helper = _Rb_tree_merge_helper<_Rb_tree, _Compare2>; │ │ │ │ -1561 for (auto __i = __src.begin(), __end = __src.end(); __i != __end;) │ │ │ │ -1562 { │ │ │ │ -1563 auto __pos = __i++; │ │ │ │ -1564 auto __res = _M_get_insert_unique_pos(_KeyOfValue()(*__pos)); │ │ │ │ -1565 if (__res.second) │ │ │ │ -1566 { │ │ │ │ -1567 auto& __src_impl = _Merge_helper::_S_get_impl(__src); │ │ │ │ -1568 auto __ptr = _Rb_tree_rebalance_for_erase( │ │ │ │ -1569 __pos._M_node, __src_impl._M_header); │ │ │ │ -1570 --__src_impl._M_node_count; │ │ │ │ -1571 _M_insert_node(__res.first, __res.second, │ │ │ │ -1572 static_cast<_Link_type>(__ptr)); │ │ │ │ -1573 } │ │ │ │ -1574 } │ │ │ │ -1575 } │ │ │ │ -1576 │ │ │ │ -1577 /// Merge from a compatible container into one with equivalent keys. │ │ │ │ -1578 template │ │ │ │ -1579 void │ │ │ │ -1580 _M_merge_equal(_Compatible_tree<_Compare2>& __src) noexcept │ │ │ │ -1581 { │ │ │ │ -1582 using _Merge_helper = _Rb_tree_merge_helper<_Rb_tree, _Compare2>; │ │ │ │ -1583 for (auto __i = __src.begin(), __end = __src.end(); __i != __end;) │ │ │ │ -1584 { │ │ │ │ -1585 auto __pos = __i++; │ │ │ │ -1586 auto __res = _M_get_insert_equal_pos(_KeyOfValue()(*__pos)); │ │ │ │ -1587 if (__res.second) │ │ │ │ -1588 { │ │ │ │ -1589 auto& __src_impl = _Merge_helper::_S_get_impl(__src); │ │ │ │ -1590 auto __ptr = _Rb_tree_rebalance_for_erase( │ │ │ │ -1591 __pos._M_node, __src_impl._M_header); │ │ │ │ -1592 --__src_impl._M_node_count; │ │ │ │ -1593 _M_insert_node(__res.first, __res.second, │ │ │ │ -1594 static_cast<_Link_type>(__ptr)); │ │ │ │ -1595 } │ │ │ │ -1596 } │ │ │ │ -1597 } │ │ │ │ -1598#endif // C++17 node_extract │ │ │ │ -1599 │ │ │ │ -1600 friend bool │ │ │ │ -1601 operator==(const _Rb_tree& __x, const _Rb_tree& __y) │ │ │ │ -1602 { │ │ │ │ -1603 return __x.size() == __y.size() │ │ │ │ -1604 && std::equal(__x.begin(), __x.end(), __y.begin()); │ │ │ │ -1605 } │ │ │ │ -1606 │ │ │ │ -1607#if __cpp_lib_three_way_comparison │ │ │ │ -1608 friend auto │ │ │ │ -1609 operator<=>(const _Rb_tree& __x, const _Rb_tree& __y) │ │ │ │ -1610 { │ │ │ │ -1611 if constexpr (requires { typename __detail::__synth3way_t<_Val>; }) │ │ │ │ -1612 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(), │ │ │ │ -1613 __y.begin(), __y.end(), │ │ │ │ -1614 __detail::__synth3way); │ │ │ │ -1615 } │ │ │ │ -1616#else │ │ │ │ -1617 friend bool │ │ │ │ -1618 _o_p_e_r_a_t_o_r_<(const _Rb_tree& __x, const _Rb_tree& __y) │ │ │ │ -1619 { │ │ │ │ -1620 return std::lexicographical_compare(__x.begin(), __x.end(), │ │ │ │ -1621 __y.begin(), __y.end()); │ │ │ │ -1622 } │ │ │ │ -1623#endif │ │ │ │ -1624 │ │ │ │ -1625 private: │ │ │ │ -1626#if __cplusplus >= 201103L │ │ │ │ -1627 // An RAII _Node handle │ │ │ │ -1628 struct _Auto_node │ │ │ │ -1629 { │ │ │ │ -1630 template │ │ │ │ -1631 _Auto_node(_Rb_tree& __t, _Args&&... __args) │ │ │ │ -1632 : _M_t(__t), │ │ │ │ -1633 _M_node(__t._M_create_node(_s_t_d::_f_o_r_w_a_r_d<_Args>(__args)...)) │ │ │ │ -1634 { } │ │ │ │ -1635 │ │ │ │ -1636 ~_Auto_node() │ │ │ │ -1637 { │ │ │ │ -1638 if (_M_node) │ │ │ │ -1639 _M_t._M_drop_node(_M_node); │ │ │ │ -1640 } │ │ │ │ -1641 │ │ │ │ -1642 _Auto_node(_Auto_node&& __n) │ │ │ │ -1643 : _M_t(__n._M_t), _M_node(__n._M_node) │ │ │ │ -1644 { __n._M_node = nullptr; } │ │ │ │ -1645 │ │ │ │ -1646 const _Key& │ │ │ │ -1647 _M_key() const │ │ │ │ -1648 { return _S_key(_M_node); } │ │ │ │ -1649 │ │ │ │ -1650 iterator │ │ │ │ -1651 _M_insert(pair<_Base_ptr, _Base_ptr> __p) │ │ │ │ -1652 { │ │ │ │ -1653 auto __it = _M_t._M_insert_node(__p.first, __p.second, _M_node); │ │ │ │ -1654 _M_node = nullptr; │ │ │ │ -1655 return __it; │ │ │ │ -1656 } │ │ │ │ -1657 │ │ │ │ -1658 iterator │ │ │ │ -1659 _M_insert_equal_lower() │ │ │ │ -1660 { │ │ │ │ -1661 auto __it = _M_t._M_insert_equal_lower_node(_M_node); │ │ │ │ -1662 _M_node = nullptr; │ │ │ │ -1663 return __it; │ │ │ │ -1664 } │ │ │ │ -1665 │ │ │ │ -1666 _Rb_tree& _M_t; │ │ │ │ -1667 _Link_type _M_node; │ │ │ │ -1668 }; │ │ │ │ -1669#endif // C++11 │ │ │ │ -1670 }; │ │ │ │ -1671 │ │ │ │ -1672 template │ │ │ │ -1674 inline void │ │ │ │ -1675 swap(_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x, │ │ │ │ -1676 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y) │ │ │ │ -1677 { __x.swap(__y); } │ │ │ │ -1678 │ │ │ │ -1679#if __cplusplus >= 201103L │ │ │ │ -1680 template │ │ │ │ -1682 void │ │ │ │ -1683 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -1684 _M_move_data(_Rb_tree& __x, _f_a_l_s_e___t_y_p_e) │ │ │ │ -1685 { │ │ │ │ -1686 if (_M_get_Node_allocator() == __x._M_get_Node_allocator()) │ │ │ │ -1687 _M_move_data(__x, _t_r_u_e___t_y_p_e()); │ │ │ │ -1688 else │ │ │ │ -1689 { │ │ │ │ -1690 constexpr bool __move = !__move_if_noexcept_cond::value; │ │ │ │ -1691 _Alloc_node __an(*this); │ │ │ │ -1692 _M_root() = _M_copy<__move>(__x, __an); │ │ │ │ -1693 if _GLIBCXX17_CONSTEXPR (__move) │ │ │ │ -1694 __x.clear(); │ │ │ │ -1695 } │ │ │ │ -1696 } │ │ │ │ -1697 │ │ │ │ -1698 template │ │ │ │ -1700 inline void │ │ │ │ -1701 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -1702 _M_move_assign(_Rb_tree& __x, _t_r_u_e___t_y_p_e) │ │ │ │ -1703 { │ │ │ │ -1704 clear(); │ │ │ │ -1705 if (__x._M_root() != nullptr) │ │ │ │ -1706 _M_move_data(__x, _t_r_u_e___t_y_p_e()); │ │ │ │ -1707 _s_t_d_:_:_____a_l_l_o_c___o_n___m_o_v_e(_M_get_Node_allocator(), │ │ │ │ -1708 __x._M_get_Node_allocator()); │ │ │ │ -1709 } │ │ │ │ +1381#if !defined(__cpp_lib_erase_if) │ │ │ │ +1382# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED │ │ │ │ +1383# define __glibcxx_erase_if 202002L │ │ │ │ +1384# if defined(__glibcxx_want_all) || defined(__glibcxx_want_erase_if) │ │ │ │ +1385# define __cpp_lib_erase_if 202002L │ │ │ │ +1386# endif │ │ │ │ +1387# endif │ │ │ │ +1388#endif /* !defined(__cpp_lib_erase_if) && defined(__glibcxx_want_erase_if) │ │ │ │ +*/ │ │ │ │ +1389#undef __glibcxx_want_erase_if │ │ │ │ +1390 │ │ │ │ +1391#if !defined(__cpp_lib_generic_unordered_lookup) │ │ │ │ +1392# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED │ │ │ │ +1393# define __glibcxx_generic_unordered_lookup 201811L │ │ │ │ +1394# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_generic_unordered_lookup) │ │ │ │ +1395# define __cpp_lib_generic_unordered_lookup 201811L │ │ │ │ +1396# endif │ │ │ │ +1397# endif │ │ │ │ +1398#endif /* !defined(__cpp_lib_generic_unordered_lookup) && defined │ │ │ │ +(__glibcxx_want_generic_unordered_lookup) */ │ │ │ │ +1399#undef __glibcxx_want_generic_unordered_lookup │ │ │ │ +1400 │ │ │ │ +1401#if !defined(__cpp_lib_jthread) │ │ │ │ +1402# if (__cplusplus >= 202002L) && defined(_GLIBCXX_HAS_GTHREADS) && │ │ │ │ +_GLIBCXX_HOSTED │ │ │ │ +1403# define __glibcxx_jthread 201911L │ │ │ │ +1404# if defined(__glibcxx_want_all) || defined(__glibcxx_want_jthread) │ │ │ │ +1405# define __cpp_lib_jthread 201911L │ │ │ │ +1406# endif │ │ │ │ +1407# endif │ │ │ │ +1408#endif /* !defined(__cpp_lib_jthread) && defined(__glibcxx_want_jthread) */ │ │ │ │ +1409#undef __glibcxx_want_jthread │ │ │ │ +1410 │ │ │ │ +1411#if !defined(__cpp_lib_latch) │ │ │ │ +1412# if (__cplusplus >= 202002L) && (__glibcxx_atomic_wait) │ │ │ │ +1413# define __glibcxx_latch 201907L │ │ │ │ +1414# if defined(__glibcxx_want_all) || defined(__glibcxx_want_latch) │ │ │ │ +1415# define __cpp_lib_latch 201907L │ │ │ │ +1416# endif │ │ │ │ +1417# endif │ │ │ │ +1418#endif /* !defined(__cpp_lib_latch) && defined(__glibcxx_want_latch) */ │ │ │ │ +1419#undef __glibcxx_want_latch │ │ │ │ +1420 │ │ │ │ +1421#if !defined(__cpp_lib_list_remove_return_type) │ │ │ │ +1422# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED │ │ │ │ +1423# define __glibcxx_list_remove_return_type 201806L │ │ │ │ +1424# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_list_remove_return_type) │ │ │ │ +1425# define __cpp_lib_list_remove_return_type 201806L │ │ │ │ +1426# endif │ │ │ │ +1427# endif │ │ │ │ +1428#endif /* !defined(__cpp_lib_list_remove_return_type) && defined │ │ │ │ +(__glibcxx_want_list_remove_return_type) */ │ │ │ │ +1429#undef __glibcxx_want_list_remove_return_type │ │ │ │ +1430 │ │ │ │ +1431#if !defined(__cpp_lib_polymorphic_allocator) │ │ │ │ +1432# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED │ │ │ │ +1433# define __glibcxx_polymorphic_allocator 201902L │ │ │ │ +1434# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_polymorphic_allocator) │ │ │ │ +1435# define __cpp_lib_polymorphic_allocator 201902L │ │ │ │ +1436# endif │ │ │ │ +1437# endif │ │ │ │ +1438#endif /* !defined(__cpp_lib_polymorphic_allocator) && defined │ │ │ │ +(__glibcxx_want_polymorphic_allocator) */ │ │ │ │ +1439#undef __glibcxx_want_polymorphic_allocator │ │ │ │ +1440 │ │ │ │ +1441#if !defined(__cpp_lib_move_iterator_concept) │ │ │ │ +1442# if (__cplusplus >= 202002L) && (__glibcxx_concepts) │ │ │ │ +1443# define __glibcxx_move_iterator_concept 202207L │ │ │ │ +1444# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_move_iterator_concept) │ │ │ │ +1445# define __cpp_lib_move_iterator_concept 202207L │ │ │ │ +1446# endif │ │ │ │ +1447# endif │ │ │ │ +1448#endif /* !defined(__cpp_lib_move_iterator_concept) && defined │ │ │ │ +(__glibcxx_want_move_iterator_concept) */ │ │ │ │ +1449#undef __glibcxx_want_move_iterator_concept │ │ │ │ +1450 │ │ │ │ +1451#if !defined(__cpp_lib_semaphore) │ │ │ │ +1452# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED && (__glibcxx_atomic_wait │ │ │ │ +|| _GLIBCXX_HAVE_POSIX_SEMAPHORE) │ │ │ │ +1453# define __glibcxx_semaphore 201907L │ │ │ │ +1454# if defined(__glibcxx_want_all) || defined(__glibcxx_want_semaphore) │ │ │ │ +1455# define __cpp_lib_semaphore 201907L │ │ │ │ +1456# endif │ │ │ │ +1457# endif │ │ │ │ +1458#endif /* !defined(__cpp_lib_semaphore) && defined │ │ │ │ +(__glibcxx_want_semaphore) */ │ │ │ │ +1459#undef __glibcxx_want_semaphore │ │ │ │ +1460 │ │ │ │ +1461#if !defined(__cpp_lib_smart_ptr_for_overwrite) │ │ │ │ +1462# if (__cplusplus >= 202002L) && _GLIBCXX_HOSTED │ │ │ │ +1463# define __glibcxx_smart_ptr_for_overwrite 202002L │ │ │ │ +1464# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_smart_ptr_for_overwrite) │ │ │ │ +1465# define __cpp_lib_smart_ptr_for_overwrite 202002L │ │ │ │ +1466# endif │ │ │ │ +1467# endif │ │ │ │ +1468#endif /* !defined(__cpp_lib_smart_ptr_for_overwrite) && defined │ │ │ │ +(__glibcxx_want_smart_ptr_for_overwrite) */ │ │ │ │ +1469#undef __glibcxx_want_smart_ptr_for_overwrite │ │ │ │ +1470 │ │ │ │ +1471#if !defined(__cpp_lib_syncbuf) │ │ │ │ +1472# if (__cplusplus >= 202002L) && _GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED │ │ │ │ +1473# define __glibcxx_syncbuf 201803L │ │ │ │ +1474# if defined(__glibcxx_want_all) || defined(__glibcxx_want_syncbuf) │ │ │ │ +1475# define __cpp_lib_syncbuf 201803L │ │ │ │ +1476# endif │ │ │ │ +1477# endif │ │ │ │ +1478#endif /* !defined(__cpp_lib_syncbuf) && defined(__glibcxx_want_syncbuf) */ │ │ │ │ +1479#undef __glibcxx_want_syncbuf │ │ │ │ +1480 │ │ │ │ +1481#if !defined(__cpp_lib_byteswap) │ │ │ │ +1482# if (__cplusplus >= 202100L) │ │ │ │ +1483# define __glibcxx_byteswap 202110L │ │ │ │ +1484# if defined(__glibcxx_want_all) || defined(__glibcxx_want_byteswap) │ │ │ │ +1485# define __cpp_lib_byteswap 202110L │ │ │ │ +1486# endif │ │ │ │ +1487# endif │ │ │ │ +1488#endif /* !defined(__cpp_lib_byteswap) && defined(__glibcxx_want_byteswap) │ │ │ │ +*/ │ │ │ │ +1489#undef __glibcxx_want_byteswap │ │ │ │ +1490 │ │ │ │ +1491#if !defined(__cpp_lib_constexpr_charconv) │ │ │ │ +1492# if (__cplusplus >= 202100L) │ │ │ │ +1493# define __glibcxx_constexpr_charconv 202207L │ │ │ │ +1494# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_constexpr_charconv) │ │ │ │ +1495# define __cpp_lib_constexpr_charconv 202207L │ │ │ │ +1496# endif │ │ │ │ +1497# endif │ │ │ │ +1498#endif /* !defined(__cpp_lib_constexpr_charconv) && defined │ │ │ │ +(__glibcxx_want_constexpr_charconv) */ │ │ │ │ +1499#undef __glibcxx_want_constexpr_charconv │ │ │ │ +1500 │ │ │ │ +1501#if !defined(__cpp_lib_constexpr_typeinfo) │ │ │ │ +1502# if (__cplusplus >= 202100L) │ │ │ │ +1503# define __glibcxx_constexpr_typeinfo 202106L │ │ │ │ +1504# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_constexpr_typeinfo) │ │ │ │ +1505# define __cpp_lib_constexpr_typeinfo 202106L │ │ │ │ +1506# endif │ │ │ │ +1507# endif │ │ │ │ +1508#endif /* !defined(__cpp_lib_constexpr_typeinfo) && defined │ │ │ │ +(__glibcxx_want_constexpr_typeinfo) */ │ │ │ │ +1509#undef __glibcxx_want_constexpr_typeinfo │ │ │ │ +1510 │ │ │ │ +1511#if !defined(__cpp_lib_expected) │ │ │ │ +1512# if (__cplusplus >= 202100L) && (__cpp_concepts >= 202002L) │ │ │ │ +1513# define __glibcxx_expected 202211L │ │ │ │ +1514# if defined(__glibcxx_want_all) || defined(__glibcxx_want_expected) │ │ │ │ +1515# define __cpp_lib_expected 202211L │ │ │ │ +1516# endif │ │ │ │ +1517# endif │ │ │ │ +1518#endif /* !defined(__cpp_lib_expected) && defined(__glibcxx_want_expected) │ │ │ │ +*/ │ │ │ │ +1519#undef __glibcxx_want_expected │ │ │ │ +1520 │ │ │ │ +1521#if !defined(__cpp_lib_freestanding_algorithm) │ │ │ │ +1522# if (__cplusplus >= 202100L) │ │ │ │ +1523# define __glibcxx_freestanding_algorithm 202311L │ │ │ │ +1524# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_freestanding_algorithm) │ │ │ │ +1525# define __cpp_lib_freestanding_algorithm 202311L │ │ │ │ +1526# endif │ │ │ │ +1527# endif │ │ │ │ +1528#endif /* !defined(__cpp_lib_freestanding_algorithm) && defined │ │ │ │ +(__glibcxx_want_freestanding_algorithm) */ │ │ │ │ +1529#undef __glibcxx_want_freestanding_algorithm │ │ │ │ +1530 │ │ │ │ +1531#if !defined(__cpp_lib_freestanding_array) │ │ │ │ +1532# if (__cplusplus >= 202100L) │ │ │ │ +1533# define __glibcxx_freestanding_array 202311L │ │ │ │ +1534# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_freestanding_array) │ │ │ │ +1535# define __cpp_lib_freestanding_array 202311L │ │ │ │ +1536# endif │ │ │ │ +1537# endif │ │ │ │ +1538#endif /* !defined(__cpp_lib_freestanding_array) && defined │ │ │ │ +(__glibcxx_want_freestanding_array) */ │ │ │ │ +1539#undef __glibcxx_want_freestanding_array │ │ │ │ +1540 │ │ │ │ +1541#if !defined(__cpp_lib_freestanding_cstring) │ │ │ │ +1542# if (__cplusplus >= 202100L) │ │ │ │ +1543# define __glibcxx_freestanding_cstring 202311L │ │ │ │ +1544# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_freestanding_cstring) │ │ │ │ +1545# define __cpp_lib_freestanding_cstring 202311L │ │ │ │ +1546# endif │ │ │ │ +1547# endif │ │ │ │ +1548#endif /* !defined(__cpp_lib_freestanding_cstring) && defined │ │ │ │ +(__glibcxx_want_freestanding_cstring) */ │ │ │ │ +1549#undef __glibcxx_want_freestanding_cstring │ │ │ │ +1550 │ │ │ │ +1551#if !defined(__cpp_lib_freestanding_expected) │ │ │ │ +1552# if (__cplusplus >= 202100L) && (__cpp_lib_expected) │ │ │ │ +1553# define __glibcxx_freestanding_expected 202311L │ │ │ │ +1554# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_freestanding_expected) │ │ │ │ +1555# define __cpp_lib_freestanding_expected 202311L │ │ │ │ +1556# endif │ │ │ │ +1557# endif │ │ │ │ +1558#endif /* !defined(__cpp_lib_freestanding_expected) && defined │ │ │ │ +(__glibcxx_want_freestanding_expected) */ │ │ │ │ +1559#undef __glibcxx_want_freestanding_expected │ │ │ │ +1560 │ │ │ │ +1561#if !defined(__cpp_lib_freestanding_optional) │ │ │ │ +1562# if (__cplusplus >= 202100L) │ │ │ │ +1563# define __glibcxx_freestanding_optional 202311L │ │ │ │ +1564# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_freestanding_optional) │ │ │ │ +1565# define __cpp_lib_freestanding_optional 202311L │ │ │ │ +1566# endif │ │ │ │ +1567# endif │ │ │ │ +1568#endif /* !defined(__cpp_lib_freestanding_optional) && defined │ │ │ │ +(__glibcxx_want_freestanding_optional) */ │ │ │ │ +1569#undef __glibcxx_want_freestanding_optional │ │ │ │ +1570 │ │ │ │ +1571#if !defined(__cpp_lib_freestanding_string_view) │ │ │ │ +1572# if (__cplusplus >= 202100L) │ │ │ │ +1573# define __glibcxx_freestanding_string_view 202311L │ │ │ │ +1574# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_freestanding_string_view) │ │ │ │ +1575# define __cpp_lib_freestanding_string_view 202311L │ │ │ │ +1576# endif │ │ │ │ +1577# endif │ │ │ │ +1578#endif /* !defined(__cpp_lib_freestanding_string_view) && defined │ │ │ │ +(__glibcxx_want_freestanding_string_view) */ │ │ │ │ +1579#undef __glibcxx_want_freestanding_string_view │ │ │ │ +1580 │ │ │ │ +1581#if !defined(__cpp_lib_freestanding_variant) │ │ │ │ +1582# if (__cplusplus >= 202100L) │ │ │ │ +1583# define __glibcxx_freestanding_variant 202311L │ │ │ │ +1584# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_freestanding_variant) │ │ │ │ +1585# define __cpp_lib_freestanding_variant 202311L │ │ │ │ +1586# endif │ │ │ │ +1587# endif │ │ │ │ +1588#endif /* !defined(__cpp_lib_freestanding_variant) && defined │ │ │ │ +(__glibcxx_want_freestanding_variant) */ │ │ │ │ +1589#undef __glibcxx_want_freestanding_variant │ │ │ │ +1590 │ │ │ │ +1591#if !defined(__cpp_lib_invoke_r) │ │ │ │ +1592# if (__cplusplus >= 202100L) │ │ │ │ +1593# define __glibcxx_invoke_r 202106L │ │ │ │ +1594# if defined(__glibcxx_want_all) || defined(__glibcxx_want_invoke_r) │ │ │ │ +1595# define __cpp_lib_invoke_r 202106L │ │ │ │ +1596# endif │ │ │ │ +1597# endif │ │ │ │ +1598#endif /* !defined(__cpp_lib_invoke_r) && defined(__glibcxx_want_invoke_r) │ │ │ │ +*/ │ │ │ │ +1599#undef __glibcxx_want_invoke_r │ │ │ │ +1600 │ │ │ │ +1601#if !defined(__cpp_lib_is_scoped_enum) │ │ │ │ +1602# if (__cplusplus >= 202100L) │ │ │ │ +1603# define __glibcxx_is_scoped_enum 202011L │ │ │ │ +1604# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_scoped_enum) │ │ │ │ +1605# define __cpp_lib_is_scoped_enum 202011L │ │ │ │ +1606# endif │ │ │ │ +1607# endif │ │ │ │ +1608#endif /* !defined(__cpp_lib_is_scoped_enum) && defined │ │ │ │ +(__glibcxx_want_is_scoped_enum) */ │ │ │ │ +1609#undef __glibcxx_want_is_scoped_enum │ │ │ │ +1610 │ │ │ │ +1611#if !defined(__cpp_lib_reference_from_temporary) │ │ │ │ +1612# if (__cplusplus >= 202100L) && (__has_builtin │ │ │ │ +(__reference_constructs_from_temporary) && __has_builtin │ │ │ │ +(__reference_converts_from_temporary)) │ │ │ │ +1613# define __glibcxx_reference_from_temporary 202202L │ │ │ │ +1614# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_reference_from_temporary) │ │ │ │ +1615# define __cpp_lib_reference_from_temporary 202202L │ │ │ │ +1616# endif │ │ │ │ +1617# endif │ │ │ │ +1618#endif /* !defined(__cpp_lib_reference_from_temporary) && defined │ │ │ │ +(__glibcxx_want_reference_from_temporary) */ │ │ │ │ +1619#undef __glibcxx_want_reference_from_temporary │ │ │ │ +1620 │ │ │ │ +1621#if !defined(__cpp_lib_ranges_to_container) │ │ │ │ +1622# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED │ │ │ │ +1623# define __glibcxx_ranges_to_container 202202L │ │ │ │ +1624# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_ranges_to_container) │ │ │ │ +1625# define __cpp_lib_ranges_to_container 202202L │ │ │ │ +1626# endif │ │ │ │ +1627# endif │ │ │ │ +1628#endif /* !defined(__cpp_lib_ranges_to_container) && defined │ │ │ │ +(__glibcxx_want_ranges_to_container) */ │ │ │ │ +1629#undef __glibcxx_want_ranges_to_container │ │ │ │ +1630 │ │ │ │ +1631#if !defined(__cpp_lib_ranges_zip) │ │ │ │ +1632# if (__cplusplus >= 202100L) │ │ │ │ +1633# define __glibcxx_ranges_zip 202110L │ │ │ │ +1634# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_zip) │ │ │ │ +1635# define __cpp_lib_ranges_zip 202110L │ │ │ │ +1636# endif │ │ │ │ +1637# endif │ │ │ │ +1638#endif /* !defined(__cpp_lib_ranges_zip) && defined │ │ │ │ +(__glibcxx_want_ranges_zip) */ │ │ │ │ +1639#undef __glibcxx_want_ranges_zip │ │ │ │ +1640 │ │ │ │ +1641#if !defined(__cpp_lib_ranges_chunk) │ │ │ │ +1642# if (__cplusplus >= 202100L) │ │ │ │ +1643# define __glibcxx_ranges_chunk 202202L │ │ │ │ +1644# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_chunk) │ │ │ │ +1645# define __cpp_lib_ranges_chunk 202202L │ │ │ │ +1646# endif │ │ │ │ +1647# endif │ │ │ │ +1648#endif /* !defined(__cpp_lib_ranges_chunk) && defined │ │ │ │ +(__glibcxx_want_ranges_chunk) */ │ │ │ │ +1649#undef __glibcxx_want_ranges_chunk │ │ │ │ +1650 │ │ │ │ +1651#if !defined(__cpp_lib_ranges_slide) │ │ │ │ +1652# if (__cplusplus >= 202100L) │ │ │ │ +1653# define __glibcxx_ranges_slide 202202L │ │ │ │ +1654# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_slide) │ │ │ │ +1655# define __cpp_lib_ranges_slide 202202L │ │ │ │ +1656# endif │ │ │ │ +1657# endif │ │ │ │ +1658#endif /* !defined(__cpp_lib_ranges_slide) && defined │ │ │ │ +(__glibcxx_want_ranges_slide) */ │ │ │ │ +1659#undef __glibcxx_want_ranges_slide │ │ │ │ +1660 │ │ │ │ +1661#if !defined(__cpp_lib_ranges_chunk_by) │ │ │ │ +1662# if (__cplusplus >= 202100L) │ │ │ │ +1663# define __glibcxx_ranges_chunk_by 202202L │ │ │ │ +1664# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_chunk_by) │ │ │ │ +1665# define __cpp_lib_ranges_chunk_by 202202L │ │ │ │ +1666# endif │ │ │ │ +1667# endif │ │ │ │ +1668#endif /* !defined(__cpp_lib_ranges_chunk_by) && defined │ │ │ │ +(__glibcxx_want_ranges_chunk_by) */ │ │ │ │ +1669#undef __glibcxx_want_ranges_chunk_by │ │ │ │ +1670 │ │ │ │ +1671#if !defined(__cpp_lib_ranges_join_with) │ │ │ │ +1672# if (__cplusplus >= 202100L) │ │ │ │ +1673# define __glibcxx_ranges_join_with 202202L │ │ │ │ +1674# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_ranges_join_with) │ │ │ │ +1675# define __cpp_lib_ranges_join_with 202202L │ │ │ │ +1676# endif │ │ │ │ +1677# endif │ │ │ │ +1678#endif /* !defined(__cpp_lib_ranges_join_with) && defined │ │ │ │ +(__glibcxx_want_ranges_join_with) */ │ │ │ │ +1679#undef __glibcxx_want_ranges_join_with │ │ │ │ +1680 │ │ │ │ +1681#if !defined(__cpp_lib_ranges_repeat) │ │ │ │ +1682# if (__cplusplus >= 202100L) │ │ │ │ +1683# define __glibcxx_ranges_repeat 202207L │ │ │ │ +1684# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_repeat) │ │ │ │ +1685# define __cpp_lib_ranges_repeat 202207L │ │ │ │ +1686# endif │ │ │ │ +1687# endif │ │ │ │ +1688#endif /* !defined(__cpp_lib_ranges_repeat) && defined │ │ │ │ +(__glibcxx_want_ranges_repeat) */ │ │ │ │ +1689#undef __glibcxx_want_ranges_repeat │ │ │ │ +1690 │ │ │ │ +1691#if !defined(__cpp_lib_ranges_stride) │ │ │ │ +1692# if (__cplusplus >= 202100L) │ │ │ │ +1693# define __glibcxx_ranges_stride 202207L │ │ │ │ +1694# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_stride) │ │ │ │ +1695# define __cpp_lib_ranges_stride 202207L │ │ │ │ +1696# endif │ │ │ │ +1697# endif │ │ │ │ +1698#endif /* !defined(__cpp_lib_ranges_stride) && defined │ │ │ │ +(__glibcxx_want_ranges_stride) */ │ │ │ │ +1699#undef __glibcxx_want_ranges_stride │ │ │ │ +1700 │ │ │ │ +1701#if !defined(__cpp_lib_ranges_cartesian_product) │ │ │ │ +1702# if (__cplusplus >= 202100L) │ │ │ │ +1703# define __glibcxx_ranges_cartesian_product 202207L │ │ │ │ +1704# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_ranges_cartesian_product) │ │ │ │ +1705# define __cpp_lib_ranges_cartesian_product 202207L │ │ │ │ +1706# endif │ │ │ │ +1707# endif │ │ │ │ +1708#endif /* !defined(__cpp_lib_ranges_cartesian_product) && defined │ │ │ │ +(__glibcxx_want_ranges_cartesian_product) */ │ │ │ │ +1709#undef __glibcxx_want_ranges_cartesian_product │ │ │ │ 1710 │ │ │ │ -1711 template │ │ │ │ -1713 void │ │ │ │ -1714 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -1715 _M_move_assign(_Rb_tree& __x, _f_a_l_s_e___t_y_p_e) │ │ │ │ -1716 { │ │ │ │ -1717 if (_M_get_Node_allocator() == __x._M_get_Node_allocator()) │ │ │ │ -1718 return _M_move_assign(__x, _t_r_u_e___t_y_p_e{}); │ │ │ │ -1719 │ │ │ │ -1720 // Try to move each node reusing existing nodes and copying __x nodes │ │ │ │ -1721 // structure. │ │ │ │ -1722 _Reuse_or_alloc_node __roan(*this); │ │ │ │ -1723 _M_impl._M_reset(); │ │ │ │ -1724 if (__x._M_root() != nullptr) │ │ │ │ -1725 { │ │ │ │ -1726 _M_root() = _M_copy<__as_rvalue>(__x, __roan); │ │ │ │ -1727 __x.clear(); │ │ │ │ -1728 } │ │ │ │ -1729 } │ │ │ │ +1711#if !defined(__cpp_lib_ranges_as_rvalue) │ │ │ │ +1712# if (__cplusplus >= 202100L) │ │ │ │ +1713# define __glibcxx_ranges_as_rvalue 202207L │ │ │ │ +1714# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_ranges_as_rvalue) │ │ │ │ +1715# define __cpp_lib_ranges_as_rvalue 202207L │ │ │ │ +1716# endif │ │ │ │ +1717# endif │ │ │ │ +1718#endif /* !defined(__cpp_lib_ranges_as_rvalue) && defined │ │ │ │ +(__glibcxx_want_ranges_as_rvalue) */ │ │ │ │ +1719#undef __glibcxx_want_ranges_as_rvalue │ │ │ │ +1720 │ │ │ │ +1721#if !defined(__cpp_lib_ranges_as_const) │ │ │ │ +1722# if (__cplusplus >= 202100L) │ │ │ │ +1723# define __glibcxx_ranges_as_const 202311L │ │ │ │ +1724# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_as_const) │ │ │ │ +1725# define __cpp_lib_ranges_as_const 202311L │ │ │ │ +1726# endif │ │ │ │ +1727# endif │ │ │ │ +1728#endif /* !defined(__cpp_lib_ranges_as_const) && defined │ │ │ │ +(__glibcxx_want_ranges_as_const) */ │ │ │ │ +1729#undef __glibcxx_want_ranges_as_const │ │ │ │ 1730 │ │ │ │ -1731 template │ │ │ │ -1733 inline _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& │ │ │ │ -1734 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -1735 operator=(_Rb_tree&& __x) │ │ │ │ -1736 noexcept(_Alloc_traits::_S_nothrow_move() │ │ │ │ -1737 && is_nothrow_move_assignable<_Compare>::value) │ │ │ │ -1738 { │ │ │ │ -1739 _M_impl._M_key_compare = _s_t_d_:_:_m_o_v_e(__x._M_impl._M_key_compare); │ │ │ │ -1740 _M_move_assign(__x, __bool_constant<_Alloc_traits::_S_nothrow_move()>()); │ │ │ │ -1741 return *this; │ │ │ │ -1742 } │ │ │ │ -1743 │ │ │ │ -1744 template │ │ │ │ -1746 template │ │ │ │ -1747 void │ │ │ │ -1748 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -1749 _M_assign_unique(_Iterator __first, _Iterator __last) │ │ │ │ -1750 { │ │ │ │ -1751 _Reuse_or_alloc_node __roan(*this); │ │ │ │ -1752 _M_impl._M_reset(); │ │ │ │ -1753 for (; __first != __last; ++__first) │ │ │ │ -1754 _M_insert_unique_(_e_n_d(), *__first, __roan); │ │ │ │ -1755 } │ │ │ │ -1756 │ │ │ │ -1757 template │ │ │ │ -1759 template │ │ │ │ -1760 void │ │ │ │ -1761 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -1762 _M_assign_equal(_Iterator __first, _Iterator __last) │ │ │ │ -1763 { │ │ │ │ -1764 _Reuse_or_alloc_node __roan(*this); │ │ │ │ -1765 _M_impl._M_reset(); │ │ │ │ -1766 for (; __first != __last; ++__first) │ │ │ │ -1767 _M_insert_equal_(_e_n_d(), *__first, __roan); │ │ │ │ -1768 } │ │ │ │ -1769#endif │ │ │ │ +1731#if !defined(__cpp_lib_ranges_enumerate) │ │ │ │ +1732# if (__cplusplus >= 202100L) │ │ │ │ +1733# define __glibcxx_ranges_enumerate 202302L │ │ │ │ +1734# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_ranges_enumerate) │ │ │ │ +1735# define __cpp_lib_ranges_enumerate 202302L │ │ │ │ +1736# endif │ │ │ │ +1737# endif │ │ │ │ +1738#endif /* !defined(__cpp_lib_ranges_enumerate) && defined │ │ │ │ +(__glibcxx_want_ranges_enumerate) */ │ │ │ │ +1739#undef __glibcxx_want_ranges_enumerate │ │ │ │ +1740 │ │ │ │ +1741#if !defined(__cpp_lib_ranges_fold) │ │ │ │ +1742# if (__cplusplus >= 202100L) │ │ │ │ +1743# define __glibcxx_ranges_fold 202207L │ │ │ │ +1744# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_fold) │ │ │ │ +1745# define __cpp_lib_ranges_fold 202207L │ │ │ │ +1746# endif │ │ │ │ +1747# endif │ │ │ │ +1748#endif /* !defined(__cpp_lib_ranges_fold) && defined │ │ │ │ +(__glibcxx_want_ranges_fold) */ │ │ │ │ +1749#undef __glibcxx_want_ranges_fold │ │ │ │ +1750 │ │ │ │ +1751#if !defined(__cpp_lib_ranges_contains) │ │ │ │ +1752# if (__cplusplus >= 202100L) │ │ │ │ +1753# define __glibcxx_ranges_contains 202207L │ │ │ │ +1754# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_contains) │ │ │ │ +1755# define __cpp_lib_ranges_contains 202207L │ │ │ │ +1756# endif │ │ │ │ +1757# endif │ │ │ │ +1758#endif /* !defined(__cpp_lib_ranges_contains) && defined │ │ │ │ +(__glibcxx_want_ranges_contains) */ │ │ │ │ +1759#undef __glibcxx_want_ranges_contains │ │ │ │ +1760 │ │ │ │ +1761#if !defined(__cpp_lib_ranges_iota) │ │ │ │ +1762# if (__cplusplus >= 202100L) │ │ │ │ +1763# define __glibcxx_ranges_iota 202202L │ │ │ │ +1764# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_iota) │ │ │ │ +1765# define __cpp_lib_ranges_iota 202202L │ │ │ │ +1766# endif │ │ │ │ +1767# endif │ │ │ │ +1768#endif /* !defined(__cpp_lib_ranges_iota) && defined │ │ │ │ +(__glibcxx_want_ranges_iota) */ │ │ │ │ +1769#undef __glibcxx_want_ranges_iota │ │ │ │ 1770 │ │ │ │ -1771 template │ │ │ │ -1773 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& │ │ │ │ -1774 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -1775 operator=(const _Rb_tree& __x) │ │ │ │ -1776 { │ │ │ │ -1777 if (this != _s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__x)) │ │ │ │ -1778 { │ │ │ │ -1779 // Note that _Key may be a constant type. │ │ │ │ -1780#if __cplusplus >= 201103L │ │ │ │ -1781 if (_Alloc_traits::_S_propagate_on_copy_assign()) │ │ │ │ -1782 { │ │ │ │ -1783 auto& __this_alloc = this->_M_get_Node_allocator(); │ │ │ │ -1784 auto& __that_alloc = __x._M_get_Node_allocator(); │ │ │ │ -1785 if (!_Alloc_traits::_S_always_equal() │ │ │ │ -1786 && __this_alloc != __that_alloc) │ │ │ │ -1787 { │ │ │ │ -1788 // Replacement allocator cannot free existing storage, we need │ │ │ │ -1789 // to erase nodes first. │ │ │ │ -1790 clear(); │ │ │ │ -1791 _s_t_d_:_:_____a_l_l_o_c___o_n___c_o_p_y(__this_alloc, __that_alloc); │ │ │ │ -1792 } │ │ │ │ -1793 } │ │ │ │ -1794#endif │ │ │ │ -1795 │ │ │ │ -1796 _Reuse_or_alloc_node __roan(*this); │ │ │ │ -1797 _M_impl._M_reset(); │ │ │ │ -1798 _M_impl._M_key_compare = __x._M_impl._M_key_compare; │ │ │ │ -1799 if (__x._M_root() != 0) │ │ │ │ -1800 _M_root() = _M_copy<__as_lvalue>(__x, __roan); │ │ │ │ -1801 } │ │ │ │ -1802 │ │ │ │ -1803 return *this; │ │ │ │ -1804 } │ │ │ │ -1805 │ │ │ │ -1806 template │ │ │ │ -1808#if __cplusplus >= 201103L │ │ │ │ -1809 template │ │ │ │ -1810#else │ │ │ │ -1811 template │ │ │ │ -1812#endif │ │ │ │ -1813 typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator │ │ │ │ -1814 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -1815 _M_insert_(_Base_ptr __x, _Base_ptr __p, │ │ │ │ -1816#if __cplusplus >= 201103L │ │ │ │ -1817 _Arg&& __v, │ │ │ │ -1818#else │ │ │ │ -1819 const _Val& __v, │ │ │ │ -1820#endif │ │ │ │ -1821 _NodeGen& __node_gen) │ │ │ │ -1822 { │ │ │ │ -1823 bool __insert_left = (__x != 0 || __p == _M_end() │ │ │ │ -1824 || _M_impl._M_key_compare(_KeyOfValue()(__v), │ │ │ │ -1825 _S_key(__p))); │ │ │ │ -1826 │ │ │ │ -1827 _Link_type __z = __node_gen(_GLIBCXX_FORWARD(_Arg, __v)); │ │ │ │ -1828 │ │ │ │ -1829 _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, │ │ │ │ -1830 this->_M_impl._M_header); │ │ │ │ -1831 ++_M_impl._M_node_count; │ │ │ │ -1832 return iterator(__z); │ │ │ │ -1833 } │ │ │ │ -1834 │ │ │ │ -1835 template │ │ │ │ -1837#if __cplusplus >= 201103L │ │ │ │ -1838 template │ │ │ │ -1839#endif │ │ │ │ -1840 typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator │ │ │ │ -1841 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -1842#if __cplusplus >= 201103L │ │ │ │ -1843 _M_insert_lower(_Base_ptr __p, _Arg&& __v) │ │ │ │ -1844#else │ │ │ │ -1845 _M_insert_lower(_Base_ptr __p, const _Val& __v) │ │ │ │ -1846#endif │ │ │ │ -1847 { │ │ │ │ -1848 bool __insert_left = (__p == _M_end() │ │ │ │ -1849 || !_M_impl._M_key_compare(_S_key(__p), │ │ │ │ -1850 _KeyOfValue()(__v))); │ │ │ │ -1851 │ │ │ │ -1852 _Link_type __z = _M_create_node(_GLIBCXX_FORWARD(_Arg, __v)); │ │ │ │ -1853 │ │ │ │ -1854 _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, │ │ │ │ -1855 this->_M_impl._M_header); │ │ │ │ -1856 ++_M_impl._M_node_count; │ │ │ │ -1857 return iterator(__z); │ │ │ │ -1858 } │ │ │ │ -1859 │ │ │ │ -1860 template │ │ │ │ -1862#if __cplusplus >= 201103L │ │ │ │ -1863 template │ │ │ │ -1864#endif │ │ │ │ -1865 typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator │ │ │ │ -1866 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -1867#if __cplusplus >= 201103L │ │ │ │ -1868 _M_insert_equal_lower(_Arg&& __v) │ │ │ │ -1869#else │ │ │ │ -1870 _M_insert_equal_lower(const _Val& __v) │ │ │ │ -1871#endif │ │ │ │ -1872 { │ │ │ │ -1873 _Link_type __x = _M_begin(); │ │ │ │ -1874 _Base_ptr __y = _M_end(); │ │ │ │ -1875 while (__x != 0) │ │ │ │ -1876 { │ │ │ │ -1877 __y = __x; │ │ │ │ -1878 __x = !_M_impl._M_key_compare(_S_key(__x), _KeyOfValue()(__v)) ? │ │ │ │ -1879 _S_left(__x) : _S_right(__x); │ │ │ │ -1880 } │ │ │ │ -1881 return _M_insert_lower(__y, _GLIBCXX_FORWARD(_Arg, __v)); │ │ │ │ -1882 } │ │ │ │ -1883 │ │ │ │ -1884 template │ │ │ │ -1886 template │ │ │ │ -1887 typename _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>::_Link_type │ │ │ │ -1888 _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>:: │ │ │ │ -1889 _M_copy(_Link_type __x, _Base_ptr __p, _NodeGen& __node_gen) │ │ │ │ -1890 { │ │ │ │ -1891 // Structural copy. __x and __p must be non-null. │ │ │ │ -1892 _Link_type __top = _M_clone_node<_MoveValues>(__x, __node_gen); │ │ │ │ -1893 __top->_M_parent = __p; │ │ │ │ -1894 │ │ │ │ -1895 __try │ │ │ │ -1896 { │ │ │ │ -1897 if (__x->_M_right) │ │ │ │ -1898 __top->_M_right = │ │ │ │ -1899 _M_copy<_MoveValues>(_S_right(__x), __top, __node_gen); │ │ │ │ -1900 __p = __top; │ │ │ │ -1901 __x = _S_left(__x); │ │ │ │ -1902 │ │ │ │ -1903 while (__x != 0) │ │ │ │ -1904 { │ │ │ │ -1905 _Link_type __y = _M_clone_node<_MoveValues>(__x, __node_gen); │ │ │ │ -1906 __p->_M_left = __y; │ │ │ │ -1907 __y->_M_parent = __p; │ │ │ │ -1908 if (__x->_M_right) │ │ │ │ -1909 __y->_M_right = _M_copy<_MoveValues>(_S_right(__x), │ │ │ │ -1910 __y, __node_gen); │ │ │ │ -1911 __p = __y; │ │ │ │ -1912 __x = _S_left(__x); │ │ │ │ -1913 } │ │ │ │ -1914 } │ │ │ │ -1915 __catch(...) │ │ │ │ -1916 { │ │ │ │ -1917 _M_erase(__top); │ │ │ │ -1918 __throw_exception_again; │ │ │ │ -1919 } │ │ │ │ -1920 return __top; │ │ │ │ -1921 } │ │ │ │ -1922 │ │ │ │ -1923 template │ │ │ │ -1925 void │ │ │ │ -1926 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -1927 _M_erase(_Link_type __x) │ │ │ │ -1928 { │ │ │ │ -1929 // Erase without rebalancing. │ │ │ │ -1930 while (__x != 0) │ │ │ │ -1931 { │ │ │ │ -1932 _M_erase(_S_right(__x)); │ │ │ │ -1933 _Link_type __y = _S_left(__x); │ │ │ │ -1934 _M_drop_node(__x); │ │ │ │ -1935 __x = __y; │ │ │ │ -1936 } │ │ │ │ -1937 } │ │ │ │ -1938 │ │ │ │ -1939 template │ │ │ │ -1941 typename _Rb_tree<_Key, _Val, _KeyOfValue, │ │ │ │ -1942 _Compare, _Alloc>::iterator │ │ │ │ -1943 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -1944 _M_lower_bound(_Link_type __x, _Base_ptr __y, │ │ │ │ -1945 const _Key& __k) │ │ │ │ -1946 { │ │ │ │ -1947 while (__x != 0) │ │ │ │ -1948 if (!_M_impl._M_key_compare(_S_key(__x), __k)) │ │ │ │ -1949 __y = __x, __x = _S_left(__x); │ │ │ │ -1950 else │ │ │ │ -1951 __x = _S_right(__x); │ │ │ │ -1952 return iterator(__y); │ │ │ │ -1953 } │ │ │ │ -1954 │ │ │ │ -1955 template │ │ │ │ -1957 typename _Rb_tree<_Key, _Val, _KeyOfValue, │ │ │ │ -1958 _Compare, _Alloc>::const_iterator │ │ │ │ -1959 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -1960 _M_lower_bound(_Const_Link_type __x, _Const_Base_ptr __y, │ │ │ │ -1961 const _Key& __k) const │ │ │ │ -1962 { │ │ │ │ -1963 while (__x != 0) │ │ │ │ -1964 if (!_M_impl._M_key_compare(_S_key(__x), __k)) │ │ │ │ -1965 __y = __x, __x = _S_left(__x); │ │ │ │ -1966 else │ │ │ │ -1967 __x = _S_right(__x); │ │ │ │ -1968 return const_iterator(__y); │ │ │ │ -1969 } │ │ │ │ +1771#if !defined(__cpp_lib_ranges_find_last) │ │ │ │ +1772# if (__cplusplus >= 202100L) │ │ │ │ +1773# define __glibcxx_ranges_find_last 202207L │ │ │ │ +1774# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_ranges_find_last) │ │ │ │ +1775# define __cpp_lib_ranges_find_last 202207L │ │ │ │ +1776# endif │ │ │ │ +1777# endif │ │ │ │ +1778#endif /* !defined(__cpp_lib_ranges_find_last) && defined │ │ │ │ +(__glibcxx_want_ranges_find_last) */ │ │ │ │ +1779#undef __glibcxx_want_ranges_find_last │ │ │ │ +1780 │ │ │ │ +1781#if !defined(__cpp_lib_constexpr_bitset) │ │ │ │ +1782# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && │ │ │ │ +(__cpp_constexpr_dynamic_alloc) │ │ │ │ +1783# define __glibcxx_constexpr_bitset 202202L │ │ │ │ +1784# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_constexpr_bitset) │ │ │ │ +1785# define __cpp_lib_constexpr_bitset 202202L │ │ │ │ +1786# endif │ │ │ │ +1787# endif │ │ │ │ +1788#endif /* !defined(__cpp_lib_constexpr_bitset) && defined │ │ │ │ +(__glibcxx_want_constexpr_bitset) */ │ │ │ │ +1789#undef __glibcxx_want_constexpr_bitset │ │ │ │ +1790 │ │ │ │ +1791#if !defined(__cpp_lib_stdatomic_h) │ │ │ │ +1792# if (__cplusplus >= 202100L) │ │ │ │ +1793# define __glibcxx_stdatomic_h 202011L │ │ │ │ +1794# if defined(__glibcxx_want_all) || defined(__glibcxx_want_stdatomic_h) │ │ │ │ +1795# define __cpp_lib_stdatomic_h 202011L │ │ │ │ +1796# endif │ │ │ │ +1797# endif │ │ │ │ +1798#endif /* !defined(__cpp_lib_stdatomic_h) && defined │ │ │ │ +(__glibcxx_want_stdatomic_h) */ │ │ │ │ +1799#undef __glibcxx_want_stdatomic_h │ │ │ │ +1800 │ │ │ │ +1801#if !defined(__cpp_lib_adaptor_iterator_pair_constructor) │ │ │ │ +1802# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED │ │ │ │ +1803# define __glibcxx_adaptor_iterator_pair_constructor 202106L │ │ │ │ +1804# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_adaptor_iterator_pair_constructor) │ │ │ │ +1805# define __cpp_lib_adaptor_iterator_pair_constructor 202106L │ │ │ │ +1806# endif │ │ │ │ +1807# endif │ │ │ │ +1808#endif /* !defined(__cpp_lib_adaptor_iterator_pair_constructor) && defined │ │ │ │ +(__glibcxx_want_adaptor_iterator_pair_constructor) */ │ │ │ │ +1809#undef __glibcxx_want_adaptor_iterator_pair_constructor │ │ │ │ +1810 │ │ │ │ +1811#if !defined(__cpp_lib_formatters) │ │ │ │ +1812# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED │ │ │ │ +1813# define __glibcxx_formatters 202302L │ │ │ │ +1814# if defined(__glibcxx_want_all) || defined(__glibcxx_want_formatters) │ │ │ │ +1815# define __cpp_lib_formatters 202302L │ │ │ │ +1816# endif │ │ │ │ +1817# endif │ │ │ │ +1818#endif /* !defined(__cpp_lib_formatters) && defined │ │ │ │ +(__glibcxx_want_formatters) */ │ │ │ │ +1819#undef __glibcxx_want_formatters │ │ │ │ +1820 │ │ │ │ +1821#if !defined(__cpp_lib_forward_like) │ │ │ │ +1822# if (__cplusplus >= 202100L) │ │ │ │ +1823# define __glibcxx_forward_like 202207L │ │ │ │ +1824# if defined(__glibcxx_want_all) || defined(__glibcxx_want_forward_like) │ │ │ │ +1825# define __cpp_lib_forward_like 202207L │ │ │ │ +1826# endif │ │ │ │ +1827# endif │ │ │ │ +1828#endif /* !defined(__cpp_lib_forward_like) && defined │ │ │ │ +(__glibcxx_want_forward_like) */ │ │ │ │ +1829#undef __glibcxx_want_forward_like │ │ │ │ +1830 │ │ │ │ +1831#if !defined(__cpp_lib_generator) │ │ │ │ +1832# if (__cplusplus >= 202100L) && (__glibcxx_coroutine && │ │ │ │ +__cpp_sized_deallocation) │ │ │ │ +1833# define __glibcxx_generator 202207L │ │ │ │ +1834# if defined(__glibcxx_want_all) || defined(__glibcxx_want_generator) │ │ │ │ +1835# define __cpp_lib_generator 202207L │ │ │ │ +1836# endif │ │ │ │ +1837# endif │ │ │ │ +1838#endif /* !defined(__cpp_lib_generator) && defined │ │ │ │ +(__glibcxx_want_generator) */ │ │ │ │ +1839#undef __glibcxx_want_generator │ │ │ │ +1840 │ │ │ │ +1841#if !defined(__cpp_lib_ios_noreplace) │ │ │ │ +1842# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED │ │ │ │ +1843# define __glibcxx_ios_noreplace 202207L │ │ │ │ +1844# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ios_noreplace) │ │ │ │ +1845# define __cpp_lib_ios_noreplace 202207L │ │ │ │ +1846# endif │ │ │ │ +1847# endif │ │ │ │ +1848#endif /* !defined(__cpp_lib_ios_noreplace) && defined │ │ │ │ +(__glibcxx_want_ios_noreplace) */ │ │ │ │ +1849#undef __glibcxx_want_ios_noreplace │ │ │ │ +1850 │ │ │ │ +1851#if !defined(__cpp_lib_move_only_function) │ │ │ │ +1852# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED │ │ │ │ +1853# define __glibcxx_move_only_function 202110L │ │ │ │ +1854# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_move_only_function) │ │ │ │ +1855# define __cpp_lib_move_only_function 202110L │ │ │ │ +1856# endif │ │ │ │ +1857# endif │ │ │ │ +1858#endif /* !defined(__cpp_lib_move_only_function) && defined │ │ │ │ +(__glibcxx_want_move_only_function) */ │ │ │ │ +1859#undef __glibcxx_want_move_only_function │ │ │ │ +1860 │ │ │ │ +1861#if !defined(__cpp_lib_out_ptr) │ │ │ │ +1862# if (__cplusplus >= 202100L) │ │ │ │ +1863# define __glibcxx_out_ptr 202311L │ │ │ │ +1864# if defined(__glibcxx_want_all) || defined(__glibcxx_want_out_ptr) │ │ │ │ +1865# define __cpp_lib_out_ptr 202311L │ │ │ │ +1866# endif │ │ │ │ +1867# endif │ │ │ │ +1868#endif /* !defined(__cpp_lib_out_ptr) && defined(__glibcxx_want_out_ptr) */ │ │ │ │ +1869#undef __glibcxx_want_out_ptr │ │ │ │ +1870 │ │ │ │ +1871#if !defined(__cpp_lib_print) │ │ │ │ +1872# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED │ │ │ │ +1873# define __glibcxx_print 202211L │ │ │ │ +1874# if defined(__glibcxx_want_all) || defined(__glibcxx_want_print) │ │ │ │ +1875# define __cpp_lib_print 202211L │ │ │ │ +1876# endif │ │ │ │ +1877# endif │ │ │ │ +1878#endif /* !defined(__cpp_lib_print) && defined(__glibcxx_want_print) */ │ │ │ │ +1879#undef __glibcxx_want_print │ │ │ │ +1880 │ │ │ │ +1881#if !defined(__cpp_lib_spanstream) │ │ │ │ +1882# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && (__glibcxx_span) │ │ │ │ +1883# define __glibcxx_spanstream 202106L │ │ │ │ +1884# if defined(__glibcxx_want_all) || defined(__glibcxx_want_spanstream) │ │ │ │ +1885# define __cpp_lib_spanstream 202106L │ │ │ │ +1886# endif │ │ │ │ +1887# endif │ │ │ │ +1888#endif /* !defined(__cpp_lib_spanstream) && defined │ │ │ │ +(__glibcxx_want_spanstream) */ │ │ │ │ +1889#undef __glibcxx_want_spanstream │ │ │ │ +1890 │ │ │ │ +1891#if !defined(__cpp_lib_stacktrace) │ │ │ │ +1892# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && │ │ │ │ +(_GLIBCXX_HAVE_STACKTRACE) │ │ │ │ +1893# define __glibcxx_stacktrace 202011L │ │ │ │ +1894# if defined(__glibcxx_want_all) || defined(__glibcxx_want_stacktrace) │ │ │ │ +1895# define __cpp_lib_stacktrace 202011L │ │ │ │ +1896# endif │ │ │ │ +1897# endif │ │ │ │ +1898#endif /* !defined(__cpp_lib_stacktrace) && defined │ │ │ │ +(__glibcxx_want_stacktrace) */ │ │ │ │ +1899#undef __glibcxx_want_stacktrace │ │ │ │ +1900 │ │ │ │ +1901#if !defined(__cpp_lib_string_contains) │ │ │ │ +1902# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED │ │ │ │ +1903# define __glibcxx_string_contains 202011L │ │ │ │ +1904# if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_contains) │ │ │ │ +1905# define __cpp_lib_string_contains 202011L │ │ │ │ +1906# endif │ │ │ │ +1907# endif │ │ │ │ +1908#endif /* !defined(__cpp_lib_string_contains) && defined │ │ │ │ +(__glibcxx_want_string_contains) */ │ │ │ │ +1909#undef __glibcxx_want_string_contains │ │ │ │ +1910 │ │ │ │ +1911#if !defined(__cpp_lib_string_resize_and_overwrite) │ │ │ │ +1912# if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED │ │ │ │ +1913# define __glibcxx_string_resize_and_overwrite 202110L │ │ │ │ +1914# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_string_resize_and_overwrite) │ │ │ │ +1915# define __cpp_lib_string_resize_and_overwrite 202110L │ │ │ │ +1916# endif │ │ │ │ +1917# endif │ │ │ │ +1918#endif /* !defined(__cpp_lib_string_resize_and_overwrite) && defined │ │ │ │ +(__glibcxx_want_string_resize_and_overwrite) */ │ │ │ │ +1919#undef __glibcxx_want_string_resize_and_overwrite │ │ │ │ +1920 │ │ │ │ +1921#if !defined(__cpp_lib_to_underlying) │ │ │ │ +1922# if (__cplusplus >= 202100L) │ │ │ │ +1923# define __glibcxx_to_underlying 202102L │ │ │ │ +1924# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_underlying) │ │ │ │ +1925# define __cpp_lib_to_underlying 202102L │ │ │ │ +1926# endif │ │ │ │ +1927# endif │ │ │ │ +1928#endif /* !defined(__cpp_lib_to_underlying) && defined │ │ │ │ +(__glibcxx_want_to_underlying) */ │ │ │ │ +1929#undef __glibcxx_want_to_underlying │ │ │ │ +1930 │ │ │ │ +1931#if !defined(__cpp_lib_tuple_like) │ │ │ │ +1932# if (__cplusplus >= 202100L) │ │ │ │ +1933# define __glibcxx_tuple_like 202207L │ │ │ │ +1934# if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuple_like) │ │ │ │ +1935# define __cpp_lib_tuple_like 202207L │ │ │ │ +1936# endif │ │ │ │ +1937# endif │ │ │ │ +1938#endif /* !defined(__cpp_lib_tuple_like) && defined │ │ │ │ +(__glibcxx_want_tuple_like) */ │ │ │ │ +1939#undef __glibcxx_want_tuple_like │ │ │ │ +1940 │ │ │ │ +1941#if !defined(__cpp_lib_unreachable) │ │ │ │ +1942# if (__cplusplus >= 202100L) │ │ │ │ +1943# define __glibcxx_unreachable 202202L │ │ │ │ +1944# if defined(__glibcxx_want_all) || defined(__glibcxx_want_unreachable) │ │ │ │ +1945# define __cpp_lib_unreachable 202202L │ │ │ │ +1946# endif │ │ │ │ +1947# endif │ │ │ │ +1948#endif /* !defined(__cpp_lib_unreachable) && defined │ │ │ │ +(__glibcxx_want_unreachable) */ │ │ │ │ +1949#undef __glibcxx_want_unreachable │ │ │ │ +1950 │ │ │ │ +1951#if !defined(__cpp_lib_fstream_native_handle) │ │ │ │ +1952# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED │ │ │ │ +1953# define __glibcxx_fstream_native_handle 202306L │ │ │ │ +1954# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_fstream_native_handle) │ │ │ │ +1955# define __cpp_lib_fstream_native_handle 202306L │ │ │ │ +1956# endif │ │ │ │ +1957# endif │ │ │ │ +1958#endif /* !defined(__cpp_lib_fstream_native_handle) && defined │ │ │ │ +(__glibcxx_want_fstream_native_handle) */ │ │ │ │ +1959#undef __glibcxx_want_fstream_native_handle │ │ │ │ +1960 │ │ │ │ +1961#if !defined(__cpp_lib_ratio) │ │ │ │ +1962# if (__cplusplus > 202302L) │ │ │ │ +1963# define __glibcxx_ratio 202306L │ │ │ │ +1964# if defined(__glibcxx_want_all) || defined(__glibcxx_want_ratio) │ │ │ │ +1965# define __cpp_lib_ratio 202306L │ │ │ │ +1966# endif │ │ │ │ +1967# endif │ │ │ │ +1968#endif /* !defined(__cpp_lib_ratio) && defined(__glibcxx_want_ratio) */ │ │ │ │ +1969#undef __glibcxx_want_ratio │ │ │ │ 1970 │ │ │ │ -1971 template │ │ │ │ -1973 typename _Rb_tree<_Key, _Val, _KeyOfValue, │ │ │ │ -1974 _Compare, _Alloc>::iterator │ │ │ │ -1975 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -1976 _M_upper_bound(_Link_type __x, _Base_ptr __y, │ │ │ │ -1977 const _Key& __k) │ │ │ │ -1978 { │ │ │ │ -1979 while (__x != 0) │ │ │ │ -1980 if (_M_impl._M_key_compare(__k, _S_key(__x))) │ │ │ │ -1981 __y = __x, __x = _S_left(__x); │ │ │ │ -1982 else │ │ │ │ -1983 __x = _S_right(__x); │ │ │ │ -1984 return iterator(__y); │ │ │ │ -1985 } │ │ │ │ -1986 │ │ │ │ -1987 template │ │ │ │ -1989 typename _Rb_tree<_Key, _Val, _KeyOfValue, │ │ │ │ -1990 _Compare, _Alloc>::const_iterator │ │ │ │ -1991 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -1992 _M_upper_bound(_Const_Link_type __x, _Const_Base_ptr __y, │ │ │ │ -1993 const _Key& __k) const │ │ │ │ -1994 { │ │ │ │ -1995 while (__x != 0) │ │ │ │ -1996 if (_M_impl._M_key_compare(__k, _S_key(__x))) │ │ │ │ -1997 __y = __x, __x = _S_left(__x); │ │ │ │ -1998 else │ │ │ │ -1999 __x = _S_right(__x); │ │ │ │ -2000 return const_iterator(__y); │ │ │ │ -2001 } │ │ │ │ -2002 │ │ │ │ -2003 template │ │ │ │ -2005 pair::iterator, │ │ │ │ -2007 typename _Rb_tree<_Key, _Val, _KeyOfValue, │ │ │ │ -2008 _Compare, _Alloc>::iterator> │ │ │ │ -2009 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2010 equal_range(const _Key& __k) │ │ │ │ -2011 { │ │ │ │ -2012 _Link_type __x = _M_begin(); │ │ │ │ -2013 _Base_ptr __y = _M_end(); │ │ │ │ -2014 while (__x != 0) │ │ │ │ -2015 { │ │ │ │ -2016 if (_M_impl._M_key_compare(_S_key(__x), __k)) │ │ │ │ -2017 __x = _S_right(__x); │ │ │ │ -2018 else if (_M_impl._M_key_compare(__k, _S_key(__x))) │ │ │ │ -2019 __y = __x, __x = _S_left(__x); │ │ │ │ -2020 else │ │ │ │ -2021 { │ │ │ │ -2022 _Link_type __xu(__x); │ │ │ │ -2023 _Base_ptr __yu(__y); │ │ │ │ -2024 __y = __x, __x = _S_left(__x); │ │ │ │ -2025 __xu = _S_right(__xu); │ │ │ │ -2026 return pair(_M_lower_bound(__x, __y, __k), │ │ │ │ -2028 _M_upper_bound(__xu, __yu, __k)); │ │ │ │ -2029 } │ │ │ │ -2030 } │ │ │ │ -2031 return pair(iterator(__y), │ │ │ │ -2032 iterator(__y)); │ │ │ │ -2033 } │ │ │ │ -2034 │ │ │ │ -2035 template │ │ │ │ -2037 pair::const_iterator, │ │ │ │ -2039 typename _Rb_tree<_Key, _Val, _KeyOfValue, │ │ │ │ -2040 _Compare, _Alloc>::const_iterator> │ │ │ │ -2041 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2042 equal_range(const _Key& __k) const │ │ │ │ -2043 { │ │ │ │ -2044 _Const_Link_type __x = _M_begin(); │ │ │ │ -2045 _Const_Base_ptr __y = _M_end(); │ │ │ │ -2046 while (__x != 0) │ │ │ │ -2047 { │ │ │ │ -2048 if (_M_impl._M_key_compare(_S_key(__x), __k)) │ │ │ │ -2049 __x = _S_right(__x); │ │ │ │ -2050 else if (_M_impl._M_key_compare(__k, _S_key(__x))) │ │ │ │ -2051 __y = __x, __x = _S_left(__x); │ │ │ │ -2052 else │ │ │ │ -2053 { │ │ │ │ -2054 _Const_Link_type __xu(__x); │ │ │ │ -2055 _Const_Base_ptr __yu(__y); │ │ │ │ -2056 __y = __x, __x = _S_left(__x); │ │ │ │ -2057 __xu = _S_right(__xu); │ │ │ │ -2058 return pair(_M_lower_bound(__x, __y, __k), │ │ │ │ -2060 _M_upper_bound(__xu, __yu, __k)); │ │ │ │ -2061 } │ │ │ │ -2062 } │ │ │ │ -2063 return pair(const_iterator(__y), │ │ │ │ -2064 const_iterator(__y)); │ │ │ │ -2065 } │ │ │ │ -2066 │ │ │ │ -2067 template │ │ │ │ -2069 void │ │ │ │ -2070 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2071 swap(_Rb_tree& __t) │ │ │ │ -2072 _GLIBCXX_NOEXCEPT_IF(__is_nothrow_swappable<_Compare>::value) │ │ │ │ -2073 { │ │ │ │ -2074 if (_M_root() == 0) │ │ │ │ -2075 { │ │ │ │ -2076 if (__t._M_root() != 0) │ │ │ │ -2077 _M_impl._M_move_data(__t._M_impl); │ │ │ │ -2078 } │ │ │ │ -2079 else if (__t._M_root() == 0) │ │ │ │ -2080 __t._M_impl._M_move_data(_M_impl); │ │ │ │ -2081 else │ │ │ │ -2082 { │ │ │ │ -2083 std::swap(_M_root(),__t._M_root()); │ │ │ │ -2084 std::swap(_M_leftmost(),__t._M_leftmost()); │ │ │ │ -2085 std::swap(_M_rightmost(),__t._M_rightmost()); │ │ │ │ -2086 │ │ │ │ -2087 _M_root()->_M_parent = _M_end(); │ │ │ │ -2088 __t._M_root()->_M_parent = __t._M_end(); │ │ │ │ -2089 std::swap(this->_M_impl._M_node_count, __t._M_impl._M_node_count); │ │ │ │ -2090 } │ │ │ │ -2091 // No need to swap header's color as it does not change. │ │ │ │ -2092 │ │ │ │ -2093 using std::swap; │ │ │ │ -2094 swap(this->_M_impl._M_key_compare, __t._M_impl._M_key_compare); │ │ │ │ -2095 │ │ │ │ -2096 _Alloc_traits::_S_on_swap(_M_get_Node_allocator(), │ │ │ │ -2097 __t._M_get_Node_allocator()); │ │ │ │ -2098 } │ │ │ │ -2099 │ │ │ │ -2100 template │ │ │ │ -2102 pair::_Base_ptr, │ │ │ │ -2104 typename _Rb_tree<_Key, _Val, _KeyOfValue, │ │ │ │ -2105 _Compare, _Alloc>::_Base_ptr> │ │ │ │ -2106 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2107 _M_get_insert_unique_pos(const key_type& __k) │ │ │ │ -2108 { │ │ │ │ -2109 typedef pair<_Base_ptr, _Base_ptr> _Res; │ │ │ │ -2110 _Link_type __x = _M_begin(); │ │ │ │ -2111 _Base_ptr __y = _M_end(); │ │ │ │ -2112 bool __comp = true; │ │ │ │ -2113 while (__x != 0) │ │ │ │ -2114 { │ │ │ │ -2115 __y = __x; │ │ │ │ -2116 __comp = _M_impl._M_key_compare(__k, _S_key(__x)); │ │ │ │ -2117 __x = __comp ? _S_left(__x) : _S_right(__x); │ │ │ │ -2118 } │ │ │ │ -2119 iterator __j = iterator(__y); │ │ │ │ -2120 if (__comp) │ │ │ │ -2121 { │ │ │ │ -2122 if (__j == _b_e_g_i_n()) │ │ │ │ -2123 return _Res(__x, __y); │ │ │ │ -2124 else │ │ │ │ -2125 --__j; │ │ │ │ -2126 } │ │ │ │ -2127 if (_M_impl._M_key_compare(_S_key(__j._M_node), __k)) │ │ │ │ -2128 return _Res(__x, __y); │ │ │ │ -2129 return _Res(__j._M_node, 0); │ │ │ │ -2130 } │ │ │ │ -2131 │ │ │ │ -2132 template │ │ │ │ -2134 pair::_Base_ptr, │ │ │ │ -2136 typename _Rb_tree<_Key, _Val, _KeyOfValue, │ │ │ │ -2137 _Compare, _Alloc>::_Base_ptr> │ │ │ │ -2138 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2139 _M_get_insert_equal_pos(const key_type& __k) │ │ │ │ -2140 { │ │ │ │ -2141 typedef pair<_Base_ptr, _Base_ptr> _Res; │ │ │ │ -2142 _Link_type __x = _M_begin(); │ │ │ │ -2143 _Base_ptr __y = _M_end(); │ │ │ │ -2144 while (__x != 0) │ │ │ │ -2145 { │ │ │ │ -2146 __y = __x; │ │ │ │ -2147 __x = _M_impl._M_key_compare(__k, _S_key(__x)) ? │ │ │ │ -2148 _S_left(__x) : _S_right(__x); │ │ │ │ -2149 } │ │ │ │ -2150 return _Res(__x, __y); │ │ │ │ -2151 } │ │ │ │ -2152 │ │ │ │ -2153 template │ │ │ │ -2155#if __cplusplus >= 201103L │ │ │ │ -2156 template │ │ │ │ -2157#endif │ │ │ │ -2158 pair::iterator, bool> │ │ │ │ -2160 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2161#if __cplusplus >= 201103L │ │ │ │ -2162 _M_insert_unique(_Arg&& __v) │ │ │ │ -2163#else │ │ │ │ -2164 _M_insert_unique(const _Val& __v) │ │ │ │ -2165#endif │ │ │ │ -2166 { │ │ │ │ -2167 typedef pair _Res; │ │ │ │ -2168 pair<_Base_ptr, _Base_ptr> __res │ │ │ │ -2169 = _M_get_insert_unique_pos(_KeyOfValue()(__v)); │ │ │ │ -2170 │ │ │ │ -2171 if (__res.second) │ │ │ │ -2172 { │ │ │ │ -2173 _Alloc_node __an(*this); │ │ │ │ -2174 return _Res(_M_insert_(__res.first, __res.second, │ │ │ │ -2175 _GLIBCXX_FORWARD(_Arg, __v), __an), │ │ │ │ -2176 true); │ │ │ │ -2177 } │ │ │ │ -2178 │ │ │ │ -2179 return _Res(iterator(__res.first), false); │ │ │ │ -2180 } │ │ │ │ -2181 │ │ │ │ -2182 template │ │ │ │ -2184#if __cplusplus >= 201103L │ │ │ │ -2185 template │ │ │ │ -2186#endif │ │ │ │ -2187 typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator │ │ │ │ -2188 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2189#if __cplusplus >= 201103L │ │ │ │ -2190 _M_insert_equal(_Arg&& __v) │ │ │ │ -2191#else │ │ │ │ -2192 _M_insert_equal(const _Val& __v) │ │ │ │ -2193#endif │ │ │ │ -2194 { │ │ │ │ -2195 pair<_Base_ptr, _Base_ptr> __res │ │ │ │ -2196 = _M_get_insert_equal_pos(_KeyOfValue()(__v)); │ │ │ │ -2197 _Alloc_node __an(*this); │ │ │ │ -2198 return _M_insert_(__res.first, __res.second, │ │ │ │ -2199 _GLIBCXX_FORWARD(_Arg, __v), __an); │ │ │ │ -2200 } │ │ │ │ -2201 │ │ │ │ -2202 template │ │ │ │ -2204 pair::_Base_ptr, │ │ │ │ -2206 typename _Rb_tree<_Key, _Val, _KeyOfValue, │ │ │ │ -2207 _Compare, _Alloc>::_Base_ptr> │ │ │ │ -2208 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2209 _M_get_insert_hint_unique_pos(const_iterator __position, │ │ │ │ -2210 const key_type& __k) │ │ │ │ -2211 { │ │ │ │ -2212 iterator __pos = __position._M_const_cast(); │ │ │ │ -2213 typedef pair<_Base_ptr, _Base_ptr> _Res; │ │ │ │ -2214 │ │ │ │ -2215 // end() │ │ │ │ -2216 if (__pos._M_node == _M_end()) │ │ │ │ -2217 { │ │ │ │ -2218 if (_s_i_z_e() > 0 │ │ │ │ -2219 && _M_impl._M_key_compare(_S_key(_M_rightmost()), __k)) │ │ │ │ -2220 return _Res(0, _M_rightmost()); │ │ │ │ -2221 else │ │ │ │ -2222 return _M_get_insert_unique_pos(__k); │ │ │ │ -2223 } │ │ │ │ -2224 else if (_M_impl._M_key_compare(__k, _S_key(__pos._M_node))) │ │ │ │ -2225 { │ │ │ │ -2226 // First, try before... │ │ │ │ -2227 iterator __before = __pos; │ │ │ │ -2228 if (__pos._M_node == _M_leftmost()) // begin() │ │ │ │ -2229 return _Res(_M_leftmost(), _M_leftmost()); │ │ │ │ -2230 else if (_M_impl._M_key_compare(_S_key((--__before)._M_node), __k)) │ │ │ │ -2231 { │ │ │ │ -2232 if (_S_right(__before._M_node) == 0) │ │ │ │ -2233 return _Res(0, __before._M_node); │ │ │ │ -2234 else │ │ │ │ -2235 return _Res(__pos._M_node, __pos._M_node); │ │ │ │ -2236 } │ │ │ │ -2237 else │ │ │ │ -2238 return _M_get_insert_unique_pos(__k); │ │ │ │ -2239 } │ │ │ │ -2240 else if (_M_impl._M_key_compare(_S_key(__pos._M_node), __k)) │ │ │ │ -2241 { │ │ │ │ -2242 // ... then try after. │ │ │ │ -2243 iterator __after = __pos; │ │ │ │ -2244 if (__pos._M_node == _M_rightmost()) │ │ │ │ -2245 return _Res(0, _M_rightmost()); │ │ │ │ -2246 else if (_M_impl._M_key_compare(__k, _S_key((++__after)._M_node))) │ │ │ │ -2247 { │ │ │ │ -2248 if (_S_right(__pos._M_node) == 0) │ │ │ │ -2249 return _Res(0, __pos._M_node); │ │ │ │ -2250 else │ │ │ │ -2251 return _Res(__after._M_node, __after._M_node); │ │ │ │ -2252 } │ │ │ │ -2253 else │ │ │ │ -2254 return _M_get_insert_unique_pos(__k); │ │ │ │ -2255 } │ │ │ │ -2256 else │ │ │ │ -2257 // Equivalent keys. │ │ │ │ -2258 return _Res(__pos._M_node, 0); │ │ │ │ -2259 } │ │ │ │ -2260 │ │ │ │ -2261 template │ │ │ │ -2263#if __cplusplus >= 201103L │ │ │ │ -2264 template │ │ │ │ -2265#else │ │ │ │ -2266 template │ │ │ │ -2267#endif │ │ │ │ -2268 typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator │ │ │ │ -2269 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2270 _M_insert_unique_(const_iterator __position, │ │ │ │ -2271#if __cplusplus >= 201103L │ │ │ │ -2272 _Arg&& __v, │ │ │ │ -2273#else │ │ │ │ -2274 const _Val& __v, │ │ │ │ -2275#endif │ │ │ │ -2276 _NodeGen& __node_gen) │ │ │ │ -2277 { │ │ │ │ -2278 pair<_Base_ptr, _Base_ptr> __res │ │ │ │ -2279 = _M_get_insert_hint_unique_pos(__position, _KeyOfValue()(__v)); │ │ │ │ -2280 │ │ │ │ -2281 if (__res.second) │ │ │ │ -2282 return _M_insert_(__res.first, __res.second, │ │ │ │ -2283 _GLIBCXX_FORWARD(_Arg, __v), │ │ │ │ -2284 __node_gen); │ │ │ │ -2285 return iterator(__res.first); │ │ │ │ -2286 } │ │ │ │ -2287 │ │ │ │ -2288 template │ │ │ │ -2290 pair::_Base_ptr, │ │ │ │ -2292 typename _Rb_tree<_Key, _Val, _KeyOfValue, │ │ │ │ -2293 _Compare, _Alloc>::_Base_ptr> │ │ │ │ -2294 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2295 _M_get_insert_hint_equal_pos(const_iterator __position, const key_type& │ │ │ │ -__k) │ │ │ │ -2296 { │ │ │ │ -2297 iterator __pos = __position._M_const_cast(); │ │ │ │ -2298 typedef pair<_Base_ptr, _Base_ptr> _Res; │ │ │ │ -2299 │ │ │ │ -2300 // end() │ │ │ │ -2301 if (__pos._M_node == _M_end()) │ │ │ │ -2302 { │ │ │ │ -2303 if (_s_i_z_e() > 0 │ │ │ │ -2304 && !_M_impl._M_key_compare(__k, _S_key(_M_rightmost()))) │ │ │ │ -2305 return _Res(0, _M_rightmost()); │ │ │ │ -2306 else │ │ │ │ -2307 return _M_get_insert_equal_pos(__k); │ │ │ │ -2308 } │ │ │ │ -2309 else if (!_M_impl._M_key_compare(_S_key(__pos._M_node), __k)) │ │ │ │ -2310 { │ │ │ │ -2311 // First, try before... │ │ │ │ -2312 iterator __before = __pos; │ │ │ │ -2313 if (__pos._M_node == _M_leftmost()) // begin() │ │ │ │ -2314 return _Res(_M_leftmost(), _M_leftmost()); │ │ │ │ -2315 else if (!_M_impl._M_key_compare(__k, _S_key((--__before)._M_node))) │ │ │ │ -2316 { │ │ │ │ -2317 if (_S_right(__before._M_node) == 0) │ │ │ │ -2318 return _Res(0, __before._M_node); │ │ │ │ -2319 else │ │ │ │ -2320 return _Res(__pos._M_node, __pos._M_node); │ │ │ │ -2321 } │ │ │ │ -2322 else │ │ │ │ -2323 return _M_get_insert_equal_pos(__k); │ │ │ │ -2324 } │ │ │ │ -2325 else │ │ │ │ -2326 { │ │ │ │ -2327 // ... then try after. │ │ │ │ -2328 iterator __after = __pos; │ │ │ │ -2329 if (__pos._M_node == _M_rightmost()) │ │ │ │ -2330 return _Res(0, _M_rightmost()); │ │ │ │ -2331 else if (!_M_impl._M_key_compare(_S_key((++__after)._M_node), __k)) │ │ │ │ -2332 { │ │ │ │ -2333 if (_S_right(__pos._M_node) == 0) │ │ │ │ -2334 return _Res(0, __pos._M_node); │ │ │ │ -2335 else │ │ │ │ -2336 return _Res(__after._M_node, __after._M_node); │ │ │ │ -2337 } │ │ │ │ -2338 else │ │ │ │ -2339 return _Res(0, 0); │ │ │ │ -2340 } │ │ │ │ -2341 } │ │ │ │ -2342 │ │ │ │ -2343 template │ │ │ │ -2345#if __cplusplus >= 201103L │ │ │ │ -2346 template │ │ │ │ -2347#else │ │ │ │ -2348 template │ │ │ │ -2349#endif │ │ │ │ -2350 typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator │ │ │ │ -2351 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2352 _M_insert_equal_(const_iterator __position, │ │ │ │ -2353#if __cplusplus >= 201103L │ │ │ │ -2354 _Arg&& __v, │ │ │ │ -2355#else │ │ │ │ -2356 const _Val& __v, │ │ │ │ -2357#endif │ │ │ │ -2358 _NodeGen& __node_gen) │ │ │ │ -2359 { │ │ │ │ -2360 pair<_Base_ptr, _Base_ptr> __res │ │ │ │ -2361 = _M_get_insert_hint_equal_pos(__position, _KeyOfValue()(__v)); │ │ │ │ -2362 │ │ │ │ -2363 if (__res.second) │ │ │ │ -2364 return _M_insert_(__res.first, __res.second, │ │ │ │ -2365 _GLIBCXX_FORWARD(_Arg, __v), │ │ │ │ -2366 __node_gen); │ │ │ │ -2367 │ │ │ │ -2368 return _M_insert_equal_lower(_GLIBCXX_FORWARD(_Arg, __v)); │ │ │ │ -2369 } │ │ │ │ -2370 │ │ │ │ -2371#if __cplusplus >= 201103L │ │ │ │ -2372 template │ │ │ │ -2374 auto │ │ │ │ -2375 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2376 _M_insert_node(_Base_ptr __x, _Base_ptr __p, _Link_type __z) │ │ │ │ -2377 -> iterator │ │ │ │ -2378 { │ │ │ │ -2379 bool __insert_left = (__x != 0 || __p == _M_end() │ │ │ │ -2380 || _M_impl._M_key_compare(_S_key(__z), │ │ │ │ -2381 _S_key(__p))); │ │ │ │ -2382 │ │ │ │ -2383 _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, │ │ │ │ -2384 this->_M_impl._M_header); │ │ │ │ -2385 ++_M_impl._M_node_count; │ │ │ │ -2386 return iterator(__z); │ │ │ │ -2387 } │ │ │ │ -2388 │ │ │ │ -2389 template │ │ │ │ -2391 auto │ │ │ │ -2392 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2393 _M_insert_lower_node(_Base_ptr __p, _Link_type __z) │ │ │ │ -2394 -> iterator │ │ │ │ -2395 { │ │ │ │ -2396 bool __insert_left = (__p == _M_end() │ │ │ │ -2397 || !_M_impl._M_key_compare(_S_key(__p), │ │ │ │ -2398 _S_key(__z))); │ │ │ │ -2399 │ │ │ │ -2400 _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, │ │ │ │ -2401 this->_M_impl._M_header); │ │ │ │ -2402 ++_M_impl._M_node_count; │ │ │ │ -2403 return iterator(__z); │ │ │ │ -2404 } │ │ │ │ -2405 │ │ │ │ -2406 template │ │ │ │ -2408 auto │ │ │ │ -2409 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2410 _M_insert_equal_lower_node(_Link_type __z) │ │ │ │ -2411 -> iterator │ │ │ │ -2412 { │ │ │ │ -2413 _Link_type __x = _M_begin(); │ │ │ │ -2414 _Base_ptr __y = _M_end(); │ │ │ │ -2415 while (__x != 0) │ │ │ │ -2416 { │ │ │ │ -2417 __y = __x; │ │ │ │ -2418 __x = !_M_impl._M_key_compare(_S_key(__x), _S_key(__z)) ? │ │ │ │ -2419 _S_left(__x) : _S_right(__x); │ │ │ │ -2420 } │ │ │ │ -2421 return _M_insert_lower_node(__y, __z); │ │ │ │ -2422 } │ │ │ │ -2423 │ │ │ │ -2424 template │ │ │ │ -2426 template │ │ │ │ -2427 auto │ │ │ │ -2428 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2429 _M_emplace_unique(_Args&&... __args) │ │ │ │ -2430 -> pair │ │ │ │ -2431 { │ │ │ │ -2432 _Auto_node __z(*this, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ -2433 auto __res = _M_get_insert_unique_pos(__z._M_key()); │ │ │ │ -2434 if (__res.second) │ │ │ │ -2435 return {__z._M_insert(__res), true}; │ │ │ │ -2436 return {iterator(__res.first), false}; │ │ │ │ -2437 } │ │ │ │ -2438 │ │ │ │ -2439 template │ │ │ │ -2441 template │ │ │ │ -2442 auto │ │ │ │ -2443 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2444 _M_emplace_equal(_Args&&... __args) │ │ │ │ -2445 -> iterator │ │ │ │ -2446 { │ │ │ │ -2447 _Auto_node __z(*this, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ -2448 auto __res = _M_get_insert_equal_pos(__z._M_key()); │ │ │ │ -2449 return __z._M_insert(__res); │ │ │ │ -2450 } │ │ │ │ -2451 │ │ │ │ -2452 template │ │ │ │ -2454 template │ │ │ │ -2455 auto │ │ │ │ -2456 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2457 _M_emplace_hint_unique(const_iterator __pos, _Args&&... __args) │ │ │ │ -2458 -> iterator │ │ │ │ -2459 { │ │ │ │ -2460 _Auto_node __z(*this, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ -2461 auto __res = _M_get_insert_hint_unique_pos(__pos, __z._M_key()); │ │ │ │ -2462 if (__res.second) │ │ │ │ -2463 return __z._M_insert(__res); │ │ │ │ -2464 return iterator(__res.first); │ │ │ │ -2465 } │ │ │ │ -2466 │ │ │ │ -2467 template │ │ │ │ -2469 template │ │ │ │ -2470 auto │ │ │ │ -2471 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2472 _M_emplace_hint_equal(const_iterator __pos, _Args&&... __args) │ │ │ │ -2473 -> iterator │ │ │ │ -2474 { │ │ │ │ -2475 _Auto_node __z(*this, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ -2476 auto __res = _M_get_insert_hint_equal_pos(__pos, __z._M_key()); │ │ │ │ -2477 if (__res.second) │ │ │ │ -2478 return __z._M_insert(__res); │ │ │ │ -2479 return __z._M_insert_equal_lower(); │ │ │ │ -2480 } │ │ │ │ -2481#endif │ │ │ │ -2482 │ │ │ │ -2483 │ │ │ │ -2484 template │ │ │ │ -2486 void │ │ │ │ -2487 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2488 _M_erase_aux(const_iterator __position) │ │ │ │ -2489 { │ │ │ │ -2490 _Link_type __y = │ │ │ │ -2491 static_cast<_Link_type>(_Rb_tree_rebalance_for_erase │ │ │ │ -2492 (const_cast<_Base_ptr>(__position._M_node), │ │ │ │ -2493 this->_M_impl._M_header)); │ │ │ │ -2494 _M_drop_node(__y); │ │ │ │ -2495 --_M_impl._M_node_count; │ │ │ │ -2496 } │ │ │ │ -2497 │ │ │ │ -2498 template │ │ │ │ -2500 void │ │ │ │ -2501 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2502 _M_erase_aux(const_iterator __first, const_iterator __last) │ │ │ │ -2503 { │ │ │ │ -2504 if (__first == _b_e_g_i_n() && __last == _e_n_d()) │ │ │ │ -2505 clear(); │ │ │ │ -2506 else │ │ │ │ -2507 while (__first != __last) │ │ │ │ -2508 _M_erase_aux(__first++); │ │ │ │ -2509 } │ │ │ │ -2510 │ │ │ │ -2511 template │ │ │ │ -2513 typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type │ │ │ │ -2514 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2515 erase(const _Key& __x) │ │ │ │ -2516 { │ │ │ │ -2517 pair __p = equal_range(__x); │ │ │ │ -2518 const size_type __old_size = _s_i_z_e(); │ │ │ │ -2519 _M_erase_aux(__p.first, __p.second); │ │ │ │ -2520 return __old_size - _s_i_z_e(); │ │ │ │ -2521 } │ │ │ │ -2522 │ │ │ │ -2523 template │ │ │ │ -2525 typename _Rb_tree<_Key, _Val, _KeyOfValue, │ │ │ │ -2526 _Compare, _Alloc>::iterator │ │ │ │ -2527 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2528 find(const _Key& __k) │ │ │ │ -2529 { │ │ │ │ -2530 iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k); │ │ │ │ -2531 return (__j == _e_n_d() │ │ │ │ -2532 || _M_impl._M_key_compare(__k, │ │ │ │ -2533 _S_key(__j._M_node))) ? _e_n_d() : __j; │ │ │ │ -2534 } │ │ │ │ -2535 │ │ │ │ -2536 template │ │ │ │ -2538 typename _Rb_tree<_Key, _Val, _KeyOfValue, │ │ │ │ -2539 _Compare, _Alloc>::const_iterator │ │ │ │ -2540 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2541 find(const _Key& __k) const │ │ │ │ -2542 { │ │ │ │ -2543 const_iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k); │ │ │ │ -2544 return (__j == _e_n_d() │ │ │ │ -2545 || _M_impl._M_key_compare(__k, │ │ │ │ -2546 _S_key(__j._M_node))) ? _e_n_d() : __j; │ │ │ │ -2547 } │ │ │ │ -2548 │ │ │ │ -2549 template │ │ │ │ -2551 typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type │ │ │ │ -2552 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: │ │ │ │ -2553 count(const _Key& __k) const │ │ │ │ -2554 { │ │ │ │ -2555 pair __p = equal_range(__k); │ │ │ │ -2556 const size_type __n = _s_t_d_:_:_d_i_s_t_a_n_c_e(__p.first, __p.second); │ │ │ │ -2557 return __n; │ │ │ │ -2558 } │ │ │ │ -2559 │ │ │ │ -2560 _GLIBCXX_PURE unsigned int │ │ │ │ -2561 _Rb_tree_black_count(const _Rb_tree_node_base* __node, │ │ │ │ -2562 const _Rb_tree_node_base* __root) throw (); │ │ │ │ -2563 │ │ │ │ -2564 template │ │ │ │ -2566 bool │ │ │ │ -2567 _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::__rb_verify() const │ │ │ │ -2568 { │ │ │ │ -2569 if (_M_impl._M_node_count == 0 || _b_e_g_i_n() == _e_n_d()) │ │ │ │ -2570 return _M_impl._M_node_count == 0 && _b_e_g_i_n() == _e_n_d() │ │ │ │ -2571 && this->_M_impl._M_header._M_left == _M_end() │ │ │ │ -2572 && this->_M_impl._M_header._M_right == _M_end(); │ │ │ │ -2573 │ │ │ │ -2574 unsigned int __len = _Rb_tree_black_count(_M_leftmost(), _M_root()); │ │ │ │ -2575 for (const_iterator __it = _b_e_g_i_n(); __it != _e_n_d(); ++__it) │ │ │ │ -2576 { │ │ │ │ -2577 _Const_Link_type __x = static_cast<_Const_Link_type>(__it._M_node); │ │ │ │ -2578 _Const_Link_type __L = _S_left(__x); │ │ │ │ -2579 _Const_Link_type __R = _S_right(__x); │ │ │ │ -2580 │ │ │ │ -2581 if (__x->_M_color == _S_red) │ │ │ │ -2582 if ((__L && __L->_M_color == _S_red) │ │ │ │ -2583 || (__R && __R->_M_color == _S_red)) │ │ │ │ -2584 return false; │ │ │ │ -2585 │ │ │ │ -2586 if (__L && _M_impl._M_key_compare(_S_key(__x), _S_key(__L))) │ │ │ │ -2587 return false; │ │ │ │ -2588 if (__R && _M_impl._M_key_compare(_S_key(__R), _S_key(__x))) │ │ │ │ -2589 return false; │ │ │ │ -2590 │ │ │ │ -2591 if (!__L && !__R && _Rb_tree_black_count(__x, _M_root()) != __len) │ │ │ │ -2592 return false; │ │ │ │ -2593 } │ │ │ │ -2594 │ │ │ │ -2595 if (_M_leftmost() != _Rb_tree_node_base::_S_minimum(_M_root())) │ │ │ │ -2596 return false; │ │ │ │ -2597 if (_M_rightmost() != _Rb_tree_node_base::_S_maximum(_M_root())) │ │ │ │ -2598 return false; │ │ │ │ -2599 return true; │ │ │ │ -2600 } │ │ │ │ -2601 │ │ │ │ -2602#ifdef __glibcxx_node_extract // >= C++17 │ │ │ │ -2603 // Allow access to internals of compatible _Rb_tree specializations. │ │ │ │ -2604 template │ │ │ │ -2606 struct _Rb_tree_merge_helper<_Rb_tree<_Key, _Val, _Sel, _Cmp1, _Alloc>, │ │ │ │ -2607 _Cmp2> │ │ │ │ -2608 { │ │ │ │ -2609 private: │ │ │ │ -2610 friend class _Rb_tree<_Key, _Val, _Sel, _Cmp1, _Alloc>; │ │ │ │ -2611 │ │ │ │ -2612 static auto& │ │ │ │ -2613 _S_get_impl(_Rb_tree<_Key, _Val, _Sel, _Cmp2, _Alloc>& __tree) │ │ │ │ -2614 { return __tree._M_impl; } │ │ │ │ -2615 }; │ │ │ │ -2616#endif // C++17 │ │ │ │ -2617 │ │ │ │ -2618_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -2619} // namespace │ │ │ │ -2620 │ │ │ │ -2621#endif │ │ │ │ -_n_o_d_e___h_a_n_d_l_e_._h │ │ │ │ -_s_t_l___f_u_n_c_t_i_o_n_._h │ │ │ │ -_s_t_l___a_l_g_o_b_a_s_e_._h │ │ │ │ -_c_p_p___t_y_p_e___t_r_a_i_t_s_._h │ │ │ │ -_a_l_l_o_c_a_t_o_r_._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_2_2 │ │ │ │ -_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_0_0 │ │ │ │ -_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_1 │ │ │ │ -_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_4 │ │ │ │ -_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_7 │ │ │ │ -_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_1 │ │ │ │ -_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_1 │ │ │ │ -_s_t_d_:_:_e_n_d │ │ │ │ -_Tp * end(valarray< _Tp > &__va) noexcept │ │ │ │ -Return an iterator pointing to one past the last element of the valarray. │ │ │ │ -DDeeffiinniittiioonn _v_a_l_a_r_r_a_y_:_1_2_4_9 │ │ │ │ -_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_7 │ │ │ │ -_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_5_7 │ │ │ │ -_s_t_d │ │ │ │ -ISO C++ entities toplevel namespace is std. │ │ │ │ -_s_t_d_:_:_r_e_n_d │ │ │ │ -constexpr auto rend(_Container &__cont) -> decltype(__cont.rend()) │ │ │ │ -Return a reverse iterator pointing one past the first element of the container. │ │ │ │ -DDeeffiinniittiioonn _r_a_n_g_e___a_c_c_e_s_s_._h_:_1_7_2 │ │ │ │ -_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_4_8 │ │ │ │ -_s_t_d_:_:_e_m_p_t_y │ │ │ │ -constexpr auto empty(const _Container &__cont) noexcept(noexcept(__cont.empty │ │ │ │ -())) -> decltype(__cont.empty()) │ │ │ │ -Return whether a container is empty. │ │ │ │ -DDeeffiinniittiioonn _r_a_n_g_e___a_c_c_e_s_s_._h_:_2_8_2 │ │ │ │ -_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_6_2 │ │ │ │ -_s_t_d_:_:_r_b_e_g_i_n │ │ │ │ -constexpr auto rbegin(_Container &__cont) -> decltype(__cont.rbegin()) │ │ │ │ -Return a reverse iterator pointing to the last element of the container. │ │ │ │ -DDeeffiinniittiioonn _r_a_n_g_e___a_c_c_e_s_s_._h_:_1_5_0 │ │ │ │ -_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_:_2_6_4 │ │ │ │ -_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_:_4_9 │ │ │ │ -_____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_3_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_:_3_6_1 │ │ │ │ -_____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_1_0 │ │ │ │ -_a_l_l_o_c___t_r_a_i_t_s_._h │ │ │ │ +1971#if !defined(__cpp_lib_reference_wrapper) │ │ │ │ +1972# if (__cplusplus > 202302L) │ │ │ │ +1973# define __glibcxx_reference_wrapper 202403L │ │ │ │ +1974# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_reference_wrapper) │ │ │ │ +1975# define __cpp_lib_reference_wrapper 202403L │ │ │ │ +1976# endif │ │ │ │ +1977# endif │ │ │ │ +1978#endif /* !defined(__cpp_lib_reference_wrapper) && defined │ │ │ │ +(__glibcxx_want_reference_wrapper) */ │ │ │ │ +1979#undef __glibcxx_want_reference_wrapper │ │ │ │ +1980 │ │ │ │ +1981#if !defined(__cpp_lib_saturation_arithmetic) │ │ │ │ +1982# if (__cplusplus > 202302L) │ │ │ │ +1983# define __glibcxx_saturation_arithmetic 202311L │ │ │ │ +1984# if defined(__glibcxx_want_all) || defined │ │ │ │ +(__glibcxx_want_saturation_arithmetic) │ │ │ │ +1985# define __cpp_lib_saturation_arithmetic 202311L │ │ │ │ +1986# endif │ │ │ │ +1987# endif │ │ │ │ +1988#endif /* !defined(__cpp_lib_saturation_arithmetic) && defined │ │ │ │ +(__glibcxx_want_saturation_arithmetic) */ │ │ │ │ +1989#undef __glibcxx_want_saturation_arithmetic │ │ │ │ +1990 │ │ │ │ +1991#if !defined(__cpp_lib_text_encoding) │ │ │ │ +1992# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED && │ │ │ │ +(_GLIBCXX_USE_NL_LANGINFO_L) │ │ │ │ +1993# define __glibcxx_text_encoding 202306L │ │ │ │ +1994# if defined(__glibcxx_want_all) || defined(__glibcxx_want_text_encoding) │ │ │ │ +1995# define __cpp_lib_text_encoding 202306L │ │ │ │ +1996# endif │ │ │ │ +1997# endif │ │ │ │ +1998#endif /* !defined(__cpp_lib_text_encoding) && defined │ │ │ │ +(__glibcxx_want_text_encoding) */ │ │ │ │ +1999#undef __glibcxx_want_text_encoding │ │ │ │ +2000 │ │ │ │ +2001#if !defined(__cpp_lib_to_string) │ │ │ │ +2002# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED && (__glibcxx_to_chars) │ │ │ │ +2003# define __glibcxx_to_string 202306L │ │ │ │ +2004# if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_string) │ │ │ │ +2005# define __cpp_lib_to_string 202306L │ │ │ │ +2006# endif │ │ │ │ +2007# endif │ │ │ │ +2008#endif /* !defined(__cpp_lib_to_string) && defined │ │ │ │ +(__glibcxx_want_to_string) */ │ │ │ │ +2009#undef __glibcxx_want_to_string │ │ │ │ +2010 │ │ │ │ +2011#undef __glibcxx_want_all │ │ │ │ +_c_+_+_c_o_n_f_i_g_._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-14-base/libstdc++/user/a00404.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stl_tempbuf.h File Reference │ │ │ +libstdc++: shared_ptr_base.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,103 +48,86 @@ │ │ │ /* @license-end */ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ Classes | │ │ │ Namespaces | │ │ │ -Macros | │ │ │ Functions
│ │ │ -
stl_tempbuf.h File Reference
│ │ │ +
shared_ptr_base.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ Classes

class  std::_Temporary_buffer< _ForwardIterator, _Tp >
struct  std::_Sp_ebo_helper< _Nm, _Tp, false >
 
struct  std::_Sp_ebo_helper< _Nm, _Tp, true >
 
class  std::bad_weak_ptr
 
struct  std::hash< __shared_ptr< _Tp, _Lp > >
 
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ -

│ │ │ Namespaces

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

│ │ │ -Macros

#define _GLIBCXX_OPERATOR_DELETE
 
#define _GLIBCXX_OPERATOR_NEW
 
│ │ │ -#define _GLIBCXX_SIZED_DEALLOC(T, p, n)
 
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ Functions

template<typename _Tp >
_Tp * std::__detail::__get_temporary_buffer (ptrdiff_t __len) noexcept
 
template<typename _Tp >
void std::__detail::__return_temporary_buffer (_Tp *__p, size_t __len)
 
template<typename _Tp , typename _ForwardIterator >
void std::__uninitialized_construct_buf (_Tp *__first, _Tp *__last, _ForwardIterator __seed)
 
template<typename _Tp >
pair< _Tp *, ptrdiff_t > std::get_temporary_buffer (ptrdiff_t __len) noexcept
 
template<typename _Tp >
void std::return_temporary_buffer (_Tp *__p)
 
template<typename _Tp , _Lock_policy _Lp = __default_lock_policy, typename _Alloc , typename... _Args>
__shared_ptr< _Tp, _Lpstd::__allocate_shared (const _Alloc &__a, _Args &&... __args)
 
template<typename _Tp , _Lock_policy _Lp = __default_lock_policy, typename... _Args>
__shared_ptr< _Tp, _Lpstd::__make_shared (_Args &&... __args)
 
void std::__throw_bad_weak_ptr ()
 
template<typename _Tp , typename _Tp1 , _Lock_policy _Lp>
__shared_ptr< _Tp, _Lpstd::const_pointer_cast (const __shared_ptr< _Tp1, _Lp > &__r) noexcept
 
template<typename _Tp , typename _Tp1 , _Lock_policy _Lp>
__shared_ptr< _Tp, _Lpstd::dynamic_pointer_cast (const __shared_ptr< _Tp1, _Lp > &__r) noexcept
 
template<typename _Tp , typename _Up , _Lock_policy _Lp>
strong_ordering std::operator<=> (const __shared_ptr< _Tp, _Lp > &__a, const __shared_ptr< _Up, _Lp > &__b) noexcept
 
template<typename _Tp , _Lock_policy _Lp>
strong_ordering std::operator<=> (const __shared_ptr< _Tp, _Lp > &__a, nullptr_t) noexcept
 
template<typename _Tp , _Lock_policy _Lp>
bool std::operator== (const __shared_ptr< _Tp, _Lp > &__a, nullptr_t) noexcept
 
template<typename _Tp1 , typename _Tp2 , _Lock_policy _Lp>
bool std::operator== (const __shared_ptr< _Tp1, _Lp > &__a, const __shared_ptr< _Tp2, _Lp > &__b) noexcept
 
template<typename _Tp , typename _Tp1 , _Lock_policy _Lp>
__shared_ptr< _Tp, _Lpstd::reinterpret_pointer_cast (const __shared_ptr< _Tp1, _Lp > &__r) noexcept
 
template<typename _Tp , typename _Tp1 , _Lock_policy _Lp>
__shared_ptr< _Tp, _Lpstd::static_pointer_cast (const __shared_ptr< _Tp1, _Lp > &__r) noexcept
 
template<typename _Tp , _Lock_policy _Lp>
void std::swap (__shared_ptr< _Tp, _Lp > &__a, __shared_ptr< _Tp, _Lp > &__b) noexcept
 
template<typename _Tp , _Lock_policy _Lp>
void std::swap (__weak_ptr< _Tp, _Lp > &__a, __weak_ptr< _Tp, _Lp > &__b) noexcept
 
│ │ │

Detailed Description

│ │ │

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

│ │ │ -

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ _GLIBCXX_OPERATOR_DELETE

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define _GLIBCXX_OPERATOR_DELETE
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 74 of file stl_tempbuf.h.

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

◆ _GLIBCXX_OPERATOR_NEW

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define _GLIBCXX_OPERATOR_NEW
│ │ │ -
│ │ │ - │ │ │ -

Definition at line 73 of file stl_tempbuf.h.

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

Definition in file shared_ptr_base.h.

│ │ │ +
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,52 +1,75 @@ │ │ │ │ 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_tempbuf.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 │ │ │ │ +shared_ptr_base.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_:_:___T_e_m_p_o_r_a_r_y___b_u_f_f_e_r_<_ ___F_o_r_w_a_r_d_I_t_e_r_a_t_o_r_,_ ___T_p_ _> │ │ │ │ +struct   _s_t_d_:_:___S_p___e_b_o___h_e_l_p_e_r_<_ ___N_m_,_ ___T_p_,_ _f_a_l_s_e_ _> │ │ │ │   │ │ │ │ -NNaammeessppaacceess │ │ │ │ -namespace   _s_t_d │ │ │ │ +struct   _s_t_d_:_:___S_p___e_b_o___h_e_l_p_e_r_<_ ___N_m_,_ ___T_p_,_ _t_r_u_e_ _> │ │ │ │   │ │ │ │ -namespace   _s_t_d_:_:_____d_e_t_a_i_l │ │ │ │ + class   _s_t_d_:_:_b_a_d___w_e_a_k___p_t_r │ │ │ │   │ │ │ │ -MMaaccrrooss │ │ │ │ -#define  ___G_L_I_B_C_X_X___O_P_E_R_A_T_O_R___D_E_L_E_T_E │ │ │ │ +struct   _s_t_d_:_:_h_a_s_h_<_ _____s_h_a_r_e_d___p_t_r_<_ ___T_p_,_ ___L_p_ _>_ _> │ │ │ │   │ │ │ │ -#define  ___G_L_I_B_C_X_X___O_P_E_R_A_T_O_R___N_E_W │ │ │ │ -  │ │ │ │ -#define  __GGLLIIBBCCXXXX__SSIIZZEEDD__DDEEAALLLLOOCC(T, p, n) │ │ │ │ +NNaammeessppaacceess │ │ │ │ +namespace   _s_t_d │ │ │ │   │ │ │ │ FFuunnccttiioonnss │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _Tp *  _s_t_d_:_:_____d_e_t_a_i_l_:_:_____g_e_t___t_e_m_p_o_r_a_r_y___b_u_f_f_e_r (_p_t_r_d_i_f_f___t │ │ │ │ - _____l_e_n) noexcept │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_____d_e_t_a_i_l_:_:_____r_e_t_u_r_n___t_e_m_p_o_r_a_r_y___b_u_f_f_e_r (_Tp *__p, │ │ │ │ - size_t _____l_e_n) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___F_o_r_w_a_r_d_I_t_e_r_a_t_o_r > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_____u_n_i_n_i_t_i_a_l_i_z_e_d___c_o_n_s_t_r_u_c_t___b_u_f (_Tp *__first, _Tp │ │ │ │ - *__last, ___F_o_r_w_a_r_d_I_t_e_r_a_t_o_r _____s_e_e_d) │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ -_p_a_i_r< _Tp *, ptrdiff_t >  _s_t_d_:_:_g_e_t___t_e_m_p_o_r_a_r_y___b_u_f_f_e_r (ptrdiff_t _____l_e_n) noexcept │ │ │ │ -  │ │ │ │ -template<_t_y_p_e_n_a_m_e _Tp > │ │ │ │ - _v_o_i_d  _s_t_d_:_:_r_e_t_u_r_n___t_e_m_p_o_r_a_r_y___b_u_f_f_e_r (_Tp *__p) │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _Lock_policy _Lp = __default_lock_policy, _t_y_p_e_n_a_m_e │ │ │ │ +_Alloc , typename... _Args> │ │ │ │ +__shared_ptr< _Tp, ___L_p >  _s_t_d_:_:_____a_l_l_o_c_a_t_e___s_h_a_r_e_d (_c_o_n_s_t _Alloc &__a, ___A_r_g_s │ │ │ │ + &&... _____a_r_g_s) │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _Lock_policy _Lp = __default_lock_policy, typename... │ │ │ │ +_Args> │ │ │ │ +__shared_ptr< _Tp, ___L_p >  _s_t_d_:_:_____m_a_k_e___s_h_a_r_e_d (___A_r_g_s &&... _____a_r_g_s) │ │ │ │ +  │ │ │ │ + _v_o_i_d  _s_t_d_:_:_____t_h_r_o_w___b_a_d___w_e_a_k___p_t_r () │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___T_p_1 , _Lock_policy _Lp> │ │ │ │ +__shared_ptr< _Tp, ___L_p >  _s_t_d_:_:_c_o_n_s_t___p_o_i_n_t_e_r___c_a_s_t (_c_o_n_s_t __shared_ptr< ___T_p_1, │ │ │ │ + ___L_p > &__r) noexcept │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___T_p_1 , _Lock_policy _Lp> │ │ │ │ +__shared_ptr< _Tp, ___L_p >  _s_t_d_:_:_d_y_n_a_m_i_c___p_o_i_n_t_e_r___c_a_s_t (_c_o_n_s_t __shared_ptr< ___T_p_1, │ │ │ │ + ___L_p > &__r) noexcept │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e _Up , _Lock_policy _Lp> │ │ │ │ + strong_ordering  _s_t_d_:_:_o_p_e_r_a_t_o_r_<_=_> (_c_o_n_s_t __shared_ptr< _Tp, ___L_p > │ │ │ │ + &__a, _c_o_n_s_t __shared_ptr< _Up, ___L_p > &__b) noexcept │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _Lock_policy _Lp> │ │ │ │ + strong_ordering  _s_t_d_:_:_o_p_e_r_a_t_o_r_<_=_> (_c_o_n_s_t __shared_ptr< _Tp, ___L_p > │ │ │ │ + &__a, nullptr_t) noexcept │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _Lock_policy _Lp> │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (_c_o_n_s_t __shared_ptr< _Tp, ___L_p > &__a, │ │ │ │ + nullptr_t) noexcept │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e ___T_p_1 , _t_y_p_e_n_a_m_e _Tp2 , _Lock_policy _Lp> │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (_c_o_n_s_t __shared_ptr< ___T_p_1, ___L_p > │ │ │ │ + &__a, _c_o_n_s_t __shared_ptr< _Tp2, ___L_p > &__b) noexcept │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___T_p_1 , _Lock_policy _Lp> │ │ │ │ +__shared_ptr< _Tp, ___L_p >  _s_t_d_:_:_r_e_i_n_t_e_r_p_r_e_t___p_o_i_n_t_e_r___c_a_s_t (_c_o_n_s_t __shared_ptr< │ │ │ │ + ___T_p_1, ___L_p > &__r) noexcept │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _t_y_p_e_n_a_m_e ___T_p_1 , _Lock_policy _Lp> │ │ │ │ +__shared_ptr< _Tp, ___L_p >  _s_t_d_:_:_s_t_a_t_i_c___p_o_i_n_t_e_r___c_a_s_t (_c_o_n_s_t __shared_ptr< ___T_p_1, │ │ │ │ + ___L_p > &__r) noexcept │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _Lock_policy _Lp> │ │ │ │ + _v_o_i_d  _s_t_d_:_:_s_w_a_p (__shared_ptr< _Tp, ___L_p > &__a, │ │ │ │ + __shared_ptr< _Tp, ___L_p > &__b) noexcept │ │ │ │ +  │ │ │ │ +template<_t_y_p_e_n_a_m_e _Tp , _Lock_policy _Lp> │ │ │ │ + _v_o_i_d  _s_t_d_:_:_s_w_a_p (__weak_ptr< _Tp, ___L_p > &__a, __weak_ptr< │ │ │ │ + _Tp, ___L_p > &__b) noexcept │ │ │ │   │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _s_t_l___t_e_m_p_b_u_f_._h. │ │ │ │ -********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? __GGLLIIBBCCXXXX__OOPPEERRAATTOORR__DDEELLEETTEE ********** │ │ │ │ -#define _GLIBCXX_OPERATOR_DELETE │ │ │ │ -Definition at line _7_4 of file _s_t_l___t_e_m_p_b_u_f_._h. │ │ │ │ -********** _?◆_? __GGLLIIBBCCXXXX__OOPPEERRAATTOORR__NNEEWW ********** │ │ │ │ -#define _GLIBCXX_OPERATOR_NEW │ │ │ │ -Definition at line _7_3 of file _s_t_l___t_e_m_p_b_u_f_._h. │ │ │ │ +Definition in file _s_h_a_r_e_d___p_t_r___b_a_s_e_._h. │ │ │ │ * _b_i_t_s │ │ │ │ - * _s_t_l___t_e_m_p_b_u_f_._h │ │ │ │ + * _s_h_a_r_e_d___p_t_r___b_a_s_e_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.9.8 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00404.js │ │ │ ├── js-beautify {} │ │ │ │ @@ -1,5 +1,8 @@ │ │ │ │ var a00404 = [ │ │ │ │ - ["std::_Temporary_buffer< _ForwardIterator, _Tp >", "a07373.html", "a07373"], │ │ │ │ - ["get_temporary_buffer", "a00404.html#a11e897fb72b0ba7c409e5352cdc4056d", null], │ │ │ │ - ["return_temporary_buffer", "a00404.html#a8033d777ccff23b31daf2feec4dd46ec", null] │ │ │ │ + ["std::_Sp_ebo_helper< _Nm, _Tp, false >", "a06341.html", null], │ │ │ │ + ["std::_Sp_ebo_helper< _Nm, _Tp, true >", "a06337.html", null], │ │ │ │ + ["std::hash< __shared_ptr< _Tp, _Lp > >", "a06493.html", null], │ │ │ │ + ["const_pointer_cast", "a00404.html#adb18eb46e1822ef9603a6c3e8e852bf7", null], │ │ │ │ + ["dynamic_pointer_cast", "a00404.html#a571f41a06af9b30a36822738fe0ab992", null], │ │ │ │ + ["static_pointer_cast", "a00404.html#aabfc33012523ee37216271c6256af371", null] │ │ │ │ ]; │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00404_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stl_tempbuf.h Source File │ │ │ +libstdc++: shared_ptr_base.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -45,20 +45,20 @@ │ │ │ │ │ │
│ │ │
│ │ │ -
stl_tempbuf.h
│ │ │ +
shared_ptr_base.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// Temporary buffer implementation -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// shared_ptr and weak_ptr implementation details -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2001-2024 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2007-2024 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,363 +72,2314 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/*
│ │ │ -
26 *
│ │ │ -
27 * Copyright (c) 1994
│ │ │ -
28 * Hewlett-Packard Company
│ │ │ -
29 *
│ │ │ -
30 * Permission to use, copy, modify, distribute and sell this software
│ │ │ -
31 * and its documentation for any purpose is hereby granted without fee,
│ │ │ -
32 * provided that the above copyright notice appear in all copies and
│ │ │ -
33 * that both that copyright notice and this permission notice appear
│ │ │ -
34 * in supporting documentation. Hewlett-Packard Company makes no
│ │ │ -
35 * representations about the suitability of this software for any
│ │ │ -
36 * purpose. It is provided "as is" without express or implied warranty.
│ │ │ -
37 *
│ │ │ -
38 *
│ │ │ -
39 * Copyright (c) 1996,1997
│ │ │ -
40 * Silicon Graphics Computer Systems, Inc.
│ │ │ -
41 *
│ │ │ -
42 * Permission to use, copy, modify, distribute and sell this software
│ │ │ -
43 * and its documentation for any purpose is hereby granted without fee,
│ │ │ -
44 * provided that the above copyright notice appear in all copies and
│ │ │ -
45 * that both that copyright notice and this permission notice appear
│ │ │ -
46 * in supporting documentation. Silicon Graphics makes no
│ │ │ -
47 * representations about the suitability of this software for any
│ │ │ -
48 * purpose. It is provided "as is" without express or implied warranty.
│ │ │ -
49 */
│ │ │ -
50
│ │ │ -
51/** @file bits/stl_tempbuf.h
│ │ │ -
52 * This is an internal header file, included by other library headers.
│ │ │ -
53 * Do not attempt to use it directly. @headername{memory}
│ │ │ -
54 */
│ │ │ -
55
│ │ │ -
56#ifndef _STL_TEMPBUF_H
│ │ │ -
57#define _STL_TEMPBUF_H 1
│ │ │ -
58
│ │ │ -
59#include <new>
│ │ │ - │ │ │ -
61#include <bits/stl_construct.h>
│ │ │ -
62#include <bits/stl_pair.h>
│ │ │ -
63#include <ext/numeric_traits.h>
│ │ │ -
64
│ │ │ -
65namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
66{
│ │ │ -
67_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
68
│ │ │ -
69#if __has_builtin(__builtin_operator_new) >= 201802L
│ │ │ -
70# define _GLIBCXX_OPERATOR_NEW __builtin_operator_new
│ │ │ -
71# define _GLIBCXX_OPERATOR_DELETE __builtin_operator_delete
│ │ │ -
72#else
│ │ │ -
73# define _GLIBCXX_OPERATOR_NEW ::operator new
│ │ │ -
74# define _GLIBCXX_OPERATOR_DELETE ::operator delete
│ │ │ -
75#endif
│ │ │ -
76
│ │ │ -
77 namespace __detail
│ │ │ -
78 {
│ │ │ -
79 // Equivalent to std::get_temporary_buffer but won't return a smaller size.
│ │ │ -
80 // It either returns a buffer of __len elements, or a null pointer.
│ │ │ -
81 template<typename _Tp>
│ │ │ -
82 inline _Tp*
│ │ │ -
83 __get_temporary_buffer(ptrdiff_t __len) _GLIBCXX_NOTHROW
│ │ │ -
84 {
│ │ │ -
85 if (__builtin_expect(size_t(__len) > (size_t(-1) / sizeof(_Tp)), 0))
│ │ │ -
86 return 0;
│ │ │ -
87
│ │ │ -
88#if __cpp_aligned_new && __cplusplus >= 201103L
│ │ │ -
89 if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
│ │ │ -
90 return (_Tp*) _GLIBCXX_OPERATOR_NEW(__len * sizeof(_Tp),
│ │ │ -
91 align_val_t(alignof(_Tp)),
│ │ │ -
92 nothrow_t());
│ │ │ -
93#endif
│ │ │ -
94 return (_Tp*) _GLIBCXX_OPERATOR_NEW(__len * sizeof(_Tp), nothrow_t());
│ │ │ -
95 }
│ │ │ -
96
│ │ │ -
97 // Equivalent to std::return_temporary_buffer but with a size argument.
│ │ │ -
98 // The size is the number of elements, not the number of bytes.
│ │ │ -
99 template<typename _Tp>
│ │ │ -
100 inline void
│ │ │ -
101 __return_temporary_buffer(_Tp* __p,
│ │ │ -
102 size_t __len __attribute__((__unused__)))
│ │ │ -
103 {
│ │ │ -
104#if __cpp_sized_deallocation
│ │ │ -
105# define _GLIBCXX_SIZED_DEALLOC(T, p, n) (p), (n) * sizeof(T)
│ │ │ -
106#else
│ │ │ -
107# define _GLIBCXX_SIZED_DEALLOC(T, p, n) (p)
│ │ │ -
108#endif
│ │ │ -
109
│ │ │ -
110#if __cpp_aligned_new && __cplusplus >= 201103L
│ │ │ -
111 if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
│ │ │ -
112 {
│ │ │ -
113 _GLIBCXX_OPERATOR_DELETE(_GLIBCXX_SIZED_DEALLOC(_Tp, __p, __len),
│ │ │ -
114 align_val_t(alignof(_Tp)));
│ │ │ -
115 return;
│ │ │ -
116 }
│ │ │ -
117#endif
│ │ │ -
118 _GLIBCXX_OPERATOR_DELETE(_GLIBCXX_SIZED_DEALLOC(_Tp, __p, __len));
│ │ │ -
119 }
│ │ │ -
120#undef _GLIBCXX_SIZED_DEALLOC
│ │ │ -
121 }
│ │ │ -
122
│ │ │ -
123 /**
│ │ │ -
124 * @brief Allocates a temporary buffer.
│ │ │ -
125 * @param __len The number of objects of type Tp.
│ │ │ -
126 * @return See full description.
│ │ │ -
127 *
│ │ │ -
128 * Reinventing the wheel, but this time with prettier spokes!
│ │ │ -
129 *
│ │ │ -
130 * This function tries to obtain storage for @c __len adjacent Tp
│ │ │ -
131 * objects. The objects themselves are not constructed, of course.
│ │ │ -
132 * A pair<> is returned containing <em>the buffer's address and
│ │ │ -
133 * capacity (in the units of sizeof(_Tp)), or a pair of 0 values if
│ │ │ -
134 * no storage can be obtained.</em> Note that the capacity obtained
│ │ │ -
135 * may be less than that requested if the memory is unavailable;
│ │ │ -
136 * you should compare len with the .second return value.
│ │ │ -
137 *
│ │ │ -
138 * Provides the nothrow exception guarantee.
│ │ │ -
139 */
│ │ │ -
140 template<typename _Tp>
│ │ │ -
141 _GLIBCXX17_DEPRECATED
│ │ │ -
142 pair<_Tp*, ptrdiff_t>
│ │ │ -
│ │ │ - │ │ │ -
144 {
│ │ │ -
145 const ptrdiff_t __max =
│ │ │ -
146 __gnu_cxx::__numeric_traits<ptrdiff_t>::__max / sizeof(_Tp);
│ │ │ -
147 if (__len > __max)
│ │ │ -
148 __len = __max;
│ │ │ -
149
│ │ │ -
150 while (__len > 0)
│ │ │ -
151 {
│ │ │ -
152 if (_Tp* __tmp = __detail::__get_temporary_buffer<_Tp>(__len))
│ │ │ - │ │ │ -
154 __len = __len == 1 ? 0 : ((__len + 1) / 2);
│ │ │ -
155 }
│ │ │ -
156 return pair<_Tp*, ptrdiff_t>();
│ │ │ -
157 }
│ │ │ +
25// GCC Note: Based on files from version 1.32.0 of the Boost library.
│ │ │ +
26
│ │ │ +
27// shared_count.hpp
│ │ │ +
28// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
│ │ │ +
29
│ │ │ +
30// shared_ptr.hpp
│ │ │ +
31// Copyright (C) 1998, 1999 Greg Colvin and Beman Dawes.
│ │ │ +
32// Copyright (C) 2001, 2002, 2003 Peter Dimov
│ │ │ +
33
│ │ │ +
34// weak_ptr.hpp
│ │ │ +
35// Copyright (C) 2001, 2002, 2003 Peter Dimov
│ │ │ +
36
│ │ │ +
37// enable_shared_from_this.hpp
│ │ │ +
38// Copyright (C) 2002 Peter Dimov
│ │ │ +
39
│ │ │ +
40// Distributed under the Boost Software License, Version 1.0. (See
│ │ │ +
41// accompanying file LICENSE_1_0.txt or copy at
│ │ │ +
42// http://www.boost.org/LICENSE_1_0.txt)
│ │ │ +
43
│ │ │ +
44/** @file bits/shared_ptr_base.h
│ │ │ +
45 * This is an internal header file, included by other library headers.
│ │ │ +
46 * Do not attempt to use it directly. @headername{memory}
│ │ │ +
47 */
│ │ │ +
48
│ │ │ +
49#ifndef _SHARED_PTR_BASE_H
│ │ │ +
50#define _SHARED_PTR_BASE_H 1
│ │ │ +
51
│ │ │ +
52#include <typeinfo>
│ │ │ +
53#include <bits/allocated_ptr.h>
│ │ │ +
54#include <bits/allocator.h>
│ │ │ + │ │ │ + │ │ │ +
57#include <bits/refwrap.h>
│ │ │ +
58#include <bits/stl_function.h> // std::less
│ │ │ +
59#include <bits/unique_ptr.h>
│ │ │ +
60#include <ext/aligned_buffer.h>
│ │ │ +
61#include <ext/atomicity.h>
│ │ │ +
62#include <ext/concurrence.h>
│ │ │ +
63#if __cplusplus >= 202002L
│ │ │ +
64# include <bit> // __bit_floor
│ │ │ +
65# include <compare>
│ │ │ +
66# include <bits/align.h> // std::align
│ │ │ + │ │ │ +
68#endif
│ │ │ +
69
│ │ │ +
70namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
71{
│ │ │ +
72_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
73
│ │ │ +
74#if _GLIBCXX_USE_DEPRECATED
│ │ │ +
75#pragma GCC diagnostic push
│ │ │ +
76#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
│ │ │ +
77 template<typename> class auto_ptr;
│ │ │ +
78#pragma GCC diagnostic pop
│ │ │ +
79#endif
│ │ │ +
80
│ │ │ +
81 /**
│ │ │ +
82 * @brief Exception possibly thrown by @c shared_ptr.
│ │ │ +
83 * @ingroup exceptions
│ │ │ +
84 */
│ │ │ +
│ │ │ + │ │ │ +
86 {
│ │ │ +
87 public:
│ │ │ +
88 virtual char const* what() const noexcept;
│ │ │ +
89
│ │ │ +
90 virtual ~bad_weak_ptr() noexcept;
│ │ │ +
91 };
│ │ │
│ │ │ -
158
│ │ │ -
159 /**
│ │ │ -
160 * @brief The companion to get_temporary_buffer().
│ │ │ -
161 * @param __p A buffer previously allocated by get_temporary_buffer.
│ │ │ -
162 * @return None.
│ │ │ -
163 *
│ │ │ -
164 * Frees the memory pointed to by __p.
│ │ │ -
165 */
│ │ │ -
166 template<typename _Tp>
│ │ │ -
167 _GLIBCXX17_DEPRECATED
│ │ │ -
168 inline void
│ │ │ -
│ │ │ - │ │ │ -
170 {
│ │ │ -
171#if __cpp_aligned_new && __cplusplus >= 201103L
│ │ │ -
172 if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
│ │ │ -
173 _GLIBCXX_OPERATOR_DELETE(__p, align_val_t(alignof(_Tp)));
│ │ │ -
174 else
│ │ │ -
175#endif
│ │ │ -
176 _GLIBCXX_OPERATOR_DELETE(__p);
│ │ │ -
177 }
│ │ │ -
│ │ │ -
178
│ │ │ -
179#undef _GLIBCXX_OPERATOR_DELETE
│ │ │ -
180#undef _GLIBCXX_OPERATOR_NEW
│ │ │ -
181
│ │ │ -
182 /**
│ │ │ -
183 * This class is used in two places: stl_algo.h and ext/memory,
│ │ │ -
184 * where it is wrapped as the temporary_buffer class. See
│ │ │ -
185 * temporary_buffer docs for more notes.
│ │ │ -
186 */
│ │ │ -
187 template<typename _ForwardIterator, typename _Tp>
│ │ │ -
│ │ │ - │ │ │ -
189 {
│ │ │ -
190 // concept requirements
│ │ │ -
191 __glibcxx_class_requires(_ForwardIterator, _ForwardIteratorConcept)
│ │ │ -
192
│ │ │ -
193 public:
│ │ │ -
194 typedef _Tp value_type;
│ │ │ -
195 typedef value_type* pointer;
│ │ │ -
196 typedef pointer iterator;
│ │ │ -
197 typedef ptrdiff_t size_type;
│ │ │ -
198
│ │ │ -
199 protected:
│ │ │ -
200 size_type _M_original_len;
│ │ │ -
201 struct _Impl
│ │ │ -
202 {
│ │ │ -
203#pragma GCC diagnostic push
│ │ │ -
204#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
│ │ │ -
205 explicit
│ │ │ -
206 _Impl(ptrdiff_t __original_len)
│ │ │ -
207 {
│ │ │ - │ │ │ - │ │ │ -
210 _M_len = __p.second;
│ │ │ -
211 _M_buffer = __p.first;
│ │ │ -
212 }
│ │ │ -
213#pragma GCC diagnostic pop
│ │ │ -
214
│ │ │ -
215 ~_Impl()
│ │ │ -
216 { std::__detail::__return_temporary_buffer(_M_buffer, _M_len); }
│ │ │ -
217
│ │ │ -
218 size_type _M_len;
│ │ │ -
219 pointer _M_buffer;
│ │ │ -
220 } _M_impl;
│ │ │ -
221
│ │ │ -
222 public:
│ │ │ -
223 /// As per Table mumble.
│ │ │ -
224 size_type
│ │ │ -
│ │ │ -
225 size() const
│ │ │ -
226 { return _M_impl._M_len; }
│ │ │ -
│ │ │ -
227
│ │ │ -
228 /// Returns the size requested by the constructor; may be >size().
│ │ │ -
229 size_type
│ │ │ -
│ │ │ - │ │ │ -
231 { return _M_original_len; }
│ │ │ +
92
│ │ │ +
93 // Substitute for bad_weak_ptr object in the case of -fno-exceptions.
│ │ │ +
94 inline void
│ │ │ +
95 __throw_bad_weak_ptr()
│ │ │ +
96 { _GLIBCXX_THROW_OR_ABORT(bad_weak_ptr()); }
│ │ │ +
97
│ │ │ +
98 using __gnu_cxx::_Lock_policy;
│ │ │ +
99 using __gnu_cxx::__default_lock_policy;
│ │ │ +
100 using __gnu_cxx::_S_single;
│ │ │ +
101 using __gnu_cxx::_S_mutex;
│ │ │ +
102 using __gnu_cxx::_S_atomic;
│ │ │ +
103
│ │ │ +
104 // Empty helper class except when the template argument is _S_mutex.
│ │ │ +
105 template<_Lock_policy _Lp>
│ │ │ +
106 class _Mutex_base
│ │ │ +
107 {
│ │ │ +
108 protected:
│ │ │ +
109 // The atomic policy uses fully-fenced builtins, single doesn't care.
│ │ │ +
110 enum { _S_need_barriers = 0 };
│ │ │ +
111 };
│ │ │ +
112
│ │ │ +
113 template<>
│ │ │ +
114 class _Mutex_base<_S_mutex>
│ │ │ +
115 : public __gnu_cxx::__mutex
│ │ │ +
116 {
│ │ │ +
117 protected:
│ │ │ +
118 // This policy is used when atomic builtins are not available.
│ │ │ +
119 // The replacement atomic operations might not have the necessary
│ │ │ +
120 // memory barriers.
│ │ │ +
121 enum { _S_need_barriers = 1 };
│ │ │ +
122 };
│ │ │ +
123
│ │ │ +
124 template<_Lock_policy _Lp = __default_lock_policy>
│ │ │ +
125 class _Sp_counted_base
│ │ │ +
126 : public _Mutex_base<_Lp>
│ │ │ +
127 {
│ │ │ +
128 public:
│ │ │ +
129 _Sp_counted_base() noexcept
│ │ │ +
130 : _M_use_count(1), _M_weak_count(1) { }
│ │ │ +
131
│ │ │ +
132 virtual
│ │ │ +
133 ~_Sp_counted_base() noexcept
│ │ │ +
134 { }
│ │ │ +
135
│ │ │ +
136 // Called when _M_use_count drops to zero, to release the resources
│ │ │ +
137 // managed by *this.
│ │ │ +
138 virtual void
│ │ │ +
139 _M_dispose() noexcept = 0;
│ │ │ +
140
│ │ │ +
141 // Called when _M_weak_count drops to zero.
│ │ │ +
142 virtual void
│ │ │ +
143 _M_destroy() noexcept
│ │ │ +
144 { delete this; }
│ │ │ +
145
│ │ │ +
146 virtual void*
│ │ │ +
147 _M_get_deleter(const std::type_info&) noexcept = 0;
│ │ │ +
148
│ │ │ +
149 // Increment the use count (used when the count is greater than zero).
│ │ │ +
150 void
│ │ │ +
151 _M_add_ref_copy()
│ │ │ +
152 { __gnu_cxx::__atomic_add_dispatch(&_M_use_count, 1); }
│ │ │ +
153
│ │ │ +
154 // Increment the use count if it is non-zero, throw otherwise.
│ │ │ +
155 void
│ │ │ +
156 _M_add_ref_lock()
│ │ │ +
157 {
│ │ │ +
158 if (!_M_add_ref_lock_nothrow())
│ │ │ +
159 __throw_bad_weak_ptr();
│ │ │ +
160 }
│ │ │ +
161
│ │ │ +
162 // Increment the use count if it is non-zero.
│ │ │ +
163 bool
│ │ │ +
164 _M_add_ref_lock_nothrow() noexcept;
│ │ │ +
165
│ │ │ +
166 // Decrement the use count.
│ │ │ +
167 void
│ │ │ +
168 _M_release() noexcept;
│ │ │ +
169
│ │ │ +
170 // Called by _M_release() when the use count reaches zero.
│ │ │ +
171 void
│ │ │ +
172 _M_release_last_use() noexcept
│ │ │ +
173 {
│ │ │ +
174 _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_use_count);
│ │ │ +
175 _M_dispose();
│ │ │ +
176 // There must be a memory barrier between dispose() and destroy()
│ │ │ +
177 // to ensure that the effects of dispose() are observed in the
│ │ │ +
178 // thread that runs destroy().
│ │ │ +
179 // See http://gcc.gnu.org/ml/libstdc++/2005-11/msg00136.html
│ │ │ +
180 if (_Mutex_base<_Lp>::_S_need_barriers)
│ │ │ +
181 {
│ │ │ +
182 __atomic_thread_fence (__ATOMIC_ACQ_REL);
│ │ │ +
183 }
│ │ │ +
184
│ │ │ +
185 // Be race-detector-friendly. For more info see bits/c++config.
│ │ │ +
186 _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_weak_count);
│ │ │ +
187 if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count,
│ │ │ +
188 -1) == 1)
│ │ │ +
189 {
│ │ │ +
190 _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_weak_count);
│ │ │ +
191 _M_destroy();
│ │ │ +
192 }
│ │ │ +
193 }
│ │ │ +
194
│ │ │ +
195 // As above, but 'noinline' to reduce code size on the cold path.
│ │ │ +
196 __attribute__((__noinline__))
│ │ │ +
197 void
│ │ │ +
198 _M_release_last_use_cold() noexcept
│ │ │ +
199 { _M_release_last_use(); }
│ │ │ +
200
│ │ │ +
201 // Increment the weak count.
│ │ │ +
202 void
│ │ │ +
203 _M_weak_add_ref() noexcept
│ │ │ +
204 { __gnu_cxx::__atomic_add_dispatch(&_M_weak_count, 1); }
│ │ │ +
205
│ │ │ +
206 // Decrement the weak count.
│ │ │ +
207 void
│ │ │ +
208 _M_weak_release() noexcept
│ │ │ +
209 {
│ │ │ +
210 // Be race-detector-friendly. For more info see bits/c++config.
│ │ │ +
211 _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_weak_count);
│ │ │ +
212 if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count, -1) == 1)
│ │ │ +
213 {
│ │ │ +
214 _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_weak_count);
│ │ │ +
215 if (_Mutex_base<_Lp>::_S_need_barriers)
│ │ │ +
216 {
│ │ │ +
217 // See _M_release(),
│ │ │ +
218 // destroy() must observe results of dispose()
│ │ │ +
219 __atomic_thread_fence (__ATOMIC_ACQ_REL);
│ │ │ +
220 }
│ │ │ +
221 _M_destroy();
│ │ │ +
222 }
│ │ │ +
223 }
│ │ │ +
224
│ │ │ +
225 long
│ │ │ +
226 _M_get_use_count() const noexcept
│ │ │ +
227 {
│ │ │ +
228 // No memory barrier is used here so there is no synchronization
│ │ │ +
229 // with other threads.
│ │ │ +
230 return __atomic_load_n(&_M_use_count, __ATOMIC_RELAXED);
│ │ │ +
231 }
│ │ │ +
232
│ │ │ +
233 private:
│ │ │ +
234 _Sp_counted_base(_Sp_counted_base const&) = delete;
│ │ │ +
235 _Sp_counted_base& operator=(_Sp_counted_base const&) = delete;
│ │ │ +
236
│ │ │ +
237 _Atomic_word _M_use_count; // #shared
│ │ │ +
238 _Atomic_word _M_weak_count; // #weak + (#shared != 0)
│ │ │ +
239 };
│ │ │ +
240
│ │ │ +
241 template<>
│ │ │ +
242 inline bool
│ │ │ +
243 _Sp_counted_base<_S_single>::
│ │ │ +
244 _M_add_ref_lock_nothrow() noexcept
│ │ │ +
245 {
│ │ │ +
246 if (_M_use_count == 0)
│ │ │ +
247 return false;
│ │ │ +
248 ++_M_use_count;
│ │ │ +
249 return true;
│ │ │ +
250 }
│ │ │ +
251
│ │ │ +
252 template<>
│ │ │ +
253 inline bool
│ │ │ +
254 _Sp_counted_base<_S_mutex>::
│ │ │ +
255 _M_add_ref_lock_nothrow() noexcept
│ │ │ +
256 {
│ │ │ +
257 __gnu_cxx::__scoped_lock sentry(*this);
│ │ │ +
258 if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1) == 0)
│ │ │ +
259 {
│ │ │ +
260 _M_use_count = 0;
│ │ │ +
261 return false;
│ │ │ +
262 }
│ │ │ +
263 return true;
│ │ │ +
264 }
│ │ │ +
265
│ │ │ +
266 template<>
│ │ │ +
267 inline bool
│ │ │ +
268 _Sp_counted_base<_S_atomic>::
│ │ │ +
269 _M_add_ref_lock_nothrow() noexcept
│ │ │ +
270 {
│ │ │ +
271 // Perform lock-free add-if-not-zero operation.
│ │ │ +
272 _Atomic_word __count = _M_get_use_count();
│ │ │ +
273 do
│ │ │ +
274 {
│ │ │ +
275 if (__count == 0)
│ │ │ +
276 return false;
│ │ │ +
277 // Replace the current counter value with the old value + 1, as
│ │ │ +
278 // long as it's not changed meanwhile.
│ │ │ +
279 }
│ │ │ +
280 while (!__atomic_compare_exchange_n(&_M_use_count, &__count, __count + 1,
│ │ │ +
281 true, __ATOMIC_ACQ_REL,
│ │ │ +
282 __ATOMIC_RELAXED));
│ │ │ +
283 return true;
│ │ │ +
284 }
│ │ │ +
285
│ │ │ +
286 template<>
│ │ │ +
287 inline void
│ │ │ +
288 _Sp_counted_base<_S_single>::_M_add_ref_copy()
│ │ │ +
289 { ++_M_use_count; }
│ │ │ +
290
│ │ │ +
291 template<>
│ │ │ +
292 inline void
│ │ │ +
293 _Sp_counted_base<_S_single>::_M_release() noexcept
│ │ │ +
294 {
│ │ │ +
295 if (--_M_use_count == 0)
│ │ │ +
296 {
│ │ │ +
297 _M_dispose();
│ │ │ +
298 if (--_M_weak_count == 0)
│ │ │ +
299 _M_destroy();
│ │ │ +
300 }
│ │ │ +
301 }
│ │ │ +
302
│ │ │ +
303 template<>
│ │ │ +
304 inline void
│ │ │ +
305 _Sp_counted_base<_S_mutex>::_M_release() noexcept
│ │ │ +
306 {
│ │ │ +
307 // Be race-detector-friendly. For more info see bits/c++config.
│ │ │ +
308 _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_use_count);
│ │ │ +
309 if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1)
│ │ │ +
310 {
│ │ │ +
311 _M_release_last_use();
│ │ │ +
312 }
│ │ │ +
313 }
│ │ │ +
314
│ │ │ +
315 template<>
│ │ │ +
316 inline void
│ │ │ +
317 _Sp_counted_base<_S_atomic>::_M_release() noexcept
│ │ │ +
318 {
│ │ │ +
319 _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_use_count);
│ │ │ +
320#if ! _GLIBCXX_TSAN
│ │ │ +
321 constexpr bool __lock_free
│ │ │ +
322 = __atomic_always_lock_free(sizeof(long long), 0)
│ │ │ +
323 && __atomic_always_lock_free(sizeof(_Atomic_word), 0);
│ │ │ +
324 constexpr bool __double_word
│ │ │ +
325 = sizeof(long long) == 2 * sizeof(_Atomic_word);
│ │ │ +
326 // The ref-count members follow the vptr, so are aligned to
│ │ │ +
327 // alignof(void*).
│ │ │ +
328 constexpr bool __aligned = __alignof(long long) <= alignof(void*);
│ │ │ +
329 if _GLIBCXX17_CONSTEXPR (__lock_free && __double_word && __aligned)
│ │ │ +
330 {
│ │ │ +
331 constexpr int __wordbits = __CHAR_BIT__ * sizeof(_Atomic_word);
│ │ │ +
332 constexpr int __shiftbits = __double_word ? __wordbits : 0;
│ │ │ +
333 constexpr long long __unique_ref = 1LL + (1LL << __shiftbits);
│ │ │ +
334 auto __both_counts = reinterpret_cast<long long*>(&_M_use_count);
│ │ │ +
335
│ │ │ +
336 _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_weak_count);
│ │ │ +
337 if (__atomic_load_n(__both_counts, __ATOMIC_ACQUIRE) == __unique_ref)
│ │ │ +
338 {
│ │ │ +
339 // Both counts are 1, so there are no weak references and
│ │ │ +
340 // we are releasing the last strong reference. No other
│ │ │ +
341 // threads can observe the effects of this _M_release()
│ │ │ +
342 // call (e.g. calling use_count()) without a data race.
│ │ │ +
343 _M_weak_count = _M_use_count = 0;
│ │ │ +
344 _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_use_count);
│ │ │ +
345 _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_weak_count);
│ │ │ +
346 _M_dispose();
│ │ │ +
347 _M_destroy();
│ │ │ +
348 return;
│ │ │ +
349 }
│ │ │ +
350 if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1)
│ │ │ +
351 [[__unlikely__]]
│ │ │ +
352 {
│ │ │ +
353 _M_release_last_use_cold();
│ │ │ +
354 return;
│ │ │ +
355 }
│ │ │ +
356 }
│ │ │ +
357 else
│ │ │ +
358#endif
│ │ │ +
359 if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1)
│ │ │ +
360 {
│ │ │ +
361 _M_release_last_use();
│ │ │ +
362 }
│ │ │ +
363 }
│ │ │ +
364
│ │ │ +
365 template<>
│ │ │ +
366 inline void
│ │ │ +
367 _Sp_counted_base<_S_single>::_M_weak_add_ref() noexcept
│ │ │ +
368 { ++_M_weak_count; }
│ │ │ +
369
│ │ │ +
370 template<>
│ │ │ +
371 inline void
│ │ │ +
372 _Sp_counted_base<_S_single>::_M_weak_release() noexcept
│ │ │ +
373 {
│ │ │ +
374 if (--_M_weak_count == 0)
│ │ │ +
375 _M_destroy();
│ │ │ +
376 }
│ │ │ +
377
│ │ │ +
378 template<>
│ │ │ +
379 inline long
│ │ │ +
380 _Sp_counted_base<_S_single>::_M_get_use_count() const noexcept
│ │ │ +
381 { return _M_use_count; }
│ │ │ +
382
│ │ │ +
383
│ │ │ +
384 // Forward declarations.
│ │ │ +
385 template<typename _Tp, _Lock_policy _Lp = __default_lock_policy>
│ │ │ +
386 class __shared_ptr;
│ │ │ +
387
│ │ │ +
388 template<typename _Tp, _Lock_policy _Lp = __default_lock_policy>
│ │ │ +
389 class __weak_ptr;
│ │ │ +
390
│ │ │ +
391 template<typename _Tp, _Lock_policy _Lp = __default_lock_policy>
│ │ │ +
392 class __enable_shared_from_this;
│ │ │ +
393
│ │ │ +
394 template<typename _Tp>
│ │ │ +
395 class shared_ptr;
│ │ │ +
396
│ │ │ +
397 template<typename _Tp>
│ │ │ +
398 class weak_ptr;
│ │ │ +
399
│ │ │ +
400 template<typename _Tp>
│ │ │ +
401 struct owner_less;
│ │ │ +
402
│ │ │ +
403 template<typename _Tp>
│ │ │ +
404 class enable_shared_from_this;
│ │ │ +
405
│ │ │ +
406 template<_Lock_policy _Lp = __default_lock_policy>
│ │ │ +
407 class __weak_count;
│ │ │ +
408
│ │ │ +
409 template<_Lock_policy _Lp = __default_lock_policy>
│ │ │ +
410 class __shared_count;
│ │ │ +
411
│ │ │ +
412#ifdef __glibcxx_atomic_shared_ptr
│ │ │ +
413 template<typename>
│ │ │ +
414 class _Sp_atomic;
│ │ │ +
415#endif
│ │ │ +
416
│ │ │ +
417 // Counted ptr with no deleter or allocator support
│ │ │ +
418 template<typename _Ptr, _Lock_policy _Lp>
│ │ │ +
419 class _Sp_counted_ptr final : public _Sp_counted_base<_Lp>
│ │ │ +
420 {
│ │ │ +
421 public:
│ │ │ +
422 explicit
│ │ │ +
423 _Sp_counted_ptr(_Ptr __p) noexcept
│ │ │ +
424 : _M_ptr(__p) { }
│ │ │ +
425
│ │ │ +
426 virtual void
│ │ │ +
427 _M_dispose() noexcept
│ │ │ +
428 { delete _M_ptr; }
│ │ │ +
429
│ │ │ +
430 virtual void
│ │ │ +
431 _M_destroy() noexcept
│ │ │ +
432 { delete this; }
│ │ │ +
433
│ │ │ +
434 virtual void*
│ │ │ +
435 _M_get_deleter(const std::type_info&) noexcept
│ │ │ +
436 { return nullptr; }
│ │ │ +
437
│ │ │ +
438 _Sp_counted_ptr(const _Sp_counted_ptr&) = delete;
│ │ │ +
439 _Sp_counted_ptr& operator=(const _Sp_counted_ptr&) = delete;
│ │ │ +
440
│ │ │ +
441 private:
│ │ │ +
442 _Ptr _M_ptr;
│ │ │ +
443 };
│ │ │ +
444
│ │ │ +
445 template<>
│ │ │ +
446 inline void
│ │ │ +
447 _Sp_counted_ptr<nullptr_t, _S_single>::_M_dispose() noexcept { }
│ │ │ +
448
│ │ │ +
449 template<>
│ │ │ +
450 inline void
│ │ │ +
451 _Sp_counted_ptr<nullptr_t, _S_mutex>::_M_dispose() noexcept { }
│ │ │ +
452
│ │ │ +
453 template<>
│ │ │ +
454 inline void
│ │ │ +
455 _Sp_counted_ptr<nullptr_t, _S_atomic>::_M_dispose() noexcept { }
│ │ │ +
456
│ │ │ +
457 // FIXME: once __has_cpp_attribute(__no_unique_address__)) is true for
│ │ │ +
458 // all supported compilers we can greatly simplify _Sp_ebo_helper.
│ │ │ +
459 // N.B. unconditionally applying the attribute could change layout for
│ │ │ +
460 // final types, which currently cannot use EBO so have a unique address.
│ │ │ +
461
│ │ │ +
462 template<int _Nm, typename _Tp,
│ │ │ +
463 bool __use_ebo = !__is_final(_Tp) && __is_empty(_Tp)>
│ │ │ +
464 struct _Sp_ebo_helper;
│ │ │ +
465
│ │ │ +
466 /// Specialization using EBO.
│ │ │ +
467 template<int _Nm, typename _Tp>
│ │ │ +
│ │ │ +
468 struct _Sp_ebo_helper<_Nm, _Tp, true> : private _Tp
│ │ │ +
469 {
│ │ │ +
470 explicit _Sp_ebo_helper(const _Tp& __tp) : _Tp(__tp) { }
│ │ │ +
471 explicit _Sp_ebo_helper(_Tp&& __tp) : _Tp(std::move(__tp)) { }
│ │ │ +
472
│ │ │ +
473 static _Tp&
│ │ │ +
474 _S_get(_Sp_ebo_helper& __eboh) { return static_cast<_Tp&>(__eboh); }
│ │ │ +
475 };
│ │ │
│ │ │ -
232
│ │ │ -
233 /// As per Table mumble.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
236 { return _M_impl._M_buffer; }
│ │ │ +
476
│ │ │ +
477 /// Specialization not using EBO.
│ │ │ +
478 template<int _Nm, typename _Tp>
│ │ │ +
│ │ │ +
479 struct _Sp_ebo_helper<_Nm, _Tp, false>
│ │ │ +
480 {
│ │ │ +
481 explicit _Sp_ebo_helper(const _Tp& __tp) : _M_tp(__tp) { }
│ │ │ +
482 explicit _Sp_ebo_helper(_Tp&& __tp) : _M_tp(std::move(__tp)) { }
│ │ │ +
483
│ │ │ +
484 static _Tp&
│ │ │ +
485 _S_get(_Sp_ebo_helper& __eboh)
│ │ │ +
486 { return __eboh._M_tp; }
│ │ │ +
487
│ │ │ +
488 private:
│ │ │ +
489 _Tp _M_tp;
│ │ │ +
490 };
│ │ │
│ │ │ -
237
│ │ │ -
238 /// As per Table mumble.
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
241 { return _M_impl._M_buffer + _M_impl._M_len; }
│ │ │ +
491
│ │ │ +
492 // Support for custom deleter and/or allocator
│ │ │ +
493 template<typename _Ptr, typename _Deleter, typename _Alloc, _Lock_policy _Lp>
│ │ │ +
494 class _Sp_counted_deleter final : public _Sp_counted_base<_Lp>
│ │ │ +
495 {
│ │ │ +
496 class _Impl : _Sp_ebo_helper<0, _Deleter>, _Sp_ebo_helper<1, _Alloc>
│ │ │ +
497 {
│ │ │ +
498 typedef _Sp_ebo_helper<0, _Deleter> _Del_base;
│ │ │ +
499 typedef _Sp_ebo_helper<1, _Alloc> _Alloc_base;
│ │ │ +
500
│ │ │ +
501 public:
│ │ │ +
502 _Impl(_Ptr __p, _Deleter __d, const _Alloc& __a) noexcept
│ │ │ +
503 : _Del_base(std::move(__d)), _Alloc_base(__a), _M_ptr(__p)
│ │ │ +
504 { }
│ │ │ +
505
│ │ │ +
506 _Deleter& _M_del() noexcept { return _Del_base::_S_get(*this); }
│ │ │ +
507 _Alloc& _M_alloc() noexcept { return _Alloc_base::_S_get(*this); }
│ │ │ +
508
│ │ │ +
509 _Ptr _M_ptr;
│ │ │ +
510 };
│ │ │ +
511
│ │ │ +
512 public:
│ │ │ +
513 using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_deleter>;
│ │ │ +
514
│ │ │ +
515 // __d(__p) must not throw.
│ │ │ +
516 _Sp_counted_deleter(_Ptr __p, _Deleter __d) noexcept
│ │ │ +
517 : _M_impl(__p, std::move(__d), _Alloc()) { }
│ │ │ +
518
│ │ │ +
519 // __d(__p) must not throw.
│ │ │ +
520 _Sp_counted_deleter(_Ptr __p, _Deleter __d, const _Alloc& __a) noexcept
│ │ │ +
521 : _M_impl(__p, std::move(__d), __a) { }
│ │ │ +
522
│ │ │ +
523 ~_Sp_counted_deleter() noexcept { }
│ │ │ +
524
│ │ │ +
525 virtual void
│ │ │ +
526 _M_dispose() noexcept
│ │ │ +
527 { _M_impl._M_del()(_M_impl._M_ptr); }
│ │ │ +
528
│ │ │ +
529 virtual void
│ │ │ +
530 _M_destroy() noexcept
│ │ │ +
531 {
│ │ │ +
532 __allocator_type __a(_M_impl._M_alloc());
│ │ │ +
533 __allocated_ptr<__allocator_type> __guard_ptr{ __a, this };
│ │ │ +
534 this->~_Sp_counted_deleter();
│ │ │ +
535 }
│ │ │ +
536
│ │ │ +
537 virtual void*
│ │ │ +
538 _M_get_deleter(const type_info& __ti [[__gnu__::__unused__]]) noexcept
│ │ │ +
539 {
│ │ │ +
540#if __cpp_rtti
│ │ │ +
541 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
542 // 2400. shared_ptr's get_deleter() should use addressof()
│ │ │ +
543 return __ti == typeid(_Deleter)
│ │ │ +
544 ? std::__addressof(_M_impl._M_del())
│ │ │ +
545 : nullptr;
│ │ │ +
546#else
│ │ │ +
547 return nullptr;
│ │ │ +
548#endif
│ │ │ +
549 }
│ │ │ +
550
│ │ │ +
551 private:
│ │ │ +
552#ifdef __glibcxx_out_ptr
│ │ │ +
553 template<typename, typename, typename...> friend class out_ptr_t;
│ │ │ +
554#endif
│ │ │ +
555 _Impl _M_impl;
│ │ │ +
556 };
│ │ │ +
557
│ │ │ +
558 // helpers for make_shared / allocate_shared
│ │ │ +
559
│ │ │ +
560 struct _Sp_make_shared_tag
│ │ │ +
561 {
│ │ │ +
562 private:
│ │ │ +
563 template<typename _Tp, typename _Alloc, _Lock_policy _Lp>
│ │ │ +
564 friend class _Sp_counted_ptr_inplace;
│ │ │ +
565
│ │ │ +
566 static const type_info&
│ │ │ +
567 _S_ti() noexcept _GLIBCXX_VISIBILITY(default)
│ │ │ +
568 {
│ │ │ +
569 alignas(type_info) static constexpr char __tag[sizeof(type_info)] = { };
│ │ │ +
570 return reinterpret_cast<const type_info&>(__tag);
│ │ │ +
571 }
│ │ │ +
572
│ │ │ +
573 static bool _S_eq(const type_info&) noexcept;
│ │ │ +
574 };
│ │ │ +
575
│ │ │ +
576 template<typename _Alloc>
│ │ │ +
577 struct _Sp_alloc_shared_tag
│ │ │ +
578 {
│ │ │ +
579 const _Alloc& _M_a;
│ │ │ +
580 };
│ │ │ +
581
│ │ │ +
582 template<typename _Tp, typename _Alloc, _Lock_policy _Lp>
│ │ │ +
583 class _Sp_counted_ptr_inplace final : public _Sp_counted_base<_Lp>
│ │ │ +
584 {
│ │ │ +
585 class _Impl : _Sp_ebo_helper<0, _Alloc>
│ │ │ +
586 {
│ │ │ +
587 typedef _Sp_ebo_helper<0, _Alloc> _A_base;
│ │ │ +
588
│ │ │ +
589 public:
│ │ │ +
590 explicit _Impl(_Alloc __a) noexcept : _A_base(__a) { }
│ │ │ +
591
│ │ │ +
592 _Alloc& _M_alloc() noexcept { return _A_base::_S_get(*this); }
│ │ │ +
593
│ │ │ +
594 __gnu_cxx::__aligned_buffer<_Tp> _M_storage;
│ │ │ +
595 };
│ │ │ +
596
│ │ │ +
597 public:
│ │ │ +
598 using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_ptr_inplace>;
│ │ │ +
599
│ │ │ +
600 // Alloc parameter is not a reference so doesn't alias anything in __args
│ │ │ +
601 template<typename... _Args>
│ │ │ +
602 _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
│ │ │ +
603 : _M_impl(__a)
│ │ │ +
604 {
│ │ │ +
605 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
606 // 2070. allocate_shared should use allocator_traits<A>::construct
│ │ │ + │ │ │ +
608 std::forward<_Args>(__args)...); // might throw
│ │ │ +
609 }
│ │ │ +
610
│ │ │ +
611 ~_Sp_counted_ptr_inplace() noexcept { }
│ │ │ +
612
│ │ │ +
613 virtual void
│ │ │ +
614 _M_dispose() noexcept
│ │ │ +
615 {
│ │ │ +
616 allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr());
│ │ │ +
617 }
│ │ │ +
618
│ │ │ +
619 // Override because the allocator needs to know the dynamic type
│ │ │ +
620 virtual void
│ │ │ +
621 _M_destroy() noexcept
│ │ │ +
622 {
│ │ │ +
623 __allocator_type __a(_M_impl._M_alloc());
│ │ │ +
624 __allocated_ptr<__allocator_type> __guard_ptr{ __a, this };
│ │ │ +
625 this->~_Sp_counted_ptr_inplace();
│ │ │ +
626 }
│ │ │ +
627
│ │ │ +
628 private:
│ │ │ +
629 friend class __shared_count<_Lp>; // To be able to call _M_ptr().
│ │ │ +
630
│ │ │ +
631 // No longer used, but code compiled against old libstdc++ headers
│ │ │ +
632 // might still call it from __shared_ptr ctor to get the pointer out.
│ │ │ +
633 virtual void*
│ │ │ +
634 _M_get_deleter(const std::type_info& __ti) noexcept override
│ │ │ +
635 {
│ │ │ +
636 auto __ptr = const_cast<typename remove_cv<_Tp>::type*>(_M_ptr());
│ │ │ +
637 // Check for the fake type_info first, so we don't try to access it
│ │ │ +
638 // as a real type_info object. Otherwise, check if it's the real
│ │ │ +
639 // type_info for this class. With RTTI enabled we can check directly,
│ │ │ +
640 // or call a library function to do it.
│ │ │ +
641 if (&__ti == &_Sp_make_shared_tag::_S_ti()
│ │ │ +
642 ||
│ │ │ +
643#if __cpp_rtti
│ │ │ +
644 __ti == typeid(_Sp_make_shared_tag)
│ │ │ +
645#else
│ │ │ +
646 _Sp_make_shared_tag::_S_eq(__ti)
│ │ │ +
647#endif
│ │ │ +
648 )
│ │ │ +
649 return __ptr;
│ │ │ +
650 return nullptr;
│ │ │ +
651 }
│ │ │ +
652
│ │ │ +
653 _Tp* _M_ptr() noexcept { return _M_impl._M_storage._M_ptr(); }
│ │ │ +
654
│ │ │ +
655 _Impl _M_impl;
│ │ │ +
656 };
│ │ │ +
657
│ │ │ +
658#ifdef __glibcxx_smart_ptr_for_overwrite // C++ >= 20 && HOSTED
│ │ │ +
659 struct _Sp_overwrite_tag { };
│ │ │ +
660
│ │ │ +
661 // Partial specialization used for make_shared_for_overwrite<non-array>().
│ │ │ +
662 // This partial specialization is used when the allocator's value type
│ │ │ +
663 // is the special _Sp_overwrite_tag type.
│ │ │ +
664#if __cpp_concepts
│ │ │ +
665 template<typename _Tp, typename _Alloc, _Lock_policy _Lp>
│ │ │ +
666 requires is_same_v<typename _Alloc::value_type, _Sp_overwrite_tag>
│ │ │ +
667 class _Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp> final
│ │ │ +
668#else
│ │ │ +
669 template<typename _Tp, template<typename> class _Alloc, _Lock_policy _Lp>
│ │ │ +
670 class _Sp_counted_ptr_inplace<_Tp, _Alloc<_Sp_overwrite_tag>, _Lp> final
│ │ │ +
671#endif
│ │ │ +
672 : public _Sp_counted_base<_Lp>
│ │ │ +
673 {
│ │ │ +
674 [[no_unique_address]] _Alloc _M_alloc;
│ │ │ +
675
│ │ │ +
676 union {
│ │ │ +
677 _Tp _M_obj;
│ │ │ +
678 char _M_unused;
│ │ │ +
679 };
│ │ │ +
680
│ │ │ +
681 friend class __shared_count<_Lp>; // To be able to call _M_ptr().
│ │ │ +
682
│ │ │ +
683 _Tp* _M_ptr() noexcept { return std::__addressof(_M_obj); }
│ │ │ +
684
│ │ │ +
685 public:
│ │ │ +
686 using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_ptr_inplace>;
│ │ │ +
687
│ │ │ +
688 _Sp_counted_ptr_inplace(const _Alloc& __a)
│ │ │ +
689 : _M_alloc(__a)
│ │ │ +
690 {
│ │ │ +
691 ::new((void*)_M_ptr()) _Tp; // default-initialized, for overwrite.
│ │ │ +
692 }
│ │ │ +
693
│ │ │ +
694 ~_Sp_counted_ptr_inplace() noexcept { }
│ │ │ +
695
│ │ │ +
696 virtual void
│ │ │ +
697 _M_dispose() noexcept
│ │ │ +
698 {
│ │ │ +
699 _M_obj.~_Tp();
│ │ │ +
700 }
│ │ │ +
701
│ │ │ +
702 // Override because the allocator needs to know the dynamic type
│ │ │ +
703 virtual void
│ │ │ +
704 _M_destroy() noexcept
│ │ │ +
705 {
│ │ │ +
706 using pointer = typename allocator_traits<__allocator_type>::pointer;
│ │ │ +
707 __allocator_type __a(_M_alloc);
│ │ │ +
708 auto __p = pointer_traits<pointer>::pointer_to(*this);
│ │ │ +
709 __allocated_ptr<__allocator_type> __guard_ptr{ __a, __p };
│ │ │ +
710 this->~_Sp_counted_ptr_inplace();
│ │ │ +
711 }
│ │ │ +
712
│ │ │ +
713 void*
│ │ │ +
714 _M_get_deleter(const std::type_info&) noexcept override
│ │ │ +
715 { return nullptr; }
│ │ │ +
716 };
│ │ │ +
717#endif // __glibcxx_smart_ptr_for_overwrite
│ │ │ +
718
│ │ │ +
719#if __glibcxx_shared_ptr_arrays >= 201707L // C++ >= 20 && HOSTED
│ │ │ +
720 struct _Sp_overwrite_tag;
│ │ │ +
721
│ │ │ +
722 // For make_shared<T[]>, make_shared<T[N]>, allocate_shared<T[]> etc.
│ │ │ +
723 template<typename _Alloc>
│ │ │ +
724 struct _Sp_counted_array_base
│ │ │ +
725 {
│ │ │ +
726 [[no_unique_address]] _Alloc _M_alloc{};
│ │ │ +
727 size_t _M_n = 0;
│ │ │ +
728 bool _M_overwrite = false;
│ │ │ +
729
│ │ │ +
730 typename allocator_traits<_Alloc>::pointer
│ │ │ +
731 _M_alloc_array(size_t __tail)
│ │ │ +
732 {
│ │ │ +
733 return allocator_traits<_Alloc>::allocate(_M_alloc, _M_n + __tail);
│ │ │ +
734 }
│ │ │ +
735
│ │ │ +
736 void
│ │ │ +
737 _M_dealloc_array(typename allocator_traits<_Alloc>::pointer __p,
│ │ │ +
738 size_t __tail)
│ │ │ +
739 {
│ │ │ +
740 allocator_traits<_Alloc>::deallocate(_M_alloc, __p, _M_n + __tail);
│ │ │ +
741 }
│ │ │ +
742
│ │ │ +
743 // Init the array elements
│ │ │ +
744 template<typename _Init>
│ │ │ +
745 void
│ │ │ +
746 _M_init(typename allocator_traits<_Alloc>::value_type* __p,
│ │ │ +
747 _Init __init)
│ │ │ +
748 {
│ │ │ +
749 using _Tp = remove_pointer_t<_Init>;
│ │ │ +
750 using _Up = typename allocator_traits<_Alloc>::value_type;
│ │ │ +
751
│ │ │ +
752 if constexpr (is_same_v<_Init, _Sp_overwrite_tag>)
│ │ │ +
753 {
│ │ │ + │ │ │ +
755 _M_overwrite = true;
│ │ │ +
756 }
│ │ │ +
757 else if (__init == nullptr)
│ │ │ +
758 std::__uninitialized_default_n_a(__p, _M_n, _M_alloc);
│ │ │ +
759 else if constexpr (!is_array_v<_Tp>)
│ │ │ +
760 std::__uninitialized_fill_n_a(__p, _M_n, *__init, _M_alloc);
│ │ │ +
761 else
│ │ │ +
762 {
│ │ │ +
763#pragma GCC diagnostic push
│ │ │ +
764#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
│ │ │ +
765 struct _Iter
│ │ │ +
766 {
│ │ │ +
767 using value_type = _Up;
│ │ │ +
768 using difference_type = ptrdiff_t;
│ │ │ +
769 using pointer = const _Up*;
│ │ │ +
770 using reference = const _Up&;
│ │ │ +
771 using iterator_category = forward_iterator_tag;
│ │ │ +
772
│ │ │ +
773 const _Up* _M_p;
│ │ │ +
774 size_t _M_len;
│ │ │ +
775 size_t _M_pos;
│ │ │ +
776
│ │ │ +
777 _Iter& operator++() { ++_M_pos; return *this; }
│ │ │ +
778 _Iter operator++(int) { auto __i(*this); ++_M_pos; return __i; }
│ │ │ +
779
│ │ │ +
780 reference operator*() const { return _M_p[_M_pos % _M_len]; }
│ │ │ +
781 pointer operator->() const { return _M_p + (_M_pos % _M_len); }
│ │ │ +
782
│ │ │ +
783 bool operator==(const _Iter& __i) const
│ │ │ +
784 { return _M_pos == __i._M_pos; }
│ │ │ +
785 };
│ │ │ +
786#pragma GCC diagnostic pop
│ │ │ +
787
│ │ │ +
788 _Iter __first{_S_first_elem(__init), sizeof(_Tp) / sizeof(_Up)};
│ │ │ +
789 _Iter __last = __first;
│ │ │ +
790 __last._M_pos = _M_n;
│ │ │ +
791 std::__uninitialized_copy_a(__first, __last, __p, _M_alloc);
│ │ │ +
792 }
│ │ │ +
793 }
│ │ │ +
794
│ │ │ +
795 protected:
│ │ │ +
796 // Destroy the array elements
│ │ │ +
797 void
│ │ │ +
798 _M_dispose_array(typename allocator_traits<_Alloc>::value_type* __p)
│ │ │ +
799 {
│ │ │ +
800 if (_M_overwrite)
│ │ │ +
801 std::destroy_n(__p, _M_n);
│ │ │ +
802 else
│ │ │ +
803 {
│ │ │ +
804 size_t __n = _M_n;
│ │ │ +
805 while (__n--)
│ │ │ +
806 allocator_traits<_Alloc>::destroy(_M_alloc, __p + __n);
│ │ │ +
807 }
│ │ │ +
808 }
│ │ │ +
809
│ │ │ +
810 private:
│ │ │ +
811 template<typename _Tp>
│ │ │ +
812 static _Tp*
│ │ │ +