--- /srv/rebuilderd/tmp/rebuilderdjYedmz/inputs/libstdc++-14-doc_14.3.0-12_all.deb +++ /srv/rebuilderd/tmp/rebuilderdjYedmz/out/libstdc++-14-doc_14.3.0-12_all.deb ├── file list │ @@ -1,3 +1,3 @@ │ -rw-r--r-- 0 0 0 4 2026-02-02 09:13:58.000000 debian-binary │ --rw-r--r-- 0 0 0 182460 2026-02-02 09:13:58.000000 control.tar.xz │ --rw-r--r-- 0 0 0 10479780 2026-02-02 09:13:58.000000 data.tar.xz │ +-rw-r--r-- 0 0 0 183620 2026-02-02 09:13:58.000000 control.tar.xz │ +-rw-r--r-- 0 0 0 10505876 2026-02-02 09:13:58.000000 data.tar.xz ├── control.tar.xz │ ├── control.tar │ │ ├── ./md5sums │ │ │ ├── ./md5sums │ │ │ │┄ Files differ │ │ │ ├── line order │ │ │ │ @@ -188,21 +188,21 @@ │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/manual/using_macros.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/manual/using_namespaces.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/manual/utilities.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/_formulas.tex.gz │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/_formulas_dark.log │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/_formulas_dark.tex.gz │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00002.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00002.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00002_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00005.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00005_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00008.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00008_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00011.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00011.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00011_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00014.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00014.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00014_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00017.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00017_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00020.html │ │ │ │ @@ -458,79 +458,72 @@ │ │ │ │ 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_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00347.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00347.js │ │ │ │ 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.js │ │ │ │ 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_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_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.js │ │ │ │ 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_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00389.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00389.js │ │ │ │ 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.js │ │ │ │ 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_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00398.html │ │ │ │ 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.js │ │ │ │ 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_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 │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00431.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00431.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00431_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00434.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00434.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00434_source.html │ │ │ │ @@ -543,309 +536,318 @@ │ │ │ │ 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.js │ │ │ │ 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.js │ │ │ │ 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_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00488.html │ │ │ │ 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/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.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00509.js │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00509_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/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_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00518.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00518.js │ │ │ │ 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.js │ │ │ │ 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_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.js │ │ │ │ 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_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00545.html │ │ │ │ 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.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00578_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00581.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00581.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00581_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/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_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00596.html │ │ │ │ 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.js │ │ │ │ +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.js │ │ │ │ +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_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00608.html │ │ │ │ +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.js │ │ │ │ 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.js │ │ │ │ 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_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00620.html │ │ │ │ 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.js │ │ │ │ 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_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.js │ │ │ │ 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.js │ │ │ │ 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_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a00683.html │ │ │ │ +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.js │ │ │ │ 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.js │ │ │ │ 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_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.js │ │ │ │ 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_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00776.html │ │ │ │ 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.js │ │ │ │ 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.js │ │ │ │ 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_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00797.html │ │ │ │ -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.js │ │ │ │ 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.js │ │ │ │ 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_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00809.html │ │ │ │ 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.js │ │ │ │ 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_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00821.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00821.js │ │ │ │ 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.js │ │ │ │ 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/a00845.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00845_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00848.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00848_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a00854.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_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00857.html │ │ │ │ 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.js │ │ │ │ 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 │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00869.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00869_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00872.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00872_source.html │ │ │ │ @@ -854,30 +856,28 @@ │ │ │ │ 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_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.js │ │ │ │ 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_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_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.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00908_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00911.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00911.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00911_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00914.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00914.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00914_source.html │ │ │ │ @@ -885,66 +885,66 @@ │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00917_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00920.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00920_source.html │ │ │ │ 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.js │ │ │ │ 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_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.js │ │ │ │ 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.js │ │ │ │ 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 │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00989.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00989_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00992.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a00992_source.html │ │ │ │ @@ -963,48 +963,48 @@ │ │ │ │ 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 │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01052.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01052.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01052_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01055.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01055.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01055_source.html │ │ │ │ @@ -1017,15 +1017,14 @@ │ │ │ │ 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 │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01073.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01073.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01073_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01076.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01076.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01076_source.html │ │ │ │ @@ -1041,206 +1040,207 @@ │ │ │ │ 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.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01121.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01121_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01124.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01124.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01124_source.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.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/a01157_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01160_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01166.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01163_source.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_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01175.html │ │ │ │ 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.js │ │ │ │ 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_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01193.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01193.js │ │ │ │ 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_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.js │ │ │ │ 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.js │ │ │ │ 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_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01220.html │ │ │ │ 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.js │ │ │ │ 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_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.js │ │ │ │ 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_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.js │ │ │ │ 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_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.js │ │ │ │ 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.js │ │ │ │ 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_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01283.html │ │ │ │ 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.js │ │ │ │ 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_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01298.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01298.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01298_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/a01331.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01331.js │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01331_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/a01349.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01349_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01307.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01307.js │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01307_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01316.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01316.js │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01316_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01322.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01322_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01340.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01340.js │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01340_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01352.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01352_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01355.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01355.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01355_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01367.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01367.js │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01367_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01373.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01373_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01364.html │ │ │ │ +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/a01376.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01376.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01376_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01379.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01379.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01379_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01382.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01382_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01394.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01394_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01409.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01409_source.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01427.html │ │ │ │ -usr/share/doc/gcc-14-base/libstdc++/user/a01427.js │ │ │ │ -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_source.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01418.html │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01418.js │ │ │ │ +usr/share/doc/gcc-14-base/libstdc++/user/a01418_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01433.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01433_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01436.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01436.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01436_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01439.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01439.js │ │ │ │ @@ -1257,46 +1257,46 @@ │ │ │ │ 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.js │ │ │ │ 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_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/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/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/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/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/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 │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01502.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01502.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01502_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01505.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01505.js │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01505_source.html │ │ │ │ @@ -1307,44 +1307,44 @@ │ │ │ │ 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_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.js │ │ │ │ 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.js │ │ │ │ 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_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01532.html │ │ │ │ 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.js │ │ │ │ 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.js │ │ │ │ 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 │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01562.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01562_source.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01565.html │ │ │ │ usr/share/doc/gcc-14-base/libstdc++/user/a01565_source.html ├── data.tar.xz │ ├── data.tar │ │ ├── file list │ │ │ @@ -195,32 +195,32 @@ │ │ │ -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 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/manual/utilities.html │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/ │ │ │ -rw-r--r-- 0 root (0) root (0) 2206 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/_formulas.tex.gz │ │ │ -rw-r--r-- 0 root (0) root (0) 2951 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/_formulas_dark.log │ │ │ -rw-r--r-- 0 root (0) root (0) 2222 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/_formulas_dark.tex.gz │ │ │ --rw-r--r-- 0 root (0) root (0) 6503 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00002.html │ │ │ --rw-r--r-- 0 root (0) root (0) 86 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00002.js │ │ │ --rw-r--r-- 0 root (0) root (0) 16030 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00002_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3064 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00002.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14313 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00002_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3084 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00005.html │ │ │ -rw-r--r-- 0 root (0) root (0) 20773 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00005_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3072 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00008.html │ │ │ --rw-r--r-- 0 root (0) root (0) 94422 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00008_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3861 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00011.html │ │ │ --rw-r--r-- 0 root (0) root (0) 44550 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00011_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 103737 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00014.html │ │ │ --rw-r--r-- 0 root (0) root (0) 933 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00014.js │ │ │ --rw-r--r-- 0 root (0) root (0) 64827 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00014_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4325 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00008.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10051 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00008_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 103737 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00011.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 933 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00011.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 64827 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00011_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6503 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00014.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 86 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00014.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 16030 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00014_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4317 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00017.html │ │ │ -rw-r--r-- 0 root (0) root (0) 9089 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00017_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3064 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00020.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14313 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00020_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4325 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00023.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10051 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00023_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3072 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00020.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 94422 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00020_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3861 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00023.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 44550 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00023_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 31288 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00026_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 17647 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00029.html │ │ │ -rw-r--r-- 0 root (0) root (0) 194 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00029.js │ │ │ -rw-r--r-- 0 root (0) root (0) 208257 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00029_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 23026 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00032.html │ │ │ -rw-r--r-- 0 root (0) root (0) 109 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00032.js │ │ │ -rw-r--r-- 0 root (0) root (0) 112441 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00032_source.html │ │ │ @@ -457,926 +457,926 @@ │ │ │ -rw-r--r-- 0 root (0) root (0) 14990 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00329_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 6931 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00332.html │ │ │ -rw-r--r-- 0 root (0) root (0) 47491 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00332_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4680 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00335.html │ │ │ -rw-r--r-- 0 root (0) root (0) 18466 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00335_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5075 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00338.html │ │ │ -rw-r--r-- 0 root (0) root (0) 18634 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00338_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5230 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00341.html │ │ │ --rw-r--r-- 0 root (0) root (0) 196 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00341.js │ │ │ --rw-r--r-- 0 root (0) root (0) 48044 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00341_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4558 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00344.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11985 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00344_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8324 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00347.html │ │ │ --rw-r--r-- 0 root (0) root (0) 444 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00347.js │ │ │ --rw-r--r-- 0 root (0) root (0) 49480 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00347_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6454 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00350.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9528 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00350_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4003 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00353.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15705 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00353_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7236 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00356.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14742 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00356_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3727 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00359.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11904 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00359_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6594 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00362.html │ │ │ --rw-r--r-- 0 root (0) root (0) 105 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00362.js │ │ │ --rw-r--r-- 0 root (0) root (0) 12926 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00362_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4828 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00365.html │ │ │ --rw-r--r-- 0 root (0) root (0) 209382 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00365_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 105712 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00368.html │ │ │ --rw-r--r-- 0 root (0) root (0) 94588 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00368_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3875 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00371.html │ │ │ --rw-r--r-- 0 root (0) root (0) 119704 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00371_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11118 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00374.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37833 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00374_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 88034 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00377.html │ │ │ --rw-r--r-- 0 root (0) root (0) 111874 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00377_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 22841 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00380.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 43985 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00341.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2718 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00341.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 285180 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00341_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3875 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00344.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 119704 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00344_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10710 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00347.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 506 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00347.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 81890 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00347_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10669 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00350.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 783 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00350.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 69290 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00350_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4846 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00353.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 120577 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00353_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 24623 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00356.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4084 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00356.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 94934 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00356_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17759 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00359.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 133545 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00359_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11118 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00362.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37833 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00362_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4109 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00368.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 42913 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00368_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35475 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00371.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6354 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00371.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 269270 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00371_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7236 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00374.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14742 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00374_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14338 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00377.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 506 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00377.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 158799 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00377_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 26175 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00380.html │ │ │ -rw-r--r-- 0 root (0) root (0) 187 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00380.js │ │ │ --rw-r--r-- 0 root (0) root (0) 420432 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00380_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 26175 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00383.html │ │ │ --rw-r--r-- 0 root (0) root (0) 187 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00383.js │ │ │ --rw-r--r-- 0 root (0) root (0) 488584 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00383_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4109 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00386.html │ │ │ --rw-r--r-- 0 root (0) root (0) 42913 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00386_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5230 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00389.html │ │ │ --rw-r--r-- 0 root (0) root (0) 206 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00389.js │ │ │ --rw-r--r-- 0 root (0) root (0) 24364 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00389_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5282 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00392.html │ │ │ --rw-r--r-- 0 root (0) root (0) 339 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00392.js │ │ │ --rw-r--r-- 0 root (0) root (0) 20745 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00392_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6514 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00395.html │ │ │ --rw-r--r-- 0 root (0) root (0) 36584 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00395_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10533 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00398.html │ │ │ --rw-r--r-- 0 root (0) root (0) 105007 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00398_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4625 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00401.html │ │ │ --rw-r--r-- 0 root (0) root (0) 56250 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00401_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13008 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00404.html │ │ │ --rw-r--r-- 0 root (0) root (0) 328 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00404.js │ │ │ --rw-r--r-- 0 root (0) root (0) 385800 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00404_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7793 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00407.html │ │ │ --rw-r--r-- 0 root (0) root (0) 392723 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00407_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9686 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00410.html │ │ │ --rw-r--r-- 0 root (0) root (0) 293 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00410.js │ │ │ --rw-r--r-- 0 root (0) root (0) 62271 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00410_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10710 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00413.html │ │ │ --rw-r--r-- 0 root (0) root (0) 506 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00413.js │ │ │ --rw-r--r-- 0 root (0) root (0) 81890 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00413_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12004 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00416.html │ │ │ --rw-r--r-- 0 root (0) root (0) 582 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00416.js │ │ │ --rw-r--r-- 0 root (0) root (0) 234507 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00416_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14338 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00419.html │ │ │ --rw-r--r-- 0 root (0) root (0) 506 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00419.js │ │ │ --rw-r--r-- 0 root (0) root (0) 158799 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00419_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12149 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00422.html │ │ │ --rw-r--r-- 0 root (0) root (0) 582 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00422.js │ │ │ --rw-r--r-- 0 root (0) root (0) 220340 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00422_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12256 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00425.html │ │ │ --rw-r--r-- 0 root (0) root (0) 582 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00425.js │ │ │ --rw-r--r-- 0 root (0) root (0) 252634 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00425_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9775 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00428.html │ │ │ --rw-r--r-- 0 root (0) root (0) 257 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00428.js │ │ │ --rw-r--r-- 0 root (0) root (0) 322186 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00428_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11017 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00431.html │ │ │ --rw-r--r-- 0 root (0) root (0) 651 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00431.js │ │ │ --rw-r--r-- 0 root (0) root (0) 405576 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00431_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9831 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00434.html │ │ │ --rw-r--r-- 0 root (0) root (0) 503 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00434.js │ │ │ --rw-r--r-- 0 root (0) root (0) 433095 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00434_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7988 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00437.html │ │ │ --rw-r--r-- 0 root (0) root (0) 97 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00437.js │ │ │ --rw-r--r-- 0 root (0) root (0) 266733 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00437_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5696 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00440.html │ │ │ --rw-r--r-- 0 root (0) root (0) 245 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00440.js │ │ │ --rw-r--r-- 0 root (0) root (0) 66227 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00440_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6353 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00443.html │ │ │ --rw-r--r-- 0 root (0) root (0) 266 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00443.js │ │ │ --rw-r--r-- 0 root (0) root (0) 43346 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00443_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8882 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00446.html │ │ │ --rw-r--r-- 0 root (0) root (0) 300 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00446.js │ │ │ --rw-r--r-- 0 root (0) root (0) 141294 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00446_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6912 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00449.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27621 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00449_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4837 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00452.html │ │ │ --rw-r--r-- 0 root (0) root (0) 69264 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00452_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35475 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00455.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6354 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00455.js │ │ │ --rw-r--r-- 0 root (0) root (0) 269270 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00455_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4327 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00458.html │ │ │ --rw-r--r-- 0 root (0) root (0) 65454 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00458_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13403 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00461.html │ │ │ --rw-r--r-- 0 root (0) root (0) 524 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00461.js │ │ │ --rw-r--r-- 0 root (0) root (0) 359717 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00461_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27926 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00464.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2134 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00464.js │ │ │ --rw-r--r-- 0 root (0) root (0) 139379 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00464_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4133 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00470.html │ │ │ --rw-r--r-- 0 root (0) root (0) 45369 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00470_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3241 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00473.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8448 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00473_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3876 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00476.html │ │ │ --rw-r--r-- 0 root (0) root (0) 95874 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00476_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4543 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00479.html │ │ │ --rw-r--r-- 0 root (0) root (0) 54644 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00479_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5512 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00482.html │ │ │ --rw-r--r-- 0 root (0) root (0) 98305 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00482_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4871 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00485.html │ │ │ --rw-r--r-- 0 root (0) root (0) 95443 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00485_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3880 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00488.html │ │ │ --rw-r--r-- 0 root (0) root (0) 46653 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00488_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8193 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00491.html │ │ │ --rw-r--r-- 0 root (0) root (0) 106 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00491.js │ │ │ --rw-r--r-- 0 root (0) root (0) 62182 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00491_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3872 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00494.html │ │ │ --rw-r--r-- 0 root (0) root (0) 89672 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00494_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4399 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00497.html │ │ │ --rw-r--r-- 0 root (0) root (0) 47268 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00497_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10852 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00500.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1432 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00500.js │ │ │ --rw-r--r-- 0 root (0) root (0) 40017 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00500_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 24623 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00503.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4084 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00503.js │ │ │ --rw-r--r-- 0 root (0) root (0) 94934 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00503_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4846 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00506.html │ │ │ --rw-r--r-- 0 root (0) root (0) 120577 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00506_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35113 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00509.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2584 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00509.js │ │ │ --rw-r--r-- 0 root (0) root (0) 627845 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00509_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 39490 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00515.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3573 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00515.js │ │ │ --rw-r--r-- 0 root (0) root (0) 1198815 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00515_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7022 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00518.html │ │ │ --rw-r--r-- 0 root (0) root (0) 379 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00518.js │ │ │ --rw-r--r-- 0 root (0) root (0) 38756 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00518_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7746 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00521.html │ │ │ --rw-r--r-- 0 root (0) root (0) 655 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00521.js │ │ │ --rw-r--r-- 0 root (0) root (0) 47303 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00521_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3625 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00524.html │ │ │ --rw-r--r-- 0 root (0) root (0) 26137 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00524_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5782 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00527.html │ │ │ --rw-r--r-- 0 root (0) root (0) 98 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00527.js │ │ │ --rw-r--r-- 0 root (0) root (0) 97301 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00527_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3254 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00530.html │ │ │ --rw-r--r-- 0 root (0) root (0) 65324 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00530_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3257 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00536.html │ │ │ --rw-r--r-- 0 root (0) root (0) 36681 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00536_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7399 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00539.html │ │ │ --rw-r--r-- 0 root (0) root (0) 46041 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00539_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9239 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00542.html │ │ │ --rw-r--r-- 0 root (0) root (0) 109134 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00542_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4096 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00545.html │ │ │ --rw-r--r-- 0 root (0) root (0) 50553 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00545_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12069 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00548.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1287 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00548.js │ │ │ --rw-r--r-- 0 root (0) root (0) 52835 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00548_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4932 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00551.html │ │ │ --rw-r--r-- 0 root (0) root (0) 343973 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00551_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14248 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00554.html │ │ │ --rw-r--r-- 0 root (0) root (0) 336 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00554.js │ │ │ --rw-r--r-- 0 root (0) root (0) 393566 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00554_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6761 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00557.html │ │ │ --rw-r--r-- 0 root (0) root (0) 254948 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00557_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 24818 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00560.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1413 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00560.js │ │ │ --rw-r--r-- 0 root (0) root (0) 562945 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00560_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10296 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00563.html │ │ │ --rw-r--r-- 0 root (0) root (0) 127736 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00563_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6984 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00566.html │ │ │ --rw-r--r-- 0 root (0) root (0) 180 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00566.js │ │ │ --rw-r--r-- 0 root (0) root (0) 70277 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00566_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5926 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00569.html │ │ │ --rw-r--r-- 0 root (0) root (0) 171 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00569.js │ │ │ --rw-r--r-- 0 root (0) root (0) 168837 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00569_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5886 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00572.html │ │ │ --rw-r--r-- 0 root (0) root (0) 121276 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00572_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7046 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00575.html │ │ │ --rw-r--r-- 0 root (0) root (0) 172 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00575.js │ │ │ --rw-r--r-- 0 root (0) root (0) 227946 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00575_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 25562 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00578.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2008 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00578.js │ │ │ --rw-r--r-- 0 root (0) root (0) 232166 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00578_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4124 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00581.html │ │ │ --rw-r--r-- 0 root (0) root (0) 49375 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00581_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3664 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00584.html │ │ │ --rw-r--r-- 0 root (0) root (0) 337843 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00584_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4110 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00590.html │ │ │ --rw-r--r-- 0 root (0) root (0) 51135 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00590_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4017 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00593.html │ │ │ --rw-r--r-- 0 root (0) root (0) 36280 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00593_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4837 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00596.html │ │ │ --rw-r--r-- 0 root (0) root (0) 212628 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00596_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6719 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00611.html │ │ │ --rw-r--r-- 0 root (0) root (0) 98 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00611.js │ │ │ --rw-r--r-- 0 root (0) root (0) 90315 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00611_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9298 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00614.html │ │ │ --rw-r--r-- 0 root (0) root (0) 604 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00614.js │ │ │ --rw-r--r-- 0 root (0) root (0) 294841 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00614_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4608 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00617.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13403 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00617_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 19764 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00620.html │ │ │ --rw-r--r-- 0 root (0) root (0) 233723 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00620_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5862 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00623.html │ │ │ --rw-r--r-- 0 root (0) root (0) 732729 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00623_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9550 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00626.html │ │ │ --rw-r--r-- 0 root (0) root (0) 592 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00626.js │ │ │ --rw-r--r-- 0 root (0) root (0) 137947 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00626_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 43352 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00629.html │ │ │ --rw-r--r-- 0 root (0) root (0) 387 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00629.js │ │ │ --rw-r--r-- 0 root (0) root (0) 719342 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00629_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 43985 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00632.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2718 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00632.js │ │ │ --rw-r--r-- 0 root (0) root (0) 285180 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00632_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5064 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00635.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21682 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00635_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7499 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00638.html │ │ │ --rw-r--r-- 0 root (0) root (0) 177 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00638.js │ │ │ --rw-r--r-- 0 root (0) root (0) 183072 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00638_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 43118 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00641.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1781 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00641.js │ │ │ --rw-r--r-- 0 root (0) root (0) 889910 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00641_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4849 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00644.html │ │ │ --rw-r--r-- 0 root (0) root (0) 41190 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00644_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4805 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00647.html │ │ │ --rw-r--r-- 0 root (0) root (0) 109141 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00647_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3225 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00650.html │ │ │ --rw-r--r-- 0 root (0) root (0) 73930 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00650_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3249 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00653.html │ │ │ --rw-r--r-- 0 root (0) root (0) 75650 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00653_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3583 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00656.html │ │ │ --rw-r--r-- 0 root (0) root (0) 62941 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00656_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3620 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00659.html │ │ │ --rw-r--r-- 0 root (0) root (0) 20305 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00659_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14361 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00662.html │ │ │ --rw-r--r-- 0 root (0) root (0) 449 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00662.js │ │ │ --rw-r--r-- 0 root (0) root (0) 52954 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00662_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8620 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00665.html │ │ │ --rw-r--r-- 0 root (0) root (0) 49114 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00665_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37493 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00668_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16978 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00671.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1172 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00671.js │ │ │ --rw-r--r-- 0 root (0) root (0) 228470 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00671_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4579 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00674.html │ │ │ --rw-r--r-- 0 root (0) root (0) 108 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00674.js │ │ │ --rw-r--r-- 0 root (0) root (0) 81877 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00674_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13243 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00677.html │ │ │ --rw-r--r-- 0 root (0) root (0) 73272 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00677_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 41530 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00680.html │ │ │ --rw-r--r-- 0 root (0) root (0) 172874 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00680_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 122151 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00686.html │ │ │ --rw-r--r-- 0 root (0) root (0) 341417 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00686_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4569 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00689.html │ │ │ --rw-r--r-- 0 root (0) root (0) 152479 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00689_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9503 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00692.html │ │ │ --rw-r--r-- 0 root (0) root (0) 984 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00692.js │ │ │ --rw-r--r-- 0 root (0) root (0) 193002 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00692_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6181 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00695.html │ │ │ --rw-r--r-- 0 root (0) root (0) 379 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00695.js │ │ │ --rw-r--r-- 0 root (0) root (0) 26703 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00695_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4231 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00698.html │ │ │ --rw-r--r-- 0 root (0) root (0) 108 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00698.js │ │ │ --rw-r--r-- 0 root (0) root (0) 23348 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00698_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17153 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00701.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1348 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00701.js │ │ │ --rw-r--r-- 0 root (0) root (0) 272653 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00701_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16252 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00704.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1002 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00704.js │ │ │ --rw-r--r-- 0 root (0) root (0) 92617 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00704_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10669 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00707.html │ │ │ --rw-r--r-- 0 root (0) root (0) 783 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00707.js │ │ │ --rw-r--r-- 0 root (0) root (0) 69290 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00707_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8657 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00710.html │ │ │ --rw-r--r-- 0 root (0) root (0) 108 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00710.js │ │ │ --rw-r--r-- 0 root (0) root (0) 53751 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00710_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12093 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00713.html │ │ │ --rw-r--r-- 0 root (0) root (0) 175 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00713.js │ │ │ --rw-r--r-- 0 root (0) root (0) 46367 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00713_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 24709 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00719.html │ │ │ --rw-r--r-- 0 root (0) root (0) 330 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00719.js │ │ │ --rw-r--r-- 0 root (0) root (0) 266256 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00719_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8620 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00722.html │ │ │ --rw-r--r-- 0 root (0) root (0) 340 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00722.js │ │ │ --rw-r--r-- 0 root (0) root (0) 49779 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00722_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 76407 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00725.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2390 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00725.js │ │ │ --rw-r--r-- 0 root (0) root (0) 386347 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00725_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 108548 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00728.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10983 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00728.js │ │ │ --rw-r--r-- 0 root (0) root (0) 948069 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00728_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3218 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00731.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27000 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00731_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4816 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00734.html │ │ │ --rw-r--r-- 0 root (0) root (0) 84276 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00734_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 25969 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00737.html │ │ │ --rw-r--r-- 0 root (0) root (0) 175 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00737.js │ │ │ --rw-r--r-- 0 root (0) root (0) 143046 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00737_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3261 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00740.html │ │ │ --rw-r--r-- 0 root (0) root (0) 97775 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00740_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5676 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00743.html │ │ │ --rw-r--r-- 0 root (0) root (0) 392 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00743.js │ │ │ --rw-r--r-- 0 root (0) root (0) 37917 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00743_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3225 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00746.html │ │ │ --rw-r--r-- 0 root (0) root (0) 184429 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00746_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3244 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00749.html │ │ │ --rw-r--r-- 0 root (0) root (0) 113839 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00749_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 120402 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00752.html │ │ │ --rw-r--r-- 0 root (0) root (0) 663382 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00752_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21831 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00755.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2393 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00755.js │ │ │ --rw-r--r-- 0 root (0) root (0) 76462 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00755_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8137 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00758.html │ │ │ --rw-r--r-- 0 root (0) root (0) 266 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00758.js │ │ │ --rw-r--r-- 0 root (0) root (0) 49547 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00758_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6251 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00761.html │ │ │ --rw-r--r-- 0 root (0) root (0) 47095 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00761_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 34459 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00764.html │ │ │ --rw-r--r-- 0 root (0) root (0) 58233 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00764_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3209 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00767.html │ │ │ --rw-r--r-- 0 root (0) root (0) 77790 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00767_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13431 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00770.html │ │ │ --rw-r--r-- 0 root (0) root (0) 662 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00770.js │ │ │ --rw-r--r-- 0 root (0) root (0) 49346 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00770_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3604 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00773.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16376 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00773_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3235 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00776.html │ │ │ --rw-r--r-- 0 root (0) root (0) 143609 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00776_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4661 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00779.html │ │ │ --rw-r--r-- 0 root (0) root (0) 160 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00779.js │ │ │ --rw-r--r-- 0 root (0) root (0) 182228 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00779_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8770 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00782.html │ │ │ --rw-r--r-- 0 root (0) root (0) 97 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00782.js │ │ │ --rw-r--r-- 0 root (0) root (0) 32321 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00782_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10346 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00785.html │ │ │ --rw-r--r-- 0 root (0) root (0) 83 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00785.js │ │ │ --rw-r--r-- 0 root (0) root (0) 53172 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00785_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10778 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00788.html │ │ │ --rw-r--r-- 0 root (0) root (0) 23971 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00788_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3623 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00791.html │ │ │ --rw-r--r-- 0 root (0) root (0) 48430 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00791_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13986 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00794_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5712 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00797.html │ │ │ --rw-r--r-- 0 root (0) root (0) 89197 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00797_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7809 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00800.html │ │ │ --rw-r--r-- 0 root (0) root (0) 287 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00800.js │ │ │ --rw-r--r-- 0 root (0) root (0) 163493 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00800_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11092 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00803.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15793 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00803_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17759 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00806.html │ │ │ --rw-r--r-- 0 root (0) root (0) 133545 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00806_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3233 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00809.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8404 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00809_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12260 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00812.html │ │ │ --rw-r--r-- 0 root (0) root (0) 189 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00812.js │ │ │ --rw-r--r-- 0 root (0) root (0) 311126 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00812_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4365 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00818.html │ │ │ --rw-r--r-- 0 root (0) root (0) 50037 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00818_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4653 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00821.html │ │ │ --rw-r--r-- 0 root (0) root (0) 181 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00821.js │ │ │ --rw-r--r-- 0 root (0) root (0) 21613 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00821_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 136626 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00827_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 136620 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00830_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 43725 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00833_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 28086 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00836_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 309275 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00839.html │ │ │ --rw-r--r-- 0 root (0) root (0) 276275 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00839_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2780 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00842_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3664 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00845.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15709 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00845_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3680 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00848.html │ │ │ --rw-r--r-- 0 root (0) root (0) 28954 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00848_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4218 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00854.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21440 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00854_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6927 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00857.html │ │ │ --rw-r--r-- 0 root (0) root (0) 20967 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00857_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4456 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00860.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11388 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00860_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4316 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00863.html │ │ │ --rw-r--r-- 0 root (0) root (0) 105 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00863.js │ │ │ --rw-r--r-- 0 root (0) root (0) 13531 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00863_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3653 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00866.html │ │ │ --rw-r--r-- 0 root (0) root (0) 25993 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00866_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3656 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00869.html │ │ │ --rw-r--r-- 0 root (0) root (0) 36177 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00869_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3174 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00872.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21622 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00872_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3186 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00875.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13206 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00875_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3174 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00878.html │ │ │ --rw-r--r-- 0 root (0) root (0) 53316 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00878_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6246 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00881.html │ │ │ --rw-r--r-- 0 root (0) root (0) 28105 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00881_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3272 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00884.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7801 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00884_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13213 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00887.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11659 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00887_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6643 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00890.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8779 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00890_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6450 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00893.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16930 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00893_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3664 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00896.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17266 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00896_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4096 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00899.html │ │ │ --rw-r--r-- 0 root (0) root (0) 64 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00899.js │ │ │ --rw-r--r-- 0 root (0) root (0) 13626 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00899_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 488584 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00380_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9298 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00383.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 604 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00383.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 294841 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00383_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4110 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00386.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 51135 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00386_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4625 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00389.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 56250 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00389_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6353 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00392.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 266 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00392.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 43346 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00392_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4837 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00395.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 212628 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00395_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4569 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00398.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 152479 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00398_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6594 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00401.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 105 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00401.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 12926 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00401_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27926 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00404.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2134 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00404.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 139379 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00404_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 122151 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00407.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 341417 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00407_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13403 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00410.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 524 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00410.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 359717 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00410_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4828 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00416.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 209382 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00416_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3225 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00419.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 73930 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00419_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11092 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00422.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15793 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00422_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4837 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00425.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 69264 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00425_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13243 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00428.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 73272 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00428_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13008 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00431.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 328 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00431.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 385800 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00431_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 39490 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00434.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3573 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00434.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 1198815 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00434_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6984 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00437.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 180 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00437.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 70277 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00437_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4231 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00440.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 108 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00440.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 23348 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00440_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13431 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00443.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 662 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00443.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 49346 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00443_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 43118 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00446.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1781 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00446.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 889910 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00446_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12260 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00449.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 189 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00449.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 311126 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00449_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11017 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00452.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 651 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00452.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 405576 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00452_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5064 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00455.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21682 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00455_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12004 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00458.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 582 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00458.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 234507 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00458_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3625 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00461.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 26137 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00461_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4133 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00464.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 45369 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00464_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4932 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00467.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 343973 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00467_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7809 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00470.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 287 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00470.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 163493 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00470_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3872 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00473.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 89672 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00473_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 105712 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00476.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 94588 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00476_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7399 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00479.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 46041 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00479_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 88034 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00482.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 111874 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00482_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4871 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00488.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 95443 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00488_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3254 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00491.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 65324 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00491_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6719 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00494.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 98 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00494.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 90315 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00494_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10346 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00497.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 83 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00497.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 53172 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00497_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3604 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00500.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16376 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00500_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8193 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00503.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 106 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00503.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 62182 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00503_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7988 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00506.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 97 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00506.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 266733 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00506_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9503 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00512.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 984 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00512.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 193002 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00512_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13986 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00515_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5282 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00518.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 339 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00518.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 20745 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00518_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17153 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00521.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1348 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00521.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 272653 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00521_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3244 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00527.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 113839 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00527_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3225 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00530.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 184429 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00530_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4327 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00533.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 65454 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00533_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 25562 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00536.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2008 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00536.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 232166 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00536_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 41530 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00539.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 172874 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00539_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4017 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00542.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 36280 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00542_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6912 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00545.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27621 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00545_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16252 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00548.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1002 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00548.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 92617 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00548_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 24709 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00551.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 330 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00551.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 266256 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00551_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4653 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00557.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 181 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00557.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 21613 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00557_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4003 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00560.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15705 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00560_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 22841 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00563.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 187 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00563.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 420432 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00563_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3233 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00566.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8404 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00566_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4543 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00569.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 54644 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00569_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4661 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00572.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 160 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00572.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 182228 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00572_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6251 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00575.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 47095 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00575_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 19764 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00578.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 233723 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00578_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5782 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00581.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 98 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00581.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 97301 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00581_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6761 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00596.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 254948 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00596_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5230 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00599.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 196 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00599.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 48044 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00599_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8657 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00602.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 108 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00602.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 53751 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00602_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7793 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00605.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 392723 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00605_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6514 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00608.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 36584 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00608_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4849 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00611.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 41190 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00611_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8137 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00614.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 266 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00614.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 49547 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00614_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3209 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00617.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 77790 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00617_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 34459 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00620.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 58233 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00620_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5926 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00623.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 171 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00623.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 168837 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00623_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3235 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00626.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 143609 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00626_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4096 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00629.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 50553 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00629_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5512 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00632.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 98305 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00632_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7499 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00635.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 177 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00635.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 183072 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00635_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9831 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00638.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 503 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00638.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 433095 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00638_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10778 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00641.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 23971 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00641_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12256 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00644.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 582 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00644.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 252634 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00644_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7746 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00647.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 655 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00647.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 47303 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00647_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6181 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00650.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 379 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00650.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 26703 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00650_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9775 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00653.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 257 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00653.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 322186 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00653_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4805 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00656.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 109141 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00656_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9550 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00659.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 592 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00659.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 137947 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00659_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3261 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00662.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 97775 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00662_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14248 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00665.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 336 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00665.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 393566 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00665_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35113 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00668.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2584 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00668.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 627845 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00668_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4399 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00671.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 47268 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00671_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4558 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00674.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11985 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00674_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4124 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00677.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 49375 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00677_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5862 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00683.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 732729 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00683_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5676 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00686.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 392 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00686.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 37917 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00686_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 25969 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00689.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 175 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00689.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 143046 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00689_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8620 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00692.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 340 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00692.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 49779 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00692_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5230 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00695.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 206 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00695.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 24364 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00695_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3583 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00698.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 62941 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00698_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8324 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00701.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 444 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00701.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 49480 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00701_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4365 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00704.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 50037 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00704_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3241 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00707.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8448 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00707_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7022 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00710.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 379 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00710.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 38756 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00710_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 24818 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00713.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1413 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00713.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 562945 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00713_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12093 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00716.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 175 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00716.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 46367 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00716_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3257 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00719.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 36681 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00719_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5712 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00722.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 89197 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00722_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3880 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00725.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 46653 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00725_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4608 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00728.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13403 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00728_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 108548 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00731.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10983 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00731.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 948069 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00731_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10852 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00734.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1432 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00734.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 40017 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00734_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4816 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00737.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 84276 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00737_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 76407 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00740.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2390 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00740.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 386347 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00740_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8770 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00743.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 97 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00743.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 32321 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00743_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14361 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00746.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 449 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00746.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 52954 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00746_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9686 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00749.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 293 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00749.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 62271 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00749_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4579 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00752.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 108 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00752.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 81877 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00752_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3620 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00755.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 20305 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00755_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9239 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00758.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 109134 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00758_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3727 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00761.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11904 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00761_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3218 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00764.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27000 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00764_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10533 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00767.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 105007 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00767_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12149 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00770.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 582 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00770.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 220340 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00770_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 120402 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00773.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 663382 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00773_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3876 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00776.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 95874 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00776_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37493 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00779_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7046 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00782.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 172 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00782.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 227946 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00782_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5886 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00785.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 121276 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00785_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21831 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00788.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2393 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00788.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 76462 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00788_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8882 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00791.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 300 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00791.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 141294 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00791_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3623 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00794.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 48430 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00794_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3249 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00800.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 75650 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00800_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12069 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00803.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1287 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00803.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 52835 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00803_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10296 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00806.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 127736 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00806_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8620 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00809.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 49114 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00809_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6454 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00812.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9528 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00812_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5696 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00815.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 245 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00815.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 66227 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00815_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3664 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00818.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 337843 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00818_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 43352 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00821.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 387 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00821.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 719342 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00821_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16978 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00824.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1172 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00824.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 228470 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00824_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3174 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00827.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21622 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00827_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4096 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00830.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 64 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00830.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 13626 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00830_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6246 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00833.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 28105 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00833_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3272 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00836.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7801 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00836_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 28086 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00839_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4456 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00842.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11388 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00842_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3186 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00845.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13206 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00845_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 136626 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00848_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3174 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00851.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 53316 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00851_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 43725 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00854_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6643 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00857.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8779 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00857_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3664 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00863.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15709 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00863_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13213 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00866.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11659 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00866_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4218 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00869.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21440 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00869_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6450 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00872.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16930 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00872_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3653 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00875.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 25993 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00875_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6927 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00878.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 20967 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00878_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3680 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00881.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 28954 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00881_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 309275 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00884.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 276275 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00884_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4316 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00887.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 105 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00887.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 13531 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00887_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3664 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00890.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17266 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00890_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3656 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00893.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 36177 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00893_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 136620 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00896_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2780 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00899_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4658 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00902.html │ │ │ -rw-r--r-- 0 root (0) root (0) 27314 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00902_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3249 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00905.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12431 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00905_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5748 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00908.html │ │ │ --rw-r--r-- 0 root (0) root (0) 176 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00908.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34624 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00908_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4388 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00911.html │ │ │ --rw-r--r-- 0 root (0) root (0) 80 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00911.js │ │ │ --rw-r--r-- 0 root (0) root (0) 66125 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00911_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4388 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00905.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 80 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00905.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 66125 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00905_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3249 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00908.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12431 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00908_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5748 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00911.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 176 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00911.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34624 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00911_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 11617 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00914.html │ │ │ -rw-r--r-- 0 root (0) root (0) 225 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00914.js │ │ │ -rw-r--r-- 0 root (0) root (0) 100424 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00914_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 10597 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00917.html │ │ │ -rw-r--r-- 0 root (0) root (0) 97419 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00917_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4264 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00920.html │ │ │ -rw-r--r-- 0 root (0) root (0) 47020 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00920_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10010 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00923.html │ │ │ --rw-r--r-- 0 root (0) root (0) 102 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00923.js │ │ │ --rw-r--r-- 0 root (0) root (0) 116315 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00923_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4979 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00926.html │ │ │ --rw-r--r-- 0 root (0) root (0) 22819 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00926_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4225 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00929.html │ │ │ --rw-r--r-- 0 root (0) root (0) 111 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00929.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34603 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00929_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4492 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00932.html │ │ │ --rw-r--r-- 0 root (0) root (0) 171 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00932.js │ │ │ --rw-r--r-- 0 root (0) root (0) 40433 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00932_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4891 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00935.html │ │ │ --rw-r--r-- 0 root (0) root (0) 33452 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00935_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5569 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00938.html │ │ │ --rw-r--r-- 0 root (0) root (0) 411 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00938.js │ │ │ --rw-r--r-- 0 root (0) root (0) 30581 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00938_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4939 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00941.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21038 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00941_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8091 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00944.html │ │ │ --rw-r--r-- 0 root (0) root (0) 209 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00944.js │ │ │ --rw-r--r-- 0 root (0) root (0) 98722 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00944_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17326 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00947.html │ │ │ --rw-r--r-- 0 root (0) root (0) 100862 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00947_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5569 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00923.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 411 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00923.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 30581 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00923_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8859 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00926.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 75 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00926.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 97944 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00926_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4328 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00929.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 144 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00929.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 27400 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00929_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10192 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00932.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 112 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00932.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 121861 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00932_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 63849 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00935.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1361 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00935.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 88835 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00935_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4891 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00938.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 33452 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00938_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8091 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00941.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 209 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00941.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 98722 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00941_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4492 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00944.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 171 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00944.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 40433 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00944_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4939 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00947.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21038 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00947_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 17331 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00950.html │ │ │ -rw-r--r-- 0 root (0) root (0) 378 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00950.js │ │ │ -rw-r--r-- 0 root (0) root (0) 218023 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00950_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4328 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00953.html │ │ │ --rw-r--r-- 0 root (0) root (0) 144 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00953.js │ │ │ --rw-r--r-- 0 root (0) root (0) 27400 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00953_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4972 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00956.html │ │ │ --rw-r--r-- 0 root (0) root (0) 254 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00956.js │ │ │ --rw-r--r-- 0 root (0) root (0) 66053 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00956_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10115 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00959.html │ │ │ --rw-r--r-- 0 root (0) root (0) 107 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00959.js │ │ │ --rw-r--r-- 0 root (0) root (0) 114652 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00959_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10192 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00962.html │ │ │ --rw-r--r-- 0 root (0) root (0) 112 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00962.js │ │ │ --rw-r--r-- 0 root (0) root (0) 121861 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00962_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10087 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00965.html │ │ │ --rw-r--r-- 0 root (0) root (0) 107 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00965.js │ │ │ --rw-r--r-- 0 root (0) root (0) 140538 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00965_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 63849 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00968.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1361 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00968.js │ │ │ --rw-r--r-- 0 root (0) root (0) 88835 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00968_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 18979 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00971.html │ │ │ --rw-r--r-- 0 root (0) root (0) 864 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00971.js │ │ │ --rw-r--r-- 0 root (0) root (0) 65086 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00971_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 22260 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00974.html │ │ │ --rw-r--r-- 0 root (0) root (0) 222 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00974.js │ │ │ --rw-r--r-- 0 root (0) root (0) 81181 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00974_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8859 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00977.html │ │ │ --rw-r--r-- 0 root (0) root (0) 75 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00977.js │ │ │ --rw-r--r-- 0 root (0) root (0) 97944 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00977_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35024 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00980.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27403 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00980_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10315 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00983.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13072 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00983_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10315 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00953.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13072 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00953_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10010 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00956.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 102 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00956.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 116315 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00956_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 22260 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00959.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 222 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00959.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 81181 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00959_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4225 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00962.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 111 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00962.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34603 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00962_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4979 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00965.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 22819 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00965_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4972 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00968.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 254 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00968.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 66053 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00968_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17326 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00971.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 100862 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00971_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35024 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00974.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27403 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00974_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10115 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00977.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 107 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00977.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 114652 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00977_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 18979 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00980.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 864 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00980.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 65086 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00980_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10087 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00983.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 107 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00983.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 140538 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00983_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5491 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00986.html │ │ │ -rw-r--r-- 0 root (0) root (0) 17565 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00986_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 43877 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00989.html │ │ │ -rw-r--r-- 0 root (0) root (0) 441010 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00989_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 12695 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00992.html │ │ │ -rw-r--r-- 0 root (0) root (0) 163257 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00992_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6626 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00995.html │ │ │ --rw-r--r-- 0 root (0) root (0) 225 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00995.js │ │ │ --rw-r--r-- 0 root (0) root (0) 59053 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00995_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5006 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00998.html │ │ │ --rw-r--r-- 0 root (0) root (0) 226 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00998.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34472 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00998_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9288 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01001.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2007 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01001.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34130 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01001_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9426 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01004.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1255 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01004.js │ │ │ --rw-r--r-- 0 root (0) root (0) 40311 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01004_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8887 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01007.html │ │ │ --rw-r--r-- 0 root (0) root (0) 702 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01007.js │ │ │ --rw-r--r-- 0 root (0) root (0) 49982 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01007_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8549 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01010.html │ │ │ --rw-r--r-- 0 root (0) root (0) 172 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01010.js │ │ │ --rw-r--r-- 0 root (0) root (0) 89443 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01010_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7713 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01013.html │ │ │ --rw-r--r-- 0 root (0) root (0) 81170 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01013_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4980 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01016.html │ │ │ --rw-r--r-- 0 root (0) root (0) 213 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01016.js │ │ │ --rw-r--r-- 0 root (0) root (0) 32509 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01016_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8989 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01019.html │ │ │ --rw-r--r-- 0 root (0) root (0) 960 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01019.js │ │ │ --rw-r--r-- 0 root (0) root (0) 114914 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01019_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4148 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01022.html │ │ │ --rw-r--r-- 0 root (0) root (0) 82 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01022.js │ │ │ --rw-r--r-- 0 root (0) root (0) 25793 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01022_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6067 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01025.html │ │ │ --rw-r--r-- 0 root (0) root (0) 334 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01025.js │ │ │ --rw-r--r-- 0 root (0) root (0) 35952 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01025_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5516 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01028.html │ │ │ --rw-r--r-- 0 root (0) root (0) 199 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01028.js │ │ │ --rw-r--r-- 0 root (0) root (0) 35476 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01028_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7140 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01031.html │ │ │ --rw-r--r-- 0 root (0) root (0) 414 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01031.js │ │ │ --rw-r--r-- 0 root (0) root (0) 79372 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01031_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5919 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01034.html │ │ │ --rw-r--r-- 0 root (0) root (0) 347 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01034.js │ │ │ --rw-r--r-- 0 root (0) root (0) 44702 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01034_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3218 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01037.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10413 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01037_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4611 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01040.html │ │ │ --rw-r--r-- 0 root (0) root (0) 135 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01040.js │ │ │ --rw-r--r-- 0 root (0) root (0) 27105 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01040_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4678 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01043.html │ │ │ --rw-r--r-- 0 root (0) root (0) 148 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01043.js │ │ │ --rw-r--r-- 0 root (0) root (0) 23163 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01043_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4620 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01046.html │ │ │ --rw-r--r-- 0 root (0) root (0) 141 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01046.js │ │ │ --rw-r--r-- 0 root (0) root (0) 23275 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01046_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 23761 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01049.html │ │ │ --rw-r--r-- 0 root (0) root (0) 36680 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01049_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8229 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01052.html │ │ │ --rw-r--r-- 0 root (0) root (0) 868 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01052.js │ │ │ --rw-r--r-- 0 root (0) root (0) 99054 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01052_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 36470 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01055.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2794 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01055.js │ │ │ --rw-r--r-- 0 root (0) root (0) 358199 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01055_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7658 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01058.html │ │ │ --rw-r--r-- 0 root (0) root (0) 415 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01058.js │ │ │ --rw-r--r-- 0 root (0) root (0) 111082 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01058_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7472 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01061.html │ │ │ --rw-r--r-- 0 root (0) root (0) 535 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01061.js │ │ │ --rw-r--r-- 0 root (0) root (0) 49348 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01061_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9847 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01064.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1395 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01064.js │ │ │ --rw-r--r-- 0 root (0) root (0) 171039 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01064_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5721 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01067.html │ │ │ --rw-r--r-- 0 root (0) root (0) 306 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01067.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34199 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01067_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4854 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01070.html │ │ │ --rw-r--r-- 0 root (0) root (0) 260 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01070.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34177 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01070_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11266 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01073.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1666 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01073.js │ │ │ --rw-r--r-- 0 root (0) root (0) 76650 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01073_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4881 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01076.html │ │ │ --rw-r--r-- 0 root (0) root (0) 132 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01076.js │ │ │ --rw-r--r-- 0 root (0) root (0) 24149 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01076_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5642 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01079.html │ │ │ --rw-r--r-- 0 root (0) root (0) 405 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01079.js │ │ │ --rw-r--r-- 0 root (0) root (0) 43379 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01079_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6728 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01082.html │ │ │ --rw-r--r-- 0 root (0) root (0) 408 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01082.js │ │ │ --rw-r--r-- 0 root (0) root (0) 75664 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01082_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13479 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01085.html │ │ │ --rw-r--r-- 0 root (0) root (0) 849 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01085.js │ │ │ --rw-r--r-- 0 root (0) root (0) 19493 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01085_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13479 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00995.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 849 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00995.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 19493 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00995_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8887 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00998.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 702 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00998.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 49982 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a00998_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5516 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01001.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 199 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01001.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 35476 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01001_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4620 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01004.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 141 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01004.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 23275 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01004_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 112584 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01007.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 188 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01007.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 374184 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01007_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9288 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01010.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2007 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01010.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34130 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01010_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8989 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01013.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 960 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01013.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 114914 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01013_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7713 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01016.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 81170 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01016_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4881 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01019.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 132 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01019.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 24149 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01019_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9847 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01022.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1395 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01022.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 171039 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01022_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13528 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01025.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 575 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01025.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 15178 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01025_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 23761 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01028.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 36680 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01028_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 25525 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01031.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 93372 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01031_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14097 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01034.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1578 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01034.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 83140 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01034_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11266 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01037.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1666 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01037.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 76650 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01037_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8229 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01040.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 868 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01040.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 99054 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01040_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5006 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01043.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 226 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01043.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34472 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01043_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4355 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01046.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 110 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01046.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14423 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01046_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9426 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01049.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1255 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01049.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 40311 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01049_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4980 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01052.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 213 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01052.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 32509 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01052_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6067 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01055.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 334 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01055.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 35952 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01055_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5721 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01058.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 306 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01058.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34199 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01058_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4148 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01061.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 82 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01061.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 25793 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01061_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8549 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01064.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 172 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01064.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 89443 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01064_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6626 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01067.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 225 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01067.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 59053 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01067_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3218 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01070.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10413 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01070_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4854 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01073.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 260 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01073.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34177 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01073_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7140 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01076.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 414 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01076.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 79372 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01076_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4678 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01079.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 148 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01079.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 23163 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01079_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7472 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01082.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 535 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01082.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 49348 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01082_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7661 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01085.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 506 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01085.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 97545 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01085_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5144 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01088.html │ │ │ -rw-r--r-- 0 root (0) root (0) 218 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01088.js │ │ │ -rw-r--r-- 0 root (0) root (0) 18591 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01088_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13528 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01091.html │ │ │ --rw-r--r-- 0 root (0) root (0) 575 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01091.js │ │ │ --rw-r--r-- 0 root (0) root (0) 15178 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01091_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4355 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01094.html │ │ │ --rw-r--r-- 0 root (0) root (0) 110 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01094.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14423 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01094_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3261 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01097.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9629 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01097_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14097 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01100.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1578 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01100.js │ │ │ --rw-r--r-- 0 root (0) root (0) 83140 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01100_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7661 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01103.html │ │ │ --rw-r--r-- 0 root (0) root (0) 506 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01103.js │ │ │ --rw-r--r-- 0 root (0) root (0) 97545 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01103_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 25525 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01106.html │ │ │ --rw-r--r-- 0 root (0) root (0) 93372 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01106_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 112584 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01109.html │ │ │ --rw-r--r-- 0 root (0) root (0) 188 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01109.js │ │ │ --rw-r--r-- 0 root (0) root (0) 374184 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01109_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6125 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01112.html │ │ │ --rw-r--r-- 0 root (0) root (0) 104 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01112.js │ │ │ --rw-r--r-- 0 root (0) root (0) 53873 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01112_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4999 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01115.html │ │ │ --rw-r--r-- 0 root (0) root (0) 44364 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01115_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5919 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01091.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 347 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01091.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 44702 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01091_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3261 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01094.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9629 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01094_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4611 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01097.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 135 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01097.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 27105 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01097_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5642 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01100.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 405 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01100.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 43379 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01100_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7658 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01103.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 415 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01103.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 111082 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01103_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6728 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01106.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 408 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01106.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 75664 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01106_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 36470 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01109.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2794 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01109.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 358199 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01109_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4999 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01112.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 44364 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01112_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6125 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01115.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 104 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01115.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 53873 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01115_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 15669 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01118.html │ │ │ -rw-r--r-- 0 root (0) root (0) 71 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01118.js │ │ │ -rw-r--r-- 0 root (0) root (0) 57731 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01118_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 13118 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01121.html │ │ │ -rw-r--r-- 0 root (0) root (0) 895 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01121.js │ │ │ -rw-r--r-- 0 root (0) root (0) 239915 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01121_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 204309 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01124.html │ │ │ -rw-r--r-- 0 root (0) root (0) 300 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01124.js │ │ │ -rw-r--r-- 0 root (0) root (0) 90938 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01124_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 364458 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01127_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 936320 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01130_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 297828 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01133_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 141677 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01136_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27041 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01139_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 87557 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01142_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 253615 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01145_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 335313 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01148_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 57582 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01151_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 68475 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01154_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 486267 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01157_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 928877 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01160_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3236 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01166.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13547 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01166_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 928877 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01130_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3236 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01133.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13547 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01133_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 364458 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01136_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 297828 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01139_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 141677 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01142_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 68475 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01145_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 87557 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01148_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 936320 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01151_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27041 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01154_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 335313 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01157_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 486267 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01160_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 253615 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01163_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 57582 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01166_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 21895 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01169.html │ │ │ -rw-r--r-- 0 root (0) root (0) 106009 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01169_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4688 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01172.html │ │ │ -rw-r--r-- 0 root (0) root (0) 17081 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01172_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3652 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01175.html │ │ │ --rw-r--r-- 0 root (0) root (0) 32125 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01175_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11698 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01178.html │ │ │ --rw-r--r-- 0 root (0) root (0) 612 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01178.js │ │ │ --rw-r--r-- 0 root (0) root (0) 139363 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01178_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 44002 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01181.html │ │ │ --rw-r--r-- 0 root (0) root (0) 2728 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01181.js │ │ │ --rw-r--r-- 0 root (0) root (0) 589112 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01181_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8956 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01184.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17988 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01184_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16228 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01187.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1237 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01187.js │ │ │ --rw-r--r-- 0 root (0) root (0) 166238 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01187_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5040 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01190.html │ │ │ --rw-r--r-- 0 root (0) root (0) 23657 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01190_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4183 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01193.html │ │ │ --rw-r--r-- 0 root (0) root (0) 61805 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01193_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4144 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01196.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37270 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01196_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3664 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01199.html │ │ │ --rw-r--r-- 0 root (0) root (0) 84583 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01199_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 115095 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01202.html │ │ │ --rw-r--r-- 0 root (0) root (0) 255525 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01202_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5111 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01205.html │ │ │ --rw-r--r-- 0 root (0) root (0) 109 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01205.js │ │ │ --rw-r--r-- 0 root (0) root (0) 115657 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01205_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5876 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01208.html │ │ │ --rw-r--r-- 0 root (0) root (0) 77 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01208.js │ │ │ --rw-r--r-- 0 root (0) root (0) 52039 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01208_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6342 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01211.html │ │ │ --rw-r--r-- 0 root (0) root (0) 202 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01211.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34880 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01211_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8850 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01214.html │ │ │ --rw-r--r-- 0 root (0) root (0) 459 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01214.js │ │ │ --rw-r--r-- 0 root (0) root (0) 126188 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01214_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4117 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01217.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37842 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01217_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5154 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01220.html │ │ │ --rw-r--r-- 0 root (0) root (0) 36623 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01220_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4091 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01223.html │ │ │ --rw-r--r-- 0 root (0) root (0) 91 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01223.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14185 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01223_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4119 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01226.html │ │ │ --rw-r--r-- 0 root (0) root (0) 33948 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01226_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6833 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01229.html │ │ │ --rw-r--r-- 0 root (0) root (0) 299 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01229.js │ │ │ --rw-r--r-- 0 root (0) root (0) 86806 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01229_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13453 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01232.html │ │ │ --rw-r--r-- 0 root (0) root (0) 896 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01232.js │ │ │ --rw-r--r-- 0 root (0) root (0) 185858 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01232_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 68198 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01235.html │ │ │ --rw-r--r-- 0 root (0) root (0) 119 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01235.js │ │ │ --rw-r--r-- 0 root (0) root (0) 85792 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01235_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5049 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01238.html │ │ │ --rw-r--r-- 0 root (0) root (0) 42915 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01238_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 25776 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01241.html │ │ │ --rw-r--r-- 0 root (0) root (0) 558 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01241.js │ │ │ --rw-r--r-- 0 root (0) root (0) 104040 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01241_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5905 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01244.html │ │ │ --rw-r--r-- 0 root (0) root (0) 73 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01244.js │ │ │ --rw-r--r-- 0 root (0) root (0) 46573 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01244_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8956 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01175.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17988 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01175_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4119 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01178.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 33948 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01178_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5905 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01181.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 73 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01181.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 46573 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01181_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4117 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01184.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37842 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01184_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 44002 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01187.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 2728 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01187.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 589112 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01187_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3652 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01190.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 32125 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01190_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6833 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01193.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 299 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01193.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 86806 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01193_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5876 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01196.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 77 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01196.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 52039 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01196_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3575 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01199.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 22466 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01199_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13453 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01202.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 896 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01202.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 185858 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01202_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6342 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01205.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 202 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01205.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34880 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01205_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 68198 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01208.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 119 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01208.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 85792 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01208_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5154 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01211.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 36623 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01211_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4091 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01214.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 91 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01214.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14185 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01214_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4144 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01217.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37270 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01217_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8454 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01220.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21236 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01220_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16228 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01223.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1237 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01223.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 166238 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01223_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5111 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01226.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 109 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01226.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 115657 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01226_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8850 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01229.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 459 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01229.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 126188 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01229_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3664 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01232.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 84583 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01232_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5040 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01235.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 23657 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01235_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4183 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01238.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 61805 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01238_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 115095 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01241.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 255525 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01241_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 25776 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01244.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 558 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01244.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 104040 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01244_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 8414 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01247.html │ │ │ -rw-r--r-- 0 root (0) root (0) 282 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01247.js │ │ │ -rw-r--r-- 0 root (0) root (0) 24177 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01247_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8454 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01250.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21236 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01250_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3575 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01253.html │ │ │ --rw-r--r-- 0 root (0) root (0) 22466 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01253_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12267 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01256.html │ │ │ --rw-r--r-- 0 root (0) root (0) 400 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01256.js │ │ │ --rw-r--r-- 0 root (0) root (0) 74705 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01256_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7405 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01259.html │ │ │ --rw-r--r-- 0 root (0) root (0) 143 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01259.js │ │ │ --rw-r--r-- 0 root (0) root (0) 30987 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01259_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17610 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01262.html │ │ │ --rw-r--r-- 0 root (0) root (0) 128 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01262.js │ │ │ --rw-r--r-- 0 root (0) root (0) 88696 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01262_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4217 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01265.html │ │ │ --rw-r--r-- 0 root (0) root (0) 31418 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01265_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4608 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01268.html │ │ │ --rw-r--r-- 0 root (0) root (0) 197 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01268.js │ │ │ --rw-r--r-- 0 root (0) root (0) 32033 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01268_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 29023 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01271.html │ │ │ --rw-r--r-- 0 root (0) root (0) 935 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01271.js │ │ │ --rw-r--r-- 0 root (0) root (0) 129656 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01271_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6385 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01274.html │ │ │ --rw-r--r-- 0 root (0) root (0) 19193 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01274_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10689 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01277.html │ │ │ --rw-r--r-- 0 root (0) root (0) 168821 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01277_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7677 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01280.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27322 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01280_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11698 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01250.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 612 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01250.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 139363 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01250_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5049 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01253.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 42915 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01253_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10689 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01256.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 168821 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01256_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4608 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01259.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 197 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01259.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 32033 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01259_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 29023 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01262.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 935 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01262.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 129656 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01262_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6385 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01265.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 19193 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01265_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4217 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01268.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 31418 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01268_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12267 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01271.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 400 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01271.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 74705 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01271_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17610 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01274.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 128 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01274.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 88696 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01274_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7405 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01277.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 143 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01277.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 30987 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01277_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3224 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01280.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 55805 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01280_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 9703 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01283.html │ │ │ -rw-r--r-- 0 root (0) root (0) 40704 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01283_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3219 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01286.html │ │ │ --rw-r--r-- 0 root (0) root (0) 30980 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01286_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10191 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01289.html │ │ │ --rw-r--r-- 0 root (0) root (0) 702 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01289.js │ │ │ --rw-r--r-- 0 root (0) root (0) 39028 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01289_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9403 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01292.html │ │ │ --rw-r--r-- 0 root (0) root (0) 573 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01292.js │ │ │ --rw-r--r-- 0 root (0) root (0) 30715 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01292_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3224 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01295.html │ │ │ --rw-r--r-- 0 root (0) root (0) 55805 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01295_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 25198 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01298.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1907 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01298.js │ │ │ --rw-r--r-- 0 root (0) root (0) 79317 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01298_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5973 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01301.html │ │ │ --rw-r--r-- 0 root (0) root (0) 104 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01301.js │ │ │ --rw-r--r-- 0 root (0) root (0) 16372 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01301_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5828 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01310.html │ │ │ --rw-r--r-- 0 root (0) root (0) 95 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01310.js │ │ │ --rw-r--r-- 0 root (0) root (0) 39048 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01310_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4776 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01331.html │ │ │ --rw-r--r-- 0 root (0) root (0) 211 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01331.js │ │ │ --rw-r--r-- 0 root (0) root (0) 17107 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01331_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5269 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01334.html │ │ │ --rw-r--r-- 0 root (0) root (0) 326 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01334.js │ │ │ --rw-r--r-- 0 root (0) root (0) 17815 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01334_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15549 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01349.html │ │ │ --rw-r--r-- 0 root (0) root (0) 55868 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01349_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5973 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01286.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 104 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01286.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 16372 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01286_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 25198 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01289.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1907 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01289.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 79317 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01289_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3219 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01292.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 30980 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01292_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7677 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01295.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27322 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01295_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10191 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01298.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 702 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01298.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 39028 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01298_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9403 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01301.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 573 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01301.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 30715 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01301_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4776 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01307.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 211 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01307.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 17107 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01307_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5828 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01316.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 95 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01316.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 39048 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01316_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15549 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01322.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 55868 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01322_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5269 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01340.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 326 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01340.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 17815 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01340_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 6521 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01352.html │ │ │ -rw-r--r-- 0 root (0) root (0) 21610 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01352_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 10154 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01355.html │ │ │ -rw-r--r-- 0 root (0) root (0) 123 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01355.js │ │ │ -rw-r--r-- 0 root (0) root (0) 36282 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01355_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9569 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01367.html │ │ │ --rw-r--r-- 0 root (0) root (0) 396 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01367.js │ │ │ --rw-r--r-- 0 root (0) root (0) 56351 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01367_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12024 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01373.html │ │ │ --rw-r--r-- 0 root (0) root (0) 73866 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01373_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4370 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01376.html │ │ │ --rw-r--r-- 0 root (0) root (0) 118 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01376.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14159 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01376_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4808 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01379.html │ │ │ --rw-r--r-- 0 root (0) root (0) 223 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01379.js │ │ │ --rw-r--r-- 0 root (0) root (0) 23710 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01379_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3307 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01382.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12692 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01382_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3320 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01409.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15830 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01409_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4368 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01427.html │ │ │ --rw-r--r-- 0 root (0) root (0) 104 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01427.js │ │ │ --rw-r--r-- 0 root (0) root (0) 16691 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01427_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3309 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01430.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16157 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01430_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 19519 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01433.html │ │ │ --rw-r--r-- 0 root (0) root (0) 116359 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01433_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4808 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01436.html │ │ │ --rw-r--r-- 0 root (0) root (0) 211 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01436.js │ │ │ --rw-r--r-- 0 root (0) root (0) 20861 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01436_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4246 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01439.html │ │ │ --rw-r--r-- 0 root (0) root (0) 100 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01439.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14606 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01439_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12024 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01364.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 73866 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01364_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9569 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01370.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 396 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01370.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 56351 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01370_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4808 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01376.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 223 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01376.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 23710 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01376_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4370 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01379.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 118 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01379.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14159 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01379_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3320 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01382.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15830 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01382_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3307 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01394.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12692 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01394_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 19519 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01409.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 116359 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01409_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4368 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01418.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 104 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01418.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 16691 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01418_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3309 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01433.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16157 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01433_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4246 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01436.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 100 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01436.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14606 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01436_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4808 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01439.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 211 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01439.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 20861 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01439_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3326 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01442.html │ │ │ -rw-r--r-- 0 root (0) root (0) 14861 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01442_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17838 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01445.html │ │ │ --rw-r--r-- 0 root (0) root (0) 117267 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01445_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3381 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01448.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10192 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01448_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4205 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01451.html │ │ │ --rw-r--r-- 0 root (0) root (0) 85 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01451.js │ │ │ --rw-r--r-- 0 root (0) root (0) 17821 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01451_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4222 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01454.html │ │ │ --rw-r--r-- 0 root (0) root (0) 83 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01454.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14541 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01454_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4214 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01457.html │ │ │ --rw-r--r-- 0 root (0) root (0) 86 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01457.js │ │ │ --rw-r--r-- 0 root (0) root (0) 17052 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01457_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4169 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01460.html │ │ │ --rw-r--r-- 0 root (0) root (0) 80 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01460.js │ │ │ --rw-r--r-- 0 root (0) root (0) 15527 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01460_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9830 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01463.html │ │ │ --rw-r--r-- 0 root (0) root (0) 408 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01463.js │ │ │ --rw-r--r-- 0 root (0) root (0) 52155 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01463_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13992 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01466.html │ │ │ --rw-r--r-- 0 root (0) root (0) 490 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01466.js │ │ │ --rw-r--r-- 0 root (0) root (0) 55935 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01466_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3293 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01469.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11050 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01469_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4241 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01472.html │ │ │ --rw-r--r-- 0 root (0) root (0) 98 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01472.js │ │ │ --rw-r--r-- 0 root (0) root (0) 12556 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01472_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4332 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01475.html │ │ │ --rw-r--r-- 0 root (0) root (0) 111 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01475.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14358 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01475_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3381 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01445.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10192 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01445_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17838 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01448.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 117267 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01448_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4169 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01451.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 80 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01451.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 15527 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01451_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13992 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01454.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 490 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01454.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 55935 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01454_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4332 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01457.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 111 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01457.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14358 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01457_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3281 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01460.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11034 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01460_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3325 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01463.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11698 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01463_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4241 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01466.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 98 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01466.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 12556 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01466_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3329 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01469.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11711 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01469_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3293 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01472.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11050 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01472_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4214 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01475.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 86 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01475.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 17052 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01475_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 7651 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01478.html │ │ │ -rw-r--r-- 0 root (0) root (0) 112 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01478.js │ │ │ -rw-r--r-- 0 root (0) root (0) 18523 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01478_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3281 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01481.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11034 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01481_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3325 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01484.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11698 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01484_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3329 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01487.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11711 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01487_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10648 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01493.html │ │ │ --rw-r--r-- 0 root (0) root (0) 148 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01493.js │ │ │ --rw-r--r-- 0 root (0) root (0) 49347 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01493_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17478 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01496.html │ │ │ --rw-r--r-- 0 root (0) root (0) 126 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01496.js │ │ │ --rw-r--r-- 0 root (0) root (0) 59659 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01496_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3721 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01499.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12021 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01499_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4222 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01481.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 83 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01481.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14541 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01481_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9830 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01484.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 408 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01484.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 52155 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01484_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4205 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01487.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 85 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01487.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 17821 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01487_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10648 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01490.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 148 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01490.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 49347 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01490_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3721 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01496.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12021 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01496_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17478 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01499.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 126 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01499.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 59659 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01499_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4237 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01502.html │ │ │ -rw-r--r-- 0 root (0) root (0) 85 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01502.js │ │ │ -rw-r--r-- 0 root (0) root (0) 18072 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01502_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4749 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01505.html │ │ │ -rw-r--r-- 0 root (0) root (0) 201 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01505.js │ │ │ -rw-r--r-- 0 root (0) root (0) 17302 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01505_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 13834 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01508.html │ │ │ -rw-r--r-- 0 root (0) root (0) 167 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01508.js │ │ │ -rw-r--r-- 0 root (0) root (0) 91361 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01508_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 8733 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01511.html │ │ │ -rw-r--r-- 0 root (0) root (0) 32019 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01511_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3272 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01514.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11382 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01514_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3267 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01514.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 37311 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01514_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 8453 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01517.html │ │ │ -rw-r--r-- 0 root (0) root (0) 124 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01517.js │ │ │ -rw-r--r-- 0 root (0) root (0) 34961 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01517_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3267 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01520.html │ │ │ --rw-r--r-- 0 root (0) root (0) 37311 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01520_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 18139 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01523.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1483 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01523.js │ │ │ --rw-r--r-- 0 root (0) root (0) 215697 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01523_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 18139 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01520.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1483 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01520.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 215697 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01520_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3272 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01523.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11382 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01523_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 15923 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01526.html │ │ │ -rw-r--r-- 0 root (0) root (0) 101284 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01526_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3291 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01529.html │ │ │ -rw-r--r-- 0 root (0) root (0) 68682 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01529_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 10416 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01532.html │ │ │ -rw-r--r-- 0 root (0) root (0) 42474 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01532_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4208 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01535.html │ │ │ --rw-r--r-- 0 root (0) root (0) 94 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01535.js │ │ │ --rw-r--r-- 0 root (0) root (0) 39382 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01535_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7470 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01538.html │ │ │ --rw-r--r-- 0 root (0) root (0) 30164 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01538_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4202 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01541.html │ │ │ --rw-r--r-- 0 root (0) root (0) 83 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01541.js │ │ │ --rw-r--r-- 0 root (0) root (0) 17711 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01541_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4232 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01544.html │ │ │ --rw-r--r-- 0 root (0) root (0) 86 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01544.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34021 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01544_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4227 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01547.html │ │ │ --rw-r--r-- 0 root (0) root (0) 85 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01547.js │ │ │ --rw-r--r-- 0 root (0) root (0) 31583 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01547_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3337 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01550.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35011 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01550_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3322 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01553.html │ │ │ --rw-r--r-- 0 root (0) root (0) 29663 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01553_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4513 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01556.html │ │ │ --rw-r--r-- 0 root (0) root (0) 134 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01556.js │ │ │ --rw-r--r-- 0 root (0) root (0) 17438 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01556_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7470 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01535.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 30164 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01535_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4208 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01538.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 94 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01538.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 39382 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01538_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4227 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01541.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 85 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01541.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 31583 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01541_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4202 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01544.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 83 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01544.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 17711 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01544_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4232 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01547.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 86 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01547.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34021 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01547_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4513 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01550.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 134 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01550.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 17438 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01550_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3337 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01553.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35011 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01553_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3322 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01556.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 29663 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01556_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3350 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01559.html │ │ │ -rw-r--r-- 0 root (0) root (0) 46912 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01559_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3346 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01562.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15651 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01562_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3398 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01565.html │ │ │ --rw-r--r-- 0 root (0) root (0) 32732 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01565_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10464 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01568.html │ │ │ --rw-r--r-- 0 root (0) root (0) 47331 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01568_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3272 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01571.html │ │ │ --rw-r--r-- 0 root (0) root (0) 39775 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01571_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3398 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01562.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 32732 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01562_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3346 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01565.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15651 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01565_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3272 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01568.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 39775 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01568_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10464 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01571.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 47331 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01571_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 12496 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01574.html │ │ │ -rw-r--r-- 0 root (0) root (0) 52933 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01574_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4443 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01577.html │ │ │ -rw-r--r-- 0 root (0) root (0) 136 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01577.js │ │ │ -rw-r--r-- 0 root (0) root (0) 12844 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01577_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6584 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01586.html │ │ │ --rw-r--r-- 0 root (0) root (0) 132 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01586.js │ │ │ --rw-r--r-- 0 root (0) root (0) 34277 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01586_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4424 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01586.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 135 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01586.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 14229 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01586_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3386 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01589.html │ │ │ -rw-r--r-- 0 root (0) root (0) 16873 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01589_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4424 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01592.html │ │ │ --rw-r--r-- 0 root (0) root (0) 135 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01592.js │ │ │ --rw-r--r-- 0 root (0) root (0) 14229 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01592_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6584 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01592.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 132 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01592.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 34277 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01592_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4248 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01595.html │ │ │ -rw-r--r-- 0 root (0) root (0) 90 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01595.js │ │ │ -rw-r--r-- 0 root (0) root (0) 17767 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01595_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3343 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01598.html │ │ │ -rw-r--r-- 0 root (0) root (0) 26868 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01598_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3447 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01601.html │ │ │ -rw-r--r-- 0 root (0) root (0) 22889 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/a01601_source.html │ │ │ @@ -8280,39 +8280,39 @@ │ │ │ -rw-r--r-- 0 root (0) root (0) 9732 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/namespacemembers_vars.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5306 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/namespacemembers_w.html │ │ │ -rw-r--r-- 0 root (0) root (0) 2743 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/namespacemembers_y.html │ │ │ -rw-r--r-- 0 root (0) root (0) 13017 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/namespaces.html │ │ │ -rw-r--r-- 0 root (0) root (0) 632 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/namespaces_dup.js │ │ │ -rw-r--r-- 0 root (0) root (0) 5658 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtree.css │ │ │ -rw-r--r-- 0 root (0) root (0) 33741 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtree.js │ │ │ --rw-r--r-- 0 root (0) root (0) 5348 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreedata.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 5314 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreedata.js │ │ │ -rw-r--r-- 0 root (0) root (0) 7566 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex0.js │ │ │ --rw-r--r-- 0 root (0) root (0) 7578 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex1.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 7557 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex1.js │ │ │ -rw-r--r-- 0 root (0) root (0) 12701 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex10.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14975 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex11.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13955 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex12.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14938 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex13.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15028 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex14.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15058 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex15.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15281 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex16.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15835 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex17.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15923 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex18.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15943 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex19.js │ │ │ --rw-r--r-- 0 root (0) root (0) 8489 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex2.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 8532 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex2.js │ │ │ -rw-r--r-- 0 root (0) root (0) 10956 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex20.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13374 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex21.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15568 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex22.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15560 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex23.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14000 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex24.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13357 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex25.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15162 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex26.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15066 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex27.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14605 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex28.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15318 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex29.js │ │ │ --rw-r--r-- 0 root (0) root (0) 8281 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex3.js │ │ │ +-rw-r--r-- 0 root (0) root (0) 8259 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex3.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13891 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex30.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13749 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex31.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13713 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex32.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15237 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex33.js │ │ │ -rw-r--r-- 0 root (0) root (0) 14864 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex34.js │ │ │ -rw-r--r-- 0 root (0) root (0) 15378 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex35.js │ │ │ -rw-r--r-- 0 root (0) root (0) 13911 2026-02-02 09:13:58.000000 ./usr/share/doc/gcc-14-base/libstdc++/user/navtreeindex36.js │ │ ├── ./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.28 (TeX Live 2025/Debian) (preloaded format=latex 2026.2.2) 2 FEB 2026 10:39 │ │ │ +This is pdfTeX, Version 3.141592653-2.6-1.40.28 (TeX Live 2025/Debian) (preloaded format=latex 2026.2.7) 7 FEB 2026 19:38 │ │ │ entering extended mode │ │ │ restricted \write18 enabled. │ │ │ %&-line parsing enabled. │ │ │ **_formulas_dark │ │ │ (./_formulas_dark.tex │ │ │ LaTeX2e <2025-11-01> │ │ │ L3 programming layer <2026-01-19> │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00002.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stdlib.h File Reference │ │ │ +libstdc++: fenv.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,105 +48,35 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
stdlib.h File Reference
│ │ │ +
fenv.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ -Functions

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

Detailed Description

│ │ │

This is a Standard C++ Library header.

│ │ │ │ │ │ -

Definition in file stdlib.h.

│ │ │ -

Function Documentation

│ │ │ - │ │ │ -

◆ abs()

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

Return magnitude of z.

│ │ │ - │ │ │ -

Definition at line 892 of file complex.

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

◆ div()

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

Definition at line 181 of file cstdlib.

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

Definition in file fenv.h.

│ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,23 +1,8 @@ │ │ │ │ libstdc++ │ │ │ │ -stdlib.h File Reference │ │ │ │ +fenv.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -FFuunnccttiioonnss │ │ │ │ -template │ │ │ │ - _Tp  _a_b_s (const complex< _Tp > &) │ │ │ │ -ldiv_t  _d_i_v (long __i, long __j) noexcept │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is a Standard C++ Library header. │ │ │ │ -Definition in file _s_t_d_l_i_b_._h. │ │ │ │ -********** FFuunnccttiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? aabbss(()) ********** │ │ │ │ -template │ │ │ │ -_Tp _s_t_d_:_:_a_b_s ( const complex< _Tp > ____zz ) inline │ │ │ │ - & │ │ │ │ -Return magnitude of zz. │ │ │ │ -Definition at line _8_9_2 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? ddiivv(()) ********** │ │ │ │ -ldiv_t std::div ( long ____ii, inlinenoexcept │ │ │ │ - long ____jj ) │ │ │ │ -Definition at line _1_8_1 of file _c_s_t_d_l_i_b. │ │ │ │ - * _s_t_d_l_i_b_._h │ │ │ │ +Definition in file _f_e_n_v_._h. │ │ │ │ + * _f_e_n_v_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00002_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stdlib.h Source File │ │ │ +libstdc++: fenv.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
stdlib.h
│ │ │ +
fenv.h
│ │ │
│ │ │
│ │ │ Go to the documentation of this file.
1// -*- C++ -*- compatibility header.
│ │ │
2
│ │ │ -
3// Copyright (C) 2002-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
│ │ │ @@ -75,86 +75,78 @@ │ │ │
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
│ │ │ -
43 using std::at_quick_exit;
│ │ │ -
44# endif
│ │ │ -
45# ifdef _GLIBCXX_HAVE_QUICK_EXIT
│ │ │ -
46 using std::quick_exit;
│ │ │ -
47# endif
│ │ │ -
48# if _GLIBCXX_USE_C99_STDLIB
│ │ │ -
49 using std::_Exit;
│ │ │ -
50# endif
│ │ │ -
51#endif
│ │ │ -
52
│ │ │ -
53#if _GLIBCXX_HOSTED
│ │ │ -
54using std::div_t;
│ │ │ -
55using std::ldiv_t;
│ │ │ -
56
│ │ │ -
57using std::abs;
│ │ │ -
58using std::atof;
│ │ │ -
59using std::atoi;
│ │ │ -
60using std::atol;
│ │ │ -
61using std::bsearch;
│ │ │ -
62using std::calloc;
│ │ │ -
63using std::div;
│ │ │ -
64using std::free;
│ │ │ -
65using std::getenv;
│ │ │ -
66using std::labs;
│ │ │ -
67using std::ldiv;
│ │ │ -
68using std::malloc;
│ │ │ -
69#ifdef _GLIBCXX_HAVE_MBSTATE_T
│ │ │ -
70using std::mblen;
│ │ │ -
71using std::mbstowcs;
│ │ │ -
72using std::mbtowc;
│ │ │ -
73#endif // _GLIBCXX_HAVE_MBSTATE_T
│ │ │ -
74using std::qsort;
│ │ │ -
75using std::rand;
│ │ │ -
76using std::realloc;
│ │ │ -
77using std::srand;
│ │ │ -
78using std::strtod;
│ │ │ -
79using std::strtol;
│ │ │ -
80using std::strtoul;
│ │ │ -
81using std::system;
│ │ │ -
82#ifdef _GLIBCXX_USE_WCHAR_T
│ │ │ -
83using std::wcstombs;
│ │ │ -
84using std::wctomb;
│ │ │ -
85#endif // _GLIBCXX_USE_WCHAR_T
│ │ │ -
86#endif
│ │ │ -
87
│ │ │ -
88#endif // _GLIBCXX_STDLIB_H
│ │ │ -
89#endif // __cplusplus
│ │ │ - │ │ │ -
_Tp abs(const complex< _Tp > &)
Return magnitude of z.
Definition complex:892
│ │ │ +
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,79 +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 std::at_quick_exit; │ │ │ │ -44# endif │ │ │ │ -45# ifdef _GLIBCXX_HAVE_QUICK_EXIT │ │ │ │ -46 using std::quick_exit; │ │ │ │ -47# endif │ │ │ │ -48# if _GLIBCXX_USE_C99_STDLIB │ │ │ │ -49 using std::_Exit; │ │ │ │ -50# endif │ │ │ │ -51#endif │ │ │ │ -52 │ │ │ │ -53#if _GLIBCXX_HOSTED │ │ │ │ -54using std::div_t; │ │ │ │ -55using std::ldiv_t; │ │ │ │ -56 │ │ │ │ -57using _s_t_d_:_:_a_b_s; │ │ │ │ -58using std::atof; │ │ │ │ -59using std::atoi; │ │ │ │ -60using std::atol; │ │ │ │ -61using std::bsearch; │ │ │ │ -62using std::calloc; │ │ │ │ -63using std::div; │ │ │ │ -64using std::free; │ │ │ │ -65using std::getenv; │ │ │ │ -66using std::labs; │ │ │ │ -67using std::ldiv; │ │ │ │ -68using std::malloc; │ │ │ │ -69#ifdef _GLIBCXX_HAVE_MBSTATE_T │ │ │ │ -70using std::mblen; │ │ │ │ -71using std::mbstowcs; │ │ │ │ -72using std::mbtowc; │ │ │ │ -73#endif // _GLIBCXX_HAVE_MBSTATE_T │ │ │ │ -74using std::qsort; │ │ │ │ -75using std::rand; │ │ │ │ -76using std::realloc; │ │ │ │ -77using std::srand; │ │ │ │ -78using std::strtod; │ │ │ │ -79using std::strtol; │ │ │ │ -80using std::strtoul; │ │ │ │ -81using std::system; │ │ │ │ -82#ifdef _GLIBCXX_USE_WCHAR_T │ │ │ │ -83using std::wcstombs; │ │ │ │ -84using std::wctomb; │ │ │ │ -85#endif // _GLIBCXX_USE_WCHAR_T │ │ │ │ -86#endif │ │ │ │ -87 │ │ │ │ -88#endif // _GLIBCXX_STDLIB_H │ │ │ │ -89#endif // __cplusplus │ │ │ │ -_c_s_t_d_l_i_b │ │ │ │ -_s_t_d_:_:_a_b_s │ │ │ │ -_Tp abs(const complex< _Tp > &) │ │ │ │ -Return magnitude of z. │ │ │ │ -DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_8_9_2 │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00008.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stdbit.h File Reference │ │ │ +libstdc++: complex.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,35 +48,57 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
stdbit.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 stdbit.h.

│ │ │ -
│ │ │ +

Definition in file complex.h.

│ │ │ +

Macro Definition Documentation

│ │ │ + │ │ │ +

◆ _GLIBCXX_COMPLEX_H

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define _GLIBCXX_COMPLEX_H
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 46 of file complex.h.

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

Go to the source code of this file.

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

│ │ │ +Functions

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

Detailed Description

│ │ │

This is a Standard C++ Library header.

│ │ │ │ │ │ -

Definition in file stdatomic.h.

│ │ │ -

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ __glibcxx_want_stdatomic_h

│ │ │ +

Definition in file math.h.

│ │ │ +

Function Documentation

│ │ │ + │ │ │ +

◆ abs()

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

Return magnitude of z.

│ │ │ + │ │ │ +

Definition at line 892 of file complex.

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

◆ acos()

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

Definition at line 2213 of file complex.

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

◆ acosh()

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

Definition at line 2329 of file complex.

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

◆ asin()

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

Definition at line 2249 of file complex.

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

◆ asinh()

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

Definition at line 2368 of file complex.

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

◆ atan()

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

Definition at line 2293 of file complex.

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

◆ atan2()

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

Definition at line 150 of file cmath.

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

◆ atanh()

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

Definition at line 2412 of file complex.

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

◆ cbrt()

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

Definition at line 2289 of file cmath.

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

◆ ceil()

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

Definition at line 162 of file cmath.

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

◆ copysign()

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

Definition at line 2307 of file cmath.

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

◆ cos()

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

Return complex cosine of z.

│ │ │ + │ │ │ +

Definition at line 1003 of file complex.

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

◆ cosh()

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

Return complex hyperbolic cosine of z.

│ │ │ + │ │ │ +

Definition at line 1033 of file complex.

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

◆ erf()

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

Definition at line 2317 of file cmath.

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

◆ erfc()

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

Definition at line 2335 of file cmath.

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

◆ exp()

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

Return complex base e exponential of z.

│ │ │ + │ │ │ +

Definition at line 1059 of file complex.

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

◆ exp2()

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

Definition at line 2353 of file cmath.

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

◆ expm1()

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

Definition at line 2371 of file cmath.

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

◆ fabs()

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

fabs(__z) [8.1.8].

│ │ │ + │ │ │ +

Definition at line 2429 of file complex.

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

◆ fdim()

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

Definition at line 2389 of file cmath.

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

◆ floor()

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

Definition at line 257 of file cmath.

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

◆ fma()

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

Definition at line 2399 of file cmath.

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

◆ fmax()

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

Definition at line 2409 of file cmath.

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

◆ fmin()

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

Definition at line 2419 of file cmath.

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

◆ fmod()

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

Definition at line 276 of file cmath.

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

◆ fpclassify()

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

Definition at line 1101 of file cmath.

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

◆ frexp()

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

Definition at line 288 of file cmath.

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

◆ hypot()

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

Definition at line 2429 of file cmath.

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

◆ ilogb()

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

Definition at line 2439 of file cmath.

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

◆ isfinite()

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

Definition at line 1126 of file cmath.

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

◆ isgreater()

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

Definition at line 1247 of file cmath.

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

◆ isgreaterequal()

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

Definition at line 1273 of file cmath.

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

◆ isinf()

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

Definition at line 1148 of file cmath.

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

◆ isless()

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

Definition at line 1299 of file cmath.

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

◆ islessequal()

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

Definition at line 1325 of file cmath.

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

◆ islessgreater()

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

Definition at line 1351 of file cmath.

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

◆ isnan()

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

Definition at line 1175 of file cmath.

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

◆ isnormal()

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

Definition at line 1202 of file cmath.

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

◆ isunordered()

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

Definition at line 1377 of file cmath.

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

◆ ldexp()

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

Definition at line 307 of file cmath.

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

◆ lgamma()

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

Definition at line 2458 of file cmath.

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

◆ llrint()

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

Definition at line 2476 of file cmath.

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

◆ llround()

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

Definition at line 2494 of file cmath.

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

◆ log()

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

Return complex natural logarithm of z.

│ │ │ + │ │ │ +

Definition at line 1086 of file complex.

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

◆ log10()

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

Return complex base 10 logarithm of z.

│ │ │ + │ │ │ +

Definition at line 1095 of file complex.

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

◆ log1p()

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

Definition at line 2512 of file cmath.

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

◆ log2()

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

Definition at line 2531 of file cmath.

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

◆ logb()

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

Definition at line 2549 of file cmath.

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

◆ lrint()

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

Definition at line 2567 of file cmath.

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

◆ lround()

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

Definition at line 2585 of file cmath.

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

◆ modf()

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

Definition at line 364 of file cmath.

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

◆ nearbyint()

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

Definition at line 2603 of file cmath.

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

◆ nextafter()

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

Definition at line 2621 of file cmath.

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

◆ nexttoward()

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

Definition at line 2631 of file cmath.

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

◆ pow()

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

Return x to the y'th power.

│ │ │ + │ │ │ +

Definition at line 1285 of file complex.

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

◆ remainder()

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

Definition at line 2649 of file cmath.

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

◆ remquo()

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

Definition at line 2659 of file cmath.

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

◆ rint()

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

Definition at line 2669 of file cmath.

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

◆ round()

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

Definition at line 2687 of file cmath.

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

◆ scalbln()

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

Definition at line 2705 of file cmath.

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

◆ scalbn()

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

Definition at line 2723 of file cmath.

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

◆ signbit()

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

Definition at line 1225 of file cmath.

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

◆ sin()

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

Return complex sine of z.

│ │ │ + │ │ │ +

Definition at line 1121 of file complex.

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

◆ sinh()

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

Return complex hyperbolic sine of z.

│ │ │ + │ │ │ +

Definition at line 1151 of file complex.

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

◆ sqrt()

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

Return complex square root of z.

│ │ │ + │ │ │ +

Definition at line 1195 of file complex.

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

◆ tan()

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

Return complex tangent of z.

│ │ │ + │ │ │ +

Definition at line 1222 of file complex.

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

◆ tanh()

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

Return complex hyperbolic tangent of z.

│ │ │ + │ │ │ +

Definition at line 1250 of file complex.

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

◆ tgamma()

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

Definition at line 2741 of file cmath.

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

◆ trunc()

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

Definition at line 32 of file stdatomic.h.

│ │ │ +

Definition at line 2759 of file cmath.

│ │ │ │ │ │
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,12 +1,408 @@ │ │ │ │ libstdc++ │ │ │ │ -stdatomic.h File Reference │ │ │ │ +math.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ +FFuunnccttiioonnss │ │ │ │ +template │ │ │ │ + _Tp  _a_b_s (const complex< _Tp > &) │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_c_o_s (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_c_o_s_h (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_s_i_n (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_s_i_n_h (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_t_a_n (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ + constexpr float  _a_t_a_n_2 (float __y, float __x) │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_t_a_n_h (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ + constexpr float  _c_b_r_t (float __x) │ │ │ │ + constexpr float  _c_e_i_l (float __x) │ │ │ │ + constexpr float  _c_o_p_y_s_i_g_n (float __x, float __y) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _c_o_s (const complex< _Tp > &) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _c_o_s_h (const complex< _Tp > &) │ │ │ │ + constexpr float  _e_r_f (float __x) │ │ │ │ + constexpr float  _e_r_f_c (float __x) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _e_x_p (const complex< _Tp > &) │ │ │ │ + constexpr float  _e_x_p_2 (float __x) │ │ │ │ + constexpr float  _e_x_p_m_1 (float __x) │ │ │ │ +template │ │ │ │ + _Tp  _f_a_b_s (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &__z) │ │ │ │ + constexpr float  _f_d_i_m (float __x, float __y) │ │ │ │ + constexpr float  _f_l_o_o_r (float __x) │ │ │ │ + constexpr float  _f_m_a (float __x, float __y, float __z) │ │ │ │ + constexpr float  _f_m_a_x (float __x, float __y) │ │ │ │ + constexpr float  _f_m_i_n (float __x, float __y) │ │ │ │ + constexpr float  _f_m_o_d (float __x, float __y) │ │ │ │ + constexpr int  _f_p_c_l_a_s_s_i_f_y (float __x) │ │ │ │ + float  _f_r_e_x_p (float __x, int *__exp) │ │ │ │ + constexpr float  _h_y_p_o_t (float __x, float __y) │ │ │ │ + constexpr int  _i_l_o_g_b (float __x) │ │ │ │ + constexpr bool  _i_s_f_i_n_i_t_e (float __x) │ │ │ │ + constexpr bool  _i_s_g_r_e_a_t_e_r (float __x, float __y) │ │ │ │ + constexpr bool  _i_s_g_r_e_a_t_e_r_e_q_u_a_l (float __x, float __y) │ │ │ │ + constexpr bool  _i_s_i_n_f (float __x) │ │ │ │ + constexpr bool  _i_s_l_e_s_s (float __x, float __y) │ │ │ │ + constexpr bool  _i_s_l_e_s_s_e_q_u_a_l (float __x, float __y) │ │ │ │ + constexpr bool  _i_s_l_e_s_s_g_r_e_a_t_e_r (float __x, float __y) │ │ │ │ + constexpr bool  _i_s_n_a_n (float __x) │ │ │ │ + constexpr bool  _i_s_n_o_r_m_a_l (float __x) │ │ │ │ + constexpr bool  _i_s_u_n_o_r_d_e_r_e_d (float __x, float __y) │ │ │ │ + constexpr float  _l_d_e_x_p (float __x, int __exp) │ │ │ │ + constexpr float  _l_g_a_m_m_a (float __x) │ │ │ │ +constexpr long long  _l_l_r_i_n_t (float __x) │ │ │ │ +constexpr long long  _l_l_r_o_u_n_d (float __x) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _l_o_g (const complex< _Tp > &) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _l_o_g_1_0 (const complex< _Tp > &) │ │ │ │ + constexpr float  _l_o_g_1_p (float __x) │ │ │ │ + constexpr float  _l_o_g_2 (float __x) │ │ │ │ + constexpr float  _l_o_g_b (float __x) │ │ │ │ + constexpr long  _l_r_i_n_t (float __x) │ │ │ │ + constexpr long  _l_r_o_u_n_d (float __x) │ │ │ │ + float  _m_o_d_f (float __x, float *__iptr) │ │ │ │ + constexpr float  _n_e_a_r_b_y_i_n_t (float __x) │ │ │ │ + constexpr float  _n_e_x_t_a_f_t_e_r (float __x, float __y) │ │ │ │ + constexpr float  _n_e_x_t_t_o_w_a_r_d (float __x, long double __y) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _p_o_w (const complex< _Tp > &, int) │ │ │ │ + constexpr float  _r_e_m_a_i_n_d_e_r (float __x, float __y) │ │ │ │ + float  _r_e_m_q_u_o (float __x, float __y, int *__pquo) │ │ │ │ + constexpr float  _r_i_n_t (float __x) │ │ │ │ + constexpr float  _r_o_u_n_d (float __x) │ │ │ │ + constexpr float  _s_c_a_l_b_l_n (float __x, long __ex) │ │ │ │ + constexpr float  _s_c_a_l_b_n (float __x, int __ex) │ │ │ │ + constexpr bool  _s_i_g_n_b_i_t (float __x) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _s_i_n (const complex< _Tp > &) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _s_i_n_h (const complex< _Tp > &) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _s_q_r_t (const complex< _Tp > &) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _t_a_n (const complex< _Tp > &) │ │ │ │ +template │ │ │ │ + complex< _Tp >  _t_a_n_h (const complex< _Tp > &) │ │ │ │ + constexpr float  _t_g_a_m_m_a (float __x) │ │ │ │ + constexpr float  _t_r_u_n_c (float __x) │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is a Standard C++ Library header. │ │ │ │ -Definition in file _s_t_d_a_t_o_m_i_c_._h. │ │ │ │ -********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? ____gglliibbccxxxx__wwaanntt__ssttddaattoommiicc__hh ********** │ │ │ │ -#define __glibcxx_want_stdatomic_h │ │ │ │ -Definition at line _3_2 of file _s_t_d_a_t_o_m_i_c_._h. │ │ │ │ - * _s_t_d_a_t_o_m_i_c_._h │ │ │ │ +Definition in file _m_a_t_h_._h. │ │ │ │ +********** FFuunnccttiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ +********** _?◆_? aabbss(()) ********** │ │ │ │ +template │ │ │ │ +_Tp _s_t_d_:_:_a_b_s ( const complex< _Tp > ____zz ) inline │ │ │ │ + & │ │ │ │ +Return magnitude of zz. │ │ │ │ +Definition at line _8_9_2 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? aaccooss(()) ********** │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ +acos │ │ │ │ +Definition at line _2_2_1_3 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? aaccoosshh(()) ********** │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ +acosh │ │ │ │ +Definition at line _2_3_2_9 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? aassiinn(()) ********** │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ +asin │ │ │ │ +Definition at line _2_2_4_9 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? aassiinnhh(()) ********** │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ +asinh │ │ │ │ +Definition at line _2_3_6_8 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? aattaann(()) ********** │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ +atan │ │ │ │ +Definition at line _2_2_9_3 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? aattaann22(()) ********** │ │ │ │ +float std::atan2 ( float ____yy, inlineconstexpr │ │ │ │ + float ____xx ) │ │ │ │ +Definition at line _1_5_0 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? aattaannhh(()) ********** │ │ │ │ +template │ │ │ │ +_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ +atanh │ │ │ │ +Definition at line _2_4_1_2 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? ccbbrrtt(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +cbrt │ │ │ │ +Definition at line _2_2_8_9 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? cceeiill(()) ********** │ │ │ │ +float std:: ( float ____xx ) inlineconstexpr │ │ │ │ +ceil │ │ │ │ +Definition at line _1_6_2 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ccooppyyssiiggnn(()) ********** │ │ │ │ +float std::copysign ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _2_3_0_7 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ccooss(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ +_c_o_s │ │ │ │ +Return complex cosine of zz. │ │ │ │ +Definition at line _1_0_0_3 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? ccoosshh(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ +_c_o_s_h │ │ │ │ +Return complex hyperbolic cosine of zz. │ │ │ │ +Definition at line _1_0_3_3 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? eerrff(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +erf │ │ │ │ +Definition at line _2_3_1_7 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? eerrffcc(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +erfc │ │ │ │ +Definition at line _2_3_3_5 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? eexxpp(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ +_e_x_p │ │ │ │ +Return complex base e exponential of zz. │ │ │ │ +Definition at line _1_0_5_9 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? eexxpp22(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +exp2 │ │ │ │ +Definition at line _2_3_5_3 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? eexxppmm11(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +expm1 │ │ │ │ +Definition at line _2_3_7_1 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ffaabbss(()) ********** │ │ │ │ +template │ │ │ │ +_Tp _s_t_d_:_:_f_a_b_s ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > ____zz ) inline │ │ │ │ + & │ │ │ │ +fabs(__z) [8.1.8]. │ │ │ │ +Definition at line _2_4_2_9 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? ffddiimm(()) ********** │ │ │ │ +float std::fdim ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _2_3_8_9 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? fflloooorr(()) ********** │ │ │ │ +float std:: ( float ____xx ) inlineconstexpr │ │ │ │ +floor │ │ │ │ +Definition at line _2_5_7 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ffmmaa(()) ********** │ │ │ │ +float std::fma ( float ____xx, │ │ │ │ + float ____yy, constexpr │ │ │ │ + float ____zz ) │ │ │ │ +Definition at line _2_3_9_9 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ffmmaaxx(()) ********** │ │ │ │ +float std::fmax ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _2_4_0_9 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ffmmiinn(()) ********** │ │ │ │ +float std::fmin ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _2_4_1_9 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ffmmoodd(()) ********** │ │ │ │ +float std::fmod ( float ____xx, inlineconstexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _2_7_6 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ffppccllaassssiiffyy(()) ********** │ │ │ │ +int std:: ( float ____xx ) constexpr │ │ │ │ +fpclassify │ │ │ │ +Definition at line _1_1_0_1 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ffrreexxpp(()) ********** │ │ │ │ +float std::frexp ( float ____xx, inline │ │ │ │ + int * ____eexxpp ) │ │ │ │ +Definition at line _2_8_8 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? hhyyppoott(()) ********** │ │ │ │ +float std::hypot ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _2_4_2_9 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iillooggbb(()) ********** │ │ │ │ +int std:: ( float ____xx ) constexpr │ │ │ │ +ilogb │ │ │ │ +Definition at line _2_4_3_9 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iissffiinniittee(()) ********** │ │ │ │ +bool std:: ( float ____xx ) constexpr │ │ │ │ +isfinite │ │ │ │ +Definition at line _1_1_2_6 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iissggrreeaatteerr(()) ********** │ │ │ │ +bool std::isgreater ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _1_2_4_7 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iissggrreeaatteerreeqquuaall(()) ********** │ │ │ │ +bool std::isgreaterequal ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _1_2_7_3 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iissiinnff(()) ********** │ │ │ │ +bool std:: ( float ____xx ) constexpr │ │ │ │ +isinf │ │ │ │ +Definition at line _1_1_4_8 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iisslleessss(()) ********** │ │ │ │ +bool std::isless ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _1_2_9_9 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iisslleesssseeqquuaall(()) ********** │ │ │ │ +bool std::islessequal ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _1_3_2_5 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iisslleessssggrreeaatteerr(()) ********** │ │ │ │ +bool std::islessgreater ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _1_3_5_1 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iissnnaann(()) ********** │ │ │ │ +bool std:: ( float ____xx ) constexpr │ │ │ │ +isnan │ │ │ │ +Definition at line _1_1_7_5 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iissnnoorrmmaall(()) ********** │ │ │ │ +bool std:: ( float ____xx ) constexpr │ │ │ │ +isnormal │ │ │ │ +Definition at line _1_2_0_2 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? iissuunnoorrddeerreedd(()) ********** │ │ │ │ +bool std::isunordered ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _1_3_7_7 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? llddeexxpp(()) ********** │ │ │ │ +float std::ldexp ( float ____xx, inlineconstexpr │ │ │ │ + int ____eexxpp ) │ │ │ │ +Definition at line _3_0_7 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? llggaammmmaa(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +lgamma │ │ │ │ +Definition at line _2_4_5_8 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? llllrriinntt(()) ********** │ │ │ │ +long long std:: ( float ____xx ) constexpr │ │ │ │ +llrint │ │ │ │ +Definition at line _2_4_7_6 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? llllrroouunndd(()) ********** │ │ │ │ +long long std:: ( float ____xx ) constexpr │ │ │ │ +llround │ │ │ │ +Definition at line _2_4_9_4 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? lloogg(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ +_l_o_g │ │ │ │ +Return complex natural logarithm of zz. │ │ │ │ +Definition at line _1_0_8_6 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? lloogg1100(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ +_l_o_g_1_0 │ │ │ │ +Return complex base 10 logarithm of zz. │ │ │ │ +Definition at line _1_0_9_5 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? lloogg11pp(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +log1p │ │ │ │ +Definition at line _2_5_1_2 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? lloogg22(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +log2 │ │ │ │ +Definition at line _2_5_3_1 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? llooggbb(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +logb │ │ │ │ +Definition at line _2_5_4_9 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? llrriinntt(()) ********** │ │ │ │ +long std:: ( float ____xx ) constexpr │ │ │ │ +lrint │ │ │ │ +Definition at line _2_5_6_7 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? llrroouunndd(()) ********** │ │ │ │ +long std:: ( float ____xx ) constexpr │ │ │ │ +lround │ │ │ │ +Definition at line _2_5_8_5 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? mmooddff(()) ********** │ │ │ │ +float std::modf ( float ____xx, inline │ │ │ │ + float * ____iippttrr ) │ │ │ │ +Definition at line _3_6_4 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? nneeaarrbbyyiinntt(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +nearbyint │ │ │ │ +Definition at line _2_6_0_3 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? nneexxttaafftteerr(()) ********** │ │ │ │ +float std::nextafter ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _2_6_2_1 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? nneexxttttoowwaarrdd(()) ********** │ │ │ │ +float std::nexttoward ( float ____xx, constexpr │ │ │ │ + long double ____yy ) │ │ │ │ +Definition at line _2_6_3_1 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ppooww(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_:_p_o_w ( const complex< _Tp > & ____zz, inline │ │ │ │ + int ____nn ) │ │ │ │ +Return xx to the yy''tthh power. │ │ │ │ +Definition at line _1_2_8_5 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? rreemmaaiinnddeerr(()) ********** │ │ │ │ +float std::remainder ( float ____xx, constexpr │ │ │ │ + float ____yy ) │ │ │ │ +Definition at line _2_6_4_9 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? rreemmqquuoo(()) ********** │ │ │ │ +float std::remquo ( float ____xx, │ │ │ │ + float ____yy, inline │ │ │ │ + int * ____ppqquuoo ) │ │ │ │ +Definition at line _2_6_5_9 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? rriinntt(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +rint │ │ │ │ +Definition at line _2_6_6_9 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? rroouunndd(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +round │ │ │ │ +Definition at line _2_6_8_7 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ssccaallbbllnn(()) ********** │ │ │ │ +float std::scalbln ( float ____xx, constexpr │ │ │ │ + long ____eexx ) │ │ │ │ +Definition at line _2_7_0_5 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ssccaallbbnn(()) ********** │ │ │ │ +float std::scalbn ( float ____xx, constexpr │ │ │ │ + int ____eexx ) │ │ │ │ +Definition at line _2_7_2_3 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ssiiggnnbbiitt(()) ********** │ │ │ │ +bool std:: ( float ____xx ) constexpr │ │ │ │ +signbit │ │ │ │ +Definition at line _1_2_2_5 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ssiinn(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ +_s_i_n │ │ │ │ +Return complex sine of zz. │ │ │ │ +Definition at line _1_1_2_1 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? ssiinnhh(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ +_s_i_n_h │ │ │ │ +Return complex hyperbolic sine of zz. │ │ │ │ +Definition at line _1_1_5_1 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? ssqqrrtt(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ +_s_q_r_t │ │ │ │ +Return complex square root of zz. │ │ │ │ +Definition at line _1_1_9_5 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? ttaann(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ +_t_a_n │ │ │ │ +Return complex tangent of zz. │ │ │ │ +Definition at line _1_2_2_2 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? ttaannhh(()) ********** │ │ │ │ +template │ │ │ │ +complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ +_t_a_n_h │ │ │ │ +Return complex hyperbolic tangent of zz. │ │ │ │ +Definition at line _1_2_5_0 of file _c_o_m_p_l_e_x. │ │ │ │ +********** _?◆_? ttggaammmmaa(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +tgamma │ │ │ │ +Definition at line _2_7_4_1 of file _c_m_a_t_h. │ │ │ │ +********** _?◆_? ttrruunncc(()) ********** │ │ │ │ +float std:: ( float ____xx ) constexpr │ │ │ │ +trunc │ │ │ │ +Definition at line _2_7_5_9 of file _c_m_a_t_h. │ │ │ │ + * _m_a_t_h_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00011_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stdatomic.h Source File │ │ │ +libstdc++: math.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
stdatomic.h
│ │ │ +
math.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// C compatibility header <stdatomic.h> -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// -*- C++ -*- compatibility header.
│ │ │
2
│ │ │ -
3// Copyright The GNU Toolchain Authors.
│ │ │ +
3// Copyright (C) 2002-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
│ │ │ @@ -75,175 +75,259 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file include/stdatomic.h
│ │ │ +
25/** @file math.h
│ │ │
26 * This is a Standard C++ Library header.
│ │ │
27 */
│ │ │
28
│ │ │ -
29#ifndef _GLIBCXX_STDATOMIC_H
│ │ │ -
30#define _GLIBCXX_STDATOMIC_H
│ │ │ -
31
│ │ │ -
32#define __glibcxx_want_stdatomic_h
│ │ │ -
33#include <bits/version.h>
│ │ │ -
34
│ │ │ -
35#ifdef __cpp_lib_stdatomic_h // C++ >= 23
│ │ │ -
36#include <atomic>
│ │ │ +
29#if !defined __cplusplus || defined _GLIBCXX_INCLUDE_NEXT_C_HEADERS
│ │ │ +
30# include_next <math.h>
│ │ │ +
31#else
│ │ │ +
32
│ │ │ +
33#ifndef _GLIBCXX_MATH_H
│ │ │ +
34#define _GLIBCXX_MATH_H 1
│ │ │ +
35
│ │ │ +
36# include <cmath>
│ │ │
37
│ │ │ -
38#define _Atomic(_Tp) ::std::atomic<_Tp>
│ │ │ -
39
│ │ │ - │ │ │ -
41using std::memory_order_relaxed;
│ │ │ -
42using std::memory_order_consume;
│ │ │ -
43using std::memory_order_acquire;
│ │ │ -
44using std::memory_order_release;
│ │ │ -
45using std::memory_order_acq_rel;
│ │ │ -
46using std::memory_order_seq_cst;
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
54using std::atomic_int;
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
60#ifdef _GLIBCXX_USE_CHAR8_T
│ │ │ -
61using std::atomic_char8_t;
│ │ │ -
62#endif
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
66#ifdef _GLIBCXX_USE_C99_STDINT
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
91#endif
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
96#ifdef _GLIBCXX_USE_C99_STDINT
│ │ │ - │ │ │ - │ │ │ -
99#endif
│ │ │ -
100using std::atomic_is_lock_free;
│ │ │ -
101using std::atomic_load;
│ │ │ -
102using std::atomic_load_explicit;
│ │ │ -
103using std::atomic_store;
│ │ │ -
104using std::atomic_store_explicit;
│ │ │ -
105using std::atomic_exchange;
│ │ │ -
106using std::atomic_exchange_explicit;
│ │ │ -
107using std::atomic_compare_exchange_strong;
│ │ │ -
108using std::atomic_compare_exchange_strong_explicit;
│ │ │ -
109using std::atomic_compare_exchange_weak;
│ │ │ -
110using std::atomic_compare_exchange_weak_explicit;
│ │ │ -
111using std::atomic_fetch_add;
│ │ │ -
112using std::atomic_fetch_add_explicit;
│ │ │ -
113using std::atomic_fetch_sub;
│ │ │ -
114using std::atomic_fetch_sub_explicit;
│ │ │ -
115using std::atomic_fetch_or;
│ │ │ -
116using std::atomic_fetch_or_explicit;
│ │ │ -
117using std::atomic_fetch_xor;
│ │ │ -
118using std::atomic_fetch_xor_explicit;
│ │ │ -
119using std::atomic_fetch_and;
│ │ │ -
120using std::atomic_fetch_and_explicit;
│ │ │ -
121using std::atomic_flag_test_and_set;
│ │ │ -
122using std::atomic_flag_test_and_set_explicit;
│ │ │ -
123using std::atomic_flag_clear;
│ │ │ -
124using std::atomic_flag_clear_explicit;
│ │ │ -
125using std::atomic_thread_fence;
│ │ │ -
126using std::atomic_signal_fence;
│ │ │ -
127
│ │ │ -
128#elif defined __clang__
│ │ │ -
129# include_next <stdatomic.h>
│ │ │ -
130#endif // __cpp_lib_stdatomic_h
│ │ │ -
131#endif // _GLIBCXX_STDATOMIC_H
│ │ │ - │ │ │ - │ │ │ -
atomic< unsigned long > atomic_ulong
atomic_ulong
Definition atomic:1088
│ │ │ -
atomic< intmax_t > atomic_intmax_t
atomic_intmax_t
Definition atomic:1202
│ │ │ -
atomic< uintptr_t > atomic_uintptr_t
atomic_uintptr_t
Definition atomic:1193
│ │ │ -
atomic< signed char > atomic_schar
atomic_schar
Definition atomic:1067
│ │ │ -
atomic< int_least8_t > atomic_int_least8_t
atomic_int_least8_t
Definition atomic:1140
│ │ │ -
atomic< unsigned long long > atomic_ullong
atomic_ullong
Definition atomic:1094
│ │ │ -
atomic< uint_fast8_t > atomic_uint_fast8_t
atomic_uint_fast8_t
Definition atomic:1168
│ │ │ -
atomic< intptr_t > atomic_intptr_t
atomic_intptr_t
Definition atomic:1190
│ │ │ -
atomic< int16_t > atomic_int16_t
atomic_int16_t
Definition atomic:1121
│ │ │ -
atomic< size_t > atomic_size_t
atomic_size_t
Definition atomic:1196
│ │ │ -
atomic< long > atomic_long
atomic_long
Definition atomic:1085
│ │ │ -
atomic< uint_least8_t > atomic_uint_least8_t
atomic_uint_least8_t
Definition atomic:1143
│ │ │ -
atomic< short > atomic_short
atomic_short
Definition atomic:1073
│ │ │ -
atomic< uint_least16_t > atomic_uint_least16_t
atomic_uint_least16_t
Definition atomic:1149
│ │ │ -
atomic< uint16_t > atomic_uint16_t
atomic_uint16_t
Definition atomic:1124
│ │ │ -
atomic< uint64_t > atomic_uint64_t
atomic_uint64_t
Definition atomic:1136
│ │ │ -
atomic< int_least32_t > atomic_int_least32_t
atomic_int_least32_t
Definition atomic:1152
│ │ │ -
atomic< uint8_t > atomic_uint8_t
atomic_uint8_t
Definition atomic:1118
│ │ │ -
atomic< wchar_t > atomic_wchar_t
atomic_wchar_t
Definition atomic:1097
│ │ │ -
atomic< unsigned int > atomic_uint
atomic_uint
Definition atomic:1082
│ │ │ -
atomic< uint_least32_t > atomic_uint_least32_t
atomic_uint_least32_t
Definition atomic:1155
│ │ │ -
atomic< uint_fast64_t > atomic_uint_fast64_t
atomic_uint_fast64_t
Definition atomic:1186
│ │ │ -
atomic< int_fast32_t > atomic_int_fast32_t
atomic_int_fast32_t
Definition atomic:1177
│ │ │ -
atomic< char > atomic_char
atomic_char
Definition atomic:1064
│ │ │ -
atomic< int > atomic_int
atomic_int
Definition atomic:1079
│ │ │ -
atomic< uint_least64_t > atomic_uint_least64_t
atomic_uint_least64_t
Definition atomic:1161
│ │ │ -
atomic< int64_t > atomic_int64_t
atomic_int64_t
Definition atomic:1133
│ │ │ -
atomic< uintmax_t > atomic_uintmax_t
atomic_uintmax_t
Definition atomic:1205
│ │ │ -
atomic< int_fast16_t > atomic_int_fast16_t
atomic_int_fast16_t
Definition atomic:1171
│ │ │ -
atomic< int32_t > atomic_int32_t
atomic_int32_t
Definition atomic:1127
│ │ │ -
atomic< uint_fast16_t > atomic_uint_fast16_t
atomic_uint_fast16_t
Definition atomic:1174
│ │ │ -
atomic< int8_t > atomic_int8_t
atomic_int8_t
Definition atomic:1115
│ │ │ -
atomic< long long > atomic_llong
atomic_llong
Definition atomic:1091
│ │ │ -
atomic< char16_t > atomic_char16_t
atomic_char16_t
Definition atomic:1105
│ │ │ -
atomic< int_fast64_t > atomic_int_fast64_t
atomic_int_fast64_t
Definition atomic:1183
│ │ │ -
atomic< ptrdiff_t > atomic_ptrdiff_t
atomic_ptrdiff_t
Definition atomic:1199
│ │ │ -
atomic< char32_t > atomic_char32_t
atomic_char32_t
Definition atomic:1108
│ │ │ -
atomic< int_least16_t > atomic_int_least16_t
atomic_int_least16_t
Definition atomic:1146
│ │ │ -
atomic< unsigned char > atomic_uchar
atomic_uchar
Definition atomic:1070
│ │ │ -
atomic< int_fast8_t > atomic_int_fast8_t
atomic_int_fast8_t
Definition atomic:1165
│ │ │ -
memory_order
Enumeration for memory_order.
Definition atomic_base.h:65
│ │ │ -
atomic< unsigned short > atomic_ushort
atomic_ushort
Definition atomic:1076
│ │ │ -
atomic< int_least64_t > atomic_int_least64_t
atomic_int_least64_t
Definition atomic:1158
│ │ │ -
atomic< bool > atomic_bool
atomic_bool
Definition atomic:1061
│ │ │ -
atomic< uint_fast32_t > atomic_uint_fast32_t
atomic_uint_fast32_t
Definition atomic:1180
│ │ │ -
atomic< uint32_t > atomic_uint32_t
atomic_uint32_t
Definition atomic:1130
│ │ │ -
atomic_flag
│ │ │ +
38using std::abs;
│ │ │ +
39using std::acos;
│ │ │ +
40using std::asin;
│ │ │ +
41using std::atan;
│ │ │ +
42using std::atan2;
│ │ │ +
43using std::cos;
│ │ │ +
44using std::sin;
│ │ │ +
45using std::tan;
│ │ │ +
46using std::cosh;
│ │ │ +
47using std::sinh;
│ │ │ +
48using std::tanh;
│ │ │ +
49using std::exp;
│ │ │ +
50using std::frexp;
│ │ │ +
51using std::ldexp;
│ │ │ +
52using std::log;
│ │ │ +
53using std::log10;
│ │ │ +
54using std::modf;
│ │ │ +
55using std::pow;
│ │ │ +
56using std::sqrt;
│ │ │ +
57using std::ceil;
│ │ │ +
58using std::fabs;
│ │ │ +
59using std::floor;
│ │ │ +
60using std::fmod;
│ │ │ +
61
│ │ │ +
62#if _GLIBCXX_USE_C99_MATH
│ │ │ +
63using std::fpclassify;
│ │ │ +
64using std::isfinite;
│ │ │ +
65using std::isinf;
│ │ │ +
66using std::isnan;
│ │ │ +
67using std::isnormal;
│ │ │ +
68using std::signbit;
│ │ │ +
69using std::isgreater;
│ │ │ +
70using std::isgreaterequal;
│ │ │ +
71using std::isless;
│ │ │ +
72using std::islessequal;
│ │ │ +
73using std::islessgreater;
│ │ │ +
74using std::isunordered;
│ │ │ +
75#endif
│ │ │ +
76
│ │ │ +
77#if __cplusplus >= 201103L && defined(_GLIBCXX_USE_C99_MATH_FUNCS)
│ │ │ +
78using std::acosh;
│ │ │ +
79using std::asinh;
│ │ │ +
80using std::atanh;
│ │ │ +
81using std::cbrt;
│ │ │ +
82using std::copysign;
│ │ │ +
83using std::erf;
│ │ │ +
84using std::erfc;
│ │ │ +
85using std::exp2;
│ │ │ +
86using std::expm1;
│ │ │ +
87using std::fdim;
│ │ │ +
88using std::fma;
│ │ │ +
89using std::fmax;
│ │ │ +
90using std::fmin;
│ │ │ +
91using std::hypot;
│ │ │ +
92using std::ilogb;
│ │ │ +
93using std::lgamma;
│ │ │ +
94using std::llrint;
│ │ │ +
95using std::llround;
│ │ │ +
96using std::log1p;
│ │ │ +
97using std::log2;
│ │ │ +
98using std::logb;
│ │ │ +
99using std::lrint;
│ │ │ +
100using std::lround;
│ │ │ +
101using std::nearbyint;
│ │ │ +
102using std::nextafter;
│ │ │ +
103using std::nexttoward;
│ │ │ +
104using std::remainder;
│ │ │ +
105using std::remquo;
│ │ │ +
106using std::rint;
│ │ │ +
107using std::round;
│ │ │ +
108using std::scalbln;
│ │ │ +
109using std::scalbn;
│ │ │ +
110using std::tgamma;
│ │ │ +
111using std::trunc;
│ │ │ +
112#endif // C++11 && _GLIBCXX_USE_C99_MATH_FUNCS
│ │ │ +
113
│ │ │ +
114// The mathematical special functions are only added to the global namespace
│ │ │ +
115// by IS 29124, but not by C++17.
│ │ │ +
116#if __cplusplus >= 201103L && __STDCPP_WANT_MATH_SPEC_FUNCS__ != 0
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
123using std::betaf;
│ │ │ +
124using std::betal;
│ │ │ +
125using std::beta;
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
146using std::cyl_neumann;
│ │ │ +
147using std::ellint_1f;
│ │ │ +
148using std::ellint_1l;
│ │ │ +
149using std::ellint_1;
│ │ │ +
150using std::ellint_2f;
│ │ │ +
151using std::ellint_2l;
│ │ │ +
152using std::ellint_2;
│ │ │ +
153using std::ellint_3f;
│ │ │ +
154using std::ellint_3l;
│ │ │ +
155using std::ellint_3;
│ │ │ +
156using std::expintf;
│ │ │ +
157using std::expintl;
│ │ │ +
158using std::expint;
│ │ │ +
159using std::hermitef;
│ │ │ +
160using std::hermitel;
│ │ │ +
161using std::hermite;
│ │ │ +
162using std::laguerref;
│ │ │ +
163using std::laguerrel;
│ │ │ +
164using std::laguerre;
│ │ │ +
165using std::legendref;
│ │ │ +
166using std::legendrel;
│ │ │ +
167using std::legendre;
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
171using std::sph_besself;
│ │ │ +
172using std::sph_bessell;
│ │ │ +
173using std::sph_bessel;
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
179using std::sph_neumann;
│ │ │ +
180#endif // _GLIBCXX_USE_STD_SPEC_FUNCS
│ │ │ +
181
│ │ │ +
182#if __cplusplus > 201703L
│ │ │ +
183using std::lerp;
│ │ │ +
184#endif // C++20
│ │ │ +
185
│ │ │ +
186#endif // _GLIBCXX_MATH_H
│ │ │ +
187#endif // __cplusplus
│ │ │ + │ │ │ +
complex< _Tp > log10(const complex< _Tp > &)
Return complex base 10 logarithm of z.
Definition complex:1095
│ │ │ +
complex< _Tp > sin(const complex< _Tp > &)
Return complex sine of z.
Definition complex:1121
│ │ │ +
complex< _Tp > log(const complex< _Tp > &)
Return complex natural logarithm of z.
Definition complex:1086
│ │ │ +
complex< _Tp > tan(const complex< _Tp > &)
Return complex tangent of z.
Definition complex:1222
│ │ │ +
_Tp abs(const complex< _Tp > &)
Return magnitude of z.
Definition complex:892
│ │ │ +
complex< _Tp > exp(const complex< _Tp > &)
Return complex base e exponential of z.
Definition complex:1059
│ │ │ +
complex< _Tp > cosh(const complex< _Tp > &)
Return complex hyperbolic cosine of z.
Definition complex:1033
│ │ │ +
complex< _Tp > tanh(const complex< _Tp > &)
Return complex hyperbolic tangent of z.
Definition complex:1250
│ │ │ +
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:1151
│ │ │ +
complex< _Tp > cos(const complex< _Tp > &)
Return complex cosine of z.
Definition complex:1003
│ │ │ +
complex< _Tp > sqrt(const complex< _Tp > &)
Return complex square root of z.
Definition complex:1195
│ │ │ +
__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
│ │ │ +
_Tp fabs(const std::complex< _Tp > &)
fabs(__z) [8.1.8].
Definition complex:2429
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -stdatomic.h │ │ │ │ +math.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// C compatibility header -*- C++ -*- │ │ │ │ +1// -*- C++ -*- compatibility header. │ │ │ │ 2 │ │ │ │ -3// Copyright The GNU Toolchain Authors. │ │ │ │ +3// Copyright (C) 2002-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,305 +21,429 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file include/stdatomic.h │ │ │ │ +25/** @file math.h │ │ │ │ 26 * This is a Standard C++ Library header. │ │ │ │ 27 */ │ │ │ │ 28 │ │ │ │ -29#ifndef _GLIBCXX_STDATOMIC_H │ │ │ │ -30#define _GLIBCXX_STDATOMIC_H │ │ │ │ -31 │ │ │ │ -32#define __glibcxx_want_stdatomic_h │ │ │ │ -33#include <_b_i_t_s_/_v_e_r_s_i_o_n_._h> │ │ │ │ -34 │ │ │ │ -35#ifdef __cpp_lib_stdatomic_h // C++ >= 23 │ │ │ │ -36#include <_a_t_o_m_i_c> │ │ │ │ +29#if !defined __cplusplus || defined _GLIBCXX_INCLUDE_NEXT_C_HEADERS │ │ │ │ +30# include_next │ │ │ │ +31#else │ │ │ │ +32 │ │ │ │ +33#ifndef _GLIBCXX_MATH_H │ │ │ │ +34#define _GLIBCXX_MATH_H 1 │ │ │ │ +35 │ │ │ │ +36# include <_c_m_a_t_h> │ │ │ │ 37 │ │ │ │ -38#define _Atomic(_Tp) ::std::atomic<_Tp> │ │ │ │ -39 │ │ │ │ -40using _s_t_d_:_:_m_e_m_o_r_y___o_r_d_e_r; │ │ │ │ -41using std::memory_order_relaxed; │ │ │ │ -42using std::memory_order_consume; │ │ │ │ -43using std::memory_order_acquire; │ │ │ │ -44using std::memory_order_release; │ │ │ │ -45using std::memory_order_acq_rel; │ │ │ │ -46using std::memory_order_seq_cst; │ │ │ │ -47using _s_t_d_:_:_a_t_o_m_i_c___f_l_a_g; │ │ │ │ -48using _s_t_d_:_:_a_t_o_m_i_c___b_o_o_l; │ │ │ │ -49using _s_t_d_:_:_a_t_o_m_i_c___c_h_a_r; │ │ │ │ -50using _s_t_d_:_:_a_t_o_m_i_c___s_c_h_a_r; │ │ │ │ -51using _s_t_d_:_:_a_t_o_m_i_c___u_c_h_a_r; │ │ │ │ -52using _s_t_d_:_:_a_t_o_m_i_c___s_h_o_r_t; │ │ │ │ -53using _s_t_d_:_:_a_t_o_m_i_c___u_s_h_o_r_t; │ │ │ │ -54using _s_t_d_:_:_a_t_o_m_i_c___i_n_t; │ │ │ │ -55using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t; │ │ │ │ -56using _s_t_d_:_:_a_t_o_m_i_c___l_o_n_g; │ │ │ │ -57using _s_t_d_:_:_a_t_o_m_i_c___u_l_o_n_g; │ │ │ │ -58using _s_t_d_:_:_a_t_o_m_i_c___l_l_o_n_g; │ │ │ │ -59using _s_t_d_:_:_a_t_o_m_i_c___u_l_l_o_n_g; │ │ │ │ -60#ifdef _GLIBCXX_USE_CHAR8_T │ │ │ │ -61using std::atomic_char8_t; │ │ │ │ -62#endif │ │ │ │ -63using _s_t_d_:_:_a_t_o_m_i_c___c_h_a_r_1_6___t; │ │ │ │ -64using _s_t_d_:_:_a_t_o_m_i_c___c_h_a_r_3_2___t; │ │ │ │ -65using _s_t_d_:_:_a_t_o_m_i_c___w_c_h_a_r___t; │ │ │ │ -66#ifdef _GLIBCXX_USE_C99_STDINT │ │ │ │ -67using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_8___t; │ │ │ │ -68using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_8___t; │ │ │ │ -69using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_1_6___t; │ │ │ │ -70using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_1_6___t; │ │ │ │ -71using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_3_2___t; │ │ │ │ -72using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_3_2___t; │ │ │ │ -73using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_6_4___t; │ │ │ │ -74using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_6_4___t; │ │ │ │ -75using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_8___t; │ │ │ │ -76using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_8___t; │ │ │ │ -77using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_1_6___t; │ │ │ │ -78using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_1_6___t; │ │ │ │ -79using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_3_2___t; │ │ │ │ -80using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_3_2___t; │ │ │ │ -81using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_6_4___t; │ │ │ │ -82using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_6_4___t; │ │ │ │ -83using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_8___t; │ │ │ │ -84using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_8___t; │ │ │ │ -85using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_1_6___t; │ │ │ │ -86using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_1_6___t; │ │ │ │ -87using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_3_2___t; │ │ │ │ -88using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_3_2___t; │ │ │ │ -89using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_6_4___t; │ │ │ │ -90using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_6_4___t; │ │ │ │ -91#endif │ │ │ │ -92using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_p_t_r___t; │ │ │ │ -93using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_p_t_r___t; │ │ │ │ -94using _s_t_d_:_:_a_t_o_m_i_c___s_i_z_e___t; │ │ │ │ -95using _s_t_d_:_:_a_t_o_m_i_c___p_t_r_d_i_f_f___t; │ │ │ │ -96#ifdef _GLIBCXX_USE_C99_STDINT │ │ │ │ -97using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_m_a_x___t; │ │ │ │ -98using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_m_a_x___t; │ │ │ │ -99#endif │ │ │ │ -100using std::atomic_is_lock_free; │ │ │ │ -101using std::atomic_load; │ │ │ │ -102using std::atomic_load_explicit; │ │ │ │ -103using std::atomic_store; │ │ │ │ -104using std::atomic_store_explicit; │ │ │ │ -105using std::atomic_exchange; │ │ │ │ -106using std::atomic_exchange_explicit; │ │ │ │ -107using std::atomic_compare_exchange_strong; │ │ │ │ -108using std::atomic_compare_exchange_strong_explicit; │ │ │ │ -109using std::atomic_compare_exchange_weak; │ │ │ │ -110using std::atomic_compare_exchange_weak_explicit; │ │ │ │ -111using std::atomic_fetch_add; │ │ │ │ -112using std::atomic_fetch_add_explicit; │ │ │ │ -113using std::atomic_fetch_sub; │ │ │ │ -114using std::atomic_fetch_sub_explicit; │ │ │ │ -115using std::atomic_fetch_or; │ │ │ │ -116using std::atomic_fetch_or_explicit; │ │ │ │ -117using std::atomic_fetch_xor; │ │ │ │ -118using std::atomic_fetch_xor_explicit; │ │ │ │ -119using std::atomic_fetch_and; │ │ │ │ -120using std::atomic_fetch_and_explicit; │ │ │ │ -121using std::atomic_flag_test_and_set; │ │ │ │ -122using std::atomic_flag_test_and_set_explicit; │ │ │ │ -123using std::atomic_flag_clear; │ │ │ │ -124using std::atomic_flag_clear_explicit; │ │ │ │ -125using std::atomic_thread_fence; │ │ │ │ -126using std::atomic_signal_fence; │ │ │ │ -127 │ │ │ │ -128#elif defined __clang__ │ │ │ │ -129# include_next │ │ │ │ -130#endif // __cpp_lib_stdatomic_h │ │ │ │ -131#endif // _GLIBCXX_STDATOMIC_H │ │ │ │ -_a_t_o_m_i_c │ │ │ │ -_v_e_r_s_i_o_n_._h │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_l_o_n_g │ │ │ │ -atomic< unsigned long > atomic_ulong │ │ │ │ -atomic_ulong │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_8_8 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t_m_a_x___t │ │ │ │ -atomic< intmax_t > atomic_intmax_t │ │ │ │ -atomic_intmax_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_2_0_2 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_p_t_r___t │ │ │ │ -atomic< uintptr_t > atomic_uintptr_t │ │ │ │ -atomic_uintptr_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_9_3 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___s_c_h_a_r │ │ │ │ -atomic< signed char > atomic_schar │ │ │ │ -atomic_schar │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_6_7 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_8___t │ │ │ │ -atomic< int_least8_t > atomic_int_least8_t │ │ │ │ -atomic_int_least8_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_4_0 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_l_l_o_n_g │ │ │ │ -atomic< unsigned long long > atomic_ullong │ │ │ │ -atomic_ullong │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_9_4 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_8___t │ │ │ │ -atomic< uint_fast8_t > atomic_uint_fast8_t │ │ │ │ -atomic_uint_fast8_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_6_8 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t_p_t_r___t │ │ │ │ -atomic< intptr_t > atomic_intptr_t │ │ │ │ -atomic_intptr_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_9_0 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t_1_6___t │ │ │ │ -atomic< int16_t > atomic_int16_t │ │ │ │ -atomic_int16_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_2_1 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___s_i_z_e___t │ │ │ │ -atomic< size_t > atomic_size_t │ │ │ │ -atomic_size_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_9_6 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___l_o_n_g │ │ │ │ -atomic< long > atomic_long │ │ │ │ -atomic_long │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_8_5 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_8___t │ │ │ │ -atomic< uint_least8_t > atomic_uint_least8_t │ │ │ │ -atomic_uint_least8_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_4_3 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___s_h_o_r_t │ │ │ │ -atomic< short > atomic_short │ │ │ │ -atomic_short │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_7_3 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_1_6___t │ │ │ │ -atomic< uint_least16_t > atomic_uint_least16_t │ │ │ │ -atomic_uint_least16_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_4_9 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_1_6___t │ │ │ │ -atomic< uint16_t > atomic_uint16_t │ │ │ │ -atomic_uint16_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_2_4 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_6_4___t │ │ │ │ -atomic< uint64_t > atomic_uint64_t │ │ │ │ -atomic_uint64_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_3_6 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_3_2___t │ │ │ │ -atomic< int_least32_t > atomic_int_least32_t │ │ │ │ -atomic_int_least32_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_5_2 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_8___t │ │ │ │ -atomic< uint8_t > atomic_uint8_t │ │ │ │ -atomic_uint8_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_1_8 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___w_c_h_a_r___t │ │ │ │ -atomic< wchar_t > atomic_wchar_t │ │ │ │ -atomic_wchar_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_9_7 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t │ │ │ │ -atomic< unsigned int > atomic_uint │ │ │ │ -atomic_uint │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_8_2 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_3_2___t │ │ │ │ -atomic< uint_least32_t > atomic_uint_least32_t │ │ │ │ -atomic_uint_least32_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_5_5 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_6_4___t │ │ │ │ -atomic< uint_fast64_t > atomic_uint_fast64_t │ │ │ │ -atomic_uint_fast64_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_8_6 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_3_2___t │ │ │ │ -atomic< int_fast32_t > atomic_int_fast32_t │ │ │ │ -atomic_int_fast32_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_7_7 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___c_h_a_r │ │ │ │ -atomic< char > atomic_char │ │ │ │ -atomic_char │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_6_4 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t │ │ │ │ -atomic< int > atomic_int │ │ │ │ -atomic_int │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_7_9 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_6_4___t │ │ │ │ -atomic< uint_least64_t > atomic_uint_least64_t │ │ │ │ -atomic_uint_least64_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_6_1 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t_6_4___t │ │ │ │ -atomic< int64_t > atomic_int64_t │ │ │ │ -atomic_int64_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_3_3 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_m_a_x___t │ │ │ │ -atomic< uintmax_t > atomic_uintmax_t │ │ │ │ -atomic_uintmax_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_2_0_5 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_1_6___t │ │ │ │ -atomic< int_fast16_t > atomic_int_fast16_t │ │ │ │ -atomic_int_fast16_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_7_1 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t_3_2___t │ │ │ │ -atomic< int32_t > atomic_int32_t │ │ │ │ -atomic_int32_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_2_7 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_1_6___t │ │ │ │ -atomic< uint_fast16_t > atomic_uint_fast16_t │ │ │ │ -atomic_uint_fast16_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_7_4 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t_8___t │ │ │ │ -atomic< int8_t > atomic_int8_t │ │ │ │ -atomic_int8_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_1_5 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___l_l_o_n_g │ │ │ │ -atomic< long long > atomic_llong │ │ │ │ -atomic_llong │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_9_1 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___c_h_a_r_1_6___t │ │ │ │ -atomic< char16_t > atomic_char16_t │ │ │ │ -atomic_char16_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_0_5 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_6_4___t │ │ │ │ -atomic< int_fast64_t > atomic_int_fast64_t │ │ │ │ -atomic_int_fast64_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_8_3 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___p_t_r_d_i_f_f___t │ │ │ │ -atomic< ptrdiff_t > atomic_ptrdiff_t │ │ │ │ -atomic_ptrdiff_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_9_9 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___c_h_a_r_3_2___t │ │ │ │ -atomic< char32_t > atomic_char32_t │ │ │ │ -atomic_char32_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_0_8 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_1_6___t │ │ │ │ -atomic< int_least16_t > atomic_int_least16_t │ │ │ │ -atomic_int_least16_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_4_6 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_c_h_a_r │ │ │ │ -atomic< unsigned char > atomic_uchar │ │ │ │ -atomic_uchar │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_7_0 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_8___t │ │ │ │ -atomic< int_fast8_t > atomic_int_fast8_t │ │ │ │ -atomic_int_fast8_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_6_5 │ │ │ │ -_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___u_s_h_o_r_t │ │ │ │ -atomic< unsigned short > atomic_ushort │ │ │ │ -atomic_ushort │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_7_6 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_6_4___t │ │ │ │ -atomic< int_least64_t > atomic_int_least64_t │ │ │ │ -atomic_int_least64_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_5_8 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___b_o_o_l │ │ │ │ -atomic< bool > atomic_bool │ │ │ │ -atomic_bool │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_6_1 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_3_2___t │ │ │ │ -atomic< uint_fast32_t > atomic_uint_fast32_t │ │ │ │ -atomic_uint_fast32_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_8_0 │ │ │ │ -_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_3_2___t │ │ │ │ -atomic< uint32_t > atomic_uint32_t │ │ │ │ -atomic_uint32_t │ │ │ │ -DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_3_0 │ │ │ │ -_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_t_o_m_i_c_._h │ │ │ │ +38using _s_t_d_:_:_a_b_s; │ │ │ │ +39using std::acos; │ │ │ │ +40using std::asin; │ │ │ │ +41using std::atan; │ │ │ │ +42using std::atan2; │ │ │ │ +43using _s_t_d_:_:_c_o_s; │ │ │ │ +44using _s_t_d_:_:_s_i_n; │ │ │ │ +45using _s_t_d_:_:_t_a_n; │ │ │ │ +46using _s_t_d_:_:_c_o_s_h; │ │ │ │ +47using _s_t_d_:_:_s_i_n_h; │ │ │ │ +48using _s_t_d_:_:_t_a_n_h; │ │ │ │ +49using _s_t_d_:_:_e_x_p; │ │ │ │ +50using std::frexp; │ │ │ │ +51using std::ldexp; │ │ │ │ +52using _s_t_d_:_:_l_o_g; │ │ │ │ +53using _s_t_d_:_:_l_o_g_1_0; │ │ │ │ +54using std::modf; │ │ │ │ +55using _s_t_d_:_:_p_o_w; │ │ │ │ +56using _s_t_d_:_:_s_q_r_t; │ │ │ │ +57using std::ceil; │ │ │ │ +58using _s_t_d_:_:_f_a_b_s; │ │ │ │ +59using std::floor; │ │ │ │ +60using std::fmod; │ │ │ │ +61 │ │ │ │ +62#if _GLIBCXX_USE_C99_MATH │ │ │ │ +63using std::fpclassify; │ │ │ │ +64using std::isfinite; │ │ │ │ +65using std::isinf; │ │ │ │ +66using std::isnan; │ │ │ │ +67using std::isnormal; │ │ │ │ +68using std::signbit; │ │ │ │ +69using std::isgreater; │ │ │ │ +70using std::isgreaterequal; │ │ │ │ +71using std::isless; │ │ │ │ +72using std::islessequal; │ │ │ │ +73using std::islessgreater; │ │ │ │ +74using std::isunordered; │ │ │ │ +75#endif │ │ │ │ +76 │ │ │ │ +77#if __cplusplus >= 201103L && defined(_GLIBCXX_USE_C99_MATH_FUNCS) │ │ │ │ +78using std::acosh; │ │ │ │ +79using std::asinh; │ │ │ │ +80using std::atanh; │ │ │ │ +81using std::cbrt; │ │ │ │ +82using std::copysign; │ │ │ │ +83using std::erf; │ │ │ │ +84using std::erfc; │ │ │ │ +85using std::exp2; │ │ │ │ +86using std::expm1; │ │ │ │ +87using std::fdim; │ │ │ │ +88using std::fma; │ │ │ │ +89using std::fmax; │ │ │ │ +90using std::fmin; │ │ │ │ +91using std::hypot; │ │ │ │ +92using std::ilogb; │ │ │ │ +93using std::lgamma; │ │ │ │ +94using std::llrint; │ │ │ │ +95using std::llround; │ │ │ │ +96using std::log1p; │ │ │ │ +97using std::log2; │ │ │ │ +98using std::logb; │ │ │ │ +99using std::lrint; │ │ │ │ +100using std::lround; │ │ │ │ +101using std::nearbyint; │ │ │ │ +102using std::nextafter; │ │ │ │ +103using std::nexttoward; │ │ │ │ +104using std::remainder; │ │ │ │ +105using std::remquo; │ │ │ │ +106using std::rint; │ │ │ │ +107using std::round; │ │ │ │ +108using std::scalbln; │ │ │ │ +109using std::scalbn; │ │ │ │ +110using std::tgamma; │ │ │ │ +111using std::trunc; │ │ │ │ +112#endif // C++11 && _GLIBCXX_USE_C99_MATH_FUNCS │ │ │ │ +113 │ │ │ │ +114// The mathematical special functions are only added to the global namespace │ │ │ │ +115// by IS 29124, but not by C++17. │ │ │ │ +116#if __cplusplus >= 201103L && __STDCPP_WANT_MATH_SPEC_FUNCS__ != 0 │ │ │ │ +117using _s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_f; │ │ │ │ +118using _s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_l; │ │ │ │ +119using _s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e; │ │ │ │ +120using _s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_f; │ │ │ │ +121using _s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_l; │ │ │ │ +122using _s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e; │ │ │ │ +123using _s_t_d_:_:_b_e_t_a_f; │ │ │ │ +124using _s_t_d_:_:_b_e_t_a_l; │ │ │ │ +125using _s_t_d_:_:_b_e_t_a; │ │ │ │ +126using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_f; │ │ │ │ +127using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_l; │ │ │ │ +128using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1; │ │ │ │ +129using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_f; │ │ │ │ +130using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_l; │ │ │ │ +131using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2; │ │ │ │ +132using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_f; │ │ │ │ +133using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_l; │ │ │ │ +134using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3; │ │ │ │ +135using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_f; │ │ │ │ +136using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_l; │ │ │ │ +137using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___i; │ │ │ │ +138using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_f; │ │ │ │ +139using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_l; │ │ │ │ +140using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___j; │ │ │ │ +141using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_f; │ │ │ │ +142using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_l; │ │ │ │ +143using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___k; │ │ │ │ +144using _s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_f; │ │ │ │ +145using _s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_l; │ │ │ │ +146using _s_t_d_:_:_c_y_l___n_e_u_m_a_n_n; │ │ │ │ +147using _s_t_d_:_:_e_l_l_i_n_t___1_f; │ │ │ │ +148using _s_t_d_:_:_e_l_l_i_n_t___1_l; │ │ │ │ +149using _s_t_d_:_:_e_l_l_i_n_t___1; │ │ │ │ +150using _s_t_d_:_:_e_l_l_i_n_t___2_f; │ │ │ │ +151using _s_t_d_:_:_e_l_l_i_n_t___2_l; │ │ │ │ +152using _s_t_d_:_:_e_l_l_i_n_t___2; │ │ │ │ +153using _s_t_d_:_:_e_l_l_i_n_t___3_f; │ │ │ │ +154using _s_t_d_:_:_e_l_l_i_n_t___3_l; │ │ │ │ +155using _s_t_d_:_:_e_l_l_i_n_t___3; │ │ │ │ +156using _s_t_d_:_:_e_x_p_i_n_t_f; │ │ │ │ +157using _s_t_d_:_:_e_x_p_i_n_t_l; │ │ │ │ +158using _s_t_d_:_:_e_x_p_i_n_t; │ │ │ │ +159using _s_t_d_:_:_h_e_r_m_i_t_e_f; │ │ │ │ +160using _s_t_d_:_:_h_e_r_m_i_t_e_l; │ │ │ │ +161using _s_t_d_:_:_h_e_r_m_i_t_e; │ │ │ │ +162using _s_t_d_:_:_l_a_g_u_e_r_r_e_f; │ │ │ │ +163using _s_t_d_:_:_l_a_g_u_e_r_r_e_l; │ │ │ │ +164using _s_t_d_:_:_l_a_g_u_e_r_r_e; │ │ │ │ +165using _s_t_d_:_:_l_e_g_e_n_d_r_e_f; │ │ │ │ +166using _s_t_d_:_:_l_e_g_e_n_d_r_e_l; │ │ │ │ +167using _s_t_d_:_:_l_e_g_e_n_d_r_e; │ │ │ │ +168using _s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_f; │ │ │ │ +169using _s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_l; │ │ │ │ +170using _s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a; │ │ │ │ +171using _s_t_d_:_:_s_p_h___b_e_s_s_e_l_f; │ │ │ │ +172using _s_t_d_:_:_s_p_h___b_e_s_s_e_l_l; │ │ │ │ +173using _s_t_d_:_:_s_p_h___b_e_s_s_e_l; │ │ │ │ +174using _s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_f; │ │ │ │ +175using _s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_l; │ │ │ │ +176using _s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e; │ │ │ │ +177using _s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_f; │ │ │ │ +178using _s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_l; │ │ │ │ +179using _s_t_d_:_:_s_p_h___n_e_u_m_a_n_n; │ │ │ │ +180#endif // _GLIBCXX_USE_STD_SPEC_FUNCS │ │ │ │ +181 │ │ │ │ +182#if __cplusplus > 201703L │ │ │ │ +183using std::lerp; │ │ │ │ +184#endif // C++20 │ │ │ │ +185 │ │ │ │ +186#endif // _GLIBCXX_MATH_H │ │ │ │ +187#endif // __cplusplus │ │ │ │ +_c_m_a_t_h │ │ │ │ +_s_t_d_:_:_l_o_g_1_0 │ │ │ │ +complex< _Tp > log10(const complex< _Tp > &) │ │ │ │ +Return complex base 10 logarithm of z. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_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_1 │ │ │ │ +_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_8_6 │ │ │ │ +_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_2 │ │ │ │ +_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_2 │ │ │ │ +_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_5_9 │ │ │ │ +_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_3 │ │ │ │ +_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_0 │ │ │ │ +_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_1 │ │ │ │ +_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_3 │ │ │ │ +_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_5 │ │ │ │ +_s_t_d_:_:_s_p_h___b_e_s_s_e_l │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type sph_bessel(unsigned int __n, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_0_0 │ │ │ │ +_s_t_d_:_:_s_p_h___b_e_s_s_e_l_l │ │ │ │ +long double sph_bessell(unsigned int __n, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_8_1 │ │ │ │ +_s_t_d_:_:_b_e_t_a_f │ │ │ │ +float betaf(float __a, float __b) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_1_0 │ │ │ │ +_s_t_d_:_:_e_x_p_i_n_t_l │ │ │ │ +long double expintl(long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_5_2 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_f │ │ │ │ +float cyl_bessel_jf(float __nu, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_4_8 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___k │ │ │ │ +__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_k(_Tpnu __nu, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_3_1 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___3_f │ │ │ │ +float ellint_3f(float __k, float __nu, float __phi) │ │ │ │ +Return the incomplete elliptic integral of the third kind for float argument. │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_9_0 │ │ │ │ +_s_t_d_:_:_l_e_g_e_n_d_r_e_l │ │ │ │ +long double legendrel(unsigned int __l, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_8_5 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_l │ │ │ │ +long double comp_ellint_3l(long double __k, long double __nu) │ │ │ │ +Return the complete elliptic integral of the third kind for long double modulus │ │ │ │ +k. │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_6_1 │ │ │ │ +_s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_l │ │ │ │ +long double riemann_zetal(long double __s) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_3_0 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_f │ │ │ │ +float cyl_bessel_kf(float __nu, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_9_4 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_f │ │ │ │ +float comp_ellint_2f(float __k) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_0_4 │ │ │ │ +_s_t_d_:_:_h_e_r_m_i_t_e_l │ │ │ │ +long double hermitel(unsigned int __n, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_9_3 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___1 │ │ │ │ +__gnu_cxx::__promote_2< _Tp, _Tpp >::__type ellint_1(_Tp __k, _Tpp __phi) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_2_7 │ │ │ │ +_s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_l │ │ │ │ +long double sph_legendrel(unsigned int __l, unsigned int __m, long double │ │ │ │ +__theta) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_2_6 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___1_f │ │ │ │ +float ellint_1f(float __k, float __phi) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_9_4 │ │ │ │ +_s_t_d_:_:_c_y_l___n_e_u_m_a_n_n │ │ │ │ +__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_neumann(_Tpnu __nu, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_7_9 │ │ │ │ +_s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_f │ │ │ │ +float assoc_legendref(unsigned int __l, unsigned int __m, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_6_5 │ │ │ │ +_s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_l │ │ │ │ +long double sph_neumannl(unsigned int __n, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_7_2 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_l │ │ │ │ +long double comp_ellint_2l(long double __k) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_1_4 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2 │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type comp_ellint_2(_Tp __k) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_3_6 │ │ │ │ +_s_t_d_:_:_s_p_h___b_e_s_s_e_l_f │ │ │ │ +float sph_besself(unsigned int __n, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_7_1 │ │ │ │ +_s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_l │ │ │ │ +long double assoc_legendrel(unsigned int __l, unsigned int __m, long double │ │ │ │ +__x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_7_4 │ │ │ │ +_s_t_d_:_:_l_e_g_e_n_d_r_e │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type legendre(unsigned int __l, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_0_5 │ │ │ │ +_s_t_d_:_:_e_x_p_i_n_t_f │ │ │ │ +float expintf(float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_4_2 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___2_f │ │ │ │ +float ellint_2f(float __k, float __phi) │ │ │ │ +Return the incomplete elliptic integral of the second kind for float argument. │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_4_2 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___3 │ │ │ │ +__gnu_cxx::__promote_3< _Tp, _Tpn, _Tpp >::__type ellint_3(_Tp __k, _Tpn __nu, │ │ │ │ +_Tpp __phi) │ │ │ │ +Return the incomplete elliptic integral of the third kind . │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_2_8 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___2_l │ │ │ │ +long double ellint_2l(long double __k, long double __phi) │ │ │ │ +Return the incomplete elliptic integral of the second kind . │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_5_2 │ │ │ │ +_s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_f │ │ │ │ +float cyl_neumannf(float __nu, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_4_6 │ │ │ │ +_s_t_d_:_:_b_e_t_a │ │ │ │ +__gnu_cxx::__promote_2< _Tpa, _Tpb >::__type beta(_Tpa __a, _Tpb __b) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_4_1 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_l │ │ │ │ +long double comp_ellint_1l(long double __k) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_6_6 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_f │ │ │ │ +float comp_ellint_3f(float __k, float __nu) │ │ │ │ +Return the complete elliptic integral of the third kind for float modulus k. │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_5_1 │ │ │ │ +_s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_f │ │ │ │ +float sph_neumannf(unsigned int __n, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_6_2 │ │ │ │ +_s_t_d_:_:_e_x_p_i_n_t │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type expint(_Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_6_8 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___1_l │ │ │ │ +long double ellint_1l(long double __k, long double __phi) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_0_4 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_f │ │ │ │ +float comp_ellint_1f(float __k) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_5_6 │ │ │ │ +_s_t_d_:_:_b_e_t_a_l │ │ │ │ +long double betal(long double __a, long double __b) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_2_0 │ │ │ │ +_s_t_d_:_:_h_e_r_m_i_t_e_f │ │ │ │ +float hermitef(unsigned int __n, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_8_3 │ │ │ │ +_s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type riemann_zeta(_Tp __s) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_5_6 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___3_l │ │ │ │ +long double ellint_3l(long double __k, long double __nu, long double __phi) │ │ │ │ +Return the incomplete elliptic integral of the third kind . │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_0_0 │ │ │ │ +_s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_f │ │ │ │ +float sph_legendref(unsigned int __l, unsigned int __m, float __theta) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_1_5 │ │ │ │ +_s_t_d_:_:_s_p_h___n_e_u_m_a_n_n │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type sph_neumann(unsigned int __n, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_9_1 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_f │ │ │ │ +float cyl_bessel_if(float __nu, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_0_2 │ │ │ │ +_s_t_d_:_:_l_a_g_u_e_r_r_e_l │ │ │ │ +long double laguerrel(unsigned int __n, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_4_1 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_l │ │ │ │ +long double cyl_bessel_il(long double __nu, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_1_2 │ │ │ │ +_s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type assoc_laguerre(unsigned int __n, unsigned │ │ │ │ +int __m, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_5_0 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3 │ │ │ │ +__gnu_cxx::__promote_2< _Tp, _Tpn >::__type comp_ellint_3(_Tp __k, _Tpn __nu) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_8_7 │ │ │ │ +_s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type sph_legendre(unsigned int __l, unsigned int │ │ │ │ +__m, _Tp __theta) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_4_7 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_l │ │ │ │ +long double cyl_bessel_kl(long double __nu, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_0_4 │ │ │ │ +_s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_l │ │ │ │ +long double assoc_laguerrel(unsigned int __n, unsigned int __m, long double │ │ │ │ +__x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_1_4 │ │ │ │ +_s_t_d_:_:_h_e_r_m_i_t_e │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type hermite(unsigned int __n, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_1_6 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___j │ │ │ │ +__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_j(_Tpnu __nu, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_7_9 │ │ │ │ +_s_t_d_:_:_l_a_g_u_e_r_r_e_f │ │ │ │ +float laguerref(unsigned int __n, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_3_1 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_l │ │ │ │ +long double cyl_bessel_jl(long double __nu, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_5_8 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1 │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type comp_ellint_1(_Tp __k) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_8_9 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___2 │ │ │ │ +__gnu_cxx::__promote_2< _Tp, _Tpp >::__type ellint_2(_Tp __k, _Tpp __phi) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_7_5 │ │ │ │ +_s_t_d_:_:_l_a_g_u_e_r_r_e │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type laguerre(unsigned int __n, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_6_0 │ │ │ │ +_s_t_d_:_:_l_e_g_e_n_d_r_e_f │ │ │ │ +float legendref(unsigned int __l, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_7_5 │ │ │ │ +_s_t_d_:_:_c_y_l___b_e_s_s_e_l___i │ │ │ │ +__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_i(_Tpnu __nu, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_3_3 │ │ │ │ +_s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type assoc_legendre(unsigned int __l, unsigned │ │ │ │ +int __m, _Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_9_6 │ │ │ │ +_s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_f │ │ │ │ +float assoc_laguerref(unsigned int __n, unsigned int __m, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_0_4 │ │ │ │ +_s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_l │ │ │ │ +long double cyl_neumannl(long double __nu, long double __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_5_6 │ │ │ │ +_s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_f │ │ │ │ +float riemann_zetaf(float __s) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_2_0 │ │ │ │ +_s_t_d_:_:_f_a_b_s │ │ │ │ +_Tp fabs(const std::complex< _Tp > &) │ │ │ │ +fabs(__z) [8.1.8]. │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_2_4_2_9 │ │ │ │ + * _m_a_t_h_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00014.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: math.h File Reference │ │ │ +libstdc++: stdlib.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,115 +48,30 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
math.h File Reference
│ │ │ +
stdlib.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ Functions

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

Detailed Description

│ │ │

This is a Standard C++ Library header.

│ │ │ │ │ │ -

Definition in file math.h.

│ │ │ +

Definition in file stdlib.h.

│ │ │

Function Documentation

│ │ │ │ │ │

◆ abs()

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

Return magnitude of z.

│ │ │ │ │ │

Definition at line 892 of file complex.

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

◆ acos()

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

Definition at line 2213 of file complex.

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

◆ acosh()

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

Definition at line 2329 of file complex.

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

◆ asin()

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

Definition at line 2249 of file complex.

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

◆ asinh()

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

Definition at line 2368 of file complex.

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

◆ atan()

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

Definition at line 2293 of file complex.

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

◆ atan2()

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

Definition at line 150 of file cmath.

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

◆ atanh()

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

Definition at line 2412 of file complex.

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

◆ cbrt()

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

Definition at line 2289 of file cmath.

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

◆ ceil()

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

Definition at line 162 of file cmath.

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

◆ copysign()

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

Definition at line 2307 of file cmath.

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

◆ cos()

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

Return complex cosine of z.

│ │ │ - │ │ │ -

Definition at line 1003 of file complex.

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

◆ cosh()

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

Return complex hyperbolic cosine of z.

│ │ │ - │ │ │ -

Definition at line 1033 of file complex.

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

◆ erf()

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

Definition at line 2317 of file cmath.

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

◆ erfc()

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

Definition at line 2335 of file cmath.

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

◆ exp()

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

Return complex base e exponential of z.

│ │ │ - │ │ │ -

Definition at line 1059 of file complex.

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

◆ exp2()

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

Definition at line 2353 of file cmath.

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

◆ expm1()

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

Definition at line 2371 of file cmath.

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

◆ fabs()

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

fabs(__z) [8.1.8].

│ │ │ - │ │ │ -

Definition at line 2429 of file complex.

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

◆ fdim()

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

Definition at line 2389 of file cmath.

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

◆ floor()

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

Definition at line 257 of file cmath.

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

◆ fma()

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

Definition at line 2399 of file cmath.

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

◆ fmax()

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

Definition at line 2409 of file cmath.

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

◆ fmin()

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

Definition at line 2419 of file cmath.

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

◆ fmod()

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

Definition at line 276 of file cmath.

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

◆ fpclassify()

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

Definition at line 1101 of file cmath.

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

◆ frexp()

│ │ │ + │ │ │ +

◆ div()

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

Definition at line 288 of file cmath.

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

◆ hypot()

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

Definition at line 2429 of file cmath.

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

◆ ilogb()

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

Definition at line 2439 of file cmath.

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

◆ isfinite()

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

Definition at line 1126 of file cmath.

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

◆ isgreater()

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

Definition at line 1247 of file cmath.

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

◆ isgreaterequal()

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

Definition at line 1273 of file cmath.

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

◆ isinf()

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

Definition at line 1148 of file cmath.

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

◆ isless()

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

Definition at line 1299 of file cmath.

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

◆ islessequal()

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

Definition at line 1325 of file cmath.

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

◆ islessgreater()

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

Definition at line 1351 of file cmath.

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

◆ isnan()

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

Definition at line 1175 of file cmath.

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

◆ isnormal()

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

Definition at line 1202 of file cmath.

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

◆ isunordered()

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

Definition at line 1377 of file cmath.

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

◆ ldexp()

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

Definition at line 307 of file cmath.

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

◆ lgamma()

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

Definition at line 2458 of file cmath.

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

◆ llrint()

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

Definition at line 2476 of file cmath.

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

◆ llround()

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

Definition at line 2494 of file cmath.

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

◆ log()

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

Return complex natural logarithm of z.

│ │ │ - │ │ │ -

Definition at line 1086 of file complex.

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

◆ log10()

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

Return complex base 10 logarithm of z.

│ │ │ - │ │ │ -

Definition at line 1095 of file complex.

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

◆ log1p()

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

Definition at line 2512 of file cmath.

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

◆ log2()

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

Definition at line 2531 of file cmath.

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

◆ logb()

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

Definition at line 2549 of file cmath.

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

◆ lrint()

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

Definition at line 2567 of file cmath.

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

◆ lround()

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

Definition at line 2585 of file cmath.

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

◆ modf()

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

Definition at line 364 of file cmath.

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

◆ nearbyint()

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

Definition at line 2603 of file cmath.

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

◆ nextafter()

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

Definition at line 2621 of file cmath.

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

◆ nexttoward()

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

Definition at line 2631 of file cmath.

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

◆ pow()

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

Return x to the y'th power.

│ │ │ - │ │ │ -

Definition at line 1285 of file complex.

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

◆ remainder()

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

Definition at line 2649 of file cmath.

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

◆ remquo()

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

Definition at line 2659 of file cmath.

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

◆ rint()

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

Definition at line 2669 of file cmath.

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

◆ round()

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

Definition at line 2687 of file cmath.

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

◆ scalbln()

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

Definition at line 2705 of file cmath.

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

◆ scalbn()

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

Definition at line 2723 of file cmath.

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

◆ signbit()

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

Definition at line 1225 of file cmath.

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

◆ sin()

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

Return complex sine of z.

│ │ │ - │ │ │ -

Definition at line 1121 of file complex.

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

◆ sinh()

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

Return complex hyperbolic sine of z.

│ │ │ - │ │ │ -

Definition at line 1151 of file complex.

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

◆ sqrt()

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

Return complex square root of z.

│ │ │ - │ │ │ -

Definition at line 1195 of file complex.

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

◆ tan()

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

Return complex tangent of z.

│ │ │ - │ │ │ -

Definition at line 1222 of file complex.

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

◆ tanh()

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

Return complex hyperbolic tangent of z.

│ │ │ - │ │ │ -

Definition at line 1250 of file complex.

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

◆ tgamma()

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

Definition at line 2741 of file cmath.

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

◆ trunc()

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

Definition at line 2759 of file cmath.

│ │ │ +

Definition at line 181 of file cstdlib.

│ │ │ │ │ │
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,408 +1,23 @@ │ │ │ │ libstdc++ │ │ │ │ -math.h File Reference │ │ │ │ +stdlib.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ FFuunnccttiioonnss │ │ │ │ template │ │ │ │ - _Tp  _a_b_s (const complex< _Tp > &) │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_c_o_s (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_c_o_s_h (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_s_i_n (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_s_i_n_h (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_t_a_n (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ - constexpr float  _a_t_a_n_2 (float __y, float __x) │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp >  _a_t_a_n_h (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &) │ │ │ │ - constexpr float  _c_b_r_t (float __x) │ │ │ │ - constexpr float  _c_e_i_l (float __x) │ │ │ │ - constexpr float  _c_o_p_y_s_i_g_n (float __x, float __y) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _c_o_s (const complex< _Tp > &) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _c_o_s_h (const complex< _Tp > &) │ │ │ │ - constexpr float  _e_r_f (float __x) │ │ │ │ - constexpr float  _e_r_f_c (float __x) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _e_x_p (const complex< _Tp > &) │ │ │ │ - constexpr float  _e_x_p_2 (float __x) │ │ │ │ - constexpr float  _e_x_p_m_1 (float __x) │ │ │ │ -template │ │ │ │ - _Tp  _f_a_b_s (const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > &__z) │ │ │ │ - constexpr float  _f_d_i_m (float __x, float __y) │ │ │ │ - constexpr float  _f_l_o_o_r (float __x) │ │ │ │ - constexpr float  _f_m_a (float __x, float __y, float __z) │ │ │ │ - constexpr float  _f_m_a_x (float __x, float __y) │ │ │ │ - constexpr float  _f_m_i_n (float __x, float __y) │ │ │ │ - constexpr float  _f_m_o_d (float __x, float __y) │ │ │ │ - constexpr int  _f_p_c_l_a_s_s_i_f_y (float __x) │ │ │ │ - float  _f_r_e_x_p (float __x, int *__exp) │ │ │ │ - constexpr float  _h_y_p_o_t (float __x, float __y) │ │ │ │ - constexpr int  _i_l_o_g_b (float __x) │ │ │ │ - constexpr bool  _i_s_f_i_n_i_t_e (float __x) │ │ │ │ - constexpr bool  _i_s_g_r_e_a_t_e_r (float __x, float __y) │ │ │ │ - constexpr bool  _i_s_g_r_e_a_t_e_r_e_q_u_a_l (float __x, float __y) │ │ │ │ - constexpr bool  _i_s_i_n_f (float __x) │ │ │ │ - constexpr bool  _i_s_l_e_s_s (float __x, float __y) │ │ │ │ - constexpr bool  _i_s_l_e_s_s_e_q_u_a_l (float __x, float __y) │ │ │ │ - constexpr bool  _i_s_l_e_s_s_g_r_e_a_t_e_r (float __x, float __y) │ │ │ │ - constexpr bool  _i_s_n_a_n (float __x) │ │ │ │ - constexpr bool  _i_s_n_o_r_m_a_l (float __x) │ │ │ │ - constexpr bool  _i_s_u_n_o_r_d_e_r_e_d (float __x, float __y) │ │ │ │ - constexpr float  _l_d_e_x_p (float __x, int __exp) │ │ │ │ - constexpr float  _l_g_a_m_m_a (float __x) │ │ │ │ -constexpr long long  _l_l_r_i_n_t (float __x) │ │ │ │ -constexpr long long  _l_l_r_o_u_n_d (float __x) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _l_o_g (const complex< _Tp > &) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _l_o_g_1_0 (const complex< _Tp > &) │ │ │ │ - constexpr float  _l_o_g_1_p (float __x) │ │ │ │ - constexpr float  _l_o_g_2 (float __x) │ │ │ │ - constexpr float  _l_o_g_b (float __x) │ │ │ │ - constexpr long  _l_r_i_n_t (float __x) │ │ │ │ - constexpr long  _l_r_o_u_n_d (float __x) │ │ │ │ - float  _m_o_d_f (float __x, float *__iptr) │ │ │ │ - constexpr float  _n_e_a_r_b_y_i_n_t (float __x) │ │ │ │ - constexpr float  _n_e_x_t_a_f_t_e_r (float __x, float __y) │ │ │ │ - constexpr float  _n_e_x_t_t_o_w_a_r_d (float __x, long double __y) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _p_o_w (const complex< _Tp > &, int) │ │ │ │ - constexpr float  _r_e_m_a_i_n_d_e_r (float __x, float __y) │ │ │ │ - float  _r_e_m_q_u_o (float __x, float __y, int *__pquo) │ │ │ │ - constexpr float  _r_i_n_t (float __x) │ │ │ │ - constexpr float  _r_o_u_n_d (float __x) │ │ │ │ - constexpr float  _s_c_a_l_b_l_n (float __x, long __ex) │ │ │ │ - constexpr float  _s_c_a_l_b_n (float __x, int __ex) │ │ │ │ - constexpr bool  _s_i_g_n_b_i_t (float __x) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _s_i_n (const complex< _Tp > &) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _s_i_n_h (const complex< _Tp > &) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _s_q_r_t (const complex< _Tp > &) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _t_a_n (const complex< _Tp > &) │ │ │ │ -template │ │ │ │ - complex< _Tp >  _t_a_n_h (const complex< _Tp > &) │ │ │ │ - constexpr float  _t_g_a_m_m_a (float __x) │ │ │ │ - constexpr float  _t_r_u_n_c (float __x) │ │ │ │ + _Tp  _a_b_s (const complex< _Tp > &) │ │ │ │ +ldiv_t  _d_i_v (long __i, long __j) noexcept │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is a Standard C++ Library header. │ │ │ │ -Definition in file _m_a_t_h_._h. │ │ │ │ +Definition in file _s_t_d_l_i_b_._h. │ │ │ │ ********** FFuunnccttiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ ********** _?◆_? aabbss(()) ********** │ │ │ │ template │ │ │ │ _Tp _s_t_d_:_:_a_b_s ( const complex< _Tp > ____zz ) inline │ │ │ │ & │ │ │ │ Return magnitude of zz. │ │ │ │ Definition at line _8_9_2 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? aaccooss(()) ********** │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ -acos │ │ │ │ -Definition at line _2_2_1_3 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? aaccoosshh(()) ********** │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ -acosh │ │ │ │ -Definition at line _2_3_2_9 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? aassiinn(()) ********** │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ -asin │ │ │ │ -Definition at line _2_2_4_9 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? aassiinnhh(()) ********** │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ -asinh │ │ │ │ -Definition at line _2_3_6_8 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? aattaann(()) ********** │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ -atan │ │ │ │ -Definition at line _2_2_9_3 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? aattaann22(()) ********** │ │ │ │ -float std::atan2 ( float ____yy, inlineconstexpr │ │ │ │ - float ____xx ) │ │ │ │ -Definition at line _1_5_0 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? aattaannhh(()) ********** │ │ │ │ -template │ │ │ │ -_s_t_d_:_:_c_o_m_p_l_e_x< _Tp > std:: ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > & ____zz ) inline │ │ │ │ -atanh │ │ │ │ -Definition at line _2_4_1_2 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? ccbbrrtt(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -cbrt │ │ │ │ -Definition at line _2_2_8_9 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? cceeiill(()) ********** │ │ │ │ -float std:: ( float ____xx ) inlineconstexpr │ │ │ │ -ceil │ │ │ │ -Definition at line _1_6_2 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ccooppyyssiiggnn(()) ********** │ │ │ │ -float std::copysign ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _2_3_0_7 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ccooss(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ -_c_o_s │ │ │ │ -Return complex cosine of zz. │ │ │ │ -Definition at line _1_0_0_3 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? ccoosshh(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ -_c_o_s_h │ │ │ │ -Return complex hyperbolic cosine of zz. │ │ │ │ -Definition at line _1_0_3_3 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? eerrff(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -erf │ │ │ │ -Definition at line _2_3_1_7 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? eerrffcc(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -erfc │ │ │ │ -Definition at line _2_3_3_5 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? eexxpp(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ -_e_x_p │ │ │ │ -Return complex base e exponential of zz. │ │ │ │ -Definition at line _1_0_5_9 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? eexxpp22(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -exp2 │ │ │ │ -Definition at line _2_3_5_3 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? eexxppmm11(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -expm1 │ │ │ │ -Definition at line _2_3_7_1 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ffaabbss(()) ********** │ │ │ │ -template │ │ │ │ -_Tp _s_t_d_:_:_f_a_b_s ( const _s_t_d_:_:_c_o_m_p_l_e_x< _Tp > ____zz ) inline │ │ │ │ - & │ │ │ │ -fabs(__z) [8.1.8]. │ │ │ │ -Definition at line _2_4_2_9 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? ffddiimm(()) ********** │ │ │ │ -float std::fdim ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _2_3_8_9 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? fflloooorr(()) ********** │ │ │ │ -float std:: ( float ____xx ) inlineconstexpr │ │ │ │ -floor │ │ │ │ -Definition at line _2_5_7 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ffmmaa(()) ********** │ │ │ │ -float std::fma ( float ____xx, │ │ │ │ - float ____yy, constexpr │ │ │ │ - float ____zz ) │ │ │ │ -Definition at line _2_3_9_9 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ffmmaaxx(()) ********** │ │ │ │ -float std::fmax ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _2_4_0_9 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ffmmiinn(()) ********** │ │ │ │ -float std::fmin ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _2_4_1_9 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ffmmoodd(()) ********** │ │ │ │ -float std::fmod ( float ____xx, inlineconstexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _2_7_6 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ffppccllaassssiiffyy(()) ********** │ │ │ │ -int std:: ( float ____xx ) constexpr │ │ │ │ -fpclassify │ │ │ │ -Definition at line _1_1_0_1 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ffrreexxpp(()) ********** │ │ │ │ -float std::frexp ( float ____xx, inline │ │ │ │ - int * ____eexxpp ) │ │ │ │ -Definition at line _2_8_8 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? hhyyppoott(()) ********** │ │ │ │ -float std::hypot ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _2_4_2_9 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iillooggbb(()) ********** │ │ │ │ -int std:: ( float ____xx ) constexpr │ │ │ │ -ilogb │ │ │ │ -Definition at line _2_4_3_9 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iissffiinniittee(()) ********** │ │ │ │ -bool std:: ( float ____xx ) constexpr │ │ │ │ -isfinite │ │ │ │ -Definition at line _1_1_2_6 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iissggrreeaatteerr(()) ********** │ │ │ │ -bool std::isgreater ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _1_2_4_7 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iissggrreeaatteerreeqquuaall(()) ********** │ │ │ │ -bool std::isgreaterequal ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _1_2_7_3 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iissiinnff(()) ********** │ │ │ │ -bool std:: ( float ____xx ) constexpr │ │ │ │ -isinf │ │ │ │ -Definition at line _1_1_4_8 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iisslleessss(()) ********** │ │ │ │ -bool std::isless ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _1_2_9_9 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iisslleesssseeqquuaall(()) ********** │ │ │ │ -bool std::islessequal ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _1_3_2_5 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iisslleessssggrreeaatteerr(()) ********** │ │ │ │ -bool std::islessgreater ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _1_3_5_1 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iissnnaann(()) ********** │ │ │ │ -bool std:: ( float ____xx ) constexpr │ │ │ │ -isnan │ │ │ │ -Definition at line _1_1_7_5 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iissnnoorrmmaall(()) ********** │ │ │ │ -bool std:: ( float ____xx ) constexpr │ │ │ │ -isnormal │ │ │ │ -Definition at line _1_2_0_2 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? iissuunnoorrddeerreedd(()) ********** │ │ │ │ -bool std::isunordered ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _1_3_7_7 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? llddeexxpp(()) ********** │ │ │ │ -float std::ldexp ( float ____xx, inlineconstexpr │ │ │ │ - int ____eexxpp ) │ │ │ │ -Definition at line _3_0_7 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? llggaammmmaa(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -lgamma │ │ │ │ -Definition at line _2_4_5_8 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? llllrriinntt(()) ********** │ │ │ │ -long long std:: ( float ____xx ) constexpr │ │ │ │ -llrint │ │ │ │ -Definition at line _2_4_7_6 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? llllrroouunndd(()) ********** │ │ │ │ -long long std:: ( float ____xx ) constexpr │ │ │ │ -llround │ │ │ │ -Definition at line _2_4_9_4 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? lloogg(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ -_l_o_g │ │ │ │ -Return complex natural logarithm of zz. │ │ │ │ -Definition at line _1_0_8_6 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? lloogg1100(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ -_l_o_g_1_0 │ │ │ │ -Return complex base 10 logarithm of zz. │ │ │ │ -Definition at line _1_0_9_5 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? lloogg11pp(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -log1p │ │ │ │ -Definition at line _2_5_1_2 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? lloogg22(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -log2 │ │ │ │ -Definition at line _2_5_3_1 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? llooggbb(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -logb │ │ │ │ -Definition at line _2_5_4_9 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? llrriinntt(()) ********** │ │ │ │ -long std:: ( float ____xx ) constexpr │ │ │ │ -lrint │ │ │ │ -Definition at line _2_5_6_7 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? llrroouunndd(()) ********** │ │ │ │ -long std:: ( float ____xx ) constexpr │ │ │ │ -lround │ │ │ │ -Definition at line _2_5_8_5 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? mmooddff(()) ********** │ │ │ │ -float std::modf ( float ____xx, inline │ │ │ │ - float * ____iippttrr ) │ │ │ │ -Definition at line _3_6_4 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? nneeaarrbbyyiinntt(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -nearbyint │ │ │ │ -Definition at line _2_6_0_3 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? nneexxttaafftteerr(()) ********** │ │ │ │ -float std::nextafter ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _2_6_2_1 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? nneexxttttoowwaarrdd(()) ********** │ │ │ │ -float std::nexttoward ( float ____xx, constexpr │ │ │ │ - long double ____yy ) │ │ │ │ -Definition at line _2_6_3_1 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ppooww(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_:_p_o_w ( const complex< _Tp > & ____zz, inline │ │ │ │ - int ____nn ) │ │ │ │ -Return xx to the yy''tthh power. │ │ │ │ -Definition at line _1_2_8_5 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? rreemmaaiinnddeerr(()) ********** │ │ │ │ -float std::remainder ( float ____xx, constexpr │ │ │ │ - float ____yy ) │ │ │ │ -Definition at line _2_6_4_9 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? rreemmqquuoo(()) ********** │ │ │ │ -float std::remquo ( float ____xx, │ │ │ │ - float ____yy, inline │ │ │ │ - int * ____ppqquuoo ) │ │ │ │ -Definition at line _2_6_5_9 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? rriinntt(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -rint │ │ │ │ -Definition at line _2_6_6_9 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? rroouunndd(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -round │ │ │ │ -Definition at line _2_6_8_7 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ssccaallbbllnn(()) ********** │ │ │ │ -float std::scalbln ( float ____xx, constexpr │ │ │ │ - long ____eexx ) │ │ │ │ -Definition at line _2_7_0_5 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ssccaallbbnn(()) ********** │ │ │ │ -float std::scalbn ( float ____xx, constexpr │ │ │ │ - int ____eexx ) │ │ │ │ -Definition at line _2_7_2_3 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ssiiggnnbbiitt(()) ********** │ │ │ │ -bool std:: ( float ____xx ) constexpr │ │ │ │ -signbit │ │ │ │ -Definition at line _1_2_2_5 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ssiinn(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ -_s_i_n │ │ │ │ -Return complex sine of zz. │ │ │ │ -Definition at line _1_1_2_1 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? ssiinnhh(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ -_s_i_n_h │ │ │ │ -Return complex hyperbolic sine of zz. │ │ │ │ -Definition at line _1_1_5_1 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? ssqqrrtt(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ -_s_q_r_t │ │ │ │ -Return complex square root of zz. │ │ │ │ -Definition at line _1_1_9_5 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? ttaann(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ -_t_a_n │ │ │ │ -Return complex tangent of zz. │ │ │ │ -Definition at line _1_2_2_2 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? ttaannhh(()) ********** │ │ │ │ -template │ │ │ │ -complex< _Tp > _s_t_d_:_: ( const complex< _Tp > & ____zz ) inline │ │ │ │ -_t_a_n_h │ │ │ │ -Return complex hyperbolic tangent of zz. │ │ │ │ -Definition at line _1_2_5_0 of file _c_o_m_p_l_e_x. │ │ │ │ -********** _?◆_? ttggaammmmaa(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -tgamma │ │ │ │ -Definition at line _2_7_4_1 of file _c_m_a_t_h. │ │ │ │ -********** _?◆_? ttrruunncc(()) ********** │ │ │ │ -float std:: ( float ____xx ) constexpr │ │ │ │ -trunc │ │ │ │ -Definition at line _2_7_5_9 of file _c_m_a_t_h. │ │ │ │ - * _m_a_t_h_._h │ │ │ │ +********** _?◆_? ddiivv(()) ********** │ │ │ │ +ldiv_t std::div ( long ____ii, inlinenoexcept │ │ │ │ + long ____jj ) │ │ │ │ +Definition at line _1_8_1 of file _c_s_t_d_l_i_b. │ │ │ │ + * _s_t_d_l_i_b_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00014.js │ │ │ ├── js-beautify {} │ │ │ │ @@ -1,15 +1,3 @@ │ │ │ │ var a00014 = [ │ │ │ │ - ["abs", "a00014.html#a6e88fe698583fef1f7b3c3c379727143", null], │ │ │ │ - ["cos", "a00014.html#aed6443d175b556280b801357758d1526", null], │ │ │ │ - ["cosh", "a00014.html#a8ab9fb6ce0469e0144c41f40e49a63dc", null], │ │ │ │ - ["exp", "a00014.html#a89579637d83fe041c9963cdcab272edd", null], │ │ │ │ - ["fabs", "a00014.html#a0b74e9caa6ce93221b5d88c296d33468", null], │ │ │ │ - ["log", "a00014.html#a42f2de63a5c18a149f94b926d4d6bb21", null], │ │ │ │ - ["log10", "a00014.html#a070941f6cb66b0e4619891010c008250", null], │ │ │ │ - ["pow", "a00014.html#aacf8017e100d619acab131da8a4017e1", null], │ │ │ │ - ["sin", "a00014.html#a249915bcbce6563e63f5ffa6d464155a", null], │ │ │ │ - ["sinh", "a00014.html#ae30c461aa90a3e7d502737e29898570b", null], │ │ │ │ - ["sqrt", "a00014.html#af91cd3409ab242d469bcc1b2d06624c3", null], │ │ │ │ - ["tan", "a00014.html#a530419a3cf68024cd03985a4795214e3", null], │ │ │ │ - ["tanh", "a00014.html#aa4aa5a5b2f39aa309bd0add4864b3155", null] │ │ │ │ + ["abs", "a00014.html#a6e88fe698583fef1f7b3c3c379727143", null] │ │ │ │ ]; │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00014_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: math.h Source File │ │ │ +libstdc++: stdlib.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,15 +48,15 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
math.h
│ │ │ +
stdlib.h
│ │ │
│ │ │
│ │ │ Go to the documentation of this file.
1// -*- C++ -*- compatibility header.
│ │ │
2
│ │ │
3// Copyright (C) 2002-2024 Free Software Foundation, Inc.
│ │ │
4//
│ │ │
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │ @@ -75,259 +75,86 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file math.h
│ │ │ +
25/** @file stdlib.h
│ │ │
26 * This is a Standard C++ Library header.
│ │ │
27 */
│ │ │
28
│ │ │
29#if !defined __cplusplus || defined _GLIBCXX_INCLUDE_NEXT_C_HEADERS
│ │ │ -
30# include_next <math.h>
│ │ │ +
30# include_next <stdlib.h>
│ │ │
31#else
│ │ │
32
│ │ │ -
33#ifndef _GLIBCXX_MATH_H
│ │ │ -
34#define _GLIBCXX_MATH_H 1
│ │ │ +
33#ifndef _GLIBCXX_STDLIB_H
│ │ │ +
34#define _GLIBCXX_STDLIB_H 1
│ │ │
35
│ │ │ -
36# include <cmath>
│ │ │ +
36# include <cstdlib>
│ │ │
37
│ │ │ -
38using std::abs;
│ │ │ -
39using std::acos;
│ │ │ -
40using std::asin;
│ │ │ -
41using std::atan;
│ │ │ -
42using std::atan2;
│ │ │ -
43using std::cos;
│ │ │ -
44using std::sin;
│ │ │ -
45using std::tan;
│ │ │ -
46using std::cosh;
│ │ │ -
47using std::sinh;
│ │ │ -
48using std::tanh;
│ │ │ -
49using std::exp;
│ │ │ -
50using std::frexp;
│ │ │ -
51using std::ldexp;
│ │ │ -
52using std::log;
│ │ │ -
53using std::log10;
│ │ │ -
54using std::modf;
│ │ │ -
55using std::pow;
│ │ │ -
56using std::sqrt;
│ │ │ -
57using std::ceil;
│ │ │ -
58using std::fabs;
│ │ │ -
59using std::floor;
│ │ │ -
60using std::fmod;
│ │ │ -
61
│ │ │ -
62#if _GLIBCXX_USE_C99_MATH
│ │ │ -
63using std::fpclassify;
│ │ │ -
64using std::isfinite;
│ │ │ -
65using std::isinf;
│ │ │ -
66using std::isnan;
│ │ │ -
67using std::isnormal;
│ │ │ -
68using std::signbit;
│ │ │ -
69using std::isgreater;
│ │ │ -
70using std::isgreaterequal;
│ │ │ -
71using std::isless;
│ │ │ -
72using std::islessequal;
│ │ │ -
73using std::islessgreater;
│ │ │ -
74using std::isunordered;
│ │ │ -
75#endif
│ │ │ -
76
│ │ │ -
77#if __cplusplus >= 201103L && defined(_GLIBCXX_USE_C99_MATH_FUNCS)
│ │ │ -
78using std::acosh;
│ │ │ -
79using std::asinh;
│ │ │ -
80using std::atanh;
│ │ │ -
81using std::cbrt;
│ │ │ -
82using std::copysign;
│ │ │ -
83using std::erf;
│ │ │ -
84using std::erfc;
│ │ │ -
85using std::exp2;
│ │ │ -
86using std::expm1;
│ │ │ -
87using std::fdim;
│ │ │ -
88using std::fma;
│ │ │ -
89using std::fmax;
│ │ │ -
90using std::fmin;
│ │ │ -
91using std::hypot;
│ │ │ -
92using std::ilogb;
│ │ │ -
93using std::lgamma;
│ │ │ -
94using std::llrint;
│ │ │ -
95using std::llround;
│ │ │ -
96using std::log1p;
│ │ │ -
97using std::log2;
│ │ │ -
98using std::logb;
│ │ │ -
99using std::lrint;
│ │ │ -
100using std::lround;
│ │ │ -
101using std::nearbyint;
│ │ │ -
102using std::nextafter;
│ │ │ -
103using std::nexttoward;
│ │ │ -
104using std::remainder;
│ │ │ -
105using std::remquo;
│ │ │ -
106using std::rint;
│ │ │ -
107using std::round;
│ │ │ -
108using std::scalbln;
│ │ │ -
109using std::scalbn;
│ │ │ -
110using std::tgamma;
│ │ │ -
111using std::trunc;
│ │ │ -
112#endif // C++11 && _GLIBCXX_USE_C99_MATH_FUNCS
│ │ │ -
113
│ │ │ -
114// The mathematical special functions are only added to the global namespace
│ │ │ -
115// by IS 29124, but not by C++17.
│ │ │ -
116#if __cplusplus >= 201103L && __STDCPP_WANT_MATH_SPEC_FUNCS__ != 0
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
123using std::betaf;
│ │ │ -
124using std::betal;
│ │ │ -
125using std::beta;
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
146using std::cyl_neumann;
│ │ │ -
147using std::ellint_1f;
│ │ │ -
148using std::ellint_1l;
│ │ │ -
149using std::ellint_1;
│ │ │ -
150using std::ellint_2f;
│ │ │ -
151using std::ellint_2l;
│ │ │ -
152using std::ellint_2;
│ │ │ -
153using std::ellint_3f;
│ │ │ -
154using std::ellint_3l;
│ │ │ -
155using std::ellint_3;
│ │ │ -
156using std::expintf;
│ │ │ -
157using std::expintl;
│ │ │ -
158using std::expint;
│ │ │ -
159using std::hermitef;
│ │ │ -
160using std::hermitel;
│ │ │ -
161using std::hermite;
│ │ │ -
162using std::laguerref;
│ │ │ -
163using std::laguerrel;
│ │ │ -
164using std::laguerre;
│ │ │ -
165using std::legendref;
│ │ │ -
166using std::legendrel;
│ │ │ -
167using std::legendre;
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
171using std::sph_besself;
│ │ │ -
172using std::sph_bessell;
│ │ │ -
173using std::sph_bessel;
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
179using std::sph_neumann;
│ │ │ -
180#endif // _GLIBCXX_USE_STD_SPEC_FUNCS
│ │ │ -
181
│ │ │ -
182#if __cplusplus > 201703L
│ │ │ -
183using std::lerp;
│ │ │ -
184#endif // C++20
│ │ │ -
185
│ │ │ -
186#endif // _GLIBCXX_MATH_H
│ │ │ -
187#endif // __cplusplus
│ │ │ - │ │ │ -
complex< _Tp > log10(const complex< _Tp > &)
Return complex base 10 logarithm of z.
Definition complex:1095
│ │ │ -
complex< _Tp > sin(const complex< _Tp > &)
Return complex sine of z.
Definition complex:1121
│ │ │ -
complex< _Tp > log(const complex< _Tp > &)
Return complex natural logarithm of z.
Definition complex:1086
│ │ │ -
complex< _Tp > tan(const complex< _Tp > &)
Return complex tangent of z.
Definition complex:1222
│ │ │ +
38using std::abort;
│ │ │ +
39using std::atexit;
│ │ │ +
40using std::exit;
│ │ │ +
41#if __cplusplus >= 201103L
│ │ │ +
42# ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT
│ │ │ +
43 using std::at_quick_exit;
│ │ │ +
44# endif
│ │ │ +
45# ifdef _GLIBCXX_HAVE_QUICK_EXIT
│ │ │ +
46 using std::quick_exit;
│ │ │ +
47# endif
│ │ │ +
48# if _GLIBCXX_USE_C99_STDLIB
│ │ │ +
49 using std::_Exit;
│ │ │ +
50# endif
│ │ │ +
51#endif
│ │ │ +
52
│ │ │ +
53#if _GLIBCXX_HOSTED
│ │ │ +
54using std::div_t;
│ │ │ +
55using std::ldiv_t;
│ │ │ +
56
│ │ │ +
57using std::abs;
│ │ │ +
58using std::atof;
│ │ │ +
59using std::atoi;
│ │ │ +
60using std::atol;
│ │ │ +
61using std::bsearch;
│ │ │ +
62using std::calloc;
│ │ │ +
63using std::div;
│ │ │ +
64using std::free;
│ │ │ +
65using std::getenv;
│ │ │ +
66using std::labs;
│ │ │ +
67using std::ldiv;
│ │ │ +
68using std::malloc;
│ │ │ +
69#ifdef _GLIBCXX_HAVE_MBSTATE_T
│ │ │ +
70using std::mblen;
│ │ │ +
71using std::mbstowcs;
│ │ │ +
72using std::mbtowc;
│ │ │ +
73#endif // _GLIBCXX_HAVE_MBSTATE_T
│ │ │ +
74using std::qsort;
│ │ │ +
75using std::rand;
│ │ │ +
76using std::realloc;
│ │ │ +
77using std::srand;
│ │ │ +
78using std::strtod;
│ │ │ +
79using std::strtol;
│ │ │ +
80using std::strtoul;
│ │ │ +
81using std::system;
│ │ │ +
82#ifdef _GLIBCXX_USE_WCHAR_T
│ │ │ +
83using std::wcstombs;
│ │ │ +
84using std::wctomb;
│ │ │ +
85#endif // _GLIBCXX_USE_WCHAR_T
│ │ │ +
86#endif
│ │ │ +
87
│ │ │ +
88#endif // _GLIBCXX_STDLIB_H
│ │ │ +
89#endif // __cplusplus
│ │ │ + │ │ │
_Tp abs(const complex< _Tp > &)
Return magnitude of z.
Definition complex:892
│ │ │ -
complex< _Tp > exp(const complex< _Tp > &)
Return complex base e exponential of z.
Definition complex:1059
│ │ │ -
complex< _Tp > cosh(const complex< _Tp > &)
Return complex hyperbolic cosine of z.
Definition complex:1033
│ │ │ -
complex< _Tp > tanh(const complex< _Tp > &)
Return complex hyperbolic tangent of z.
Definition complex:1250
│ │ │ -
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:1151
│ │ │ -
complex< _Tp > cos(const complex< _Tp > &)
Return complex cosine of z.
Definition complex:1003
│ │ │ -
complex< _Tp > sqrt(const complex< _Tp > &)
Return complex square root of z.
Definition complex:1195
│ │ │ -
__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
│ │ │ -
_Tp fabs(const std::complex< _Tp > &)
fabs(__z) [8.1.8].
Definition complex:2429
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,9 +1,9 @@ │ │ │ │ libstdc++ │ │ │ │ -math.h │ │ │ │ +stdlib.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ 1// -*- C++ -*- compatibility header. │ │ │ │ 2 │ │ │ │ 3// Copyright (C) 2002-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,429 +21,79 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file math.h │ │ │ │ +25/** @file stdlib.h │ │ │ │ 26 * This is a Standard C++ Library header. │ │ │ │ 27 */ │ │ │ │ 28 │ │ │ │ 29#if !defined __cplusplus || defined _GLIBCXX_INCLUDE_NEXT_C_HEADERS │ │ │ │ -30# include_next │ │ │ │ +30# include_next │ │ │ │ 31#else │ │ │ │ 32 │ │ │ │ -33#ifndef _GLIBCXX_MATH_H │ │ │ │ -34#define _GLIBCXX_MATH_H 1 │ │ │ │ +33#ifndef _GLIBCXX_STDLIB_H │ │ │ │ +34#define _GLIBCXX_STDLIB_H 1 │ │ │ │ 35 │ │ │ │ -36# include <_c_m_a_t_h> │ │ │ │ +36# include <_c_s_t_d_l_i_b> │ │ │ │ 37 │ │ │ │ -38using _s_t_d_:_:_a_b_s; │ │ │ │ -39using std::acos; │ │ │ │ -40using std::asin; │ │ │ │ -41using std::atan; │ │ │ │ -42using std::atan2; │ │ │ │ -43using _s_t_d_:_:_c_o_s; │ │ │ │ -44using _s_t_d_:_:_s_i_n; │ │ │ │ -45using _s_t_d_:_:_t_a_n; │ │ │ │ -46using _s_t_d_:_:_c_o_s_h; │ │ │ │ -47using _s_t_d_:_:_s_i_n_h; │ │ │ │ -48using _s_t_d_:_:_t_a_n_h; │ │ │ │ -49using _s_t_d_:_:_e_x_p; │ │ │ │ -50using std::frexp; │ │ │ │ -51using std::ldexp; │ │ │ │ -52using _s_t_d_:_:_l_o_g; │ │ │ │ -53using _s_t_d_:_:_l_o_g_1_0; │ │ │ │ -54using std::modf; │ │ │ │ -55using _s_t_d_:_:_p_o_w; │ │ │ │ -56using _s_t_d_:_:_s_q_r_t; │ │ │ │ -57using std::ceil; │ │ │ │ -58using _s_t_d_:_:_f_a_b_s; │ │ │ │ -59using std::floor; │ │ │ │ -60using std::fmod; │ │ │ │ -61 │ │ │ │ -62#if _GLIBCXX_USE_C99_MATH │ │ │ │ -63using std::fpclassify; │ │ │ │ -64using std::isfinite; │ │ │ │ -65using std::isinf; │ │ │ │ -66using std::isnan; │ │ │ │ -67using std::isnormal; │ │ │ │ -68using std::signbit; │ │ │ │ -69using std::isgreater; │ │ │ │ -70using std::isgreaterequal; │ │ │ │ -71using std::isless; │ │ │ │ -72using std::islessequal; │ │ │ │ -73using std::islessgreater; │ │ │ │ -74using std::isunordered; │ │ │ │ -75#endif │ │ │ │ -76 │ │ │ │ -77#if __cplusplus >= 201103L && defined(_GLIBCXX_USE_C99_MATH_FUNCS) │ │ │ │ -78using std::acosh; │ │ │ │ -79using std::asinh; │ │ │ │ -80using std::atanh; │ │ │ │ -81using std::cbrt; │ │ │ │ -82using std::copysign; │ │ │ │ -83using std::erf; │ │ │ │ -84using std::erfc; │ │ │ │ -85using std::exp2; │ │ │ │ -86using std::expm1; │ │ │ │ -87using std::fdim; │ │ │ │ -88using std::fma; │ │ │ │ -89using std::fmax; │ │ │ │ -90using std::fmin; │ │ │ │ -91using std::hypot; │ │ │ │ -92using std::ilogb; │ │ │ │ -93using std::lgamma; │ │ │ │ -94using std::llrint; │ │ │ │ -95using std::llround; │ │ │ │ -96using std::log1p; │ │ │ │ -97using std::log2; │ │ │ │ -98using std::logb; │ │ │ │ -99using std::lrint; │ │ │ │ -100using std::lround; │ │ │ │ -101using std::nearbyint; │ │ │ │ -102using std::nextafter; │ │ │ │ -103using std::nexttoward; │ │ │ │ -104using std::remainder; │ │ │ │ -105using std::remquo; │ │ │ │ -106using std::rint; │ │ │ │ -107using std::round; │ │ │ │ -108using std::scalbln; │ │ │ │ -109using std::scalbn; │ │ │ │ -110using std::tgamma; │ │ │ │ -111using std::trunc; │ │ │ │ -112#endif // C++11 && _GLIBCXX_USE_C99_MATH_FUNCS │ │ │ │ -113 │ │ │ │ -114// The mathematical special functions are only added to the global namespace │ │ │ │ -115// by IS 29124, but not by C++17. │ │ │ │ -116#if __cplusplus >= 201103L && __STDCPP_WANT_MATH_SPEC_FUNCS__ != 0 │ │ │ │ -117using _s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_f; │ │ │ │ -118using _s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_l; │ │ │ │ -119using _s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e; │ │ │ │ -120using _s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_f; │ │ │ │ -121using _s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_l; │ │ │ │ -122using _s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e; │ │ │ │ -123using _s_t_d_:_:_b_e_t_a_f; │ │ │ │ -124using _s_t_d_:_:_b_e_t_a_l; │ │ │ │ -125using _s_t_d_:_:_b_e_t_a; │ │ │ │ -126using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_f; │ │ │ │ -127using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_l; │ │ │ │ -128using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1; │ │ │ │ -129using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_f; │ │ │ │ -130using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_l; │ │ │ │ -131using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2; │ │ │ │ -132using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_f; │ │ │ │ -133using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_l; │ │ │ │ -134using _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3; │ │ │ │ -135using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_f; │ │ │ │ -136using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_l; │ │ │ │ -137using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___i; │ │ │ │ -138using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_f; │ │ │ │ -139using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_l; │ │ │ │ -140using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___j; │ │ │ │ -141using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_f; │ │ │ │ -142using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_l; │ │ │ │ -143using _s_t_d_:_:_c_y_l___b_e_s_s_e_l___k; │ │ │ │ -144using _s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_f; │ │ │ │ -145using _s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_l; │ │ │ │ -146using _s_t_d_:_:_c_y_l___n_e_u_m_a_n_n; │ │ │ │ -147using _s_t_d_:_:_e_l_l_i_n_t___1_f; │ │ │ │ -148using _s_t_d_:_:_e_l_l_i_n_t___1_l; │ │ │ │ -149using _s_t_d_:_:_e_l_l_i_n_t___1; │ │ │ │ -150using _s_t_d_:_:_e_l_l_i_n_t___2_f; │ │ │ │ -151using _s_t_d_:_:_e_l_l_i_n_t___2_l; │ │ │ │ -152using _s_t_d_:_:_e_l_l_i_n_t___2; │ │ │ │ -153using _s_t_d_:_:_e_l_l_i_n_t___3_f; │ │ │ │ -154using _s_t_d_:_:_e_l_l_i_n_t___3_l; │ │ │ │ -155using _s_t_d_:_:_e_l_l_i_n_t___3; │ │ │ │ -156using _s_t_d_:_:_e_x_p_i_n_t_f; │ │ │ │ -157using _s_t_d_:_:_e_x_p_i_n_t_l; │ │ │ │ -158using _s_t_d_:_:_e_x_p_i_n_t; │ │ │ │ -159using _s_t_d_:_:_h_e_r_m_i_t_e_f; │ │ │ │ -160using _s_t_d_:_:_h_e_r_m_i_t_e_l; │ │ │ │ -161using _s_t_d_:_:_h_e_r_m_i_t_e; │ │ │ │ -162using _s_t_d_:_:_l_a_g_u_e_r_r_e_f; │ │ │ │ -163using _s_t_d_:_:_l_a_g_u_e_r_r_e_l; │ │ │ │ -164using _s_t_d_:_:_l_a_g_u_e_r_r_e; │ │ │ │ -165using _s_t_d_:_:_l_e_g_e_n_d_r_e_f; │ │ │ │ -166using _s_t_d_:_:_l_e_g_e_n_d_r_e_l; │ │ │ │ -167using _s_t_d_:_:_l_e_g_e_n_d_r_e; │ │ │ │ -168using _s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_f; │ │ │ │ -169using _s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_l; │ │ │ │ -170using _s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a; │ │ │ │ -171using _s_t_d_:_:_s_p_h___b_e_s_s_e_l_f; │ │ │ │ -172using _s_t_d_:_:_s_p_h___b_e_s_s_e_l_l; │ │ │ │ -173using _s_t_d_:_:_s_p_h___b_e_s_s_e_l; │ │ │ │ -174using _s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_f; │ │ │ │ -175using _s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_l; │ │ │ │ -176using _s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e; │ │ │ │ -177using _s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_f; │ │ │ │ -178using _s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_l; │ │ │ │ -179using _s_t_d_:_:_s_p_h___n_e_u_m_a_n_n; │ │ │ │ -180#endif // _GLIBCXX_USE_STD_SPEC_FUNCS │ │ │ │ -181 │ │ │ │ -182#if __cplusplus > 201703L │ │ │ │ -183using std::lerp; │ │ │ │ -184#endif // C++20 │ │ │ │ -185 │ │ │ │ -186#endif // _GLIBCXX_MATH_H │ │ │ │ -187#endif // __cplusplus │ │ │ │ -_c_m_a_t_h │ │ │ │ -_s_t_d_:_:_l_o_g_1_0 │ │ │ │ -complex< _Tp > log10(const complex< _Tp > &) │ │ │ │ -Return complex base 10 logarithm of z. │ │ │ │ -DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_1_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_1 │ │ │ │ -_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_8_6 │ │ │ │ -_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_2 │ │ │ │ +38using std::abort; │ │ │ │ +39using std::atexit; │ │ │ │ +40using std::exit; │ │ │ │ +41#if __cplusplus >= 201103L │ │ │ │ +42# ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT │ │ │ │ +43 using std::at_quick_exit; │ │ │ │ +44# endif │ │ │ │ +45# ifdef _GLIBCXX_HAVE_QUICK_EXIT │ │ │ │ +46 using std::quick_exit; │ │ │ │ +47# endif │ │ │ │ +48# if _GLIBCXX_USE_C99_STDLIB │ │ │ │ +49 using std::_Exit; │ │ │ │ +50# endif │ │ │ │ +51#endif │ │ │ │ +52 │ │ │ │ +53#if _GLIBCXX_HOSTED │ │ │ │ +54using std::div_t; │ │ │ │ +55using std::ldiv_t; │ │ │ │ +56 │ │ │ │ +57using _s_t_d_:_:_a_b_s; │ │ │ │ +58using std::atof; │ │ │ │ +59using std::atoi; │ │ │ │ +60using std::atol; │ │ │ │ +61using std::bsearch; │ │ │ │ +62using std::calloc; │ │ │ │ +63using std::div; │ │ │ │ +64using std::free; │ │ │ │ +65using std::getenv; │ │ │ │ +66using std::labs; │ │ │ │ +67using std::ldiv; │ │ │ │ +68using std::malloc; │ │ │ │ +69#ifdef _GLIBCXX_HAVE_MBSTATE_T │ │ │ │ +70using std::mblen; │ │ │ │ +71using std::mbstowcs; │ │ │ │ +72using std::mbtowc; │ │ │ │ +73#endif // _GLIBCXX_HAVE_MBSTATE_T │ │ │ │ +74using std::qsort; │ │ │ │ +75using std::rand; │ │ │ │ +76using std::realloc; │ │ │ │ +77using std::srand; │ │ │ │ +78using std::strtod; │ │ │ │ +79using std::strtol; │ │ │ │ +80using std::strtoul; │ │ │ │ +81using std::system; │ │ │ │ +82#ifdef _GLIBCXX_USE_WCHAR_T │ │ │ │ +83using std::wcstombs; │ │ │ │ +84using std::wctomb; │ │ │ │ +85#endif // _GLIBCXX_USE_WCHAR_T │ │ │ │ +86#endif │ │ │ │ +87 │ │ │ │ +88#endif // _GLIBCXX_STDLIB_H │ │ │ │ +89#endif // __cplusplus │ │ │ │ +_c_s_t_d_l_i_b │ │ │ │ _s_t_d_:_:_a_b_s │ │ │ │ _Tp abs(const complex< _Tp > &) │ │ │ │ Return magnitude of z. │ │ │ │ DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_8_9_2 │ │ │ │ -_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_5_9 │ │ │ │ -_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_3 │ │ │ │ -_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_0 │ │ │ │ -_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_1 │ │ │ │ -_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_3 │ │ │ │ -_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_5 │ │ │ │ -_s_t_d_:_:_s_p_h___b_e_s_s_e_l │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type sph_bessel(unsigned int __n, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_0_0 │ │ │ │ -_s_t_d_:_:_s_p_h___b_e_s_s_e_l_l │ │ │ │ -long double sph_bessell(unsigned int __n, long double __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_8_1 │ │ │ │ -_s_t_d_:_:_b_e_t_a_f │ │ │ │ -float betaf(float __a, float __b) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_1_0 │ │ │ │ -_s_t_d_:_:_e_x_p_i_n_t_l │ │ │ │ -long double expintl(long double __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_5_2 │ │ │ │ -_s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_f │ │ │ │ -float cyl_bessel_jf(float __nu, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_4_8 │ │ │ │ -_s_t_d_:_:_c_y_l___b_e_s_s_e_l___k │ │ │ │ -__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_k(_Tpnu __nu, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_3_1 │ │ │ │ -_s_t_d_:_:_e_l_l_i_n_t___3_f │ │ │ │ -float ellint_3f(float __k, float __nu, float __phi) │ │ │ │ -Return the incomplete elliptic integral of the third kind for float argument. │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_9_0 │ │ │ │ -_s_t_d_:_:_l_e_g_e_n_d_r_e_l │ │ │ │ -long double legendrel(unsigned int __l, long double __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_8_5 │ │ │ │ -_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_l │ │ │ │ -long double comp_ellint_3l(long double __k, long double __nu) │ │ │ │ -Return the complete elliptic integral of the third kind for long double modulus │ │ │ │ -k. │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_6_1 │ │ │ │ -_s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_l │ │ │ │ -long double riemann_zetal(long double __s) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_3_0 │ │ │ │ -_s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_f │ │ │ │ -float cyl_bessel_kf(float __nu, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_9_4 │ │ │ │ -_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_f │ │ │ │ -float comp_ellint_2f(float __k) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_0_4 │ │ │ │ -_s_t_d_:_:_h_e_r_m_i_t_e_l │ │ │ │ -long double hermitel(unsigned int __n, long double __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_9_3 │ │ │ │ -_s_t_d_:_:_e_l_l_i_n_t___1 │ │ │ │ -__gnu_cxx::__promote_2< _Tp, _Tpp >::__type ellint_1(_Tp __k, _Tpp __phi) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_2_7 │ │ │ │ -_s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_l │ │ │ │ -long double sph_legendrel(unsigned int __l, unsigned int __m, long double │ │ │ │ -__theta) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_2_6 │ │ │ │ -_s_t_d_:_:_e_l_l_i_n_t___1_f │ │ │ │ -float ellint_1f(float __k, float __phi) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_9_4 │ │ │ │ -_s_t_d_:_:_c_y_l___n_e_u_m_a_n_n │ │ │ │ -__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_neumann(_Tpnu __nu, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_7_9 │ │ │ │ -_s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_f │ │ │ │ -float assoc_legendref(unsigned int __l, unsigned int __m, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_6_5 │ │ │ │ -_s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_l │ │ │ │ -long double sph_neumannl(unsigned int __n, long double __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_7_2 │ │ │ │ -_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_l │ │ │ │ -long double comp_ellint_2l(long double __k) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_1_4 │ │ │ │ -_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2 │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type comp_ellint_2(_Tp __k) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_3_6 │ │ │ │ -_s_t_d_:_:_s_p_h___b_e_s_s_e_l_f │ │ │ │ -float sph_besself(unsigned int __n, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_7_1 │ │ │ │ -_s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_l │ │ │ │ -long double assoc_legendrel(unsigned int __l, unsigned int __m, long double │ │ │ │ -__x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_7_4 │ │ │ │ -_s_t_d_:_:_l_e_g_e_n_d_r_e │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type legendre(unsigned int __l, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_0_5 │ │ │ │ -_s_t_d_:_:_e_x_p_i_n_t_f │ │ │ │ -float expintf(float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_4_2 │ │ │ │ -_s_t_d_:_:_e_l_l_i_n_t___2_f │ │ │ │ -float ellint_2f(float __k, float __phi) │ │ │ │ -Return the incomplete elliptic integral of the second kind for float argument. │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_4_2 │ │ │ │ -_s_t_d_:_:_e_l_l_i_n_t___3 │ │ │ │ -__gnu_cxx::__promote_3< _Tp, _Tpn, _Tpp >::__type ellint_3(_Tp __k, _Tpn __nu, │ │ │ │ -_Tpp __phi) │ │ │ │ -Return the incomplete elliptic integral of the third kind . │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_2_8 │ │ │ │ -_s_t_d_:_:_e_l_l_i_n_t___2_l │ │ │ │ -long double ellint_2l(long double __k, long double __phi) │ │ │ │ -Return the incomplete elliptic integral of the second kind . │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_5_2 │ │ │ │ -_s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_f │ │ │ │ -float cyl_neumannf(float __nu, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_4_6 │ │ │ │ -_s_t_d_:_:_b_e_t_a │ │ │ │ -__gnu_cxx::__promote_2< _Tpa, _Tpb >::__type beta(_Tpa __a, _Tpb __b) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_4_1 │ │ │ │ -_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_l │ │ │ │ -long double comp_ellint_1l(long double __k) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_6_6 │ │ │ │ -_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_f │ │ │ │ -float comp_ellint_3f(float __k, float __nu) │ │ │ │ -Return the complete elliptic integral of the third kind for float modulus k. │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_5_1 │ │ │ │ -_s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_f │ │ │ │ -float sph_neumannf(unsigned int __n, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_6_2 │ │ │ │ -_s_t_d_:_:_e_x_p_i_n_t │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type expint(_Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_6_8 │ │ │ │ -_s_t_d_:_:_e_l_l_i_n_t___1_l │ │ │ │ -long double ellint_1l(long double __k, long double __phi) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_0_4 │ │ │ │ -_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_f │ │ │ │ -float comp_ellint_1f(float __k) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_5_6 │ │ │ │ -_s_t_d_:_:_b_e_t_a_l │ │ │ │ -long double betal(long double __a, long double __b) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_2_0 │ │ │ │ -_s_t_d_:_:_h_e_r_m_i_t_e_f │ │ │ │ -float hermitef(unsigned int __n, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_8_3 │ │ │ │ -_s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type riemann_zeta(_Tp __s) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_5_6 │ │ │ │ -_s_t_d_:_:_e_l_l_i_n_t___3_l │ │ │ │ -long double ellint_3l(long double __k, long double __nu, long double __phi) │ │ │ │ -Return the incomplete elliptic integral of the third kind . │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_0_0 │ │ │ │ -_s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_f │ │ │ │ -float sph_legendref(unsigned int __l, unsigned int __m, float __theta) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_1_5 │ │ │ │ -_s_t_d_:_:_s_p_h___n_e_u_m_a_n_n │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type sph_neumann(unsigned int __n, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_9_1 │ │ │ │ -_s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_f │ │ │ │ -float cyl_bessel_if(float __nu, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_0_2 │ │ │ │ -_s_t_d_:_:_l_a_g_u_e_r_r_e_l │ │ │ │ -long double laguerrel(unsigned int __n, long double __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_4_1 │ │ │ │ -_s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_l │ │ │ │ -long double cyl_bessel_il(long double __nu, long double __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_1_2 │ │ │ │ -_s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type assoc_laguerre(unsigned int __n, unsigned │ │ │ │ -int __m, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_5_0 │ │ │ │ -_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3 │ │ │ │ -__gnu_cxx::__promote_2< _Tp, _Tpn >::__type comp_ellint_3(_Tp __k, _Tpn __nu) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_8_7 │ │ │ │ -_s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type sph_legendre(unsigned int __l, unsigned int │ │ │ │ -__m, _Tp __theta) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_4_7 │ │ │ │ -_s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_l │ │ │ │ -long double cyl_bessel_kl(long double __nu, long double __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_0_4 │ │ │ │ -_s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_l │ │ │ │ -long double assoc_laguerrel(unsigned int __n, unsigned int __m, long double │ │ │ │ -__x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_1_4 │ │ │ │ -_s_t_d_:_:_h_e_r_m_i_t_e │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type hermite(unsigned int __n, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_1_6 │ │ │ │ -_s_t_d_:_:_c_y_l___b_e_s_s_e_l___j │ │ │ │ -__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_j(_Tpnu __nu, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_7_9 │ │ │ │ -_s_t_d_:_:_l_a_g_u_e_r_r_e_f │ │ │ │ -float laguerref(unsigned int __n, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_3_1 │ │ │ │ -_s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_l │ │ │ │ -long double cyl_bessel_jl(long double __nu, long double __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_5_8 │ │ │ │ -_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1 │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type comp_ellint_1(_Tp __k) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_8_9 │ │ │ │ -_s_t_d_:_:_e_l_l_i_n_t___2 │ │ │ │ -__gnu_cxx::__promote_2< _Tp, _Tpp >::__type ellint_2(_Tp __k, _Tpp __phi) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_7_5 │ │ │ │ -_s_t_d_:_:_l_a_g_u_e_r_r_e │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type laguerre(unsigned int __n, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_6_0 │ │ │ │ -_s_t_d_:_:_l_e_g_e_n_d_r_e_f │ │ │ │ -float legendref(unsigned int __l, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_9_7_5 │ │ │ │ -_s_t_d_:_:_c_y_l___b_e_s_s_e_l___i │ │ │ │ -__gnu_cxx::__promote_2< _Tpnu, _Tp >::__type cyl_bessel_i(_Tpnu __nu, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_5_3_3 │ │ │ │ -_s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e │ │ │ │ -__gnu_cxx::__promote< _Tp >::__type assoc_legendre(unsigned int __l, unsigned │ │ │ │ -int __m, _Tp __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_9_6 │ │ │ │ -_s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_f │ │ │ │ -float assoc_laguerref(unsigned int __n, unsigned int __m, float __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_2_0_4 │ │ │ │ -_s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_l │ │ │ │ -long double cyl_neumannl(long double __nu, long double __x) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_5_6 │ │ │ │ -_s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_f │ │ │ │ -float riemann_zetaf(float __s) │ │ │ │ -DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_0_2_0 │ │ │ │ -_s_t_d_:_:_f_a_b_s │ │ │ │ -_Tp fabs(const std::complex< _Tp > &) │ │ │ │ -fabs(__z) [8.1.8]. │ │ │ │ -DDeeffiinniittiioonn _c_o_m_p_l_e_x_:_2_4_2_9 │ │ │ │ - * _m_a_t_h_._h │ │ │ │ + * _s_t_d_l_i_b_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00017_source.html │ │ │ @@ -79,30 +79,30 @@ │ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │
25/** @file tgmath.h
│ │ │
26 * This is a Standard C++ Library header.
│ │ │
27 */
│ │ │
28
│ │ │ -
29#include <bits/c++config.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#ifndef _GLIBCXX_TGMATH_H
│ │ │
40#define _GLIBCXX_TGMATH_H 1
│ │ │
41
│ │ │
42#endif
│ │ │ │ │ │ - │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
fenv.h File Reference
│ │ │ +
stdbit.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

│ │ │

Detailed Description

│ │ │

This is a Standard C++ Library header.

│ │ │ │ │ │ -

Definition in file fenv.h.

│ │ │ +

Definition in file stdbit.h.

│ │ │
│ │ │
│ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,8 +1,8 @@ │ │ │ │ libstdc++ │ │ │ │ -fenv.h File Reference │ │ │ │ +stdbit.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is a Standard C++ Library header. │ │ │ │ -Definition in file _f_e_n_v_._h. │ │ │ │ - * _f_e_n_v_._h │ │ │ │ +Definition in file _s_t_d_b_i_t_._h. │ │ │ │ + * _s_t_d_b_i_t_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00020_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: fenv.h Source File │ │ │ +libstdc++: stdbit.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
fenv.h
│ │ │ +
stdbit.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// -*- C++ -*- compatibility header.
│ │ │ +Go to the documentation of this file.
1// C compatibility header <stdbit.h> -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2007-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
│ │ │ @@ -75,78 +75,579 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file fenv.h
│ │ │ +
25/** @file include/stdbit.h
│ │ │
26 * This is a Standard C++ Library header.
│ │ │
27 */
│ │ │
28
│ │ │ -
29#ifndef _GLIBCXX_FENV_H
│ │ │ -
30#define _GLIBCXX_FENV_H 1
│ │ │ +
29#ifndef _GLIBCXX_STDBIT_H
│ │ │ +
30#define _GLIBCXX_STDBIT_H
│ │ │
31
│ │ │ -
32#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
│ │ │ +
32#if __cplusplus > 202302L
│ │ │ +
33#include <bit>
│ │ │ +
34
│ │ │ +
35#define __STDC_VERSION_STDBIT_H__ 202311L
│ │ │ +
36
│ │ │ +
37#define __STDC_ENDIAN_BIG__ __ORDER_BIG_ENDIAN__
│ │ │ +
38#define __STDC_ENDIAN_LITTLE__ __ORDER_LITTLE_ENDIAN__
│ │ │ +
39#define __STDC_ENDIAN_NATIVE__ __BYTE_ORDER__
│ │ │
40
│ │ │ -
41#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
│ │ │ +
41#ifndef _GLIBCXX_DOXYGEN
│ │ │ +
42// We define these in our own namespace, but let Doxygen think otherwise.
│ │ │ +
43namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
│ │ │ +
44{
│ │ │ +
45#endif
│ │ │ +
46
│ │ │ +
47/** Count the number of leading zero bits
│ │ │ +
48 *
│ │ │ +
49 * @param __value An unsigned integer.
│ │ │ +
50 * @since C++26
│ │ │ +
51 * @{
│ │ │ +
52 */
│ │ │ +
53template<typename _Tp>
│ │ │ +
54inline unsigned int
│ │ │ +
55stdc_leading_zeros(_Tp __value)
│ │ │
56{
│ │ │ -
57 // types
│ │ │ -
58 using ::fenv_t;
│ │ │ -
59 using ::fexcept_t;
│ │ │ +
57 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
58 return std::countl_zero(__value);
│ │ │ +
59}
│ │ │
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
│ │ │ +
61inline unsigned int
│ │ │ +
62stdc_leading_zeros_uc(unsigned char __value)
│ │ │ +
63{ return stdc_leading_zeros(__value); }
│ │ │ +
64
│ │ │ +
65inline unsigned int
│ │ │ +
66stdc_leading_zeros_us(unsigned short __value)
│ │ │ +
67{ return stdc_leading_zeros(__value); }
│ │ │ +
68
│ │ │ +
69inline unsigned int
│ │ │ +
70stdc_leading_zeros_ui(unsigned int __value)
│ │ │ +
71{ return stdc_leading_zeros(__value); }
│ │ │ +
72
│ │ │ +
73inline unsigned int
│ │ │ +
74stdc_leading_zeros_ul(unsigned long int __value)
│ │ │ +
75{ return stdc_leading_zeros(__value); }
│ │ │
76
│ │ │ -
77#endif // _GLIBCXX_USE_C99_FENV
│ │ │ -
78
│ │ │ -
79#endif // C++11
│ │ │ -
80
│ │ │ -
81#endif // _GLIBCXX_FENV_H
│ │ │ - │ │ │ -
ISO C++ entities toplevel namespace is std.
│ │ │ +
77inline unsigned int
│ │ │ +
78stdc_leading_zeros_ull(unsigned long long int __value)
│ │ │ +
79{ return stdc_leading_zeros(__value); }
│ │ │ +
80/// @}
│ │ │ +
81
│ │ │ +
82/** Count the number of leading one bits
│ │ │ +
83 *
│ │ │ +
84 * @param __value An unsigned integer.
│ │ │ +
85 * @since C++26
│ │ │ +
86 * @{
│ │ │ +
87 */
│ │ │ +
88template<typename _Tp>
│ │ │ +
89inline unsigned int
│ │ │ +
90stdc_leading_ones(_Tp __value)
│ │ │ +
91{
│ │ │ +
92 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
93 return std::countl_one(__value);
│ │ │ +
94}
│ │ │ +
95
│ │ │ +
96inline unsigned int
│ │ │ +
97stdc_leading_ones_uc(unsigned char __value)
│ │ │ +
98{ return stdc_leading_ones(__value); }
│ │ │ +
99
│ │ │ +
100inline unsigned int
│ │ │ +
101stdc_leading_ones_us(unsigned short __value)
│ │ │ +
102{ return stdc_leading_ones(__value); }
│ │ │ +
103
│ │ │ +
104inline unsigned int
│ │ │ +
105stdc_leading_ones_ui(unsigned int __value)
│ │ │ +
106{ return stdc_leading_ones(__value); }
│ │ │ +
107
│ │ │ +
108inline unsigned int
│ │ │ +
109stdc_leading_ones_ul(unsigned long int __value)
│ │ │ +
110{ return stdc_leading_ones(__value); }
│ │ │ +
111
│ │ │ +
112inline unsigned int
│ │ │ +
113stdc_leading_ones_ull(unsigned long long int __value)
│ │ │ +
114{ return stdc_leading_ones(__value); }
│ │ │ +
115/// @}
│ │ │ +
116
│ │ │ +
117/** Count the number of trailing zero bits
│ │ │ +
118 *
│ │ │ +
119 * @param __value An unsigned integer.
│ │ │ +
120 * @since C++26
│ │ │ +
121 * @{
│ │ │ +
122 */
│ │ │ +
123template<typename _Tp>
│ │ │ +
124inline unsigned int
│ │ │ +
125stdc_trailing_zeros(_Tp __value)
│ │ │ +
126{
│ │ │ +
127 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
128 return std::countr_zero(__value);
│ │ │ +
129}
│ │ │ +
130
│ │ │ +
131inline unsigned int
│ │ │ +
132stdc_trailing_zeros_uc(unsigned char __value)
│ │ │ +
133{ return stdc_trailing_zeros(__value); }
│ │ │ +
134
│ │ │ +
135inline unsigned int
│ │ │ +
136stdc_trailing_zeros_us(unsigned short __value)
│ │ │ +
137{ return stdc_trailing_zeros(__value); }
│ │ │ +
138
│ │ │ +
139inline unsigned int
│ │ │ +
140stdc_trailing_zeros_ui(unsigned int __value)
│ │ │ +
141{ return stdc_trailing_zeros(__value); }
│ │ │ +
142
│ │ │ +
143inline unsigned int
│ │ │ +
144stdc_trailing_zeros_ul(unsigned long int __value)
│ │ │ +
145{ return stdc_trailing_zeros(__value); }
│ │ │ +
146
│ │ │ +
147inline unsigned int
│ │ │ +
148stdc_trailing_zeros_ull(unsigned long long int __value)
│ │ │ +
149{ return stdc_trailing_zeros(__value); }
│ │ │ +
150/// @}
│ │ │ +
151
│ │ │ +
152/** Count the number of trailing one bits
│ │ │ +
153 *
│ │ │ +
154 * @param __value An unsigned integer.
│ │ │ +
155 * @since C++26
│ │ │ +
156 * @{
│ │ │ +
157 */
│ │ │ +
158template<typename _Tp>
│ │ │ +
159inline unsigned int
│ │ │ +
160stdc_trailing_ones(_Tp __value)
│ │ │ +
161{
│ │ │ +
162 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
163 return std::countr_one(__value);
│ │ │ +
164}
│ │ │ +
165
│ │ │ +
166inline unsigned int
│ │ │ +
167stdc_trailing_ones_uc(unsigned char __value)
│ │ │ +
168{ return stdc_trailing_ones(__value); }
│ │ │ +
169
│ │ │ +
170inline unsigned int
│ │ │ +
171stdc_trailing_ones_us(unsigned short __value)
│ │ │ +
172{ return stdc_trailing_ones(__value); }
│ │ │ +
173
│ │ │ +
174inline unsigned int
│ │ │ +
175stdc_trailing_ones_ui(unsigned int __value)
│ │ │ +
176{ return stdc_trailing_ones(__value); }
│ │ │ +
177
│ │ │ +
178inline unsigned int
│ │ │ +
179stdc_trailing_ones_ul(unsigned long int __value)
│ │ │ +
180{ return stdc_trailing_ones(__value); }
│ │ │ +
181
│ │ │ +
182inline unsigned int
│ │ │ +
183stdc_trailing_ones_ull(unsigned long long int __value)
│ │ │ +
184{ return stdc_trailing_ones(__value); }
│ │ │ +
185/// @}
│ │ │ +
186
│ │ │ +
187/** Find the leftmost (i.e. most significant) zero bit
│ │ │ +
188 *
│ │ │ +
189 * @param __value An unsigned integer.
│ │ │ +
190 * @return The one-based index of the first zero bit counting from the left,
│ │ │ +
191 * or zero if there are no zero bits.
│ │ │ +
192 * @since C++26
│ │ │ +
193 * @{
│ │ │ +
194 */
│ │ │ +
195template<typename _Tp>
│ │ │ +
196inline unsigned int
│ │ │ +
197stdc_first_leading_zero(_Tp __value)
│ │ │ +
198{
│ │ │ +
199 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
200 return __value == _Tp(-1) ? 0 : 1 + std::countl_one(__value);
│ │ │ +
201}
│ │ │ +
202
│ │ │ +
203inline unsigned int
│ │ │ +
204stdc_first_leading_zero_uc(unsigned char __value)
│ │ │ +
205{ return stdc_first_leading_zero(__value); }
│ │ │ +
206
│ │ │ +
207inline unsigned int
│ │ │ +
208stdc_first_leading_zero_us(unsigned short __value)
│ │ │ +
209{ return stdc_first_leading_zero(__value); }
│ │ │ +
210
│ │ │ +
211inline unsigned int
│ │ │ +
212stdc_first_leading_zero_ui(unsigned int __value)
│ │ │ +
213{ return stdc_first_leading_zero(__value); }
│ │ │ +
214
│ │ │ +
215inline unsigned int
│ │ │ +
216stdc_first_leading_zero_ul(unsigned long int __value)
│ │ │ +
217{ return stdc_first_leading_zero(__value); }
│ │ │ +
218
│ │ │ +
219inline unsigned int
│ │ │ +
220stdc_first_leading_zero_ull(unsigned long long int __value)
│ │ │ +
221{ return stdc_first_leading_zero(__value); }
│ │ │ +
222/// @}
│ │ │ +
223
│ │ │ +
224/** Find the leftmost (i.e. most significant) one bit
│ │ │ +
225 *
│ │ │ +
226 * @param __value An unsigned integer.
│ │ │ +
227 * @return The one-based index of the first one bit counting from the left,
│ │ │ +
228 * or zero if there are no one bits.
│ │ │ +
229 * @since C++26
│ │ │ +
230 * @{
│ │ │ +
231 */
│ │ │ +
232template<typename _Tp>
│ │ │ +
233inline unsigned int
│ │ │ +
234stdc_first_leading_one(_Tp __value)
│ │ │ +
235{
│ │ │ +
236 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
237 return __value == 0 ? 0 : 1 + std::countl_zero(__value);
│ │ │ +
238}
│ │ │ +
239
│ │ │ +
240inline unsigned int
│ │ │ +
241stdc_first_leading_one_uc(unsigned char __value)
│ │ │ +
242{ return stdc_first_leading_one(__value); }
│ │ │ +
243
│ │ │ +
244inline unsigned int
│ │ │ +
245stdc_first_leading_one_us(unsigned short __value)
│ │ │ +
246{ return stdc_first_leading_one(__value); }
│ │ │ +
247
│ │ │ +
248inline unsigned int
│ │ │ +
249stdc_first_leading_one_ui(unsigned int __value)
│ │ │ +
250{ return stdc_first_leading_one(__value); }
│ │ │ +
251
│ │ │ +
252inline unsigned int
│ │ │ +
253stdc_first_leading_one_ul(unsigned long int __value)
│ │ │ +
254{ return stdc_first_leading_one(__value); }
│ │ │ +
255
│ │ │ +
256inline unsigned int
│ │ │ +
257stdc_first_leading_one_ull(unsigned long long int __value)
│ │ │ +
258{ return stdc_first_leading_one(__value); }
│ │ │ +
259/// @}
│ │ │ +
260
│ │ │ +
261/** Find the rightmost (i.e. least significant) zero bit
│ │ │ +
262 *
│ │ │ +
263 * @param __value An unsigned integer.
│ │ │ +
264 * @return The one-based index of the first zero bit counting from the right,
│ │ │ +
265 * or zero if there are no zero bits.
│ │ │ +
266 * @since C++26
│ │ │ +
267 * @{
│ │ │ +
268 */
│ │ │ +
269template<typename _Tp>
│ │ │ +
270inline unsigned int
│ │ │ +
271stdc_first_trailing_zero(_Tp __value)
│ │ │ +
272{
│ │ │ +
273 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
274 return __value == _Tp(-1) ? 0 : 1 + std::countr_one(__value);
│ │ │ +
275}
│ │ │ +
276
│ │ │ +
277inline unsigned int
│ │ │ +
278stdc_first_trailing_zero_uc(unsigned char __value)
│ │ │ +
279{ return stdc_first_trailing_zero(__value); }
│ │ │ +
280
│ │ │ +
281inline unsigned int
│ │ │ +
282stdc_first_trailing_zero_us(unsigned short __value)
│ │ │ +
283{ return stdc_first_trailing_zero(__value); }
│ │ │ +
284
│ │ │ +
285inline unsigned int
│ │ │ +
286stdc_first_trailing_zero_ui(unsigned int __value)
│ │ │ +
287{ return stdc_first_trailing_zero(__value); }
│ │ │ +
288
│ │ │ +
289inline unsigned int
│ │ │ +
290stdc_first_trailing_zero_ul(unsigned long int __value)
│ │ │ +
291{ return stdc_first_trailing_zero(__value); }
│ │ │ +
292
│ │ │ +
293inline unsigned int
│ │ │ +
294stdc_first_trailing_zero_ull(unsigned long long int __value)
│ │ │ +
295{ return stdc_first_trailing_zero(__value); }
│ │ │ +
296/// @}
│ │ │ +
297
│ │ │ +
298/** Find the rightmost (i.e. least significant) one bit
│ │ │ +
299 *
│ │ │ +
300 * @param __value An unsigned integer.
│ │ │ +
301 * @return The one-based index of the first one bit counting from the right,
│ │ │ +
302 * or zero if there are no one bits.
│ │ │ +
303 * @since C++26
│ │ │ +
304 * @{
│ │ │ +
305 */
│ │ │ +
306template<typename _Tp>
│ │ │ +
307inline unsigned int
│ │ │ +
308stdc_first_trailing_one(_Tp __value)
│ │ │ +
309{
│ │ │ +
310 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
311 return __value == 0 ? 0 : 1 + std::countr_zero(__value);
│ │ │ +
312}
│ │ │ +
313
│ │ │ +
314inline unsigned int
│ │ │ +
315stdc_first_trailing_one_uc(unsigned char __value)
│ │ │ +
316{ return stdc_first_trailing_one(__value); }
│ │ │ +
317
│ │ │ +
318inline unsigned int
│ │ │ +
319stdc_first_trailing_one_us(unsigned short __value)
│ │ │ +
320{ return stdc_first_trailing_one(__value); }
│ │ │ +
321
│ │ │ +
322inline unsigned int
│ │ │ +
323stdc_first_trailing_one_ui(unsigned int __value)
│ │ │ +
324{ return stdc_first_trailing_one(__value); }
│ │ │ +
325
│ │ │ +
326inline unsigned int
│ │ │ +
327stdc_first_trailing_one_ul(unsigned long int __value)
│ │ │ +
328{ return stdc_first_trailing_one(__value); }
│ │ │ +
329
│ │ │ +
330inline unsigned int
│ │ │ +
331stdc_first_trailing_one_ull(unsigned long long int __value)
│ │ │ +
332{ return stdc_first_trailing_one(__value); }
│ │ │ +
333/// @}
│ │ │ +
334
│ │ │ +
335/** Count zeros
│ │ │ +
336 *
│ │ │ +
337 * @param __value An unsigned integer.
│ │ │ +
338 * @return The total number of zero bits in `__value`.
│ │ │ +
339 * @since C++26
│ │ │ +
340 * @{
│ │ │ +
341 */
│ │ │ +
342template<typename _Tp>
│ │ │ +
343inline unsigned int
│ │ │ +
344stdc_count_zeros(_Tp __value)
│ │ │ +
345{
│ │ │ +
346 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
347 return std::popcount(_Tp(~__value));
│ │ │ +
348}
│ │ │ +
349
│ │ │ +
350inline unsigned int
│ │ │ +
351stdc_count_zeros_uc(unsigned char __value)
│ │ │ +
352{ return stdc_count_zeros(__value); }
│ │ │ +
353
│ │ │ +
354inline unsigned int
│ │ │ +
355stdc_count_zeros_us(unsigned short __value)
│ │ │ +
356{ return stdc_count_zeros(__value); }
│ │ │ +
357
│ │ │ +
358inline unsigned int
│ │ │ +
359stdc_count_zeros_ui(unsigned int __value)
│ │ │ +
360{ return stdc_count_zeros(__value); }
│ │ │ +
361
│ │ │ +
362inline unsigned int
│ │ │ +
363stdc_count_zeros_ul(unsigned long int __value)
│ │ │ +
364{ return stdc_count_zeros(__value); }
│ │ │ +
365
│ │ │ +
366inline unsigned int
│ │ │ +
367stdc_count_zeros_ull(unsigned long long int __value)
│ │ │ +
368{ return stdc_count_zeros(__value); }
│ │ │ +
369/// @}
│ │ │ +
370
│ │ │ +
371/** Count ones
│ │ │ +
372 *
│ │ │ +
373 * @param __value An unsigned integer.
│ │ │ +
374 * @return The total number of one bits in `__value`.
│ │ │ +
375 * @since C++26
│ │ │ +
376 * @{
│ │ │ +
377 */
│ │ │ +
378template<typename _Tp>
│ │ │ +
379inline unsigned int
│ │ │ +
380stdc_count_ones(_Tp __value)
│ │ │ +
381{
│ │ │ +
382 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
383 return std::popcount(__value);
│ │ │ +
384}
│ │ │ +
385
│ │ │ +
386inline unsigned int
│ │ │ +
387stdc_count_ones_uc(unsigned char __value)
│ │ │ +
388{ return stdc_count_ones(__value); }
│ │ │ +
389
│ │ │ +
390inline unsigned int
│ │ │ +
391stdc_count_ones_us(unsigned short __value)
│ │ │ +
392{ return stdc_count_ones(__value); }
│ │ │ +
393
│ │ │ +
394inline unsigned int
│ │ │ +
395stdc_count_ones_ui(unsigned int __value)
│ │ │ +
396{ return stdc_count_ones(__value); }
│ │ │ +
397
│ │ │ +
398inline unsigned int
│ │ │ +
399stdc_count_ones_ul(unsigned long int __value)
│ │ │ +
400{ return stdc_count_ones(__value); }
│ │ │ +
401
│ │ │ +
402inline unsigned int
│ │ │ +
403stdc_count_ones_ull(unsigned long long int __value)
│ │ │ +
404{ return stdc_count_ones(__value); }
│ │ │ +
405/// @}
│ │ │ +
406
│ │ │ +
407/** Power of two check
│ │ │ +
408 *
│ │ │ +
409 * @param __value An unsigned integer.
│ │ │ +
410 * @return True if the value has a single bit set, false otherwise.
│ │ │ +
411 * @since C++26
│ │ │ +
412 * @{
│ │ │ +
413 */
│ │ │ +
414template<typename _Tp>
│ │ │ +
415inline bool
│ │ │ +
416stdc_has_single_bit(_Tp __value)
│ │ │ +
417{
│ │ │ +
418 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
419 return std::has_single_bit(__value);
│ │ │ +
420}
│ │ │ +
421
│ │ │ +
422inline bool
│ │ │ +
423stdc_has_single_bit_uc(unsigned char __value)
│ │ │ +
424{ return stdc_has_single_bit(__value); }
│ │ │ +
425
│ │ │ +
426inline bool
│ │ │ +
427stdc_has_single_bit_us(unsigned short __value)
│ │ │ +
428{ return stdc_has_single_bit(__value); }
│ │ │ +
429
│ │ │ +
430inline bool
│ │ │ +
431stdc_has_single_bit_ui(unsigned int __value)
│ │ │ +
432{ return stdc_has_single_bit(__value); }
│ │ │ +
433
│ │ │ +
434inline bool
│ │ │ +
435stdc_has_single_bit_ul(unsigned long int __value)
│ │ │ +
436{ return stdc_has_single_bit(__value); }
│ │ │ +
437
│ │ │ +
438inline bool
│ │ │ +
439stdc_has_single_bit_ull(unsigned long long int __value)
│ │ │ +
440{ return stdc_has_single_bit(__value); }
│ │ │ +
441/// @}
│ │ │ +
442
│ │ │ +
443/** Bit width
│ │ │ +
444 *
│ │ │ +
445 * @param __value An unsigned integer.
│ │ │ +
446 * @return The minimum number of bits needed to represent `__value`.
│ │ │ +
447 * @since C++26
│ │ │ +
448 * @{
│ │ │ +
449 */
│ │ │ +
450template<typename _Tp>
│ │ │ +
451inline unsigned int
│ │ │ +
452stdc_bit_width(_Tp __value)
│ │ │ +
453{
│ │ │ +
454 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
455 return std::bit_width(__value);
│ │ │ +
456}
│ │ │ +
457
│ │ │ +
458inline unsigned int
│ │ │ +
459stdc_bit_width_uc(unsigned char __value)
│ │ │ +
460{ return stdc_bit_width(__value); }
│ │ │ +
461
│ │ │ +
462inline unsigned int
│ │ │ +
463stdc_bit_width_us(unsigned short __value)
│ │ │ +
464{ return stdc_bit_width(__value); }
│ │ │ +
465
│ │ │ +
466inline unsigned int
│ │ │ +
467stdc_bit_width_ui(unsigned int __value)
│ │ │ +
468{ return stdc_bit_width(__value); }
│ │ │ +
469
│ │ │ +
470inline unsigned int
│ │ │ +
471stdc_bit_width_ul(unsigned long int __value)
│ │ │ +
472{ return stdc_bit_width(__value); }
│ │ │ +
473
│ │ │ +
474inline unsigned int
│ │ │ +
475stdc_bit_width_ull(unsigned long long int __value)
│ │ │ +
476{ return stdc_bit_width(__value); }
│ │ │ +
477/// @}
│ │ │ +
478
│ │ │ +
479/** Bit floor
│ │ │ +
480 *
│ │ │ +
481 * @param __value An unsigned integer.
│ │ │ +
482 * @return The largest power of two that is not greater than `__value`.
│ │ │ +
483 * @since C++26
│ │ │ +
484 * @{
│ │ │ +
485 */
│ │ │ +
486template<typename _Tp>
│ │ │ +
487inline _Tp
│ │ │ +
488stdc_bit_floor(_Tp __value)
│ │ │ +
489{
│ │ │ +
490 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
491 return std::bit_floor(__value);
│ │ │ +
492}
│ │ │ +
493
│ │ │ +
494inline unsigned char
│ │ │ +
495stdc_bit_floor_uc(unsigned char __value)
│ │ │ +
496{ return stdc_bit_floor(__value); }
│ │ │ +
497
│ │ │ +
498inline unsigned short
│ │ │ +
499stdc_bit_floor_us(unsigned short __value)
│ │ │ +
500{ return stdc_bit_floor(__value); }
│ │ │ +
501
│ │ │ +
502inline unsigned int
│ │ │ +
503stdc_bit_floor_ui(unsigned int __value)
│ │ │ +
504{ return stdc_bit_floor(__value); }
│ │ │ +
505
│ │ │ +
506inline unsigned long int
│ │ │ +
507stdc_bit_floor_ul(unsigned long int __value)
│ │ │ +
508{ return stdc_bit_floor(__value); }
│ │ │ +
509
│ │ │ +
510inline unsigned long long int
│ │ │ +
511stdc_bit_floor_ull(unsigned long long int __value)
│ │ │ +
512{ return stdc_bit_floor(__value); }
│ │ │ +
513/// @}
│ │ │ +
514
│ │ │ +
515/** Bit ceiling
│ │ │ +
516 *
│ │ │ +
517 * Unlike `std::bit_ceil`, this is defined to return zero for values which
│ │ │ +
518 * are not representable in the return type.
│ │ │ +
519 *
│ │ │ +
520 * @param __value An unsigned integer.
│ │ │ +
521 * @return The smallest power of two that is not less than `__value`.
│ │ │ +
522 * @since C++26
│ │ │ +
523 * @{
│ │ │ +
524 */
│ │ │ +
525template<typename _Tp>
│ │ │ +
526inline _Tp
│ │ │ +
527stdc_bit_ceil(_Tp __value)
│ │ │ +
528{
│ │ │ +
529 static_assert(std::__unsigned_integer<_Tp>);
│ │ │ +
530 constexpr _Tp __msb = _Tp(1) << (__gnu_cxx::__int_traits<_Tp>::__digits - 1);
│ │ │ +
531 return (__value & __msb) ? 0 : std::bit_ceil(__value);
│ │ │ +
532}
│ │ │ +
533
│ │ │ +
534inline unsigned char
│ │ │ +
535stdc_bit_ceil_uc(unsigned char __value)
│ │ │ +
536{ return stdc_bit_ceil(__value); }
│ │ │ +
537
│ │ │ +
538inline unsigned short
│ │ │ +
539stdc_bit_ceil_us(unsigned short __value)
│ │ │ +
540{ return stdc_bit_ceil(__value); }
│ │ │ +
541
│ │ │ +
542inline unsigned int
│ │ │ +
543stdc_bit_ceil_ui(unsigned int __value)
│ │ │ +
544{ return stdc_bit_ceil(__value); }
│ │ │ +
545
│ │ │ +
546inline unsigned long int
│ │ │ +
547stdc_bit_ceil_ul(unsigned long int __value)
│ │ │ +
548{ return stdc_bit_ceil(__value); }
│ │ │ +
549
│ │ │ +
550inline unsigned long long int
│ │ │ +
551stdc_bit_ceil_ull(unsigned long long int __value)
│ │ │ +
552{ return stdc_bit_ceil(__value); }
│ │ │ +
553/// @}
│ │ │ +
554
│ │ │ +
555#ifndef _GLIBCXX_DOXYGEN
│ │ │ +
556} // namespace __gnu_cxx
│ │ │ +
557#define _GLIBCXX_STDBIT_FUNC(F) \
│ │ │ +
558 using __gnu_cxx::F ## _uc; \
│ │ │ +
559 using __gnu_cxx::F ## _us; \
│ │ │ +
560 using __gnu_cxx::F ## _ui; \
│ │ │ +
561 using __gnu_cxx::F ## _ul; \
│ │ │ +
562 using __gnu_cxx::F ## _ull; \
│ │ │ +
563 using __gnu_cxx::F
│ │ │ +
564_GLIBCXX_STDBIT_FUNC(stdc_leading_zeros);
│ │ │ +
565_GLIBCXX_STDBIT_FUNC(stdc_leading_ones);
│ │ │ +
566_GLIBCXX_STDBIT_FUNC(stdc_trailing_zeros);
│ │ │ +
567_GLIBCXX_STDBIT_FUNC(stdc_trailing_ones);
│ │ │ +
568_GLIBCXX_STDBIT_FUNC(stdc_first_leading_zero);
│ │ │ +
569_GLIBCXX_STDBIT_FUNC(stdc_first_leading_one);
│ │ │ +
570_GLIBCXX_STDBIT_FUNC(stdc_first_trailing_zero);
│ │ │ +
571_GLIBCXX_STDBIT_FUNC(stdc_first_trailing_one);
│ │ │ +
572_GLIBCXX_STDBIT_FUNC(stdc_count_zeros);
│ │ │ +
573_GLIBCXX_STDBIT_FUNC(stdc_count_ones);
│ │ │ +
574_GLIBCXX_STDBIT_FUNC(stdc_has_single_bit);
│ │ │ +
575_GLIBCXX_STDBIT_FUNC(stdc_bit_width);
│ │ │ +
576_GLIBCXX_STDBIT_FUNC(stdc_bit_floor);
│ │ │ +
577_GLIBCXX_STDBIT_FUNC(stdc_bit_ceil);
│ │ │ +
578#undef _GLIBCXX_STDBIT_FUNC
│ │ │ +
579#endif // !DOXYGEN
│ │ │ +
580#endif // C++26
│ │ │ +
581
│ │ │ +
582#endif // _GLIBCXX_STDBIT_H
│ │ │ + │ │ │ +
GNU extensions for public use.
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -fenv.h │ │ │ │ +stdbit.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// -*- C++ -*- compatibility header. │ │ │ │ +1// C compatibility header -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2007-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,69 +21,572 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file fenv.h │ │ │ │ +25/** @file include/stdbit.h │ │ │ │ 26 * This is a Standard C++ Library header. │ │ │ │ 27 */ │ │ │ │ 28 │ │ │ │ -29#ifndef _GLIBCXX_FENV_H │ │ │ │ -30#define _GLIBCXX_FENV_H 1 │ │ │ │ +29#ifndef _GLIBCXX_STDBIT_H │ │ │ │ +30#define _GLIBCXX_STDBIT_H │ │ │ │ 31 │ │ │ │ -32#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 │ │ │ │ +32#if __cplusplus > 202302L │ │ │ │ +33#include <_b_i_t> │ │ │ │ +34 │ │ │ │ +35#define __STDC_VERSION_STDBIT_H__ 202311L │ │ │ │ +36 │ │ │ │ +37#define __STDC_ENDIAN_BIG__ __ORDER_BIG_ENDIAN__ │ │ │ │ +38#define __STDC_ENDIAN_LITTLE__ __ORDER_LITTLE_ENDIAN__ │ │ │ │ +39#define __STDC_ENDIAN_NATIVE__ __BYTE_ORDER__ │ │ │ │ 40 │ │ │ │ -41#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 │ │ │ │ +41#ifndef _GLIBCXX_DOXYGEN │ │ │ │ +42// We define these in our own namespace, but let Doxygen think otherwise. │ │ │ │ +43namespace _____g_n_u___c_x_x _GLIBCXX_VISIBILITY(default) │ │ │ │ +44{ │ │ │ │ +45#endif │ │ │ │ +46 │ │ │ │ +47/** Count the number of leading zero bits │ │ │ │ +48 * │ │ │ │ +49 * @param __value An unsigned integer. │ │ │ │ +50 * @since C++26 │ │ │ │ +51 * @{ │ │ │ │ +52 */ │ │ │ │ +53template │ │ │ │ +54inline unsigned int │ │ │ │ +55stdc_leading_zeros(_Tp __value) │ │ │ │ 56{ │ │ │ │ -57 // types │ │ │ │ -58 using ::fenv_t; │ │ │ │ -59 using ::fexcept_t; │ │ │ │ +57 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +58 return std::countl_zero(__value); │ │ │ │ +59} │ │ │ │ 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 │ │ │ │ +61inline unsigned int │ │ │ │ +62stdc_leading_zeros_uc(unsigned char __value) │ │ │ │ +63{ return stdc_leading_zeros(__value); } │ │ │ │ +64 │ │ │ │ +65inline unsigned int │ │ │ │ +66stdc_leading_zeros_us(unsigned short __value) │ │ │ │ +67{ return stdc_leading_zeros(__value); } │ │ │ │ +68 │ │ │ │ +69inline unsigned int │ │ │ │ +70stdc_leading_zeros_ui(unsigned int __value) │ │ │ │ +71{ return stdc_leading_zeros(__value); } │ │ │ │ +72 │ │ │ │ +73inline unsigned int │ │ │ │ +74stdc_leading_zeros_ul(unsigned long int __value) │ │ │ │ +75{ return stdc_leading_zeros(__value); } │ │ │ │ 76 │ │ │ │ -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 │ │ │ │ +77inline unsigned int │ │ │ │ +78stdc_leading_zeros_ull(unsigned long long int __value) │ │ │ │ +79{ return stdc_leading_zeros(__value); } │ │ │ │ +80/// @} │ │ │ │ +81 │ │ │ │ +82/** Count the number of leading one bits │ │ │ │ +83 * │ │ │ │ +84 * @param __value An unsigned integer. │ │ │ │ +85 * @since C++26 │ │ │ │ +86 * @{ │ │ │ │ +87 */ │ │ │ │ +88template │ │ │ │ +89inline unsigned int │ │ │ │ +90stdc_leading_ones(_Tp __value) │ │ │ │ +91{ │ │ │ │ +92 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +93 return std::countl_one(__value); │ │ │ │ +94} │ │ │ │ +95 │ │ │ │ +96inline unsigned int │ │ │ │ +97stdc_leading_ones_uc(unsigned char __value) │ │ │ │ +98{ return stdc_leading_ones(__value); } │ │ │ │ +99 │ │ │ │ +100inline unsigned int │ │ │ │ +101stdc_leading_ones_us(unsigned short __value) │ │ │ │ +102{ return stdc_leading_ones(__value); } │ │ │ │ +103 │ │ │ │ +104inline unsigned int │ │ │ │ +105stdc_leading_ones_ui(unsigned int __value) │ │ │ │ +106{ return stdc_leading_ones(__value); } │ │ │ │ +107 │ │ │ │ +108inline unsigned int │ │ │ │ +109stdc_leading_ones_ul(unsigned long int __value) │ │ │ │ +110{ return stdc_leading_ones(__value); } │ │ │ │ +111 │ │ │ │ +112inline unsigned int │ │ │ │ +113stdc_leading_ones_ull(unsigned long long int __value) │ │ │ │ +114{ return stdc_leading_ones(__value); } │ │ │ │ +115/// @} │ │ │ │ +116 │ │ │ │ +117/** Count the number of trailing zero bits │ │ │ │ +118 * │ │ │ │ +119 * @param __value An unsigned integer. │ │ │ │ +120 * @since C++26 │ │ │ │ +121 * @{ │ │ │ │ +122 */ │ │ │ │ +123template │ │ │ │ +124inline unsigned int │ │ │ │ +125stdc_trailing_zeros(_Tp __value) │ │ │ │ +126{ │ │ │ │ +127 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +128 return std::countr_zero(__value); │ │ │ │ +129} │ │ │ │ +130 │ │ │ │ +131inline unsigned int │ │ │ │ +132stdc_trailing_zeros_uc(unsigned char __value) │ │ │ │ +133{ return stdc_trailing_zeros(__value); } │ │ │ │ +134 │ │ │ │ +135inline unsigned int │ │ │ │ +136stdc_trailing_zeros_us(unsigned short __value) │ │ │ │ +137{ return stdc_trailing_zeros(__value); } │ │ │ │ +138 │ │ │ │ +139inline unsigned int │ │ │ │ +140stdc_trailing_zeros_ui(unsigned int __value) │ │ │ │ +141{ return stdc_trailing_zeros(__value); } │ │ │ │ +142 │ │ │ │ +143inline unsigned int │ │ │ │ +144stdc_trailing_zeros_ul(unsigned long int __value) │ │ │ │ +145{ return stdc_trailing_zeros(__value); } │ │ │ │ +146 │ │ │ │ +147inline unsigned int │ │ │ │ +148stdc_trailing_zeros_ull(unsigned long long int __value) │ │ │ │ +149{ return stdc_trailing_zeros(__value); } │ │ │ │ +150/// @} │ │ │ │ +151 │ │ │ │ +152/** Count the number of trailing one bits │ │ │ │ +153 * │ │ │ │ +154 * @param __value An unsigned integer. │ │ │ │ +155 * @since C++26 │ │ │ │ +156 * @{ │ │ │ │ +157 */ │ │ │ │ +158template │ │ │ │ +159inline unsigned int │ │ │ │ +160stdc_trailing_ones(_Tp __value) │ │ │ │ +161{ │ │ │ │ +162 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +163 return std::countr_one(__value); │ │ │ │ +164} │ │ │ │ +165 │ │ │ │ +166inline unsigned int │ │ │ │ +167stdc_trailing_ones_uc(unsigned char __value) │ │ │ │ +168{ return stdc_trailing_ones(__value); } │ │ │ │ +169 │ │ │ │ +170inline unsigned int │ │ │ │ +171stdc_trailing_ones_us(unsigned short __value) │ │ │ │ +172{ return stdc_trailing_ones(__value); } │ │ │ │ +173 │ │ │ │ +174inline unsigned int │ │ │ │ +175stdc_trailing_ones_ui(unsigned int __value) │ │ │ │ +176{ return stdc_trailing_ones(__value); } │ │ │ │ +177 │ │ │ │ +178inline unsigned int │ │ │ │ +179stdc_trailing_ones_ul(unsigned long int __value) │ │ │ │ +180{ return stdc_trailing_ones(__value); } │ │ │ │ +181 │ │ │ │ +182inline unsigned int │ │ │ │ +183stdc_trailing_ones_ull(unsigned long long int __value) │ │ │ │ +184{ return stdc_trailing_ones(__value); } │ │ │ │ +185/// @} │ │ │ │ +186 │ │ │ │ +187/** Find the leftmost (i.e. most significant) zero bit │ │ │ │ +188 * │ │ │ │ +189 * @param __value An unsigned integer. │ │ │ │ +190 * @return The one-based index of the first zero bit counting from the left, │ │ │ │ +191 * or zero if there are no zero bits. │ │ │ │ +192 * @since C++26 │ │ │ │ +193 * @{ │ │ │ │ +194 */ │ │ │ │ +195template │ │ │ │ +196inline unsigned int │ │ │ │ +197stdc_first_leading_zero(_Tp __value) │ │ │ │ +198{ │ │ │ │ +199 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +200 return __value == _Tp(-1) ? 0 : 1 + std::countl_one(__value); │ │ │ │ +201} │ │ │ │ +202 │ │ │ │ +203inline unsigned int │ │ │ │ +204stdc_first_leading_zero_uc(unsigned char __value) │ │ │ │ +205{ return stdc_first_leading_zero(__value); } │ │ │ │ +206 │ │ │ │ +207inline unsigned int │ │ │ │ +208stdc_first_leading_zero_us(unsigned short __value) │ │ │ │ +209{ return stdc_first_leading_zero(__value); } │ │ │ │ +210 │ │ │ │ +211inline unsigned int │ │ │ │ +212stdc_first_leading_zero_ui(unsigned int __value) │ │ │ │ +213{ return stdc_first_leading_zero(__value); } │ │ │ │ +214 │ │ │ │ +215inline unsigned int │ │ │ │ +216stdc_first_leading_zero_ul(unsigned long int __value) │ │ │ │ +217{ return stdc_first_leading_zero(__value); } │ │ │ │ +218 │ │ │ │ +219inline unsigned int │ │ │ │ +220stdc_first_leading_zero_ull(unsigned long long int __value) │ │ │ │ +221{ return stdc_first_leading_zero(__value); } │ │ │ │ +222/// @} │ │ │ │ +223 │ │ │ │ +224/** Find the leftmost (i.e. most significant) one bit │ │ │ │ +225 * │ │ │ │ +226 * @param __value An unsigned integer. │ │ │ │ +227 * @return The one-based index of the first one bit counting from the left, │ │ │ │ +228 * or zero if there are no one bits. │ │ │ │ +229 * @since C++26 │ │ │ │ +230 * @{ │ │ │ │ +231 */ │ │ │ │ +232template │ │ │ │ +233inline unsigned int │ │ │ │ +234stdc_first_leading_one(_Tp __value) │ │ │ │ +235{ │ │ │ │ +236 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +237 return __value == 0 ? 0 : 1 + std::countl_zero(__value); │ │ │ │ +238} │ │ │ │ +239 │ │ │ │ +240inline unsigned int │ │ │ │ +241stdc_first_leading_one_uc(unsigned char __value) │ │ │ │ +242{ return stdc_first_leading_one(__value); } │ │ │ │ +243 │ │ │ │ +244inline unsigned int │ │ │ │ +245stdc_first_leading_one_us(unsigned short __value) │ │ │ │ +246{ return stdc_first_leading_one(__value); } │ │ │ │ +247 │ │ │ │ +248inline unsigned int │ │ │ │ +249stdc_first_leading_one_ui(unsigned int __value) │ │ │ │ +250{ return stdc_first_leading_one(__value); } │ │ │ │ +251 │ │ │ │ +252inline unsigned int │ │ │ │ +253stdc_first_leading_one_ul(unsigned long int __value) │ │ │ │ +254{ return stdc_first_leading_one(__value); } │ │ │ │ +255 │ │ │ │ +256inline unsigned int │ │ │ │ +257stdc_first_leading_one_ull(unsigned long long int __value) │ │ │ │ +258{ return stdc_first_leading_one(__value); } │ │ │ │ +259/// @} │ │ │ │ +260 │ │ │ │ +261/** Find the rightmost (i.e. least significant) zero bit │ │ │ │ +262 * │ │ │ │ +263 * @param __value An unsigned integer. │ │ │ │ +264 * @return The one-based index of the first zero bit counting from the │ │ │ │ +right, │ │ │ │ +265 * or zero if there are no zero bits. │ │ │ │ +266 * @since C++26 │ │ │ │ +267 * @{ │ │ │ │ +268 */ │ │ │ │ +269template │ │ │ │ +270inline unsigned int │ │ │ │ +271stdc_first_trailing_zero(_Tp __value) │ │ │ │ +272{ │ │ │ │ +273 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +274 return __value == _Tp(-1) ? 0 : 1 + std::countr_one(__value); │ │ │ │ +275} │ │ │ │ +276 │ │ │ │ +277inline unsigned int │ │ │ │ +278stdc_first_trailing_zero_uc(unsigned char __value) │ │ │ │ +279{ return stdc_first_trailing_zero(__value); } │ │ │ │ +280 │ │ │ │ +281inline unsigned int │ │ │ │ +282stdc_first_trailing_zero_us(unsigned short __value) │ │ │ │ +283{ return stdc_first_trailing_zero(__value); } │ │ │ │ +284 │ │ │ │ +285inline unsigned int │ │ │ │ +286stdc_first_trailing_zero_ui(unsigned int __value) │ │ │ │ +287{ return stdc_first_trailing_zero(__value); } │ │ │ │ +288 │ │ │ │ +289inline unsigned int │ │ │ │ +290stdc_first_trailing_zero_ul(unsigned long int __value) │ │ │ │ +291{ return stdc_first_trailing_zero(__value); } │ │ │ │ +292 │ │ │ │ +293inline unsigned int │ │ │ │ +294stdc_first_trailing_zero_ull(unsigned long long int __value) │ │ │ │ +295{ return stdc_first_trailing_zero(__value); } │ │ │ │ +296/// @} │ │ │ │ +297 │ │ │ │ +298/** Find the rightmost (i.e. least significant) one bit │ │ │ │ +299 * │ │ │ │ +300 * @param __value An unsigned integer. │ │ │ │ +301 * @return The one-based index of the first one bit counting from the right, │ │ │ │ +302 * or zero if there are no one bits. │ │ │ │ +303 * @since C++26 │ │ │ │ +304 * @{ │ │ │ │ +305 */ │ │ │ │ +306template │ │ │ │ +307inline unsigned int │ │ │ │ +308stdc_first_trailing_one(_Tp __value) │ │ │ │ +309{ │ │ │ │ +310 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +311 return __value == 0 ? 0 : 1 + std::countr_zero(__value); │ │ │ │ +312} │ │ │ │ +313 │ │ │ │ +314inline unsigned int │ │ │ │ +315stdc_first_trailing_one_uc(unsigned char __value) │ │ │ │ +316{ return stdc_first_trailing_one(__value); } │ │ │ │ +317 │ │ │ │ +318inline unsigned int │ │ │ │ +319stdc_first_trailing_one_us(unsigned short __value) │ │ │ │ +320{ return stdc_first_trailing_one(__value); } │ │ │ │ +321 │ │ │ │ +322inline unsigned int │ │ │ │ +323stdc_first_trailing_one_ui(unsigned int __value) │ │ │ │ +324{ return stdc_first_trailing_one(__value); } │ │ │ │ +325 │ │ │ │ +326inline unsigned int │ │ │ │ +327stdc_first_trailing_one_ul(unsigned long int __value) │ │ │ │ +328{ return stdc_first_trailing_one(__value); } │ │ │ │ +329 │ │ │ │ +330inline unsigned int │ │ │ │ +331stdc_first_trailing_one_ull(unsigned long long int __value) │ │ │ │ +332{ return stdc_first_trailing_one(__value); } │ │ │ │ +333/// @} │ │ │ │ +334 │ │ │ │ +335/** Count zeros │ │ │ │ +336 * │ │ │ │ +337 * @param __value An unsigned integer. │ │ │ │ +338 * @return The total number of zero bits in `__value`. │ │ │ │ +339 * @since C++26 │ │ │ │ +340 * @{ │ │ │ │ +341 */ │ │ │ │ +342template │ │ │ │ +343inline unsigned int │ │ │ │ +344stdc_count_zeros(_Tp __value) │ │ │ │ +345{ │ │ │ │ +346 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +347 return std::popcount(_Tp(~__value)); │ │ │ │ +348} │ │ │ │ +349 │ │ │ │ +350inline unsigned int │ │ │ │ +351stdc_count_zeros_uc(unsigned char __value) │ │ │ │ +352{ return stdc_count_zeros(__value); } │ │ │ │ +353 │ │ │ │ +354inline unsigned int │ │ │ │ +355stdc_count_zeros_us(unsigned short __value) │ │ │ │ +356{ return stdc_count_zeros(__value); } │ │ │ │ +357 │ │ │ │ +358inline unsigned int │ │ │ │ +359stdc_count_zeros_ui(unsigned int __value) │ │ │ │ +360{ return stdc_count_zeros(__value); } │ │ │ │ +361 │ │ │ │ +362inline unsigned int │ │ │ │ +363stdc_count_zeros_ul(unsigned long int __value) │ │ │ │ +364{ return stdc_count_zeros(__value); } │ │ │ │ +365 │ │ │ │ +366inline unsigned int │ │ │ │ +367stdc_count_zeros_ull(unsigned long long int __value) │ │ │ │ +368{ return stdc_count_zeros(__value); } │ │ │ │ +369/// @} │ │ │ │ +370 │ │ │ │ +371/** Count ones │ │ │ │ +372 * │ │ │ │ +373 * @param __value An unsigned integer. │ │ │ │ +374 * @return The total number of one bits in `__value`. │ │ │ │ +375 * @since C++26 │ │ │ │ +376 * @{ │ │ │ │ +377 */ │ │ │ │ +378template │ │ │ │ +379inline unsigned int │ │ │ │ +380stdc_count_ones(_Tp __value) │ │ │ │ +381{ │ │ │ │ +382 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +383 return std::popcount(__value); │ │ │ │ +384} │ │ │ │ +385 │ │ │ │ +386inline unsigned int │ │ │ │ +387stdc_count_ones_uc(unsigned char __value) │ │ │ │ +388{ return stdc_count_ones(__value); } │ │ │ │ +389 │ │ │ │ +390inline unsigned int │ │ │ │ +391stdc_count_ones_us(unsigned short __value) │ │ │ │ +392{ return stdc_count_ones(__value); } │ │ │ │ +393 │ │ │ │ +394inline unsigned int │ │ │ │ +395stdc_count_ones_ui(unsigned int __value) │ │ │ │ +396{ return stdc_count_ones(__value); } │ │ │ │ +397 │ │ │ │ +398inline unsigned int │ │ │ │ +399stdc_count_ones_ul(unsigned long int __value) │ │ │ │ +400{ return stdc_count_ones(__value); } │ │ │ │ +401 │ │ │ │ +402inline unsigned int │ │ │ │ +403stdc_count_ones_ull(unsigned long long int __value) │ │ │ │ +404{ return stdc_count_ones(__value); } │ │ │ │ +405/// @} │ │ │ │ +406 │ │ │ │ +407/** Power of two check │ │ │ │ +408 * │ │ │ │ +409 * @param __value An unsigned integer. │ │ │ │ +410 * @return True if the value has a single bit set, false otherwise. │ │ │ │ +411 * @since C++26 │ │ │ │ +412 * @{ │ │ │ │ +413 */ │ │ │ │ +414template │ │ │ │ +415inline bool │ │ │ │ +416stdc_has_single_bit(_Tp __value) │ │ │ │ +417{ │ │ │ │ +418 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +419 return std::has_single_bit(__value); │ │ │ │ +420} │ │ │ │ +421 │ │ │ │ +422inline bool │ │ │ │ +423stdc_has_single_bit_uc(unsigned char __value) │ │ │ │ +424{ return stdc_has_single_bit(__value); } │ │ │ │ +425 │ │ │ │ +426inline bool │ │ │ │ +427stdc_has_single_bit_us(unsigned short __value) │ │ │ │ +428{ return stdc_has_single_bit(__value); } │ │ │ │ +429 │ │ │ │ +430inline bool │ │ │ │ +431stdc_has_single_bit_ui(unsigned int __value) │ │ │ │ +432{ return stdc_has_single_bit(__value); } │ │ │ │ +433 │ │ │ │ +434inline bool │ │ │ │ +435stdc_has_single_bit_ul(unsigned long int __value) │ │ │ │ +436{ return stdc_has_single_bit(__value); } │ │ │ │ +437 │ │ │ │ +438inline bool │ │ │ │ +439stdc_has_single_bit_ull(unsigned long long int __value) │ │ │ │ +440{ return stdc_has_single_bit(__value); } │ │ │ │ +441/// @} │ │ │ │ +442 │ │ │ │ +443/** Bit width │ │ │ │ +444 * │ │ │ │ +445 * @param __value An unsigned integer. │ │ │ │ +446 * @return The minimum number of bits needed to represent `__value`. │ │ │ │ +447 * @since C++26 │ │ │ │ +448 * @{ │ │ │ │ +449 */ │ │ │ │ +450template │ │ │ │ +451inline unsigned int │ │ │ │ +452stdc_bit_width(_Tp __value) │ │ │ │ +453{ │ │ │ │ +454 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +455 return std::bit_width(__value); │ │ │ │ +456} │ │ │ │ +457 │ │ │ │ +458inline unsigned int │ │ │ │ +459stdc_bit_width_uc(unsigned char __value) │ │ │ │ +460{ return stdc_bit_width(__value); } │ │ │ │ +461 │ │ │ │ +462inline unsigned int │ │ │ │ +463stdc_bit_width_us(unsigned short __value) │ │ │ │ +464{ return stdc_bit_width(__value); } │ │ │ │ +465 │ │ │ │ +466inline unsigned int │ │ │ │ +467stdc_bit_width_ui(unsigned int __value) │ │ │ │ +468{ return stdc_bit_width(__value); } │ │ │ │ +469 │ │ │ │ +470inline unsigned int │ │ │ │ +471stdc_bit_width_ul(unsigned long int __value) │ │ │ │ +472{ return stdc_bit_width(__value); } │ │ │ │ +473 │ │ │ │ +474inline unsigned int │ │ │ │ +475stdc_bit_width_ull(unsigned long long int __value) │ │ │ │ +476{ return stdc_bit_width(__value); } │ │ │ │ +477/// @} │ │ │ │ +478 │ │ │ │ +479/** Bit floor │ │ │ │ +480 * │ │ │ │ +481 * @param __value An unsigned integer. │ │ │ │ +482 * @return The largest power of two that is not greater than `__value`. │ │ │ │ +483 * @since C++26 │ │ │ │ +484 * @{ │ │ │ │ +485 */ │ │ │ │ +486template │ │ │ │ +487inline _Tp │ │ │ │ +488stdc_bit_floor(_Tp __value) │ │ │ │ +489{ │ │ │ │ +490 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +491 return std::bit_floor(__value); │ │ │ │ +492} │ │ │ │ +493 │ │ │ │ +494inline unsigned char │ │ │ │ +495stdc_bit_floor_uc(unsigned char __value) │ │ │ │ +496{ return stdc_bit_floor(__value); } │ │ │ │ +497 │ │ │ │ +498inline unsigned short │ │ │ │ +499stdc_bit_floor_us(unsigned short __value) │ │ │ │ +500{ return stdc_bit_floor(__value); } │ │ │ │ +501 │ │ │ │ +502inline unsigned int │ │ │ │ +503stdc_bit_floor_ui(unsigned int __value) │ │ │ │ +504{ return stdc_bit_floor(__value); } │ │ │ │ +505 │ │ │ │ +506inline unsigned long int │ │ │ │ +507stdc_bit_floor_ul(unsigned long int __value) │ │ │ │ +508{ return stdc_bit_floor(__value); } │ │ │ │ +509 │ │ │ │ +510inline unsigned long long int │ │ │ │ +511stdc_bit_floor_ull(unsigned long long int __value) │ │ │ │ +512{ return stdc_bit_floor(__value); } │ │ │ │ +513/// @} │ │ │ │ +514 │ │ │ │ +515/** Bit ceiling │ │ │ │ +516 * │ │ │ │ +517 * Unlike `std::bit_ceil`, this is defined to return zero for values which │ │ │ │ +518 * are not representable in the return type. │ │ │ │ +519 * │ │ │ │ +520 * @param __value An unsigned integer. │ │ │ │ +521 * @return The smallest power of two that is not less than `__value`. │ │ │ │ +522 * @since C++26 │ │ │ │ +523 * @{ │ │ │ │ +524 */ │ │ │ │ +525template │ │ │ │ +526inline _Tp │ │ │ │ +527stdc_bit_ceil(_Tp __value) │ │ │ │ +528{ │ │ │ │ +529 static_assert(std::__unsigned_integer<_Tp>); │ │ │ │ +530 constexpr _Tp __msb = _Tp(1) << (__gnu_cxx::__int_traits<_Tp>::__digits - │ │ │ │ +1); │ │ │ │ +531 return (__value & __msb) ? 0 : std::bit_ceil(__value); │ │ │ │ +532} │ │ │ │ +533 │ │ │ │ +534inline unsigned char │ │ │ │ +535stdc_bit_ceil_uc(unsigned char __value) │ │ │ │ +536{ return stdc_bit_ceil(__value); } │ │ │ │ +537 │ │ │ │ +538inline unsigned short │ │ │ │ +539stdc_bit_ceil_us(unsigned short __value) │ │ │ │ +540{ return stdc_bit_ceil(__value); } │ │ │ │ +541 │ │ │ │ +542inline unsigned int │ │ │ │ +543stdc_bit_ceil_ui(unsigned int __value) │ │ │ │ +544{ return stdc_bit_ceil(__value); } │ │ │ │ +545 │ │ │ │ +546inline unsigned long int │ │ │ │ +547stdc_bit_ceil_ul(unsigned long int __value) │ │ │ │ +548{ return stdc_bit_ceil(__value); } │ │ │ │ +549 │ │ │ │ +550inline unsigned long long int │ │ │ │ +551stdc_bit_ceil_ull(unsigned long long int __value) │ │ │ │ +552{ return stdc_bit_ceil(__value); } │ │ │ │ +553/// @} │ │ │ │ +554 │ │ │ │ +555#ifndef _GLIBCXX_DOXYGEN │ │ │ │ +556} // namespace __gnu_cxx │ │ │ │ +557#define _GLIBCXX_STDBIT_FUNC(F) \ │ │ │ │ +558 using __gnu_cxx::F ## _uc; \ │ │ │ │ +559 using __gnu_cxx::F ## _us; \ │ │ │ │ +560 using __gnu_cxx::F ## _ui; \ │ │ │ │ +561 using __gnu_cxx::F ## _ul; \ │ │ │ │ +562 using __gnu_cxx::F ## _ull; \ │ │ │ │ +563 using __gnu_cxx::F │ │ │ │ +564_GLIBCXX_STDBIT_FUNC(stdc_leading_zeros); │ │ │ │ +565_GLIBCXX_STDBIT_FUNC(stdc_leading_ones); │ │ │ │ +566_GLIBCXX_STDBIT_FUNC(stdc_trailing_zeros); │ │ │ │ +567_GLIBCXX_STDBIT_FUNC(stdc_trailing_ones); │ │ │ │ +568_GLIBCXX_STDBIT_FUNC(stdc_first_leading_zero); │ │ │ │ +569_GLIBCXX_STDBIT_FUNC(stdc_first_leading_one); │ │ │ │ +570_GLIBCXX_STDBIT_FUNC(stdc_first_trailing_zero); │ │ │ │ +571_GLIBCXX_STDBIT_FUNC(stdc_first_trailing_one); │ │ │ │ +572_GLIBCXX_STDBIT_FUNC(stdc_count_zeros); │ │ │ │ +573_GLIBCXX_STDBIT_FUNC(stdc_count_ones); │ │ │ │ +574_GLIBCXX_STDBIT_FUNC(stdc_has_single_bit); │ │ │ │ +575_GLIBCXX_STDBIT_FUNC(stdc_bit_width); │ │ │ │ +576_GLIBCXX_STDBIT_FUNC(stdc_bit_floor); │ │ │ │ +577_GLIBCXX_STDBIT_FUNC(stdc_bit_ceil); │ │ │ │ +578#undef _GLIBCXX_STDBIT_FUNC │ │ │ │ +579#endif // !DOXYGEN │ │ │ │ +580#endif // C++26 │ │ │ │ +581 │ │ │ │ +582#endif // _GLIBCXX_STDBIT_H │ │ │ │ +_b_i_t │ │ │ │ +_____g_n_u___c_x_x │ │ │ │ +GNU extensions for public use. │ │ │ │ + * _s_t_d_b_i_t_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00023.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: complex.h File Reference │ │ │ +libstdc++: stdatomic.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,42 +48,37 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
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,14 +1,12 @@ │ │ │ │ libstdc++ │ │ │ │ -complex.h File Reference │ │ │ │ +stdatomic.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00023_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: complex.h Source File │ │ │ +libstdc++: stdatomic.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
complex.h
│ │ │ +
stdatomic.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// -*- C++ -*- compatibility header.
│ │ │ +Go to the documentation of this file.
1// C compatibility header <stdatomic.h> -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2007-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
│ │ │ @@ -75,45 +75,175 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file complex.h
│ │ │ +
25/** @file include/stdatomic.h
│ │ │
26 * This is a Standard C++ Library header.
│ │ │
27 */
│ │ │
28
│ │ │ -
29#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
│ │ │ +
61using std::atomic_char8_t;
│ │ │ +
62#endif
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
66#ifdef _GLIBCXX_USE_C99_STDINT
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
91#endif
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
96#ifdef _GLIBCXX_USE_C99_STDINT
│ │ │ + │ │ │ + │ │ │ +
99#endif
│ │ │ +
100using std::atomic_is_lock_free;
│ │ │ +
101using std::atomic_load;
│ │ │ +
102using std::atomic_load_explicit;
│ │ │ +
103using std::atomic_store;
│ │ │ +
104using std::atomic_store_explicit;
│ │ │ +
105using std::atomic_exchange;
│ │ │ +
106using std::atomic_exchange_explicit;
│ │ │ +
107using std::atomic_compare_exchange_strong;
│ │ │ +
108using std::atomic_compare_exchange_strong_explicit;
│ │ │ +
109using std::atomic_compare_exchange_weak;
│ │ │ +
110using std::atomic_compare_exchange_weak_explicit;
│ │ │ +
111using std::atomic_fetch_add;
│ │ │ +
112using std::atomic_fetch_add_explicit;
│ │ │ +
113using std::atomic_fetch_sub;
│ │ │ +
114using std::atomic_fetch_sub_explicit;
│ │ │ +
115using std::atomic_fetch_or;
│ │ │ +
116using std::atomic_fetch_or_explicit;
│ │ │ +
117using std::atomic_fetch_xor;
│ │ │ +
118using std::atomic_fetch_xor_explicit;
│ │ │ +
119using std::atomic_fetch_and;
│ │ │ +
120using std::atomic_fetch_and_explicit;
│ │ │ +
121using std::atomic_flag_test_and_set;
│ │ │ +
122using std::atomic_flag_test_and_set_explicit;
│ │ │ +
123using std::atomic_flag_clear;
│ │ │ +
124using std::atomic_flag_clear_explicit;
│ │ │ +
125using std::atomic_thread_fence;
│ │ │ +
126using std::atomic_signal_fence;
│ │ │ +
127
│ │ │ +
128#elif defined __clang__
│ │ │ +
129# include_next <stdatomic.h>
│ │ │ +
130#endif // __cpp_lib_stdatomic_h
│ │ │ +
131#endif // _GLIBCXX_STDATOMIC_H
│ │ │ + │ │ │ + │ │ │ +
atomic< unsigned long > atomic_ulong
atomic_ulong
Definition atomic:1088
│ │ │ +
atomic< intmax_t > atomic_intmax_t
atomic_intmax_t
Definition atomic:1202
│ │ │ +
atomic< uintptr_t > atomic_uintptr_t
atomic_uintptr_t
Definition atomic:1193
│ │ │ +
atomic< signed char > atomic_schar
atomic_schar
Definition atomic:1067
│ │ │ +
atomic< int_least8_t > atomic_int_least8_t
atomic_int_least8_t
Definition atomic:1140
│ │ │ +
atomic< unsigned long long > atomic_ullong
atomic_ullong
Definition atomic:1094
│ │ │ +
atomic< uint_fast8_t > atomic_uint_fast8_t
atomic_uint_fast8_t
Definition atomic:1168
│ │ │ +
atomic< intptr_t > atomic_intptr_t
atomic_intptr_t
Definition atomic:1190
│ │ │ +
atomic< int16_t > atomic_int16_t
atomic_int16_t
Definition atomic:1121
│ │ │ +
atomic< size_t > atomic_size_t
atomic_size_t
Definition atomic:1196
│ │ │ +
atomic< long > atomic_long
atomic_long
Definition atomic:1085
│ │ │ +
atomic< uint_least8_t > atomic_uint_least8_t
atomic_uint_least8_t
Definition atomic:1143
│ │ │ +
atomic< short > atomic_short
atomic_short
Definition atomic:1073
│ │ │ +
atomic< uint_least16_t > atomic_uint_least16_t
atomic_uint_least16_t
Definition atomic:1149
│ │ │ +
atomic< uint16_t > atomic_uint16_t
atomic_uint16_t
Definition atomic:1124
│ │ │ +
atomic< uint64_t > atomic_uint64_t
atomic_uint64_t
Definition atomic:1136
│ │ │ +
atomic< int_least32_t > atomic_int_least32_t
atomic_int_least32_t
Definition atomic:1152
│ │ │ +
atomic< uint8_t > atomic_uint8_t
atomic_uint8_t
Definition atomic:1118
│ │ │ +
atomic< wchar_t > atomic_wchar_t
atomic_wchar_t
Definition atomic:1097
│ │ │ +
atomic< unsigned int > atomic_uint
atomic_uint
Definition atomic:1082
│ │ │ +
atomic< uint_least32_t > atomic_uint_least32_t
atomic_uint_least32_t
Definition atomic:1155
│ │ │ +
atomic< uint_fast64_t > atomic_uint_fast64_t
atomic_uint_fast64_t
Definition atomic:1186
│ │ │ +
atomic< int_fast32_t > atomic_int_fast32_t
atomic_int_fast32_t
Definition atomic:1177
│ │ │ +
atomic< char > atomic_char
atomic_char
Definition atomic:1064
│ │ │ +
atomic< int > atomic_int
atomic_int
Definition atomic:1079
│ │ │ +
atomic< uint_least64_t > atomic_uint_least64_t
atomic_uint_least64_t
Definition atomic:1161
│ │ │ +
atomic< int64_t > atomic_int64_t
atomic_int64_t
Definition atomic:1133
│ │ │ +
atomic< uintmax_t > atomic_uintmax_t
atomic_uintmax_t
Definition atomic:1205
│ │ │ +
atomic< int_fast16_t > atomic_int_fast16_t
atomic_int_fast16_t
Definition atomic:1171
│ │ │ +
atomic< int32_t > atomic_int32_t
atomic_int32_t
Definition atomic:1127
│ │ │ +
atomic< uint_fast16_t > atomic_uint_fast16_t
atomic_uint_fast16_t
Definition atomic:1174
│ │ │ +
atomic< int8_t > atomic_int8_t
atomic_int8_t
Definition atomic:1115
│ │ │ +
atomic< long long > atomic_llong
atomic_llong
Definition atomic:1091
│ │ │ +
atomic< char16_t > atomic_char16_t
atomic_char16_t
Definition atomic:1105
│ │ │ +
atomic< int_fast64_t > atomic_int_fast64_t
atomic_int_fast64_t
Definition atomic:1183
│ │ │ +
atomic< ptrdiff_t > atomic_ptrdiff_t
atomic_ptrdiff_t
Definition atomic:1199
│ │ │ +
atomic< char32_t > atomic_char32_t
atomic_char32_t
Definition atomic:1108
│ │ │ +
atomic< int_least16_t > atomic_int_least16_t
atomic_int_least16_t
Definition atomic:1146
│ │ │ +
atomic< unsigned char > atomic_uchar
atomic_uchar
Definition atomic:1070
│ │ │ +
atomic< int_fast8_t > atomic_int_fast8_t
atomic_int_fast8_t
Definition atomic:1165
│ │ │ +
memory_order
Enumeration for memory_order.
Definition atomic_base.h:65
│ │ │ +
atomic< unsigned short > atomic_ushort
atomic_ushort
Definition atomic:1076
│ │ │ +
atomic< int_least64_t > atomic_int_least64_t
atomic_int_least64_t
Definition atomic:1158
│ │ │ +
atomic< bool > atomic_bool
atomic_bool
Definition atomic:1061
│ │ │ +
atomic< uint_fast32_t > atomic_uint_fast32_t
atomic_uint_fast32_t
Definition atomic:1180
│ │ │ +
atomic< uint32_t > atomic_uint32_t
atomic_uint32_t
Definition atomic:1130
│ │ │ +
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,305 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file complex.h │ │ │ │ +25/** @file include/stdatomic.h │ │ │ │ 26 * This is a Standard C++ Library header. │ │ │ │ 27 */ │ │ │ │ 28 │ │ │ │ -29#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_m_p_l_e_x │ │ │ │ -_c_+_+_c_o_n_f_i_g_._h │ │ │ │ - * _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 std::atomic_char8_t; │ │ │ │ +62#endif │ │ │ │ +63using _s_t_d_:_:_a_t_o_m_i_c___c_h_a_r_1_6___t; │ │ │ │ +64using _s_t_d_:_:_a_t_o_m_i_c___c_h_a_r_3_2___t; │ │ │ │ +65using _s_t_d_:_:_a_t_o_m_i_c___w_c_h_a_r___t; │ │ │ │ +66#ifdef _GLIBCXX_USE_C99_STDINT │ │ │ │ +67using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_8___t; │ │ │ │ +68using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_8___t; │ │ │ │ +69using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_1_6___t; │ │ │ │ +70using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_1_6___t; │ │ │ │ +71using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_3_2___t; │ │ │ │ +72using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_3_2___t; │ │ │ │ +73using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_6_4___t; │ │ │ │ +74using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_6_4___t; │ │ │ │ +75using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_8___t; │ │ │ │ +76using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_8___t; │ │ │ │ +77using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_1_6___t; │ │ │ │ +78using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_1_6___t; │ │ │ │ +79using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_3_2___t; │ │ │ │ +80using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_3_2___t; │ │ │ │ +81using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_6_4___t; │ │ │ │ +82using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_6_4___t; │ │ │ │ +83using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_8___t; │ │ │ │ +84using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_8___t; │ │ │ │ +85using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_1_6___t; │ │ │ │ +86using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_1_6___t; │ │ │ │ +87using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_3_2___t; │ │ │ │ +88using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_3_2___t; │ │ │ │ +89using _s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_6_4___t; │ │ │ │ +90using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_6_4___t; │ │ │ │ +91#endif │ │ │ │ +92using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_p_t_r___t; │ │ │ │ +93using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_p_t_r___t; │ │ │ │ +94using _s_t_d_:_:_a_t_o_m_i_c___s_i_z_e___t; │ │ │ │ +95using _s_t_d_:_:_a_t_o_m_i_c___p_t_r_d_i_f_f___t; │ │ │ │ +96#ifdef _GLIBCXX_USE_C99_STDINT │ │ │ │ +97using _s_t_d_:_:_a_t_o_m_i_c___i_n_t_m_a_x___t; │ │ │ │ +98using _s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_m_a_x___t; │ │ │ │ +99#endif │ │ │ │ +100using std::atomic_is_lock_free; │ │ │ │ +101using std::atomic_load; │ │ │ │ +102using std::atomic_load_explicit; │ │ │ │ +103using std::atomic_store; │ │ │ │ +104using std::atomic_store_explicit; │ │ │ │ +105using std::atomic_exchange; │ │ │ │ +106using std::atomic_exchange_explicit; │ │ │ │ +107using std::atomic_compare_exchange_strong; │ │ │ │ +108using std::atomic_compare_exchange_strong_explicit; │ │ │ │ +109using std::atomic_compare_exchange_weak; │ │ │ │ +110using std::atomic_compare_exchange_weak_explicit; │ │ │ │ +111using std::atomic_fetch_add; │ │ │ │ +112using std::atomic_fetch_add_explicit; │ │ │ │ +113using std::atomic_fetch_sub; │ │ │ │ +114using std::atomic_fetch_sub_explicit; │ │ │ │ +115using std::atomic_fetch_or; │ │ │ │ +116using std::atomic_fetch_or_explicit; │ │ │ │ +117using std::atomic_fetch_xor; │ │ │ │ +118using std::atomic_fetch_xor_explicit; │ │ │ │ +119using std::atomic_fetch_and; │ │ │ │ +120using std::atomic_fetch_and_explicit; │ │ │ │ +121using std::atomic_flag_test_and_set; │ │ │ │ +122using std::atomic_flag_test_and_set_explicit; │ │ │ │ +123using std::atomic_flag_clear; │ │ │ │ +124using std::atomic_flag_clear_explicit; │ │ │ │ +125using std::atomic_thread_fence; │ │ │ │ +126using std::atomic_signal_fence; │ │ │ │ +127 │ │ │ │ +128#elif defined __clang__ │ │ │ │ +129# include_next │ │ │ │ +130#endif // __cpp_lib_stdatomic_h │ │ │ │ +131#endif // _GLIBCXX_STDATOMIC_H │ │ │ │ +_a_t_o_m_i_c │ │ │ │ +_v_e_r_s_i_o_n_._h │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_l_o_n_g │ │ │ │ +atomic< unsigned long > atomic_ulong │ │ │ │ +atomic_ulong │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_8_8 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t_m_a_x___t │ │ │ │ +atomic< intmax_t > atomic_intmax_t │ │ │ │ +atomic_intmax_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_2_0_2 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_p_t_r___t │ │ │ │ +atomic< uintptr_t > atomic_uintptr_t │ │ │ │ +atomic_uintptr_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_9_3 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___s_c_h_a_r │ │ │ │ +atomic< signed char > atomic_schar │ │ │ │ +atomic_schar │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_6_7 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_8___t │ │ │ │ +atomic< int_least8_t > atomic_int_least8_t │ │ │ │ +atomic_int_least8_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_4_0 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_l_l_o_n_g │ │ │ │ +atomic< unsigned long long > atomic_ullong │ │ │ │ +atomic_ullong │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_9_4 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_8___t │ │ │ │ +atomic< uint_fast8_t > atomic_uint_fast8_t │ │ │ │ +atomic_uint_fast8_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_6_8 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t_p_t_r___t │ │ │ │ +atomic< intptr_t > atomic_intptr_t │ │ │ │ +atomic_intptr_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_9_0 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t_1_6___t │ │ │ │ +atomic< int16_t > atomic_int16_t │ │ │ │ +atomic_int16_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_2_1 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___s_i_z_e___t │ │ │ │ +atomic< size_t > atomic_size_t │ │ │ │ +atomic_size_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_9_6 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___l_o_n_g │ │ │ │ +atomic< long > atomic_long │ │ │ │ +atomic_long │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_8_5 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_8___t │ │ │ │ +atomic< uint_least8_t > atomic_uint_least8_t │ │ │ │ +atomic_uint_least8_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_4_3 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___s_h_o_r_t │ │ │ │ +atomic< short > atomic_short │ │ │ │ +atomic_short │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_7_3 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_1_6___t │ │ │ │ +atomic< uint_least16_t > atomic_uint_least16_t │ │ │ │ +atomic_uint_least16_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_4_9 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_1_6___t │ │ │ │ +atomic< uint16_t > atomic_uint16_t │ │ │ │ +atomic_uint16_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_2_4 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_6_4___t │ │ │ │ +atomic< uint64_t > atomic_uint64_t │ │ │ │ +atomic_uint64_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_3_6 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_3_2___t │ │ │ │ +atomic< int_least32_t > atomic_int_least32_t │ │ │ │ +atomic_int_least32_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_5_2 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_8___t │ │ │ │ +atomic< uint8_t > atomic_uint8_t │ │ │ │ +atomic_uint8_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_1_8 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___w_c_h_a_r___t │ │ │ │ +atomic< wchar_t > atomic_wchar_t │ │ │ │ +atomic_wchar_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_9_7 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t │ │ │ │ +atomic< unsigned int > atomic_uint │ │ │ │ +atomic_uint │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_8_2 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_3_2___t │ │ │ │ +atomic< uint_least32_t > atomic_uint_least32_t │ │ │ │ +atomic_uint_least32_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_5_5 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_6_4___t │ │ │ │ +atomic< uint_fast64_t > atomic_uint_fast64_t │ │ │ │ +atomic_uint_fast64_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_8_6 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_3_2___t │ │ │ │ +atomic< int_fast32_t > atomic_int_fast32_t │ │ │ │ +atomic_int_fast32_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_7_7 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___c_h_a_r │ │ │ │ +atomic< char > atomic_char │ │ │ │ +atomic_char │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_6_4 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t │ │ │ │ +atomic< int > atomic_int │ │ │ │ +atomic_int │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_7_9 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___l_e_a_s_t_6_4___t │ │ │ │ +atomic< uint_least64_t > atomic_uint_least64_t │ │ │ │ +atomic_uint_least64_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_6_1 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t_6_4___t │ │ │ │ +atomic< int64_t > atomic_int64_t │ │ │ │ +atomic_int64_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_3_3 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_m_a_x___t │ │ │ │ +atomic< uintmax_t > atomic_uintmax_t │ │ │ │ +atomic_uintmax_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_2_0_5 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_1_6___t │ │ │ │ +atomic< int_fast16_t > atomic_int_fast16_t │ │ │ │ +atomic_int_fast16_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_7_1 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t_3_2___t │ │ │ │ +atomic< int32_t > atomic_int32_t │ │ │ │ +atomic_int32_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_2_7 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_1_6___t │ │ │ │ +atomic< uint_fast16_t > atomic_uint_fast16_t │ │ │ │ +atomic_uint_fast16_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_7_4 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t_8___t │ │ │ │ +atomic< int8_t > atomic_int8_t │ │ │ │ +atomic_int8_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_1_5 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___l_l_o_n_g │ │ │ │ +atomic< long long > atomic_llong │ │ │ │ +atomic_llong │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_9_1 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___c_h_a_r_1_6___t │ │ │ │ +atomic< char16_t > atomic_char16_t │ │ │ │ +atomic_char16_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_0_5 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_6_4___t │ │ │ │ +atomic< int_fast64_t > atomic_int_fast64_t │ │ │ │ +atomic_int_fast64_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_8_3 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___p_t_r_d_i_f_f___t │ │ │ │ +atomic< ptrdiff_t > atomic_ptrdiff_t │ │ │ │ +atomic_ptrdiff_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_9_9 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___c_h_a_r_3_2___t │ │ │ │ +atomic< char32_t > atomic_char32_t │ │ │ │ +atomic_char32_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_0_8 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_1_6___t │ │ │ │ +atomic< int_least16_t > atomic_int_least16_t │ │ │ │ +atomic_int_least16_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_4_6 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_c_h_a_r │ │ │ │ +atomic< unsigned char > atomic_uchar │ │ │ │ +atomic_uchar │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_7_0 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t___f_a_s_t_8___t │ │ │ │ +atomic< int_fast8_t > atomic_int_fast8_t │ │ │ │ +atomic_int_fast8_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_6_5 │ │ │ │ +_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___u_s_h_o_r_t │ │ │ │ +atomic< unsigned short > atomic_ushort │ │ │ │ +atomic_ushort │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_7_6 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___i_n_t___l_e_a_s_t_6_4___t │ │ │ │ +atomic< int_least64_t > atomic_int_least64_t │ │ │ │ +atomic_int_least64_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_5_8 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___b_o_o_l │ │ │ │ +atomic< bool > atomic_bool │ │ │ │ +atomic_bool │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_0_6_1 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t___f_a_s_t_3_2___t │ │ │ │ +atomic< uint_fast32_t > atomic_uint_fast32_t │ │ │ │ +atomic_uint_fast32_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_8_0 │ │ │ │ +_s_t_d_:_:_a_t_o_m_i_c___u_i_n_t_3_2___t │ │ │ │ +atomic< uint32_t > atomic_uint32_t │ │ │ │ +atomic_uint32_t │ │ │ │ +DDeeffiinniittiioonn _a_t_o_m_i_c_:_1_1_3_0 │ │ │ │ +_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_t_o_m_i_c_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00029_source.html │ │ │ @@ -86,15 +86,15 @@ │ │ │
29
│ │ │
30#ifndef _COMPARE
│ │ │
31#define _COMPARE
│ │ │
32
│ │ │
33#pragma GCC system_header
│ │ │
34
│ │ │
35#define __glibcxx_want_three_way_comparison
│ │ │ -
36#include <bits/version.h>
│ │ │ +
36#include <bits/version.h>
│ │ │
37
│ │ │
38#if __cplusplus > 201703L && __cpp_impl_three_way_comparison >= 201907L
│ │ │
39
│ │ │
40#include <concepts>
│ │ │
41
│ │ │
42namespace std _GLIBCXX_VISIBILITY(default)
│ │ │
43{
│ │ │ @@ -1312,15 +1312,15 @@ │ │ │
1253#endif // __cpp_lib_three_way_comparison >= 201907L
│ │ │
1254} // namespace std
│ │ │
1255
│ │ │
1256#endif // C++20
│ │ │
1257
│ │ │
1258#endif // _COMPARE
│ │ │ │ │ │ - │ │ │ + │ │ │
typename common_reference< _Tp... >::type common_reference_t
Definition type_traits:3927
│ │ │
typename remove_reference< _Tp >::type remove_reference_t
Alias template for remove_reference.
Definition type_traits:1731
│ │ │
auto declval() noexcept -> decltype(__declval< _Tp >(0))
Definition type_traits:2483
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │
typename __detail::__cmp3way_res_impl< _Tp, _Up >::type compare_three_way_result_t
[cmp.result], result of three-way comparison
Definition compare:518
│ │ │
std::basic_ostream< _CharT, _Traits > & operator<<(std::basic_ostream< _CharT, _Traits > &__os, const bitset< _Nb > &__x)
Global I/O operators for bitsets.
Definition bitset:1687
│ │ │
Implementation details not part of the namespace std interface.
│ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00032_source.html │ │ │ @@ -99,18 +99,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
│ │ │ @@ -770,22 +770,22 @@ │ │ │
711#endif // __cplusplus
│ │ │
712
│ │ │
713#pragma GCC visibility pop
│ │ │
714
│ │ │
715#endif // __CXXABI_H
│ │ │
char * __cxa_demangle(const char *__mangled_name, char *__output_buffer, size_t *__length, int *__status)
Demangling routine. ABI-mandated entry point in the C++ runtime library for demangling.
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │
GNU extensions for public use.
│ │ │
The cross-vendor C++ Application Binary Interface. A namespace alias to __cxxabiv1,...
│ │ │ -
constexpr _Iterator __base(_Iterator __it)
│ │ │ -
Base class for all library exceptions.
Definition exception.h:60
│ │ │ +
constexpr _Iterator __base(_Iterator __it)
│ │ │ +
Base class for all library exceptions.
Definition exception.h:60
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00041_source.html │ │ │ @@ -90,21 +90,21 @@ │ │ │
33 */
│ │ │
34
│ │ │
35#ifndef _NEW
│ │ │
36#define _NEW
│ │ │
37
│ │ │
38#pragma GCC system_header
│ │ │
39
│ │ │ -
40#include <bits/c++config.h>
│ │ │ -
41#include <bits/exception.h>
│ │ │ +
40#include <bits/c++config.h>
│ │ │ +
41#include <bits/exception.h>
│ │ │
42
│ │ │
43#define __glibcxx_want_launder
│ │ │
44#define __glibcxx_want_hardware_interference_size
│ │ │
45#define __glibcxx_want_destroying_delete
│ │ │ -
46#include <bits/version.h>
│ │ │ +
46#include <bits/version.h>
│ │ │
47
│ │ │
48#pragma GCC visibility push(default)
│ │ │
49
│ │ │
50extern "C++" {
│ │ │
51
│ │ │
52namespace std
│ │ │
53{
│ │ │ @@ -293,17 +293,17 @@ │ │ │ │ │ │
233}
│ │ │
234#endif // C++20
│ │ │
235
│ │ │
236#pragma GCC visibility pop
│ │ │
237
│ │ │
238#endif
│ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │
ISO C++ entities toplevel namespace is std.
│ │ │
new_handler set_new_handler(new_handler)
Takes a replacement handler as the argument, returns the previous handler.
│ │ │
new_handler get_new_handler() noexcept
Return the current new handler.
│ │ │
constexpr destroying_delete_t destroying_delete
Tag variable of type destroying_delete_t.
Definition new:232
│ │ │
void(* new_handler)()
Definition new:108
│ │ │
Exception possibly thrown by new.
Definition new:61
│ │ │
virtual const char * what() const
│ │ │ ├── html2text {} │ │ │ │ @@ -249,16 +249,16 @@ │ │ │ │ _2_3_2 inline constexpr _d_e_s_t_r_o_y_i_n_g___d_e_l_e_t_e___t _d_e_s_t_r_o_y_i_n_g___d_e_l_e_t_e{}; │ │ │ │ 233} │ │ │ │ 234#endif // C++20 │ │ │ │ 235 │ │ │ │ 236#pragma GCC visibility pop │ │ │ │ 237 │ │ │ │ 238#endif │ │ │ │ -_e_x_c_e_p_t_i_o_n_._h │ │ │ │ _v_e_r_s_i_o_n_._h │ │ │ │ +_e_x_c_e_p_t_i_o_n_._h │ │ │ │ _c_+_+_c_o_n_f_i_g_._h │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ _s_t_d_:_:_s_e_t___n_e_w___h_a_n_d_l_e_r │ │ │ │ new_handler set_new_handler(new_handler) │ │ │ │ Takes a replacement handler as the argument, returns the previous handler. │ │ │ │ _s_t_d_:_:_g_e_t___n_e_w___h_a_n_d_l_e_r │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00044_source.html │ │ │ @@ -84,21 +84,21 @@ │ │ │
27 */
│ │ │
28
│ │ │
29#ifndef _TYPEINFO
│ │ │
30#define _TYPEINFO
│ │ │
31
│ │ │
32#pragma GCC system_header
│ │ │
33
│ │ │ -
34#include <bits/exception.h>
│ │ │ +
34#include <bits/exception.h>
│ │ │
35#if __cplusplus >= 201103L
│ │ │ -
36#include <bits/hash_bytes.h>
│ │ │ +
36#include <bits/hash_bytes.h>
│ │ │
37#endif
│ │ │
38
│ │ │
39#define __glibcxx_want_constexpr_typeinfo
│ │ │ -
40#include <bits/version.h>
│ │ │ +
40#include <bits/version.h>
│ │ │
41
│ │ │
42#pragma GCC visibility push(default)
│ │ │
43
│ │ │
44extern "C++" {
│ │ │
45
│ │ │
46namespace __cxxabiv1
│ │ │
47{
│ │ │ @@ -313,17 +313,17 @@ │ │ │
248} // namespace std
│ │ │
249
│ │ │
250} // extern "C++"
│ │ │
251
│ │ │
252#pragma GCC visibility pop
│ │ │
253
│ │ │
254#endif
│ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │
ISO C++ entities toplevel namespace is std.
│ │ │
Part of RTTI.
Definition typeinfo:92
│ │ │
const char * name() const noexcept
Definition typeinfo:102
│ │ │
virtual ~type_info()
│ │ │
bool before(const type_info &__arg) const noexcept
│ │ │
virtual const char * what() const noexcept
│ │ │
virtual const char * what() const noexcept
│ │ │ ├── html2text {} │ │ │ │ @@ -251,17 +251,17 @@ │ │ │ │ 248} // namespace std │ │ │ │ 249 │ │ │ │ 250} // extern "C++" │ │ │ │ 251 │ │ │ │ 252#pragma GCC visibility pop │ │ │ │ 253 │ │ │ │ 254#endif │ │ │ │ -_h_a_s_h___b_y_t_e_s_._h │ │ │ │ -_e_x_c_e_p_t_i_o_n_._h │ │ │ │ _v_e_r_s_i_o_n_._h │ │ │ │ +_e_x_c_e_p_t_i_o_n_._h │ │ │ │ +_h_a_s_h___b_y_t_e_s_._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 │ │ │ │ _s_t_d_:_:_t_y_p_e___i_n_f_o_:_:_n_a_m_e │ │ │ │ const char * name() const noexcept │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00047_source.html │ │ │ @@ -110,32 +110,32 @@ │ │ │
53 */
│ │ │
54
│ │ │
55#ifndef _GLIBCXX_ALGORITHM
│ │ │
56#define _GLIBCXX_ALGORITHM 1
│ │ │
57
│ │ │
58#pragma GCC system_header
│ │ │
59
│ │ │ -
60#include <bits/stl_algobase.h>
│ │ │ -
61#include <bits/stl_algo.h>
│ │ │ +
60#include <bits/stl_algobase.h>
│ │ │ +
61#include <bits/stl_algo.h>
│ │ │
62#if __cplusplus > 201703L
│ │ │ -
63# include <bits/ranges_algo.h>
│ │ │ +
63# include <bits/ranges_algo.h>
│ │ │
64#endif
│ │ │
65
│ │ │
66#define __glibcxx_want_clamp
│ │ │
67#define __glibcxx_want_constexpr_algorithms
│ │ │
68#define __glibcxx_want_freestanding_algorithm
│ │ │
69#define __glibcxx_want_parallel_algorithm
│ │ │
70#define __glibcxx_want_ranges
│ │ │
71#define __glibcxx_want_ranges_contains
│ │ │
72#define __glibcxx_want_ranges_find_last
│ │ │
73#define __glibcxx_want_ranges_fold
│ │ │
74#define __glibcxx_want_robust_nonmodifying_seq_ops
│ │ │
75#define __glibcxx_want_sample
│ │ │
76#define __glibcxx_want_shift
│ │ │ -
77#include <bits/version.h>
│ │ │ +
77#include <bits/version.h>
│ │ │
78
│ │ │
79#if __cpp_lib_parallel_algorithm // C++ >= 17 && HOSTED
│ │ │
80// Parallel STL algorithms
│ │ │
81# if _PSTL_EXECUTION_POLICIES_DEFINED
│ │ │
82// If <execution> has already been included, pull in implementations
│ │ │
83# include <pstl/glue_algorithm_impl.h>
│ │ │
84# else
│ │ │ @@ -146,18 +146,18 @@ │ │ │
89#endif
│ │ │
90
│ │ │
91#ifdef _GLIBCXX_PARALLEL
│ │ │
92# include <parallel/algorithm>
│ │ │
93#endif
│ │ │
94
│ │ │
95#endif /* _GLIBCXX_ALGORITHM */
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -673,16 +673,16 @@ │ │ │ │ 668 │ │ │ │ 669#endif // __cpp_lib_any │ │ │ │ 670#endif // _GLIBCXX_ANY │ │ │ │ _i_n_i_t_i_a_l_i_z_e_r___l_i_s_t │ │ │ │ _n_e_w │ │ │ │ _t_y_p_e_i_n_f_o │ │ │ │ _t_y_p_e___t_r_a_i_t_s │ │ │ │ -_u_t_i_l_i_t_y_._h │ │ │ │ _v_e_r_s_i_o_n_._h │ │ │ │ +_u_t_i_l_i_t_y_._h │ │ │ │ _s_t_d_:_:_t_r_u_e___t_y_p_e │ │ │ │ __bool_constant< true > true_type │ │ │ │ The type used as a compile-time boolean with true value. │ │ │ │ DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_1_1 │ │ │ │ _s_t_d_:_:_e_n_a_b_l_e___i_f___t │ │ │ │ typename enable_if< _Cond, _Tp >::type enable_if_t │ │ │ │ Alias template for enable_if. │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00053_source.html │ │ │ @@ -85,32 +85,32 @@ │ │ │
28
│ │ │
29#ifndef _GLIBCXX_ARRAY
│ │ │
30#define _GLIBCXX_ARRAY 1
│ │ │
31
│ │ │
32#pragma GCC system_header
│ │ │
33
│ │ │
34#if __cplusplus < 201103L
│ │ │ -
35# include <bits/c++0x_warning.h>
│ │ │ +
35# include <bits/c++0x_warning.h>
│ │ │
36#else
│ │ │
37
│ │ │
38#include <compare>
│ │ │
39#include <initializer_list>
│ │ │
40
│ │ │
41#include <type_traits>
│ │ │ -
42#include <bits/functexcept.h>
│ │ │ -
43#include <bits/stl_algobase.h>
│ │ │ -
44#include <bits/range_access.h> // std::begin, std::end etc.
│ │ │ -
45#include <bits/utility.h> // std::index_sequence, std::tuple_size
│ │ │ -
46#include <debug/assertions.h>
│ │ │ +
42#include <bits/functexcept.h>
│ │ │ +
43#include <bits/stl_algobase.h>
│ │ │ +
44#include <bits/range_access.h> // std::begin, std::end etc.
│ │ │ +
45#include <bits/utility.h> // std::index_sequence, std::tuple_size
│ │ │ +
46#include <debug/assertions.h>
│ │ │
47
│ │ │
48#define __glibcxx_want_array_constexpr
│ │ │
49#define __glibcxx_want_freestanding_array
│ │ │
50#define __glibcxx_want_nonmember_container_access
│ │ │
51#define __glibcxx_want_to_array
│ │ │ -
52#include <bits/version.h>
│ │ │ +
52#include <bits/version.h>
│ │ │
53
│ │ │
54namespace std _GLIBCXX_VISIBILITY(default)
│ │ │
55{
│ │ │
56_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │
57
│ │ │
58 template<typename _Tp, size_t _Nm>
│ │ │
59 struct __array_traits
│ │ │ @@ -579,33 +579,33 @@ │ │ │
516
│ │ │
517#endif // C++11
│ │ │
518
│ │ │
519#endif // _GLIBCXX_ARRAY
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │
__bool_constant< true > true_type
The type used as a compile-time boolean with true value.
Definition type_traits:111
│ │ │
typename enable_if< _Cond, _Tp >::type enable_if_t
Alias template for enable_if.
Definition type_traits:2709
│ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │
constexpr array< remove_cv_t< _Tp >, _Nm > to_array(_Tp(&__a)[_Nm]) noexcept(is_nothrow_constructible< remove_cv_t< _Tp >, _Tp & >::value)
Create a std::array from an array.
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
make_integer_sequence< size_t, _Num > make_index_sequence
Alias template make_index_sequence.
Definition utility.h:184
│ │ │ -
integer_sequence< size_t, _Idx... > index_sequence
Alias template index_sequence.
Definition utility.h:180
│ │ │ +
make_integer_sequence< size_t, _Num > make_index_sequence
Alias template make_index_sequence.
Definition utility.h:184
│ │ │ +
integer_sequence< size_t, _Idx... > index_sequence
Alias template index_sequence.
Definition utility.h:180
│ │ │
A standard container for storing a fixed size sequence of elements.
Definition array:101
│ │ │
integral_constant
Definition type_traits:88
│ │ │ │ │ │ -
Finds the size of a given tuple type.
Definition utility.h:49
│ │ │ -
Gives the type of the ith element of a given tuple type.
Definition utility.h:80
│ │ │ +
Finds the size of a given tuple type.
Definition utility.h:49
│ │ │ +
Gives the type of the ith element of a given tuple type.
Definition utility.h:80
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -55,15 +55,15 @@ │ │ │ │ 52#include <_b_i_t_s_/_f_s___p_a_t_h_._h> │ │ │ │ 53#include <_b_i_t_s_/_f_s___d_i_r_._h> │ │ │ │ 54#include <_b_i_t_s_/_f_s___o_p_s_._h> │ │ │ │ 55 │ │ │ │ 56#endif // __cpp_lib_filesystem │ │ │ │ 57 │ │ │ │ 58#endif // _GLIBCXX_FILESYSTEM │ │ │ │ -_r_e_q_u_i_r_e_s___h_o_s_t_e_d_._h │ │ │ │ _v_e_r_s_i_o_n_._h │ │ │ │ +_r_e_q_u_i_r_e_s___h_o_s_t_e_d_._h │ │ │ │ _f_s___d_i_r_._h │ │ │ │ _f_s___f_w_d_._h │ │ │ │ _f_s___o_p_s_._h │ │ │ │ _f_s___p_a_t_h_._h │ │ │ │ * _f_i_l_e_s_y_s_t_e_m │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00095_source.html │ │ │ @@ -84,37 +84,37 @@ │ │ │
27 */
│ │ │
28
│ │ │
29#ifndef _GLIBCXX_FORWARD_LIST
│ │ │
30#define _GLIBCXX_FORWARD_LIST 1
│ │ │
31
│ │ │
32#pragma GCC system_header
│ │ │
33
│ │ │ -
34#include <bits/requires_hosted.h> // containers
│ │ │ +
34#include <bits/requires_hosted.h> // containers
│ │ │
35
│ │ │
36#if __cplusplus < 201103L
│ │ │ -
37# include <bits/c++0x_warning.h>
│ │ │ +
37# include <bits/c++0x_warning.h>
│ │ │
38#else
│ │ │
39
│ │ │ -
40#include <bits/forward_list.h>
│ │ │ -
41#include <bits/range_access.h>
│ │ │ -
42#include <bits/forward_list.tcc>
│ │ │ +
40#include <bits/forward_list.h>
│ │ │ +
41#include <bits/range_access.h>
│ │ │ +
42#include <bits/forward_list.tcc>
│ │ │
43
│ │ │
44#ifdef _GLIBCXX_DEBUG
│ │ │
45# include <debug/forward_list>
│ │ │
46#endif
│ │ │
47
│ │ │
48#define __glibcxx_want_allocator_traits_is_always_equal
│ │ │
49#define __glibcxx_want_erase_if
│ │ │
50#define __glibcxx_want_incomplete_container_elements
│ │ │
51#define __glibcxx_want_list_remove_return_type
│ │ │
52#define __glibcxx_want_nonmember_container_access
│ │ │ -
53#include <bits/version.h>
│ │ │ +
53#include <bits/version.h>
│ │ │
54
│ │ │
55#if __cplusplus >= 201703L
│ │ │ - │ │ │ + │ │ │
57namespace std _GLIBCXX_VISIBILITY(default)
│ │ │
58{
│ │ │
59_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │
60 namespace pmr
│ │ │
61 {
│ │ │
62 template<typename _Tp>
│ │ │
63 using forward_list = std::forward_list<_Tp, polymorphic_allocator<_Tp>>;
│ │ │ @@ -145,23 +145,23 @@ │ │ │
88_GLIBCXX_END_NAMESPACE_VERSION
│ │ │
89} // namespace std
│ │ │
90#endif // __cpp_lib_erase_if
│ │ │
91
│ │ │
92#endif // C++11
│ │ │
93
│ │ │
94#endif // _GLIBCXX_FORWARD_LIST
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
A standard container with linear time access to elements, and fixed time insertion/deletion at any po...
│ │ │ +
A standard container with linear time access to elements, and fixed time insertion/deletion at any po...
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
1355#endif
│ │ │
1356
│ │ │
1357_GLIBCXX_END_NAMESPACE_VERSION
│ │ │
1358} // namespace
│ │ │
1359
│ │ │ -
1360#include <bits/fstream.tcc>
│ │ │ +
1360#include <bits/fstream.tcc>
│ │ │
1361
│ │ │
1362#endif /* _GLIBCXX_FSTREAM */
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │
typename enable_if< _Cond, _Tp >::type enable_if_t
Alias template for enable_if.
Definition type_traits:2709
│ │ │
auto declval() noexcept -> decltype(__declval< _Tp >(0))
Definition type_traits:2483
│ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │ -
basic_string< char > string
A string of char.
Definition stringfwd.h:77
│ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │ +
basic_string< char > string
A string of char.
Definition stringfwd.h:77
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
Definition postypes.h:68
│ │ │ +
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)
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
virtual ~basic_filebuf()
The destructor closes the file first.
Definition fstream:256
│ │ │ @@ -1539,28 +1539,28 @@ │ │ │ │ │ │
_If_fs_path< _Path, __filebuf_type * > open(const _Path &__s, ios_base::openmode __mode)
Opens an external file.
Definition fstream:353
│ │ │
__filebuf_type * open(const std::string &__s, ios_base::openmode __mode)
Opens an external file.
Definition fstream:341
│ │ │
virtual void imbue(const locale &__loc)
│ │ │
virtual streamsize xsgetn(char_type *__s, streamsize __n)
│ │ │
bool is_open() const
Returns true if the external file is open.
Definition fstream:275
│ │ │ │ │ │ -
__filebuf_type * close()
Closes the currently associated file.
Definition fstream.tcc:249
│ │ │ +
__filebuf_type * close()
Closes the currently associated file.
Definition fstream.tcc:249
│ │ │ │ │ │ │ │ │
void _M_destroy_pback()
Definition fstream:226
│ │ │
virtual pos_type seekpos(pos_type __pos, ios_base::openmode __mode=ios_base::in|ios_base::out)
│ │ │ │ │ │
virtual int_type pbackfail(int_type __c=traits_type::eof())
│ │ │
virtual streamsize xsputn(const char_type *__s, streamsize __n)
│ │ │ │ │ │
virtual int_type overflow(int_type __c=traits_type::eof())
│ │ │
void _M_create_pback()
Definition fstream:209
│ │ │ │ │ │ -
__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
│ │ │ +
__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
│ │ │
void _M_set_buffer(streamsize __off)
Definition fstream:499
│ │ │ │ │ │ │ │ │
virtual __streambuf_type * setbuf(char_type *__s, streamsize __n)
│ │ │
Controlling input for files.
Definition fstream:533
│ │ │
basic_ifstream()
Default constructor.
Definition fstream:558
│ │ │
~basic_ifstream()
The destructor does nothing.
Definition fstream:639
│ │ │ @@ -1593,40 +1593,40 @@ │ │ │
basic_fstream(const std::string &__s, ios_base::openmode __mode=ios_base::in|ios_base::out)
Create an input/output file stream.
Definition fstream:1141
│ │ │
void open(const std::string &__s, ios_base::openmode __mode=ios_base::in|ios_base::out)
Opens an external file.
Definition fstream:1276
│ │ │
__filebuf_type * rdbuf() const
Accessing the underlying buffer.
Definition fstream:1209
│ │ │
bool is_open()
Wrapper to test for an open file.
Definition fstream:1217
│ │ │
void close()
Close the file.
Definition fstream:1311
│ │ │
basic_fstream(const char *__s, ios_base::openmode __mode=ios_base::in|ios_base::out)
Create an input/output file stream.
Definition fstream:1111
│ │ │
basic_fstream()
Default constructor.
Definition fstream:1101
│ │ │ -
Template class basic_ios, virtual base class for all stream classes.
Definition basic_ios.h:68
│ │ │ -
void clear(iostate __state=goodbit)
[Re]sets the error state.
Definition basic_ios.tcc:41
│ │ │ -
void setstate(iostate __state)
Sets additional flags in the error state.
Definition basic_ios.h:161
│ │ │ -
void init(basic_streambuf< _CharT, _Traits > *__sb)
All setup is performed here.
│ │ │ +
Template class basic_ios, virtual base class for all stream classes.
Definition basic_ios.h:68
│ │ │ +
void clear(iostate __state=goodbit)
[Re]sets the error state.
Definition basic_ios.tcc:41
│ │ │ +
void setstate(iostate __state)
Sets additional flags in the error state.
Definition basic_ios.h:161
│ │ │ +
void init(basic_streambuf< _CharT, _Traits > *__sb)
All setup is performed here.
│ │ │
void setg(char_type *__gbeg, char_type *__gnext, char_type *__gend)
Setting the three read area pointers.
Definition streambuf:516
│ │ │
char_type * eback() const
Access to the get area.
Definition streambuf:489
│ │ │
char_type * egptr() const
Access to the get area.
Definition streambuf:495
│ │ │
char_type * gptr() const
Access to the get area.
Definition streambuf:492
│ │ │
void setp(char_type *__pbeg, char_type *__pend)
Setting the three write area pointers.
Definition streambuf:562
│ │ │
basic_streambuf()
Base constructor.
Definition streambuf:470
│ │ │
basic_istream(__streambuf_type *__sb)
Base constructor.
Definition istream:95
│ │ │
basic_ostream(__streambuf_type *__sb)
Base constructor.
Definition ostream:92
│ │ │
basic_iostream(basic_streambuf< _CharT, _Traits > *__sb)
Constructor does nothing.
Definition istream:1008
│ │ │ │ │ │
is_default_constructible
Definition type_traits:1125
│ │ │
is_copy_constructible
Definition type_traits:1147
│ │ │ -
constexpr const _CharT * c_str() const noexcept
Return const pointer to null-terminated contents.
│ │ │ -
Primary class template codecvt.
Definition codecvt.h:279
│ │ │ -
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
│ │ │ -
_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 trunc
Truncate an existing stream when opening. Default for ofstream.
Definition ios_base.h:493
│ │ │ -
static const iostate failbit
Indicates that an input operation failed to read the expected characters, or that an output operation...
Definition ios_base.h:454
│ │ │ -
Container class for localization functionality.
│ │ │ -
Class representing stream positions.
Definition postypes.h:83
│ │ │ +
constexpr const _CharT * c_str() const noexcept
Return const pointer to null-terminated contents.
│ │ │ +
Primary class template codecvt.
Definition codecvt.h:279
│ │ │ +
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
│ │ │ +
_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 trunc
Truncate an existing stream when opening. Default for ofstream.
Definition ios_base.h:493
│ │ │ +
static const iostate failbit
Indicates that an input operation failed to read the expected characters, or that an output operation...
Definition ios_base.h:454
│ │ │ +
Container class for localization functionality.
│ │ │ +
Class representing stream positions.
Definition postypes.h:83
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
1104#endif // C++11
│ │ │
1105
│ │ │
1106_GLIBCXX_END_NAMESPACE_VERSION
│ │ │
1107} // namespace
│ │ │
1108
│ │ │ -
1109#include <bits/istream.tcc>
│ │ │ +
1109#include <bits/istream.tcc>
│ │ │
1110
│ │ │
1111#endif /* _GLIBCXX_ISTREAM */
│ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │
basic_istream< char > istream
Base class for char input streams.
Definition iosfwd:140
│ │ │
auto declval() noexcept -> decltype(__declval< _Tp >(0))
Definition type_traits:2483
│ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │ -
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:71
│ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │ +
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:71
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
Definition postypes.h:68
│ │ │ +
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
Definition postypes.h:68
│ │ │
std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, bitset< _Nb > &__x)
Global I/O operators for bitsets.
Definition bitset:1597
│ │ │ -
basic_istream< _CharT, _Traits > & ws(basic_istream< _CharT, _Traits > &__is)
Quick and easy way to eat whitespace.
Definition istream.tcc:1073
│ │ │ -
void setstate(iostate __state)
Sets additional flags in the error state.
Definition basic_ios.h:161
│ │ │ -
void init(basic_streambuf< _CharT, _Traits > *__sb)
All setup is performed here.
│ │ │ -
char_type widen(char __c) const
Widens characters.
Definition basic_ios.h:453
│ │ │ -
basic_ios(basic_streambuf< _CharT, _Traits > *__sb)
Constructor performs initialization.
Definition basic_ios.h:274
│ │ │ +
basic_istream< _CharT, _Traits > & ws(basic_istream< _CharT, _Traits > &__is)
Quick and easy way to eat whitespace.
Definition istream.tcc:1073
│ │ │ +
void setstate(iostate __state)
Sets additional flags in the error state.
Definition basic_ios.h:161
│ │ │ +
void init(basic_streambuf< _CharT, _Traits > *__sb)
All setup is performed here.
│ │ │ +
char_type widen(char __c) const
Widens characters.
Definition basic_ios.h:453
│ │ │ +
basic_ios(basic_streambuf< _CharT, _Traits > *__sb)
Constructor performs initialization.
Definition basic_ios.h:274
│ │ │
The actual work of input and output (interface).
Definition streambuf:125
│ │ │
Template class basic_istream.
Definition istream:61
│ │ │
__istream_type & operator>>(void *&__p)
Basic arithmetic extractors.
Definition istream:328
│ │ │ -
__istream_type & seekg(pos_type)
Changing the current read position.
Definition istream.tcc:900
│ │ │ +
__istream_type & seekg(pos_type)
Changing the current read position.
Definition istream.tcc:900
│ │ │
streamsize gcount() const
Character counting.
Definition istream:362
│ │ │ -
int_type get()
Simple extraction.
Definition istream.tcc:261
│ │ │ -
streamsize readsome(char_type *__s, streamsize __n)
Extraction until the buffer is exhausted, but no more.
Definition istream.tcc:734
│ │ │ -
__istream_type & get(__streambuf_type &__sb, char_type __delim)
Extraction into another streambuf.
Definition istream.tcc:381
│ │ │ -
int_type peek()
Looking ahead in the stream.
Definition istream.tcc:675
│ │ │ -
__istream_type & ignore(streamsize __n, int_type __delim)
Discarding characters.
Definition istream.tcc:598
│ │ │ -
__istream_type & operator>>(__streambuf_type *__sb)
Extracting into another streambuf.
Definition istream.tcc:229
│ │ │ -
__istream_type & unget()
Unextracting the previous character.
Definition istream.tcc:801
│ │ │ -
pos_type tellg()
Getting the current read position.
Definition istream.tcc:872
│ │ │ -
__istream_type & operator>>(int &__n)
Integer arithmetic extractors.
Definition istream.tcc:179
│ │ │ +
int_type get()
Simple extraction.
Definition istream.tcc:261
│ │ │ +
streamsize readsome(char_type *__s, streamsize __n)
Extraction until the buffer is exhausted, but no more.
Definition istream.tcc:734
│ │ │ +
__istream_type & get(__streambuf_type &__sb, char_type __delim)
Extraction into another streambuf.
Definition istream.tcc:381
│ │ │ +
int_type peek()
Looking ahead in the stream.
Definition istream.tcc:675
│ │ │ +
__istream_type & ignore(streamsize __n, int_type __delim)
Discarding characters.
Definition istream.tcc:598
│ │ │ +
__istream_type & operator>>(__streambuf_type *__sb)
Extracting into another streambuf.
Definition istream.tcc:229
│ │ │ +
__istream_type & unget()
Unextracting the previous character.
Definition istream.tcc:801
│ │ │ +
pos_type tellg()
Getting the current read position.
Definition istream.tcc:872
│ │ │ +
__istream_type & operator>>(int &__n)
Integer arithmetic extractors.
Definition istream.tcc:179
│ │ │
__istream_type & get(__streambuf_type &__sb)
Extraction into another streambuf.
Definition istream:480
│ │ │ │ │ │
__istream_type & operator>>(double &__f)
Floating point arithmetic extractors.
Definition istream:223
│ │ │ -
__istream_type & ignore()
Simple extraction.
Definition istream.tcc:495
│ │ │ +
__istream_type & ignore()
Simple extraction.
Definition istream.tcc:495
│ │ │
__istream_type & operator>>(bool &__n)
Integer arithmetic extractors.
Definition istream:170
│ │ │
__istream_type & operator>>(long &__n)
Integer arithmetic extractors.
Definition istream:188
│ │ │ -
__istream_type & get(char_type &__c)
Simple extraction.
Definition istream.tcc:297
│ │ │ +
__istream_type & get(char_type &__c)
Simple extraction.
Definition istream.tcc:297
│ │ │
virtual ~basic_istream()
Base destructor.
Definition istream:105
│ │ │
__istream_type & getline(char_type *__s, streamsize __n)
String extraction.
Definition istream:520
│ │ │
__istream_type & operator>>(unsigned long long &__n)
Integer arithmetic extractors.
Definition istream:203
│ │ │
__istream_type & operator>>(float &__f)
Floating point arithmetic extractors.
Definition istream:219
│ │ │
__istream_type & operator>>(__ios_type &(*__pf)(__ios_type &))
Interface for manipulators.
Definition istream:126
│ │ │
__istream_type & operator>>(long long &__n)
Integer arithmetic extractors.
Definition istream:199
│ │ │
__istream_type & operator>>(unsigned long &__n)
Integer arithmetic extractors.
Definition istream:192
│ │ │ -
__istream_type & read(char_type *__s, streamsize __n)
Extraction without delimiters.
Definition istream.tcc:705
│ │ │ +
__istream_type & read(char_type *__s, streamsize __n)
Extraction without delimiters.
Definition istream.tcc:705
│ │ │
__istream_type & operator>>(unsigned int &__n)
Integer arithmetic extractors.
Definition istream:184
│ │ │
__istream_type & operator>>(unsigned short &__n)
Integer arithmetic extractors.
Definition istream:177
│ │ │ -
__istream_type & putback(char_type __c)
Unextracting a single character.
Definition istream.tcc:766
│ │ │ +
__istream_type & putback(char_type __c)
Unextracting a single character.
Definition istream.tcc:766
│ │ │
basic_istream(__streambuf_type *__sb)
Base constructor.
Definition istream:95
│ │ │ -
__istream_type & seekg(off_type, ios_base::seekdir)
Changing the current read position.
Definition istream.tcc:939
│ │ │ -
__istream_type & getline(char_type *__s, streamsize __n, char_type __delim)
String extraction.
Definition istream.tcc:435
│ │ │ -
__istream_type & get(char_type *__s, streamsize __n, char_type __delim)
Simple multiple-character extraction.
Definition istream.tcc:334
│ │ │ +
__istream_type & seekg(off_type, ios_base::seekdir)
Changing the current read position.
Definition istream.tcc:939
│ │ │ +
__istream_type & getline(char_type *__s, streamsize __n, char_type __delim)
String extraction.
Definition istream.tcc:435
│ │ │ +
__istream_type & get(char_type *__s, streamsize __n, char_type __delim)
Simple multiple-character extraction.
Definition istream.tcc:334
│ │ │
__istream_type & get(char_type *__s, streamsize __n)
Simple multiple-character extraction.
Definition istream:447
│ │ │
__istream_type & operator>>(ios_base &(*__pf)(ios_base &))
Interface for manipulators.
Definition istream:133
│ │ │
__istream_type & operator>>(long double &__f)
Floating point arithmetic extractors.
Definition istream:227
│ │ │
__istream_type & operator>>(__istream_type &(*__pf)(__istream_type &))
Interface for manipulators.
Definition istream:122
│ │ │ -
int sync()
Synchronizing the stream buffer.
Definition istream.tcc:836
│ │ │ -
__istream_type & operator>>(short &__n)
Integer arithmetic extractors.
Definition istream.tcc:129
│ │ │ -
__istream_type & ignore(streamsize __n)
Simple extraction.
Definition istream.tcc:528
│ │ │ +
int sync()
Synchronizing the stream buffer.
Definition istream.tcc:836
│ │ │ +
__istream_type & operator>>(short &__n)
Integer arithmetic extractors.
Definition istream.tcc:129
│ │ │ +
__istream_type & ignore(streamsize __n)
Simple extraction.
Definition istream.tcc:528
│ │ │
basic_ostream(__streambuf_type *__sb)
Base constructor.
Definition ostream:92
│ │ │
basic_iostream(basic_streambuf< _CharT, _Traits > *__sb)
Constructor does nothing.
Definition istream:1008
│ │ │
virtual ~basic_iostream()
Destructor does nothing.
Definition istream:1015
│ │ │ -
sentry(basic_istream< _CharT, _Traits > &__is, bool __noskipws=false)
The constructor performs all the work.
Definition istream.tcc:47
│ │ │ +
sentry(basic_istream< _CharT, _Traits > &__is, bool __noskipws=false)
The constructor performs all the work.
Definition istream.tcc:47
│ │ │
_Traits traits_type
Easy access to dependent types.
Definition istream:786
│ │ │ │ │ │ -
The base of the I/O class hierarchy.
Definition ios_base.h:255
│ │ │ -
_Ios_Iostate iostate
This is a bitmask type.
Definition ios_base.h:442
│ │ │ -
static const iostate eofbit
Indicates that an input operation reached the end of an input sequence.
Definition ios_base.h:449
│ │ │ -
static const iostate goodbit
Indicates all is well.
Definition ios_base.h:457
│ │ │ -
_Ios_Seekdir seekdir
This is an enumerated type.
Definition ios_base.h:512
│ │ │ -
static const iostate failbit
Indicates that an input operation failed to read the expected characters, or that an output operation...
Definition ios_base.h:454
│ │ │ -
Primary class template ctype facet.
│ │ │ -
Primary class template num_get.
│ │ │ +
The base of the I/O class hierarchy.
Definition ios_base.h:255
│ │ │ +
_Ios_Iostate iostate
This is a bitmask type.
Definition ios_base.h:442
│ │ │ +
static const iostate eofbit
Indicates that an input operation reached the end of an input sequence.
Definition ios_base.h:449
│ │ │ +
static const iostate goodbit
Indicates all is well.
Definition ios_base.h:457
│ │ │ +
_Ios_Seekdir seekdir
This is an enumerated type.
Definition ios_base.h:512
│ │ │ +
static const iostate failbit
Indicates that an input operation failed to read the expected characters, or that an output operation...
Definition ios_base.h:454
│ │ │ +
Primary class template ctype facet.
│ │ │ +
Primary class template num_get.
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -157,17 +157,17 @@ │ │ │ │ 154} // namespace std │ │ │ │ 155#endif // __cpp_lib_print │ │ │ │ 156#endif // _GLIBCXX_PRINT │ │ │ │ _f_o_r_m_a_t │ │ │ │ _s_y_s_t_e_m___e_r_r_o_r │ │ │ │ _c_e_r_r_n_o │ │ │ │ _c_s_t_d_i_o │ │ │ │ -_r_e_q_u_i_r_e_s___h_o_s_t_e_d_._h │ │ │ │ _v_e_r_s_i_o_n_._h │ │ │ │ _f_u_n_c_t_e_x_c_e_p_t_._h │ │ │ │ +_r_e_q_u_i_r_e_s___h_o_s_t_e_d_._h │ │ │ │ _s_t_d_:_:___V_2_:_:_g_e_n_e_r_i_c___c_a_t_e_g_o_r_y │ │ │ │ const error_category & generic_category() noexcept │ │ │ │ Error category for errno error codes. │ │ │ │ _s_t_d_:_:_m_a_k_e___e_r_r_o_r___c_o_d_e │ │ │ │ error_code make_error_code(future_errc __errc) noexcept │ │ │ │ Overload of make_error_code for future_errc. │ │ │ │ DDeeffiinniittiioonn _f_u_t_u_r_e_:_9_4 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00170_source.html │ │ │ @@ -110,33 +110,33 @@ │ │ │
53 */
│ │ │
54
│ │ │
55#ifndef _GLIBCXX_QUEUE
│ │ │
56#define _GLIBCXX_QUEUE 1
│ │ │
57
│ │ │
58#pragma GCC system_header
│ │ │
59
│ │ │ -
60#include <bits/requires_hosted.h> // containers
│ │ │ +
60#include <bits/requires_hosted.h> // containers
│ │ │
61
│ │ │
62#include <deque>
│ │ │
63#include <vector>
│ │ │ -
64#include <bits/stl_heap.h>
│ │ │ -
65#include <bits/stl_function.h>
│ │ │ -
66#include <bits/stl_queue.h>
│ │ │ +
64#include <bits/stl_heap.h>
│ │ │ +
65#include <bits/stl_function.h>
│ │ │ +
66#include <bits/stl_queue.h>
│ │ │
67
│ │ │
68#define __glibcxx_want_adaptor_iterator_pair_constructor
│ │ │ -
69#include <bits/version.h>
│ │ │ +
69#include <bits/version.h>
│ │ │
70
│ │ │
71#endif /* _GLIBCXX_QUEUE */
│ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -104,37 +104,37 @@ │ │ │ │ 101#endif // _GLIBCXX_REGEX │ │ │ │ _b_i_t_s_e_t │ │ │ │ _l_o_c_a_l_e │ │ │ │ _s_s_t_r_e_a_m │ │ │ │ _s_t_a_c_k │ │ │ │ _s_t_d_e_x_c_e_p_t │ │ │ │ _s_t_r_i_n_g │ │ │ │ +_r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h │ │ │ │ +Constant definitions for the std regex library. │ │ │ │ +_v_e_r_s_i_o_n_._h │ │ │ │ _v_e_c_t_o_r_._t_c_c │ │ │ │ _s_t_l___v_e_c_t_o_r_._h │ │ │ │ -_s_t_l___t_r_e_e_._h │ │ │ │ -_s_t_l___m_a_p_._h │ │ │ │ -_s_t_l___b_v_e_c_t_o_r_._h │ │ │ │ -_s_t_d___f_u_n_c_t_i_o_n_._h │ │ │ │ -_r_e_q_u_i_r_e_s___h_o_s_t_e_d_._h │ │ │ │ -_r_e_g_e_x___e_x_e_c_u_t_o_r_._h │ │ │ │ _r_e_g_e_x___c_o_m_p_i_l_e_r_._h │ │ │ │ _r_e_g_e_x___a_u_t_o_m_a_t_o_n_._h │ │ │ │ +_s_t_l___b_v_e_c_t_o_r_._h │ │ │ │ +_s_t_l___p_a_i_r_._h │ │ │ │ +_c_+_+_0_x___w_a_r_n_i_n_g_._h │ │ │ │ +_r_e_g_e_x___e_x_e_c_u_t_o_r_._h │ │ │ │ +_s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h │ │ │ │ +_s_t_l___t_r_e_e_._h │ │ │ │ +_s_t_l___m_a_p_._h │ │ │ │ +_r_e_g_e_x_._h │ │ │ │ _r_e_g_e_x___s_c_a_n_n_e_r_._h │ │ │ │ +_r_e_q_u_i_r_e_s___h_o_s_t_e_d_._h │ │ │ │ +_s_t_l___a_l_g_o_._h │ │ │ │ _r_e_g_e_x___e_r_r_o_r_._h │ │ │ │ Error and exception objects for the std regex library. │ │ │ │ -_r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h │ │ │ │ -Constant definitions for the std regex library. │ │ │ │ -_r_e_g_e_x_._h │ │ │ │ -_m_e_m_o_r_y___r_e_s_o_u_r_c_e_._h │ │ │ │ -_v_e_r_s_i_o_n_._h │ │ │ │ -_s_t_l___p_a_i_r_._h │ │ │ │ -_s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h │ │ │ │ _s_t_l___a_l_g_o_b_a_s_e_._h │ │ │ │ -_s_t_l___a_l_g_o_._h │ │ │ │ -_c_+_+_0_x___w_a_r_n_i_n_g_._h │ │ │ │ +_m_e_m_o_r_y___r_e_s_o_u_r_c_e_._h │ │ │ │ +_s_t_d___f_u_n_c_t_i_o_n_._h │ │ │ │ _a_l_i_g_n_e_d___b_u_f_f_e_r_._h │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ _s_t_d_:_:_p_m_r_:_:_p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r │ │ │ │ Class template polymorphic_allocator. │ │ │ │ DDeeffiinniittiioonn _m_e_m_o_r_y___r_e_s_o_u_r_c_e_._h_:_1_2_1 │ │ │ │ _s_h_a_r_e_d___p_t_r_._h │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00185_source.html │ │ │ @@ -85,27 +85,27 @@ │ │ │
28
│ │ │
29#ifndef _SCOPED_ALLOCATOR
│ │ │
30#define _SCOPED_ALLOCATOR 1
│ │ │
31
│ │ │
32#pragma GCC system_header
│ │ │
33
│ │ │
34#if __cplusplus < 201103L
│ │ │ -
35# include <bits/c++0x_warning.h>
│ │ │ +
35# include <bits/c++0x_warning.h>
│ │ │
36#else
│ │ │
37
│ │ │
38#include <tuple>
│ │ │
39#include <bits/alloc_traits.h>
│ │ │ -
40#include <bits/stl_pair.h>
│ │ │ +
40#include <bits/stl_pair.h>
│ │ │
41#include <bits/uses_allocator.h>
│ │ │
42#if __cplusplus > 201703L
│ │ │ - │ │ │ + │ │ │
44#endif
│ │ │
45
│ │ │
46#define __glibcxx_want_allocator_traits_is_always_equal
│ │ │ -
47#include <bits/version.h>
│ │ │ +
47#include <bits/version.h>
│ │ │
48
│ │ │
49namespace std _GLIBCXX_VISIBILITY(default)
│ │ │
50{
│ │ │
51_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │
52
│ │ │
53 /**
│ │ │
54 * @addtogroup allocators
│ │ │ @@ -585,27 +585,27 @@ │ │ │
526_GLIBCXX_END_NAMESPACE_VERSION
│ │ │
527} // namespace
│ │ │
528
│ │ │
529#endif // C++11
│ │ │
530
│ │ │
531#endif // _SCOPED_ALLOCATOR
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │
constexpr auto tuple_cat(_Tpls &&... __tpls) -> typename __tuple_cat_result< _Tpls... >::__type
Create a tuple containing all elements from multiple tuple-like objects.
Definition tuple:2779
│ │ │
auto declval() noexcept -> decltype(__declval< _Tp >(0))
Definition type_traits:2483
│ │ │
constexpr tuple< _Elements &&... > forward_as_tuple(_Elements &&... __args) noexcept
Create a tuple of lvalue or rvalue references to the arguments.
Definition tuple:2654
│ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │ -
constexpr piecewise_construct_t piecewise_construct
Tag for piecewise construction of std::pair objects.
Definition stl_pair.h:82
│ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │ +
constexpr piecewise_construct_t piecewise_construct
Tag for piecewise construction of std::pair objects.
Definition stl_pair.h:82
│ │ │
constexpr tuple< _Elements &... > tie(_Elements &... __args) noexcept
Return a tuple of lvalue references bound to the arguments.
Definition tuple:2793
│ │ │ -
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:71
│ │ │ +
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:71
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
constexpr _Iterator __base(_Iterator __it)
│ │ │ +
constexpr _Iterator __base(_Iterator __it)
│ │ │
An adaptor to recursively pass an allocator to the objects it constructs.
│ │ │
Primary class template, tuple.
Definition tuple:837
│ │ │
Define a member typedef type only if a boolean constant is true.
Definition type_traits:129
│ │ │
is_constructible
Definition type_traits:1116
│ │ │ │ │ │
Uniform interface to all allocator types.
│ │ │
__detected_or_t< false_type, __pocma, _OuterAlloc > propagate_on_container_move_assignment
│ │ │ @@ -618,18 +618,18 @@ │ │ │
typename _Ptr< __c_pointer, const value_type >::type const_pointer
│ │ │ │ │ │
static constexpr void deallocate(_OuterAlloc &__a, pointer __p, size_type __n)
│ │ │
typename __detected_or_t< is_empty< _OuterAlloc >, __equal, _OuterAlloc >::type is_always_equal
│ │ │
static constexpr size_type max_size(const _OuterAlloc &__a) noexcept
│ │ │
__detected_or_t< false_type, __pocca, _OuterAlloc > propagate_on_container_copy_assignment
│ │ │
__detected_or_t< false_type, __pocs, _OuterAlloc > propagate_on_container_swap
│ │ │ -
Struct holding two objects of arbitrary type.
Definition stl_pair.h:286
│ │ │ -
_T1 first
The first member.
Definition stl_pair.h:290
│ │ │ -
_T2 second
The second member.
Definition stl_pair.h:291
│ │ │ -
Tag type for piecewise construction of std::pair objects.
Definition stl_pair.h:79
│ │ │ +
Struct holding two objects of arbitrary type.
Definition stl_pair.h:286
│ │ │ +
_T1 first
The first member.
Definition stl_pair.h:290
│ │ │ +
_T2 second
The second member.
Definition stl_pair.h:291
│ │ │ +
Tag type for piecewise construction of std::pair objects.
Definition stl_pair.h:79
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00203_source.html │ │ │ @@ -88,15 +88,15 @@ │ │ │
31//
│ │ │
32
│ │ │
33#ifndef _GLIBCXX_SSTREAM
│ │ │
34#define _GLIBCXX_SSTREAM 1
│ │ │
35
│ │ │
36#pragma GCC system_header
│ │ │
37
│ │ │ -
38#include <bits/requires_hosted.h> // iostream
│ │ │ +
38#include <bits/requires_hosted.h> // iostream
│ │ │
39
│ │ │
40#include <istream>
│ │ │
41#include <ostream>
│ │ │
42#include <bits/alloc_traits.h> // allocator_traits, __allocator_like
│ │ │
43
│ │ │
44#if __cplusplus > 201703L && _GLIBCXX_USE_CXX11_ABI
│ │ │
45# define _GLIBCXX_LVAL_REF_QUAL &
│ │ │ @@ -1360,29 +1360,29 @@ │ │ │
1231_GLIBCXX_END_NAMESPACE_CXX11
│ │ │
1232_GLIBCXX_END_NAMESPACE_VERSION
│ │ │
1233} // namespace
│ │ │
1234
│ │ │
1235#undef _GLIBCXX_SSTREAM_ALWAYS_INLINE
│ │ │
1236#undef _GLIBCXX_LVAL_REF_QUAL
│ │ │
1237
│ │ │ -
1238#include <bits/sstream.tcc>
│ │ │ +
1238#include <bits/sstream.tcc>
│ │ │
1239
│ │ │
1240#endif /* _GLIBCXX_SSTREAM */
│ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ -
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 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.
│ │ │ -
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
Definition postypes.h:68
│ │ │ -
constexpr auto size(const _Container &__cont) noexcept(noexcept(__cont.size())) -> decltype(__cont.size())
Return the size of a container.
│ │ │ -
constexpr auto data(_Container &__cont) noexcept(noexcept(__cont.data())) -> decltype(__cont.data())
Return the data pointer of a container.
│ │ │ -
constexpr _Iterator __base(_Iterator __it)
│ │ │ -
void init(basic_streambuf< _CharT, _Traits > *__sb)
All setup is performed here.
│ │ │ +
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
Definition postypes.h:68
│ │ │ +
constexpr auto size(const _Container &__cont) noexcept(noexcept(__cont.size())) -> decltype(__cont.size())
Return the size of a container.
│ │ │ +
constexpr auto data(_Container &__cont) noexcept(noexcept(__cont.data())) -> decltype(__cont.data())
Return the data pointer of a container.
│ │ │ +
constexpr _Iterator __base(_Iterator __it)
│ │ │ +
void init(basic_streambuf< _CharT, _Traits > *__sb)
All setup is performed here.
│ │ │
char_type * pptr() const
Access to the put area.
Definition streambuf:539
│ │ │ │ │ │
void setg(char_type *__gbeg, char_type *__gnext, char_type *__gend)
Setting the three read area pointers.
Definition streambuf:516
│ │ │
char_type * eback() const
Access to the get area.
Definition streambuf:489
│ │ │
char_type * egptr() const
Access to the get area.
Definition streambuf:495
│ │ │
char_type * gptr() const
Access to the get area.
Definition streambuf:492
│ │ │
locale pubimbue(const locale &__loc)
Entry point for imbue().
Definition streambuf:216
│ │ │ @@ -1390,20 +1390,20 @@ │ │ │
traits_type::off_type off_type
Definition streambuf:137
│ │ │
basic_streambuf()
Base constructor.
Definition streambuf:470
│ │ │
basic_istream(__streambuf_type *__sb)
Base constructor.
Definition istream:95
│ │ │
basic_ostream(__streambuf_type *__sb)
Base constructor.
Definition ostream:92
│ │ │
basic_iostream(basic_streambuf< _CharT, _Traits > *__sb)
Constructor does nothing.
Definition istream:1008
│ │ │
The actual work of input and output (for std::string).
Definition sstream:80
│ │ │
virtual streamsize showmanyc()
Investigating the data available.
Definition sstream:345
│ │ │ -
virtual int_type underflow()
Fetches more data from the controlled sequence.
Definition sstream.tcc:150
│ │ │ -
virtual pos_type seekpos(pos_type __sp, ios_base::openmode __mode=ios_base::in|ios_base::out)
Alters the stream positions.
Definition sstream.tcc:216
│ │ │ -
virtual pos_type seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __mode=ios_base::in|ios_base::out)
Alters the stream positions.
Definition sstream.tcc:168
│ │ │ -
virtual int_type overflow(int_type __c=traits_type::eof())
Consumes data from the buffer; writes to the controlled sequence.
Definition sstream.tcc:80
│ │ │ +
virtual int_type underflow()
Fetches more data from the controlled sequence.
Definition sstream.tcc:150
│ │ │ +
virtual pos_type seekpos(pos_type __sp, ios_base::openmode __mode=ios_base::in|ios_base::out)
Alters the stream positions.
Definition sstream.tcc:216
│ │ │ +
virtual pos_type seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __mode=ios_base::in|ios_base::out)
Alters the stream positions.
Definition sstream.tcc:168
│ │ │ +
virtual int_type overflow(int_type __c=traits_type::eof())
Consumes data from the buffer; writes to the controlled sequence.
Definition sstream.tcc:80
│ │ │
basic_stringbuf()
Starts with an empty string buffer.
Definition sstream:120
│ │ │ -
virtual int_type pbackfail(int_type __c=traits_type::eof())
Tries to back up the input sequence.
Definition sstream.tcc:46
│ │ │ +
virtual int_type pbackfail(int_type __c=traits_type::eof())
Tries to back up the input sequence.
Definition sstream.tcc:46
│ │ │
__string_type str() const &
Copying out the string buffer.
Definition sstream:248
│ │ │
virtual __streambuf_type * setbuf(char_type *__s, streamsize __n)
Manipulates the buffer.
Definition sstream:377
│ │ │
ios_base::openmode _M_mode
Definition sstream:106
│ │ │
Controlling input for std::string.
Definition sstream:548
│ │ │
void str(const __string_type &__s)
Setting a new buffer.
Definition sstream:736
│ │ │
__stringbuf_type * rdbuf() const
Accessing the underlying buffer.
Definition sstream:698
│ │ │
~basic_istringstream()
The destructor does nothing.
Definition sstream:626
│ │ │ @@ -1426,25 +1426,25 @@ │ │ │
void str(const __string_type &__s)
Setting a new buffer.
Definition sstream:1182
│ │ │
__string_type str() const &
Copying out the string buffer.
Definition sstream:1152
│ │ │
__stringbuf_type * rdbuf() const
Accessing the underlying buffer.
Definition sstream:1144
│ │ │
basic_stringstream(ios_base::openmode __m)
Starts with an empty string buffer.
Definition sstream:1043
│ │ │
Uniform interface to all allocator types.
│ │ │
typename __detected_or_t< is_empty< _Alloc >, __equal, _Alloc >::type is_always_equal
Whether all instances of the allocator type compare equal.
│ │ │
__detected_or_t< false_type, __pocs, _Alloc > propagate_on_container_swap
How the allocator is propagated on swap.
│ │ │ -
Managing sequences of characters and character-like objects.
│ │ │ -
constexpr size_type size() const noexcept
Returns the number of characters in the string, not including any null-termination.
│ │ │ -
constexpr const _CharT * data() const noexcept
Return const pointer to contents.
│ │ │ -
constexpr basic_string & assign(const basic_string &__str)
Set value to contents of another string.
│ │ │ -
The base of the I/O class hierarchy.
Definition ios_base.h:255
│ │ │ -
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
│ │ │ -
_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
│ │ │ -
_Ios_Seekdir seekdir
This is an enumerated type.
Definition ios_base.h:512
│ │ │ -
static const openmode ate
Open and seek to end immediately after opening.
Definition ios_base.h:479
│ │ │ +
Managing sequences of characters and character-like objects.
│ │ │ +
constexpr size_type size() const noexcept
Returns the number of characters in the string, not including any null-termination.
│ │ │ +
constexpr const _CharT * data() const noexcept
Return const pointer to contents.
│ │ │ +
constexpr basic_string & assign(const basic_string &__str)
Set value to contents of another string.
│ │ │ +
The base of the I/O class hierarchy.
Definition ios_base.h:255
│ │ │ +
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
│ │ │ +
_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
│ │ │ +
_Ios_Seekdir seekdir
This is an enumerated type.
Definition ios_base.h:512
│ │ │ +
static const openmode ate
Open and seek to end immediately after opening.
Definition ios_base.h:479
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -911,22 +911,22 @@ │ │ │ │ 906 │ │ │ │ 907#include <_b_i_t_s_/_s_t_r_i_n_g___v_i_e_w_._t_c_c> │ │ │ │ 908 │ │ │ │ 909#endif // __cplusplus <= 201402L │ │ │ │ 910 │ │ │ │ 911#endif // _GLIBCXX_EXPERIMENTAL_STRING_VIEW │ │ │ │ _i_o_s_f_w_d │ │ │ │ -_o_s_t_r_e_a_m___i_n_s_e_r_t_._h │ │ │ │ _v_e_r_s_i_o_n_._h │ │ │ │ -_s_t_l___a_l_g_o_b_a_s_e_._h │ │ │ │ -_r_a_n_g_e_s___b_a_s_e_._h │ │ │ │ -_r_a_n_g_e___a_c_c_e_s_s_._h │ │ │ │ +_o_s_t_r_e_a_m___i_n_s_e_r_t_._h │ │ │ │ +_c_h_a_r___t_r_a_i_t_s_._h │ │ │ │ _f_u_n_c_t_i_o_n_a_l___h_a_s_h_._h │ │ │ │ +_r_a_n_g_e_s___b_a_s_e_._h │ │ │ │ _f_u_n_c_t_e_x_c_e_p_t_._h │ │ │ │ -_c_h_a_r___t_r_a_i_t_s_._h │ │ │ │ +_s_t_l___a_l_g_o_b_a_s_e_._h │ │ │ │ +_r_a_n_g_e___a_c_c_e_s_s_._h │ │ │ │ _s_t_d_:_:_t_o___a_d_d_r_e_s_s │ │ │ │ constexpr _Tp * to_address(_Tp *__ptr) noexcept │ │ │ │ Obtain address referenced by a pointer to an object. │ │ │ │ DDeeffiinniittiioonn _p_t_r___t_r_a_i_t_s_._h_:_2_4_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. │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00224_source.html │ │ │ @@ -84,29 +84,29 @@ │ │ │
27 */
│ │ │
28
│ │ │
29#ifndef _GLIBCXX_SYNCSTREAM
│ │ │
30#define _GLIBCXX_SYNCSTREAM 1
│ │ │
31
│ │ │
32#pragma GCC system_header
│ │ │
33
│ │ │ -
34#include <bits/requires_hosted.h> // iostreams
│ │ │ +
34#include <bits/requires_hosted.h> // iostreams
│ │ │
35
│ │ │ -
36#include <bits/c++config.h>
│ │ │ +
36#include <bits/c++config.h>
│ │ │
37
│ │ │
38#define __glibcxx_want_syncbuf
│ │ │ -
39#include <bits/version.h>
│ │ │ +
39#include <bits/version.h>
│ │ │
40
│ │ │
41#ifdef __cpp_lib_syncbuf // C++ >= 20 && HOSTED && CXX11ABI
│ │ │
42#include <sstream>
│ │ │
43
│ │ │
44#include <bits/alloc_traits.h>
│ │ │ -
45#include <bits/allocator.h>
│ │ │ -
46#include <bits/functexcept.h>
│ │ │ - │ │ │ -
48#include <bits/std_mutex.h>
│ │ │ +
45#include <bits/allocator.h>
│ │ │ +
46#include <bits/functexcept.h>
│ │ │ + │ │ │ +
48#include <bits/std_mutex.h>
│ │ │
49
│ │ │
50namespace std _GLIBCXX_VISIBILITY(default)
│ │ │
51{
│ │ │
52_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │
53
│ │ │
54 template<typename _CharT, typename _Traits, typename _Alloc>
│ │ │
55 class basic_syncbuf : public __syncbuf_base<_CharT, _Traits>
│ │ │ @@ -370,26 +370,26 @@ │ │ │
313 using wosyncstream = basic_osyncstream<wchar_t>;
│ │ │
314_GLIBCXX_END_NAMESPACE_VERSION
│ │ │
315} // namespace std
│ │ │
316#endif // __cpp_lib_syncbuf
│ │ │
317
│ │ │
318#endif /* _GLIBCXX_SYNCSTREAM */
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
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 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
│ │ │
void lock(_L1 &__l1, _L2 &__l2, _L3 &... __l3)
Generic lock.
Definition mutex:698
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
Definition postypes.h:68
│ │ │ +
ptrdiff_t streamsize
Integral type for I/O operation counts and buffer sizes.
Definition postypes.h:68
│ │ │
Template class basic_ostream.
Definition ostream:67
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
592
│ │ │
593_GLIBCXX_END_NAMESPACE_VERSION
│ │ │
594} // namespace
│ │ │
595
│ │ │ -
596#include <bits/functional_hash.h>
│ │ │ +
596#include <bits/functional_hash.h>
│ │ │
597
│ │ │
598namespace std _GLIBCXX_VISIBILITY(default)
│ │ │
599{
│ │ │
600_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │
601
│ │ │
602#ifndef _GLIBCXX_COMPATIBILITY_CXX0X
│ │ │
603 // DR 1182.
│ │ │ @@ -745,19 +745,19 @@ │ │ │
638
│ │ │
639#endif // C++11
│ │ │
640
│ │ │
641#endif // _GLIBCXX_SYSTEM_ERROR
│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │
bool operator==(const error_condition &__lhs, const error_condition &__rhs) noexcept
Definition system_error:480
│ │ │
const error_category & system_category() noexcept
Error category for other error codes defined by the OS.
│ │ │
strong_ordering operator<=>(const error_code &__lhs, const error_code &__rhs) noexcept
Definition system_error:316
│ │ │
bool operator==(const error_code &__lhs, const error_condition &__rhs) noexcept
Definition system_error:465
│ │ │
strong_ordering operator<=>(const error_condition &__lhs, const error_condition &__rhs) noexcept
Definition system_error:498
│ │ │
error_code make_error_code(errc __e) noexcept
Definition system_error:302
│ │ │
bool operator==(const error_code &__lhs, const error_code &__rhs) noexcept
Definition system_error:449
│ │ │ @@ -767,15 +767,15 @@ │ │ │
error_code make_error_code(future_errc __errc) noexcept
Overload of make_error_code for future_errc.
Definition future:94
│ │ │
__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
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │
std::basic_ostream< _CharT, _Traits > & operator<<(std::basic_ostream< _CharT, _Traits > &__os, const bitset< _Nb > &__x)
Global I/O operators for bitsets.
Definition bitset:1687
│ │ │
One of two subclasses of exception.
Definition stdexcept:220
│ │ │
runtime_error(const string &__arg)
│ │ │ -
Primary class template hash.
│ │ │ +
Primary class template hash.
│ │ │
is_error_code_enum
Definition system_error:62
│ │ │
is_error_condition_enum
Definition system_error:66
│ │ │ │ │ │
virtual error_condition default_error_condition(int __i) const noexcept
Return an error_condition corresponding to i in this category.
│ │ │
virtual bool equivalent(int __i, const error_condition &__cond) const noexcept
Test whether cond corresponds to i for this category.
│ │ │
virtual bool equivalent(const error_code &__code, int __i) const noexcept
Test whether code corresponds to i for this category.
│ │ │
virtual string message(int) const =0
A description of the error condition corresponding to the number.
│ │ │ @@ -791,15 +791,15 @@ │ │ │
const error_category & category() const noexcept
The error category that this error belongs to.
Definition system_error:403
│ │ │
int value() const noexcept
The error value.
Definition system_error:398
│ │ │
error_condition() noexcept
Initialize with a zero (no error) value and the generic category.
Definition system_error:361
│ │ │
string message() const
The category's description of the value.
Definition system_error:408
│ │ │
void assign(int __v, const error_category &__cat) noexcept
Set the value and category.
Definition system_error:382
│ │ │
void clear() noexcept
Reset the value and category to the default-constructed state.
Definition system_error:390
│ │ │
An exception type that includes an error_code value.
Definition system_error:557
│ │ │ -
One of the comparison functors.
│ │ │ +
One of the comparison functors.
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -235,19 +235,19 @@ │ │ │ │ 231} // namespace │ │ │ │ 232 │ │ │ │ 233#endif │ │ │ │ 234 │ │ │ │ 235#endif /* _GLIBCXX_UTILITY */ │ │ │ │ _i_n_i_t_i_a_l_i_z_e_r___l_i_s_t │ │ │ │ _t_y_p_e___t_r_a_i_t_s │ │ │ │ -_u_t_i_l_i_t_y_._h │ │ │ │ _v_e_r_s_i_o_n_._h │ │ │ │ -_s_t_l___r_e_l_o_p_s_._h │ │ │ │ -_s_t_l___p_a_i_r_._h │ │ │ │ _m_o_v_e_._h │ │ │ │ +_s_t_l___p_a_i_r_._h │ │ │ │ +_s_t_l___r_e_l_o_p_s_._h │ │ │ │ +_u_t_i_l_i_t_y_._h │ │ │ │ _c_+_+_c_o_n_f_i_g_._h │ │ │ │ _s_t_d_:_:_u_n_d_e_r_l_y_i_n_g___t_y_p_e___t │ │ │ │ typename underlying_type< _Tp >::type underlying_type_t │ │ │ │ Alias template for underlying_type. │ │ │ │ DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_2_7_2_1 │ │ │ │ _s_t_d_:_:_m_a_k_e___u_n_s_i_g_n_e_d___t │ │ │ │ typename make_unsigned< _Tp >::type make_unsigned_t │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00254_source.html │ │ │ @@ -86,20 +86,20 @@ │ │ │
29// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@DPTMaths.ENS-Cachan.Fr>
│ │ │
30
│ │ │
31#ifndef _GLIBCXX_VALARRAY
│ │ │
32#define _GLIBCXX_VALARRAY 1
│ │ │
33
│ │ │
34#pragma GCC system_header
│ │ │
35
│ │ │ -
36#include <bits/requires_hosted.h> // <cmath> dependant
│ │ │ +
36#include <bits/requires_hosted.h> // <cmath> dependant
│ │ │
37
│ │ │ -
38#include <bits/c++config.h>
│ │ │ +
38#include <bits/c++config.h>
│ │ │
39#include <cmath>
│ │ │
40#include <algorithm>
│ │ │ -
41#include <debug/debug.h>
│ │ │ +
41#include <debug/debug.h>
│ │ │
42#if __cplusplus >= 201103L
│ │ │
43#include <initializer_list>
│ │ │
44#endif
│ │ │
45
│ │ │
46namespace std _GLIBCXX_VISIBILITY(default)
│ │ │
47{
│ │ │
48_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ @@ -152,16 +152,16 @@ │ │ │
95 template<class _Tp> class gslice_array;
│ │ │
96 template<class _Tp> class mask_array; // masked array
│ │ │
97 template<class _Tp> class indirect_array; // indirected array
│ │ │
98
│ │ │
99_GLIBCXX_END_NAMESPACE_VERSION
│ │ │
100} // namespace
│ │ │
101
│ │ │ -
102#include <bits/valarray_array.h>
│ │ │ -
103#include <bits/valarray_before.h>
│ │ │ +
102#include <bits/valarray_array.h>
│ │ │ +
103#include <bits/valarray_before.h>
│ │ │
104
│ │ │
105namespace std _GLIBCXX_VISIBILITY(default)
│ │ │
106{
│ │ │
107_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │
108
│ │ │
109 /**
│ │ │
110 * @defgroup numeric_arrays Numeric Arrays
│ │ │ @@ -669,20 +669,20 @@ │ │ │ │ │ │
599
│ │ │
600 /// @} group numeric_arrays
│ │ │
601
│ │ │
602_GLIBCXX_END_NAMESPACE_VERSION
│ │ │
603} // namespace
│ │ │
604
│ │ │ -
605#include <bits/valarray_after.h>
│ │ │ -
606#include <bits/slice_array.h>
│ │ │ -
607#include <bits/gslice.h>
│ │ │ -
608#include <bits/gslice_array.h>
│ │ │ -
609#include <bits/mask_array.h>
│ │ │ -
610#include <bits/indirect_array.h>
│ │ │ +
605#include <bits/valarray_after.h>
│ │ │ +
606#include <bits/slice_array.h>
│ │ │ +
607#include <bits/gslice.h>
│ │ │ +
608#include <bits/gslice_array.h>
│ │ │ +
609#include <bits/mask_array.h>
│ │ │ +
610#include <bits/indirect_array.h>
│ │ │
611
│ │ │
612namespace std _GLIBCXX_VISIBILITY(default)
│ │ │
613{
│ │ │
614_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │
615
│ │ │
616 /**
│ │ │
617 * @addtogroup numeric_arrays
│ │ │ @@ -1437,26 +1437,26 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:51
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:51
│ │ │
size_t size() const
Return the number of elements in array.
Definition valarray:947
│ │ │
_Tp min() const
Return the minimum element using operator<().
Definition valarray:1059
│ │ │
_Tp max() const
Return the maximum element using operator<().
Definition valarray:1067
│ │ │
valarray< _Tp > cshift(int __n) const
Return a rotated array.
Definition valarray:1001
│ │ │
void swap(valarray< _Tp > &__v) noexcept
Swap.
Definition valarray:938
│ │ │
_Tp & operator[](size_t __i) noexcept
Definition valarray:594
│ │ │
void resize(size_t __size, _Tp __c=_Tp())
Resize array.
Definition valarray:1042
│ │ │ @@ -1464,15 +1464,15 @@ │ │ │
valarray() noexcept
Construct an empty array.
Definition valarray:623
│ │ │
_Tp * end(valarray< _Tp > &__va) noexcept
Return an iterator pointing to one past the last element of the valarray.
Definition valarray:1249
│ │ │
valarray< _Tp > shift(int __n) const
Return a shifted array.
Definition valarray:960
│ │ │
_Expr< _ValFunClos< _ValArray, _Tp >, _Tp > apply(_Tp __func(_Tp)) const
Apply a function to the array.
Definition valarray:1075
│ │ │
_Tp * begin(valarray< _Tp > &__va) noexcept
Return an iterator pointing to the first element of the valarray.
Definition valarray:1227
│ │ │
valarray< _Tp > & operator=(const valarray< _Tp > &__v)
Assign elements to an array.
Definition valarray:726
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
constexpr auto size(const _Container &__cont) noexcept(noexcept(__cont.size())) -> decltype(__cont.size())
Return the size of a container.
│ │ │ +
constexpr auto size(const _Container &__cont) noexcept(noexcept(__cont.size())) -> decltype(__cont.size())
Return the size of a container.
│ │ │
Implementation details not part of the namespace std interface.
│ │ │
initializer_list
│ │ │
Smart array designed to support numeric processing.
Definition valarray:130
│ │ │
valarray< _Tp > & operator^=(const _Tp &)
Set each element e of array to e ^ t.
│ │ │
valarray< _Tp > & operator/=(const _Tp &)
Divide each element of array by t.
│ │ │
valarray(const _Tp *__restrict__, size_t)
Construct an array initialized to the first n elements of t.
│ │ │
valarray< _Tp > & operator|=(const valarray< _Tp > &)
Logical or corresponding elements of v with elements of array.
│ │ │ @@ -1492,20 +1492,20 @@ │ │ │
valarray< _Tp > & operator^=(const valarray< _Tp > &)
Logical xor corresponding elements of v with elements of array.
│ │ │
valarray< _Tp > & operator&=(const valarray< _Tp > &)
Logical and corresponding elements of v with elements of array.
│ │ │
valarray< _Tp > & operator*=(const valarray< _Tp > &)
Multiply elements of array by corresponding elements of v.
│ │ │
_UnaryOp< __negate >::_Rt operator-() const
Return a new valarray by applying unary - to each element.
│ │ │
valarray< _Tp > & operator%=(const valarray< _Tp > &)
Modulo elements of array by corresponding elements of v.
│ │ │
valarray< _Tp > & operator&=(const _Tp &)
Set each element e of array to e & t.
│ │ │
valarray< _Tp > & operator|=(const _Tp &)
Set each element e of array to e | t.
│ │ │ -
Reference to one-dimensional subset of an array.
│ │ │ -
Reference to multi-dimensional subset of an array.
│ │ │ -
Reference to selected subset of an array.
Definition mask_array.h:63
│ │ │ -
Reference to arbitrary subset of an array.
│ │ │ -
Class defining multi-dimensional subset of an array.
Definition gslice.h:65
│ │ │ -
Class defining one-dimensional subset of an array.
Definition slice_array.h:60
│ │ │ +
Reference to one-dimensional subset of an array.
│ │ │ +
Reference to multi-dimensional subset of an array.
│ │ │ +
Reference to selected subset of an array.
Definition mask_array.h:63
│ │ │ +
Reference to arbitrary subset of an array.
│ │ │ +
Class defining multi-dimensional subset of an array.
Definition gslice.h:65
│ │ │ +
Class defining one-dimensional subset of an array.
Definition slice_array.h:60
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00314_source.html │ │ │ @@ -85,18 +85,18 @@ │ │ │
28
│ │ │
29#ifndef _GLIBCXX_CSTDINT
│ │ │
30#define _GLIBCXX_CSTDINT 1
│ │ │
31
│ │ │
32#pragma GCC system_header
│ │ │
33
│ │ │
34#if __cplusplus < 201103L
│ │ │ -
35# include <bits/c++0x_warning.h>
│ │ │ +
35# include <bits/c++0x_warning.h>
│ │ │
36#else
│ │ │
37
│ │ │ -
38#include <bits/c++config.h>
│ │ │ +
38#include <bits/c++config.h>
│ │ │
39
│ │ │
40#if ! _GLIBCXX_HOSTED && __has_include(<stdint-gcc.h>)
│ │ │
41// For --disable-hosted-libstdcxx we want GCC's own stdint-gcc.h header
│ │ │
42// even when -ffreestanding isn't used.
│ │ │
43# include <stdint-gcc.h>
│ │ │
44#elif __has_include(<stdint.h>)
│ │ │
45# include <stdint.h>
│ │ │ @@ -197,16 +197,16 @@ │ │ │
140
│ │ │
141#endif // _GLIBCXX_USE_C99_STDINT
│ │ │
142} // namespace std
│ │ │
143
│ │ │
144#endif // C++11
│ │ │
145
│ │ │
146#endif // _GLIBCXX_CSTDINT
│ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
nested_exception.h File Reference
│ │ │ +
chrono.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ Classes

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

│ │ │ Namespaces

namespace  std
namespace  std::chrono
namespace  std::filesystem
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ +Typedefs

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

│ │ │ Functions

template<typename _Ex>
void std::rethrow_if_nested (const _Ex &__ex)
template<typename _Tp>
void std::throw_with_nested (_Tp &&__t)
template<typename _Tp, typename _Up>
constexpr _Tp std::chrono::__detail::__ceil_impl (const _Tp &__t, const _Up &__u)
template<typename _ToDur, typename _Rep, typename _Period>
constexpr _ToDur std::chrono::__detail::ceil (const duration< _Rep, _Period > &__d)
template<typename _ToDur, typename _Clock, typename _Dur>
constexpr enable_if_t< __is_duration_v< _ToDur >, time_point< _Clock, _ToDur > > std::chrono::ceil (const time_point< _Clock, _Dur > &__tp)
template<typename _ToDur, typename _Rep, typename _Period>
constexpr __enable_if_is_duration< _ToDur > std::chrono::duration_cast (const duration< _Rep, _Period > &__d)
template<typename _ToDur, typename _Clock, typename _Dur>
constexpr enable_if_t< __is_duration_v< _ToDur >, time_point< _Clock, _ToDur > > std::chrono::floor (const time_point< _Clock, _Dur > &__tp)
template<typename _ToDur, typename _Clock, typename _Dur>
constexpr enable_if_t< __is_duration_v< _ToDur > &&!treat_as_floating_point_v< typename _ToDur::rep >, time_point< _Clock, _ToDur > > std::chrono::round (const time_point< _Clock, _Dur > &__tp)
template<typename _ToDur, typename _Clock, typename _Dur>
constexpr __enable_if_t< __is_duration< _ToDur >::value, time_point< _Clock, _ToDur > > std::chrono::time_point_cast (const time_point< _Clock, _Dur > &__t)
template<typename _Rep1, typename _Period1, typename _Rep2, typename _Period2>
constexpr common_type< duration< _Rep1, _Period1 >, duration< _Rep2, _Period2 > >::type std::chrono::operator- (const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
template<typename _Rep1, typename _Period, typename _Rep2>
constexpr duration< __common_rep_t< _Rep1, __disable_if_is_duration< _Rep2 > >, _Period > std::chrono::operator% (const duration< _Rep1, _Period > &__d, const _Rep2 &__s)
template<typename _Rep1, typename _Period1, typename _Rep2, typename _Period2>
constexpr common_type< duration< _Rep1, _Period1 >, duration< _Rep2, _Period2 > >::type std::chrono::operator% (const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
template<typename _Rep1, typename _Rep2, typename _Period>
constexpr duration< __common_rep_t< _Rep2, _Rep1 >, _Period > std::chrono::operator* (const _Rep1 &__s, const duration< _Rep2, _Period > &__d)
template<typename _Rep1, typename _Period, typename _Rep2>
constexpr duration< __common_rep_t< _Rep1, __disable_if_is_duration< _Rep2 > >, _Period > std::chrono::operator/ (const duration< _Rep1, _Period > &__d, const _Rep2 &__s)
template<typename _Rep1, typename _Period1, typename _Rep2, typename _Period2>
constexpr common_type< _Rep1, _Rep2 >::type std::chrono::operator/ (const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
template<typename _Rep1, typename _Period1, typename _Rep2, typename _Period2>
constexpr bool std::chrono::operator< (const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
template<typename _Rep1, typename _Period1, typename _Rep2, typename _Period2>
constexpr bool std::chrono::operator<= (const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
template<typename _Rep1, typename _Period1, typename _Rep2, typename _Period2>
│ │ │ +requires three_way_comparable<common_type_t<_Rep1, _Rep2>>
constexpr auto std::chrono::operator<=> (const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
template<typename _Rep1, typename _Period1, typename _Rep2, typename _Period2>
constexpr bool std::chrono::operator> (const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
template<typename _Rep1, typename _Period1, typename _Rep2, typename _Period2>
constexpr bool std::chrono::operator>= (const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
template<typename _Rep1, typename _Period1, typename _Clock, typename _Dur2>
constexpr time_point< _Clock, typename common_type< duration< _Rep1, _Period1 >, _Dur2 >::typestd::chrono::operator+ (const duration< _Rep1, _Period1 > &__lhs, const time_point< _Clock, _Dur2 > &__rhs)
template<typename _Clock, typename _Dur1, typename _Rep2, typename _Period2>
constexpr time_point< _Clock, typename common_type< _Dur1, duration< _Rep2, _Period2 > >::typestd::chrono::operator- (const time_point< _Clock, _Dur1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
template<typename _Clock, typename _Dur1, typename _Dur2>
constexpr common_type< _Dur1, _Dur2 >::type std::chrono::operator- (const time_point< _Clock, _Dur1 > &__lhs, const time_point< _Clock, _Dur2 > &__rhs)
template<typename _Clock, typename _Dur1, typename _Dur2>
constexpr bool std::chrono::operator< (const time_point< _Clock, _Dur1 > &__lhs, const time_point< _Clock, _Dur2 > &__rhs)
template<typename _Clock, typename _Dur1, typename _Dur2>
constexpr bool std::chrono::operator<= (const time_point< _Clock, _Dur1 > &__lhs, const time_point< _Clock, _Dur2 > &__rhs)
template<typename _Clock, typename _Dur1, three_way_comparable_with< _Dur1 > _Dur2>
constexpr auto std::chrono::operator<=> (const time_point< _Clock, _Dur1 > &__lhs, const time_point< _Clock, _Dur2 > &__rhs)
template<typename _Clock, typename _Dur1, typename _Dur2>
constexpr bool std::chrono::operator> (const time_point< _Clock, _Dur1 > &__lhs, const time_point< _Clock, _Dur2 > &__rhs)
template<typename _Clock, typename _Dur1, typename _Dur2>
constexpr bool std::chrono::operator>= (const time_point< _Clock, _Dur1 > &__lhs, const time_point< _Clock, _Dur2 > &__rhs)
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ +Variables

template<typename _Tp, typename = void>
constexpr bool std::chrono::is_clock_v
template<typename _Tp>
constexpr bool std::chrono::is_clock_v< _Tp, void_t< typename _Tp::rep, typename _Tp::period, typename _Tp::duration, typename _Tp::time_point::duration, decltype(_Tp::is_steady), decltype(_Tp::now())> >
template<>
constexpr bool std::chrono::is_clock_v< file_clock >
template<>
constexpr bool std::chrono::is_clock_v< steady_clock >
template<>
constexpr bool std::chrono::is_clock_v< system_clock >
template<typename _Rep>
constexpr bool std::chrono::treat_as_floating_point_v
template<>
constexpr bool std::chrono::treat_as_floating_point_v< double >
template<>
constexpr bool std::chrono::treat_as_floating_point_v< float >
template<>
constexpr bool std::chrono::treat_as_floating_point_v< int >
template<>
constexpr bool std::chrono::treat_as_floating_point_v< long >
template<>
constexpr bool std::chrono::treat_as_floating_point_v< long double >
template<>
constexpr bool std::chrono::treat_as_floating_point_v< long long >
│ │ │

Detailed Description

│ │ │ -

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

│ │ │ +

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

│ │ │ + │ │ │ +

Definition in file chrono.h.

│ │ │ +

Function Documentation

│ │ │ + │ │ │ +

◆ __ceil_impl()

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +template<typename _Tp, typename _Up>
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
_Tp std::chrono::__detail::__ceil_impl (const _Tp & __t,
const _Up & __u )
│ │ │ +
│ │ │ +constexpr
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 478 of file chrono.h.

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

◆ ceil()

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

Definition at line 486 of file chrono.h.

│ │ │ │ │ │ -

Definition in file nested_exception.h.

│ │ │ -
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,19 +1,204 @@ │ │ │ │ libstdc++ │ │ │ │ -nested_exception.h File Reference │ │ │ │ +chrono.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ CCllaasssseess │ │ │ │ -class   _s_t_d_:_:_n_e_s_t_e_d___e_x_c_e_p_t_i_o_n │ │ │ │ +struct   _s_t_d_:_:_c_o_m_m_o_n___t_y_p_e_<_ _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_ ___R_e_p_,_ ___P_e_r_i_o_d_ _>_ _> │ │ │ │ +struct   _s_t_d_:_:_c_o_m_m_o_n___t_y_p_e_<_ _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_ ___R_e_p_,_ ___P_e_r_i_o_d_ _>_,_ _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_< │ │ │ │ + ___R_e_p_,_ ___P_e_r_i_o_d_ _>_ _> │ │ │ │ +struct   _s_t_d_:_:_c_o_m_m_o_n___t_y_p_e_<_ _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_ ___R_e_p_1_,_ ___P_e_r_i_o_d_1_ _>_,_ _c_h_r_o_n_o_:_: │ │ │ │ + _d_u_r_a_t_i_o_n_<_ ___R_e_p_2_,_ ___P_e_r_i_o_d_2_ _>_ _> │ │ │ │ +struct   _s_t_d_:_:_c_o_m_m_o_n___t_y_p_e_<_ _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<_ ___C_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_ _>_ _> │ │ │ │ +struct   _s_t_d_:_:_c_o_m_m_o_n___t_y_p_e_<_ _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<_ ___C_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_ _>_,_ _c_h_r_o_n_o_:_: │ │ │ │ + _t_i_m_e___p_o_i_n_t_<_ ___C_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_ _>_ _> │ │ │ │ +struct   _s_t_d_:_:_c_o_m_m_o_n___t_y_p_e_<_ _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<_ ___C_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_1_ _>_,_ _c_h_r_o_n_o_:_: │ │ │ │ + _t_i_m_e___p_o_i_n_t_<_ ___C_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_2_ _>_ _> │ │ │ │ + class   _s_t_d_:_:_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_ ___R_e_p_,_ ___P_e_r_i_o_d_ _> │ │ │ │ +struct   _s_t_d_:_:_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n___v_a_l_u_e_s_<_ ___R_e_p_ _> │ │ │ │ +struct   _s_t_d_:_:_c_h_r_o_n_o_:_:___V_2_:_:_s_t_e_a_d_y___c_l_o_c_k │ │ │ │ +struct   _s_t_d_:_:_c_h_r_o_n_o_:_:___V_2_:_:_s_y_s_t_e_m___c_l_o_c_k │ │ │ │ + class   _s_t_d_:_:_c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<_ ___C_l_o_c_k_,_ ___D_u_r_ _> │ │ │ │ +struct   _s_t_d_:_:_c_h_r_o_n_o_:_:_t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t_<_ ___R_e_p_ _> │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ +namespace   _s_t_d_:_:_c_h_r_o_n_o │ │ │ │ +namespace   _s_t_d_:_:_f_i_l_e_s_y_s_t_e_m │ │ │ │ +TTyyppeeddeeffss │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_d_a_y_s │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_f_i_l_e___c_l_o_c_k │ │ │ │ +template │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_f_i_l_e___t_i_m_e │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_h_i_g_h___r_e_s_o_l_u_t_i_o_n___c_l_o_c_k │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_h_o_u_r_s │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_m_i_c_r_o_s_e_c_o_n_d_s │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_m_i_l_l_i_s_e_c_o_n_d_s │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_m_i_n_u_t_e_s │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_m_o_n_t_h_s │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_n_a_n_o_s_e_c_o_n_d_s │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_s_e_c_o_n_d_s │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_s_y_s___d_a_y_s │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_s_y_s___s_e_c_o_n_d_s │ │ │ │ +template │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_s_y_s___t_i_m_e │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_w_e_e_k_s │ │ │ │ +using  _s_t_d_:_:_c_h_r_o_n_o_:_:_y_e_a_r_s │ │ │ │ FFuunnccttiioonnss │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_r_e_t_h_r_o_w___i_f___n_e_s_t_e_d (const _Ex &__ex) │ │ │ │ +template │ │ │ │ + constexpr _Tp  _s_t_d_:_:_c_h_r_o_n_o_:_:_____d_e_t_a_i_l_:_:_____c_e_i_l___i_m_p_l │ │ │ │ + (const _Tp &__t, const _Up &__u) │ │ │ │ +template │ │ │ │ + constexpr _ToDur  _s_t_d_:_:_c_h_r_o_n_o_:_:_____d_e_t_a_i_l_:_:_c_e_i_l (const │ │ │ │ + _d_u_r_a_t_i_o_n< _Rep, _Period > &__d) │ │ │ │ +template │ │ │ │ +constexpr _e_n_a_b_l_e___i_f___t< __is_duration_v< │ │ │ │ + _ToDur >, _t_i_m_e___p_o_i_n_t< _Clock, _ToDur > _s_t_d_:_:_c_h_r_o_n_o_:_:_c_e_i_l (const _t_i_m_e___p_o_i_n_t< │ │ │ │ + >  _Clock, _Dur > &__tp) │ │ │ │ +template │ │ │ │ + constexpr __enable_if_is_duration< _s_t_d_:_:_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n___c_a_s_t (const │ │ │ │ + _ToDur >  _d_u_r_a_t_i_o_n< _Rep, _Period > &__d) │ │ │ │ +template │ │ │ │ +constexpr _e_n_a_b_l_e___i_f___t< __is_duration_v< │ │ │ │ + _ToDur >, _t_i_m_e___p_o_i_n_t< _Clock, _ToDur > _s_t_d_:_:_c_h_r_o_n_o_:_:_f_l_o_o_r (const _t_i_m_e___p_o_i_n_t< │ │ │ │ + >  _Clock, _Dur > &__tp) │ │ │ │ +template │ │ │ │ +constexpr _e_n_a_b_l_e___i_f___t< __is_duration_v< │ │ │ │ + _ToDur > &&!treat_as_floating_point_v< │ │ │ │ + typename _ToDur::rep >, _t_i_m_e___p_o_i_n_t< _s_t_d_:_:_c_h_r_o_n_o_:_:_r_o_u_n_d (const _t_i_m_e___p_o_i_n_t< │ │ │ │ + _Clock, _ToDur > >  _Clock, _Dur > &__tp) │ │ │ │ +template │ │ │ │ +constexpr __enable_if_t< __is_duration< │ │ │ │ + _ToDur >::value, _t_i_m_e___p_o_i_n_t< _Clock, _s_t_d_:_:_c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t___c_a_s_t (const │ │ │ │ + _ToDur > >  _t_i_m_e___p_o_i_n_t< _Clock, _Dur > &__t) │ │ │ │ +template │ │ │ │ +constexpr _c_o_m_m_o_n___t_y_p_e< _d_u_r_a_t_i_o_n< _Rep1, _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_- (const _d_u_r_a_t_i_o_n< │ │ │ │ +_Period1 >, _d_u_r_a_t_i_o_n< _Rep2, _Period2 > _Rep1, _Period1 > &__lhs, const │ │ │ │ + >_:_:_t_y_p_e  _d_u_r_a_t_i_o_n< _Rep2, _Period2 > &__rhs) │ │ │ │ +template │ │ │ │ + constexpr _d_u_r_a_t_i_o_n< __common_rep_t< _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_% (const _d_u_r_a_t_i_o_n< │ │ │ │ + _Rep1, __disable_if_is_duration< _Rep2 _Rep1, _Period > &__d, const _Rep2 │ │ │ │ + > >, _Period >  &__s) │ │ │ │ +template │ │ │ │ +constexpr _c_o_m_m_o_n___t_y_p_e< _d_u_r_a_t_i_o_n< _Rep1, _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_% (const _d_u_r_a_t_i_o_n< │ │ │ │ +_Period1 >, _d_u_r_a_t_i_o_n< _Rep2, _Period2 > _Rep1, _Period1 > &__lhs, const │ │ │ │ + >_:_:_t_y_p_e  _d_u_r_a_t_i_o_n< _Rep2, _Period2 > &__rhs) │ │ │ │ +template │ │ │ │ + constexpr _d_u_r_a_t_i_o_n< __common_rep_t< _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_* (const _Rep1 │ │ │ │ + _Rep2, _Rep1 >, _Period >  &__s, const _d_u_r_a_t_i_o_n< _Rep2, _Period > │ │ │ │ + &__d) │ │ │ │ +template │ │ │ │ + constexpr _d_u_r_a_t_i_o_n< __common_rep_t< _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_/ (const _d_u_r_a_t_i_o_n< │ │ │ │ + _Rep1, __disable_if_is_duration< _Rep2 _Rep1, _Period > &__d, const _Rep2 │ │ │ │ + > >, _Period >  &__s) │ │ │ │ +template │ │ │ │ +constexpr _c_o_m_m_o_n___t_y_p_e< _Rep1, _Rep2 >_:_: _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_/ (const _d_u_r_a_t_i_o_n< │ │ │ │ + _t_y_p_e  _Rep1, _Period1 > &__lhs, const │ │ │ │ + _d_u_r_a_t_i_o_n< _Rep2, _Period2 > &__rhs) │ │ │ │ +template │ │ │ │ + constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_< (const _d_u_r_a_t_i_o_n< │ │ │ │ + _Rep1, _Period1 > &__lhs, const │ │ │ │ + _d_u_r_a_t_i_o_n< _Rep2, _Period2 > &__rhs) │ │ │ │ +template │ │ │ │ + constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_<_= (const │ │ │ │ + _d_u_r_a_t_i_o_n< _Rep1, _Period1 > &__lhs, │ │ │ │ + const _d_u_r_a_t_i_o_n< _Rep2, _Period2 > │ │ │ │ + &__rhs) │ │ │ │ +template │ │ │ │ +requires three_way_comparable<_c_o_m_m_o_n___t_y_p_e___t<_Rep1, _Rep2>> │ │ │ │ + constexpr auto  _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_<_=_> (const │ │ │ │ + _d_u_r_a_t_i_o_n< _Rep1, _Period1 > &__lhs, │ │ │ │ + const _d_u_r_a_t_i_o_n< _Rep2, _Period2 > │ │ │ │ + &__rhs) │ │ │ │ +template │ │ │ │ + constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_> (const _d_u_r_a_t_i_o_n< │ │ │ │ + _Rep1, _Period1 > &__lhs, const │ │ │ │ + _d_u_r_a_t_i_o_n< _Rep2, _Period2 > &__rhs) │ │ │ │ +template │ │ │ │ + constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_>_= (const │ │ │ │ + _d_u_r_a_t_i_o_n< _Rep1, _Period1 > &__lhs, │ │ │ │ + const _d_u_r_a_t_i_o_n< _Rep2, _Period2 > │ │ │ │ + &__rhs) │ │ │ │ +template │ │ │ │ + constexpr _t_i_m_e___p_o_i_n_t< _Clock, typename _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_+ (const _d_u_r_a_t_i_o_n< │ │ │ │ + _c_o_m_m_o_n___t_y_p_e< _d_u_r_a_t_i_o_n< _Rep1, _Period1 _Rep1, _Period1 > &__lhs, const │ │ │ │ + >, _Dur2 >_:_:_t_y_p_e >  _t_i_m_e___p_o_i_n_t< _Clock, _Dur2 > &__rhs) │ │ │ │ +template │ │ │ │ + constexpr _t_i_m_e___p_o_i_n_t< _Clock, typename _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_- (const │ │ │ │ + _c_o_m_m_o_n___t_y_p_e< _Dur1, _d_u_r_a_t_i_o_n< _Rep2, _t_i_m_e___p_o_i_n_t< _Clock, _Dur1 > &__lhs, │ │ │ │ + _Period2 > >_:_:_t_y_p_e >  const _d_u_r_a_t_i_o_n< _Rep2, _Period2 > │ │ │ │ + &__rhs) │ │ │ │ +template │ │ │ │ +constexpr _c_o_m_m_o_n___t_y_p_e< _Dur1, _Dur2 >_:_: _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_- (const │ │ │ │ + _t_y_p_e  _t_i_m_e___p_o_i_n_t< _Clock, _Dur1 > &__lhs, │ │ │ │ + const _t_i_m_e___p_o_i_n_t< _Clock, _Dur2 > │ │ │ │ + &__rhs) │ │ │ │ +template │ │ │ │ + constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_< (const │ │ │ │ + _t_i_m_e___p_o_i_n_t< _Clock, _Dur1 > &__lhs, │ │ │ │ + const _t_i_m_e___p_o_i_n_t< _Clock, _Dur2 > │ │ │ │ + &__rhs) │ │ │ │ +template │ │ │ │ + constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_<_= (const │ │ │ │ + _t_i_m_e___p_o_i_n_t< _Clock, _Dur1 > &__lhs, │ │ │ │ + const _t_i_m_e___p_o_i_n_t< _Clock, _Dur2 > │ │ │ │ + &__rhs) │ │ │ │ +template │ │ │ │ +_Dur2> │ │ │ │ + constexpr auto  _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_<_=_> (const │ │ │ │ + _t_i_m_e___p_o_i_n_t< _Clock, _Dur1 > &__lhs, │ │ │ │ + const _t_i_m_e___p_o_i_n_t< _Clock, _Dur2 > │ │ │ │ + &__rhs) │ │ │ │ +template │ │ │ │ + constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_> (const │ │ │ │ + _t_i_m_e___p_o_i_n_t< _Clock, _Dur1 > &__lhs, │ │ │ │ + const _t_i_m_e___p_o_i_n_t< _Clock, _Dur2 > │ │ │ │ + &__rhs) │ │ │ │ +template │ │ │ │ + constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_>_= (const │ │ │ │ + _t_i_m_e___p_o_i_n_t< _Clock, _Dur1 > &__lhs, │ │ │ │ + const _t_i_m_e___p_o_i_n_t< _Clock, _Dur2 > │ │ │ │ + &__rhs) │ │ │ │ +VVaarriiaabblleess │ │ │ │ +template │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_i_s___c_l_o_c_k___v │ │ │ │ template │ │ │ │ -void  _s_t_d_:_:_t_h_r_o_w___w_i_t_h___n_e_s_t_e_d (_Tp &&__t) │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_i_s___c_l_o_c_k___v_<_ ___T_p_,_ _v_o_i_d___t_<_ _t_y_p_e_n_a_m_e_ ___T_p_:_:_r_e_p_, │ │ │ │ + _t_y_p_e_n_a_m_e_ ___T_p_:_:_p_e_r_i_o_d_,_ _t_y_p_e_n_a_m_e_ ___T_p_:_:_d_u_r_a_t_i_o_n_,_ _t_y_p_e_n_a_m_e_ ___T_p_:_: │ │ │ │ + _t_i_m_e___p_o_i_n_t_:_:_d_u_r_a_t_i_o_n_,_ _d_e_c_l_t_y_p_e_(___T_p_:_:_i_s___s_t_e_a_d_y_)_,_ _d_e_c_l_t_y_p_e_(___T_p_:_: │ │ │ │ + _n_o_w_(_)_)_>_ _> │ │ │ │ + template<> │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_i_s___c_l_o_c_k___v_<_ _f_i_l_e___c_l_o_c_k_ _> │ │ │ │ + template<> │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_i_s___c_l_o_c_k___v_<_ _s_t_e_a_d_y___c_l_o_c_k_ _> │ │ │ │ + template<> │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_i_s___c_l_o_c_k___v_<_ _s_y_s_t_e_m___c_l_o_c_k_ _> │ │ │ │ +template │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t___v │ │ │ │ + template<> │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t___v_<_ _d_o_u_b_l_e_ _> │ │ │ │ + template<> │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t___v_<_ _f_l_o_a_t_ _> │ │ │ │ + template<> │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t___v_<_ _i_n_t_ _> │ │ │ │ + template<> │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t___v_<_ _l_o_n_g_ _> │ │ │ │ + template<> │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t___v_<_ _l_o_n_g_ _d_o_u_b_l_e_ _> │ │ │ │ + template<> │ │ │ │ +constexpr bool  _s_t_d_:_:_c_h_r_o_n_o_:_:_t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t___v_<_ _l_o_n_g_ _l_o_n_g_ _> │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _c_h_r_o_n_o_._h. │ │ │ │ +********** FFuunnccttiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ +********** _?◆_? ____cceeiill__iimmppll(()) ********** │ │ │ │ +template │ │ │ │ +_Tp std::chrono::__detail::__ceil_impl ( const _Tp & ____tt, constexpr │ │ │ │ + const _Up & ____uu ) │ │ │ │ +Definition at line _4_7_8 of file _c_h_r_o_n_o_._h. │ │ │ │ +********** _?◆_? cceeiill(()) ********** │ │ │ │ +template │ │ │ │ +_ToDur std::chrono:: ( const _d_u_r_a_t_i_o_n< _Rep, _Period ____dd ) constexpr │ │ │ │ +__detail::ceil > & │ │ │ │ +Definition at line _4_8_6 of file _c_h_r_o_n_o_._h. │ │ │ │ * bbiittss │ │ │ │ - * _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_._h │ │ │ │ + * _c_h_r_o_n_o_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00341.js │ │ │ ├── js-beautify {} │ │ │ │ @@ -1,4 +1,32 @@ │ │ │ │ var a00341 = [ │ │ │ │ - ["std::rethrow_if_nested", "a01641.html#gab61c4f8fae83699092207e16594f6b35", null], │ │ │ │ - ["std::throw_with_nested", "a01641.html#gae6e361189fc8333896bebb3523551209", null] │ │ │ │ + ["std::chrono::days", "a01619.html#ga35b8d8dfec21cc8e5e6b4c35c382527d", null], │ │ │ │ + ["std::chrono::_V2::high_resolution_clock", "a01619.html#gaa1505f079e28823a187931e08c1be95f", null], │ │ │ │ + ["std::chrono::hours", "a01619.html#ga58cbaed50518652daab07581c488b8bf", null], │ │ │ │ + ["std::chrono::microseconds", "a01619.html#gaa4c94c1266a5a758a76b831df6f93814", null], │ │ │ │ + ["std::chrono::milliseconds", "a01619.html#gaa4c55ee273cfe2bac3abdc51c52f05a2", null], │ │ │ │ + ["std::chrono::minutes", "a01619.html#ga8f6685771c47bff405eb8e7d8970a972", null], │ │ │ │ + ["std::chrono::months", "a01619.html#ga30b37110f879f278207a802543facc10", null], │ │ │ │ + ["std::chrono::nanoseconds", "a01619.html#ga6f89ff52fb3a7aebd2218949775061eb", null], │ │ │ │ + ["std::chrono::seconds", "a01619.html#gab2ee0fc8bda281001de51d076b6d2569", null], │ │ │ │ + ["std::chrono::weeks", "a01619.html#ga17ebbac82f916f983135812d9e669c57", null], │ │ │ │ + ["std::chrono::years", "a01619.html#ga3c43ae9cebea7caf62a0dc72a15d81dd", null], │ │ │ │ + ["std::chrono::ceil", "a01619.html#ga0c9322d285c620930b3ae46fd6d78648", null], │ │ │ │ + ["std::chrono::duration_cast", "a01619.html#gaf83c060d5814bd12545e6638b695fa35", null], │ │ │ │ + ["std::chrono::floor", "a01619.html#ga2eb6119514f5a356bc229d2aa8570d5d", null], │ │ │ │ + ["std::chrono::operator%", "a01619.html#ga89292ce4685ed1acec57917b95078122", null], │ │ │ │ + ["std::chrono::operator%", "a01619.html#gaba5309ded419fee0700d9155befcba71", null], │ │ │ │ + ["std::chrono::operator*", "a01619.html#ga6edb3d16499759e43063499235313f28", null], │ │ │ │ + ["std::chrono::operator+", "a01619.html#gaa69f414c9d1944a4107c5085a6c1e89f", null], │ │ │ │ + ["std::chrono::operator-", "a01619.html#gad6f1e4c4804331c111b73ffd78bed831", null], │ │ │ │ + ["std::chrono::operator-", "a01619.html#ga94a63713be7db2528c3d8af1efc60f8b", null], │ │ │ │ + ["std::chrono::operator-", "a01619.html#gafcb921930536dc4f0955f4fc4a71c6db", null], │ │ │ │ + ["std::chrono::operator/", "a01619.html#gad96e9f7fe7b2ebd017909a985dddcfe0", null], │ │ │ │ + ["std::chrono::operator/", "a01619.html#ga875d781ffc7d293bbe3ca49532ee20b4", null], │ │ │ │ + ["std::chrono::operator<", "a01619.html#gaaffa3384e821547f00bf1ba2deb8f610", null], │ │ │ │ + ["std::chrono::operator<=", "a01619.html#ga40a8edd53345cf9206c212a37635c953", null], │ │ │ │ + ["std::chrono::operator<=>", "a01619.html#gae0a2aba6f018f6d4264bcaf0d0e79bcd", null], │ │ │ │ + ["std::chrono::operator>", "a01619.html#gad624d18e56659a8448b7e76471e9fe16", null], │ │ │ │ + ["std::chrono::operator>=", "a01619.html#ga59bc3e0c5d59be6820eb5237c27b59f2", null], │ │ │ │ + ["std::chrono::round", "a01619.html#ga117b6a50dcf6fe79199ed3a07cd1be5b", null], │ │ │ │ + ["std::chrono::time_point_cast", "a01619.html#ga987897765b9f31fce92fa55bc6ca5afb", null] │ │ │ │ ]; │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00341_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: nested_exception.h Source File │ │ │ +libstdc++: chrono.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
nested_exception.h
│ │ │ +
chrono.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// Nested Exception support header (nested_exception class) for -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// chrono::duration and chrono::time_point -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2009-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
│ │ │ @@ -75,267 +75,1638 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file bits/nested_exception.h
│ │ │ +
25/** @file include/bits/chrono.h
│ │ │
26 * This is an internal header file, included by other library headers.
│ │ │ -
27 * Do not attempt to use it directly. @headername{exception}
│ │ │ +
27 * Do not attempt to use it directly. @headername{chrono}
│ │ │
28 */
│ │ │
29
│ │ │ -
30#ifndef _GLIBCXX_NESTED_EXCEPTION_H
│ │ │ -
31#define _GLIBCXX_NESTED_EXCEPTION_H 1
│ │ │ +
30#ifndef _GLIBCXX_CHRONO_H
│ │ │ +
31#define _GLIBCXX_CHRONO_H 1
│ │ │
32
│ │ │ -
33#if __cplusplus < 201103L
│ │ │ -
34# include <bits/c++0x_warning.h>
│ │ │ -
35#else
│ │ │ +
33#pragma GCC system_header
│ │ │ +
34
│ │ │ +
35#if __cplusplus >= 201103L
│ │ │
36
│ │ │ -
37#include <bits/move.h>
│ │ │ -
38#include <bits/exception_ptr.h>
│ │ │ -
39
│ │ │ -
40extern "C++" {
│ │ │ -
41
│ │ │ -
42namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
43{
│ │ │ -
44 /**
│ │ │ -
45 * @addtogroup exceptions
│ │ │ -
46 * @{
│ │ │ -
47 */
│ │ │ -
48
│ │ │ -
49 /** Mixin class that stores the current exception.
│ │ │ -
50 *
│ │ │ -
51 * This type can be used via `std::throw_with_nested` to store
│ │ │ -
52 * the current exception nested within another exception.
│ │ │ -
53 *
│ │ │ -
54 * @headerfile exception
│ │ │ -
55 * @since C++11
│ │ │ -
56 * @see std::throw_with_nested
│ │ │ -
57 * @ingroup exceptions
│ │ │ -
58 */
│ │ │ -
│ │ │ - │ │ │ -
60 {
│ │ │ -
61 exception_ptr _M_ptr;
│ │ │ -
62
│ │ │ -
63 public:
│ │ │ -
64 /// The default constructor stores the current exception (if any).
│ │ │ -
65 nested_exception() noexcept : _M_ptr(current_exception()) { }
│ │ │ -
66
│ │ │ -
67 nested_exception(const nested_exception&) noexcept = default;
│ │ │ -
68
│ │ │ -
69 nested_exception& operator=(const nested_exception&) noexcept = default;
│ │ │ -
70
│ │ │ -
71 virtual ~nested_exception() noexcept;
│ │ │ -
72
│ │ │ -
73 /// Rethrow the stored exception, or terminate if none was stored.
│ │ │ -
74 [[noreturn]]
│ │ │ -
75 void
│ │ │ -
│ │ │ - │ │ │ -
77 {
│ │ │ -
78 if (_M_ptr)
│ │ │ -
79 rethrow_exception(_M_ptr);
│ │ │ - │ │ │ -
81 }
│ │ │ -
│ │ │ -
82
│ │ │ -
83 /// Access the stored exception.
│ │ │ - │ │ │ -
│ │ │ -
85 nested_ptr() const noexcept
│ │ │ -
86 { return _M_ptr; }
│ │ │ -
│ │ │ -
87 };
│ │ │ -
│ │ │ -
88
│ │ │ -
89 /// @cond undocumented
│ │ │ -
90
│ │ │ -
91 template<typename _Except>
│ │ │ -
92 struct _Nested_exception : public _Except, public nested_exception
│ │ │ -
93 {
│ │ │ -
94 explicit _Nested_exception(const _Except& __ex)
│ │ │ -
95 : _Except(__ex)
│ │ │ -
96 { }
│ │ │ -
97
│ │ │ -
98 explicit _Nested_exception(_Except&& __ex)
│ │ │ -
99 : _Except(static_cast<_Except&&>(__ex))
│ │ │ -
100 { }
│ │ │ -
101 };
│ │ │ -
102
│ │ │ -
103#if __cplusplus < 201703L || ! defined __cpp_if_constexpr
│ │ │ -
104 // [except.nested]/8
│ │ │ -
105 // Throw an exception of unspecified type that is publicly derived from
│ │ │ -
106 // both remove_reference_t<_Tp> and nested_exception.
│ │ │ -
107 template<typename _Tp>
│ │ │ -
108 [[noreturn]]
│ │ │ -
109 inline void
│ │ │ -
110 __throw_with_nested_impl(_Tp&& __t, true_type)
│ │ │ -
111 {
│ │ │ -
112 throw _Nested_exception<__remove_cvref_t<_Tp>>{std::forward<_Tp>(__t)};
│ │ │ -
113 }
│ │ │ -
114
│ │ │ -
115 template<typename _Tp>
│ │ │ -
116 [[noreturn]]
│ │ │ -
117 inline void
│ │ │ -
118 __throw_with_nested_impl(_Tp&& __t, false_type)
│ │ │ -
119 { throw std::forward<_Tp>(__t); }
│ │ │ -
120#endif
│ │ │ -
121
│ │ │ -
122 /// @endcond
│ │ │ -
123
│ │ │ -
124 /** Throw an exception that also stores the currently active exception.
│ │ │ -
125 *
│ │ │ -
126 * If `_Tp` is derived from `std::nested_exception` or is not usable
│ │ │ -
127 * as a base-class, throws a copy of `__t`.
│ │ │ -
128 * Otherwise, throws an object of an implementation-defined type derived
│ │ │ -
129 * from both `_Tp` and `std::nested_exception`, containing a copy of `__t`
│ │ │ -
130 * and the result of `std::current_exception()`.
│ │ │ -
131 *
│ │ │ -
132 * In other words, throws the argument as a new exception that contains
│ │ │ -
133 * the currently active exception nested within it. This is intended for
│ │ │ -
134 * use in a catch handler to replace the caught exception with a different
│ │ │ -
135 * type, while still preserving the original exception. When the new
│ │ │ -
136 * exception is caught, the nested exception can be rethrown by using
│ │ │ -
137 * `std::rethrow_if_nested`.
│ │ │ -
138 *
│ │ │ -
139 * This can be used at API boundaries, for example to catch a library's
│ │ │ -
140 * internal exception type and rethrow it nested with a `std::runtime_error`,
│ │ │ -
141 * or vice versa.
│ │ │ -
142 *
│ │ │ -
143 * @since C++11
│ │ │ -
144 */
│ │ │ -
145 template<typename _Tp>
│ │ │ -
146 [[noreturn]]
│ │ │ -
147 inline void
│ │ │ -
│ │ │ - │ │ │ -
149 {
│ │ │ -
150 using _Up = typename decay<_Tp>::type;
│ │ │ -
151 using _CopyConstructible
│ │ │ -
152 = __and_<is_copy_constructible<_Up>, is_move_constructible<_Up>>;
│ │ │ -
153 static_assert(_CopyConstructible::value,
│ │ │ -
154 "throw_with_nested argument must be CopyConstructible");
│ │ │ -
155
│ │ │ -
156#if __cplusplus >= 201703L && __cpp_if_constexpr
│ │ │ -
157 if constexpr (is_class_v<_Up>)
│ │ │ -
158 if constexpr (!is_final_v<_Up>)
│ │ │ -
159 if constexpr (!is_base_of_v<nested_exception, _Up>)
│ │ │ -
160 throw _Nested_exception<_Up>{std::forward<_Tp>(__t)};
│ │ │ -
161 throw std::forward<_Tp>(__t);
│ │ │ -
162#else
│ │ │ -
163 using __nest = __and_<is_class<_Up>, __bool_constant<!__is_final(_Up)>,
│ │ │ -
164 __not_<is_base_of<nested_exception, _Up>>>;
│ │ │ -
165 std::__throw_with_nested_impl(std::forward<_Tp>(__t), __nest{});
│ │ │ -
166#endif
│ │ │ -
167 }
│ │ │ -
│ │ │ -
168
│ │ │ -
169#if __cplusplus < 201703L || ! defined __cpp_if_constexpr
│ │ │ -
170 /// @cond undocumented
│ │ │ -
171
│ │ │ -
172 // Attempt dynamic_cast to nested_exception and call rethrow_nested().
│ │ │ -
173 template<typename _Ex>
│ │ │ -
174 inline void
│ │ │ -
175 __rethrow_if_nested_impl(const _Ex* __ptr, true_type)
│ │ │ -
176 {
│ │ │ -
177 if (auto __ne_ptr = dynamic_cast<const nested_exception*>(__ptr))
│ │ │ -
178 __ne_ptr->rethrow_nested();
│ │ │ -
179 }
│ │ │ -
180
│ │ │ -
181 // Otherwise, no effects.
│ │ │ -
182 inline void
│ │ │ -
183 __rethrow_if_nested_impl(const void*, false_type)
│ │ │ -
184 { }
│ │ │ -
185
│ │ │ -
186 /// @endcond
│ │ │ -
187#endif
│ │ │ -
188
│ │ │ -
189 /** Rethrow a nested exception
│ │ │ -
190 *
│ │ │ -
191 * If `__ex` contains a `std::nested_exception` object, call its
│ │ │ -
192 * `rethrow_nested()` member to rethrow the stored exception.
│ │ │ -
193 *
│ │ │ -
194 * After catching an exception thrown by a call to `std::throw_with_nested`
│ │ │ -
195 * this function can be used to rethrow the exception that was active when
│ │ │ -
196 * `std::throw_with_nested` was called.
│ │ │ -
197 *
│ │ │ -
198 * @since C++11
│ │ │ -
199 */
│ │ │ -
200 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ -
201 // 2484. rethrow_if_nested() is doubly unimplementable
│ │ │ -
202 // 2784. Resolution to LWG 2484 is missing "otherwise, no effects" and [...]
│ │ │ -
203 template<typename _Ex>
│ │ │ -
204# if ! __cpp_rtti
│ │ │ -
205 [[__gnu__::__always_inline__]]
│ │ │ -
206#endif
│ │ │ -
207 inline void
│ │ │ -
│ │ │ -
208 rethrow_if_nested(const _Ex& __ex)
│ │ │ -
209 {
│ │ │ -
210 const _Ex* __ptr = __builtin_addressof(__ex);
│ │ │ -
211#if __cplusplus < 201703L || ! defined __cpp_if_constexpr
│ │ │ -
212# if __cpp_rtti
│ │ │ -
213 using __cast = __and_<is_polymorphic<_Ex>,
│ │ │ -
214 __or_<__not_<is_base_of<nested_exception, _Ex>>,
│ │ │ -
215 is_convertible<_Ex*, nested_exception*>>>;
│ │ │ -
216# else
│ │ │ -
217 using __cast = __and_<is_polymorphic<_Ex>,
│ │ │ - │ │ │ -
219 is_convertible<_Ex*, nested_exception*>>;
│ │ │ -
220# endif
│ │ │ -
221 std::__rethrow_if_nested_impl(__ptr, __cast{});
│ │ │ -
222#else
│ │ │ -
223 if constexpr (!is_polymorphic_v<_Ex>)
│ │ │ -
224 return;
│ │ │ -
225 else if constexpr (is_base_of_v<nested_exception, _Ex>
│ │ │ -
226 && !is_convertible_v<_Ex*, nested_exception*>)
│ │ │ -
227 return; // nested_exception base class is inaccessible or ambiguous.
│ │ │ -
228# if ! __cpp_rtti
│ │ │ -
229 else if constexpr (!is_base_of_v<nested_exception, _Ex>)
│ │ │ -
230 return; // Cannot do polymorphic casts without RTTI.
│ │ │ -
231# endif
│ │ │ -
232 else if (auto __ne_ptr = dynamic_cast<const nested_exception*>(__ptr))
│ │ │ -
233 __ne_ptr->rethrow_nested();
│ │ │ -
234#endif
│ │ │ -
235 }
│ │ │ -
│ │ │ -
236
│ │ │ -
237 /// @} group exceptions
│ │ │ -
238} // namespace std
│ │ │ -
239
│ │ │ -
240} // extern "C++"
│ │ │ -
241
│ │ │ -
242#endif // C++11
│ │ │ -
243#endif // _GLIBCXX_NESTED_EXCEPTION_H
│ │ │ - │ │ │ - │ │ │ - │ │ │ +
37#include <ratio>
│ │ │ +
38#include <type_traits>
│ │ │ +
39#include <limits>
│ │ │ +
40#include <ctime>
│ │ │ +
41#include <bits/parse_numbers.h> // for literals support.
│ │ │ +
42#if __cplusplus >= 202002L
│ │ │ +
43# include <concepts>
│ │ │ +
44# include <compare>
│ │ │ +
45#endif
│ │ │ +
46
│ │ │ +
47#include <bits/version.h>
│ │ │ +
48
│ │ │ +
49namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
50{
│ │ │ +
51_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
52
│ │ │ +
53#if __cplusplus >= 201703L
│ │ │ +
54 namespace filesystem { struct __file_clock; };
│ │ │ +
55#endif
│ │ │ +
56
│ │ │ +
57 namespace chrono
│ │ │ +
58 {
│ │ │ +
59 /// @addtogroup chrono
│ │ │ +
60 /// @{
│ │ │ +
61
│ │ │ +
62 /// `chrono::duration` represents a distance between two points in time
│ │ │ +
63 template<typename _Rep, typename _Period = ratio<1>>
│ │ │ +
64 class duration;
│ │ │ +
65
│ │ │ +
66 /// `chrono::time_point` represents a point in time as measured by a clock
│ │ │ +
67 template<typename _Clock, typename _Dur = typename _Clock::duration>
│ │ │ +
68 class time_point;
│ │ │ +
69 /// @}
│ │ │ +
70 }
│ │ │ +
71
│ │ │ +
72 /// @addtogroup chrono
│ │ │ +
73 /// @{
│ │ │ +
74
│ │ │ +
75 // 20.11.4.3 specialization of common_type (for duration, sfinae-friendly)
│ │ │ +
76
│ │ │ +
77 /// @cond undocumented
│ │ │ +
78
│ │ │ +
79 template<typename _CT, typename _Period1, typename _Period2, typename = void>
│ │ │ +
80 struct __duration_common_type
│ │ │ +
81 { };
│ │ │ +
82
│ │ │ +
83 template<typename _CT, typename _Period1, typename _Period2>
│ │ │ +
84 struct __duration_common_type<_CT, _Period1, _Period2,
│ │ │ +
85 __void_t<typename _CT::type>>
│ │ │ +
86 {
│ │ │ +
87 private:
│ │ │ +
88 using __gcd_num = __static_gcd<_Period1::num, _Period2::num>;
│ │ │ +
89 using __gcd_den = __static_gcd<_Period1::den, _Period2::den>;
│ │ │ +
90 using __cr = typename _CT::type;
│ │ │ +
91 using __r = ratio<__gcd_num::value,
│ │ │ +
92 (_Period1::den / __gcd_den::value) * _Period2::den>;
│ │ │ +
93
│ │ │ +
94 public:
│ │ │ +
95 using type = chrono::duration<__cr, typename __r::type>;
│ │ │ +
96 };
│ │ │ +
97
│ │ │ +
98 /// @endcond
│ │ │ +
99
│ │ │ +
100 /// @{
│ │ │ +
101 /// @relates chrono::duration
│ │ │ +
102
│ │ │ +
103 /// Specialization of common_type for chrono::duration types.
│ │ │ +
104 template<typename _Rep1, typename _Period1, typename _Rep2, typename _Period2>
│ │ │ +
│ │ │ +
105 struct common_type<chrono::duration<_Rep1, _Period1>,
│ │ │ +
106 chrono::duration<_Rep2, _Period2>>
│ │ │ +
107 : __duration_common_type<common_type<_Rep1, _Rep2>,
│ │ │ +
108 typename _Period1::type,
│ │ │ +
109 typename _Period2::type>
│ │ │ +
110 { };
│ │ │ +
│ │ │ +
111
│ │ │ +
112 /// Specialization of common_type for two identical chrono::duration types.
│ │ │ +
113 template<typename _Rep, typename _Period>
│ │ │ +
│ │ │ +
114 struct common_type<chrono::duration<_Rep, _Period>,
│ │ │ +
115 chrono::duration<_Rep, _Period>>
│ │ │ +
116 {
│ │ │ + │ │ │ +
118 typename _Period::type>;
│ │ │ +
119 };
│ │ │ +
│ │ │ +
120
│ │ │ +
121 /// Specialization of common_type for one chrono::duration type.
│ │ │ +
122 template<typename _Rep, typename _Period>
│ │ │ +
│ │ │ +
123 struct common_type<chrono::duration<_Rep, _Period>>
│ │ │ +
124 {
│ │ │ + │ │ │ +
126 typename _Period::type>;
│ │ │ +
127 };
│ │ │ +
│ │ │ +
128 /// @}
│ │ │ +
129
│ │ │ +
130 // 20.11.4.3 specialization of common_type (for time_point, sfinae-friendly)
│ │ │ +
131
│ │ │ +
132 /// @cond undocumented
│ │ │ +
133
│ │ │ +
134 template<typename _CT, typename _Clock, typename = void>
│ │ │ +
135 struct __timepoint_common_type
│ │ │ +
136 { };
│ │ │ +
137
│ │ │ +
138 template<typename _CT, typename _Clock>
│ │ │ +
139 struct __timepoint_common_type<_CT, _Clock, __void_t<typename _CT::type>>
│ │ │ +
140 {
│ │ │ +
141 using type = chrono::time_point<_Clock, typename _CT::type>;
│ │ │ +
142 };
│ │ │ +
143
│ │ │ +
144 /// @endcond
│ │ │ +
145
│ │ │ +
146 /// @{
│ │ │ +
147 /// @relates chrono::time_point
│ │ │ +
148
│ │ │ +
149 /// Specialization of common_type for chrono::time_point types.
│ │ │ +
150 template<typename _Clock, typename _Duration1, typename _Duration2>
│ │ │ +
│ │ │ +
151 struct common_type<chrono::time_point<_Clock, _Duration1>,
│ │ │ +
152 chrono::time_point<_Clock, _Duration2>>
│ │ │ +
153 : __timepoint_common_type<common_type<_Duration1, _Duration2>, _Clock>
│ │ │ +
154 { };
│ │ │ +
│ │ │ +
155
│ │ │ +
156 /// Specialization of common_type for two identical chrono::time_point types.
│ │ │ +
157 template<typename _Clock, typename _Duration>
│ │ │ +
│ │ │ +
158 struct common_type<chrono::time_point<_Clock, _Duration>,
│ │ │ +
159 chrono::time_point<_Clock, _Duration>>
│ │ │ + │ │ │ +
│ │ │ +
161
│ │ │ +
162 /// Specialization of common_type for one chrono::time_point type.
│ │ │ +
163 template<typename _Clock, typename _Duration>
│ │ │ +
│ │ │ +
164 struct common_type<chrono::time_point<_Clock, _Duration>>
│ │ │ + │ │ │ +
│ │ │ +
166 /// @}
│ │ │ +
167
│ │ │ +
168 /// @} group chrono
│ │ │ +
169
│ │ │ +
170 namespace chrono
│ │ │ +
171 {
│ │ │ +
172 /// @addtogroup chrono
│ │ │ +
173 /// @{
│ │ │ +
174
│ │ │ +
175 /// @cond undocumented
│ │ │ +
176
│ │ │ +
177 // Primary template for duration_cast impl.
│ │ │ +
178 template<typename _ToDur, typename _CF, typename _CR,
│ │ │ +
179 bool _NumIsOne = false, bool _DenIsOne = false>
│ │ │ +
180 struct __duration_cast_impl
│ │ │ +
181 {
│ │ │ +
182 template<typename _Rep, typename _Period>
│ │ │ +
183 static constexpr _ToDur
│ │ │ +
184 __cast(const duration<_Rep, _Period>& __d)
│ │ │ +
185 {
│ │ │ +
186 typedef typename _ToDur::rep __to_rep;
│ │ │ +
187 return _ToDur(static_cast<__to_rep>(static_cast<_CR>(__d.count())
│ │ │ +
188 * static_cast<_CR>(_CF::num)
│ │ │ +
189 / static_cast<_CR>(_CF::den)));
│ │ │ +
190 }
│ │ │ +
191 };
│ │ │ +
192
│ │ │ +
193 template<typename _ToDur, typename _CF, typename _CR>
│ │ │ +
194 struct __duration_cast_impl<_ToDur, _CF, _CR, true, true>
│ │ │ +
195 {
│ │ │ +
196 template<typename _Rep, typename _Period>
│ │ │ +
197 static constexpr _ToDur
│ │ │ +
198 __cast(const duration<_Rep, _Period>& __d)
│ │ │ +
199 {
│ │ │ +
200 typedef typename _ToDur::rep __to_rep;
│ │ │ +
201 return _ToDur(static_cast<__to_rep>(__d.count()));
│ │ │ +
202 }
│ │ │ +
203 };
│ │ │ +
204
│ │ │ +
205 template<typename _ToDur, typename _CF, typename _CR>
│ │ │ +
206 struct __duration_cast_impl<_ToDur, _CF, _CR, true, false>
│ │ │ +
207 {
│ │ │ +
208 template<typename _Rep, typename _Period>
│ │ │ +
209 static constexpr _ToDur
│ │ │ +
210 __cast(const duration<_Rep, _Period>& __d)
│ │ │ +
211 {
│ │ │ +
212 typedef typename _ToDur::rep __to_rep;
│ │ │ +
213 return _ToDur(static_cast<__to_rep>(
│ │ │ +
214 static_cast<_CR>(__d.count()) / static_cast<_CR>(_CF::den)));
│ │ │ +
215 }
│ │ │ +
216 };
│ │ │ +
217
│ │ │ +
218 template<typename _ToDur, typename _CF, typename _CR>
│ │ │ +
219 struct __duration_cast_impl<_ToDur, _CF, _CR, false, true>
│ │ │ +
220 {
│ │ │ +
221 template<typename _Rep, typename _Period>
│ │ │ +
222 static constexpr _ToDur
│ │ │ +
223 __cast(const duration<_Rep, _Period>& __d)
│ │ │ +
224 {
│ │ │ +
225 typedef typename _ToDur::rep __to_rep;
│ │ │ +
226 return _ToDur(static_cast<__to_rep>(
│ │ │ +
227 static_cast<_CR>(__d.count()) * static_cast<_CR>(_CF::num)));
│ │ │ +
228 }
│ │ │ +
229 };
│ │ │ +
230
│ │ │ +
231 template<typename _Tp>
│ │ │ +
232 struct __is_duration
│ │ │ + │ │ │ +
234 { };
│ │ │ +
235
│ │ │ +
236 template<typename _Rep, typename _Period>
│ │ │ +
237 struct __is_duration<duration<_Rep, _Period>>
│ │ │ + │ │ │ +
239 { };
│ │ │ +
240
│ │ │ +
241 template<typename _Tp>
│ │ │ +
242 using __enable_if_is_duration
│ │ │ +
243 = typename enable_if<__is_duration<_Tp>::value, _Tp>::type;
│ │ │ +
244
│ │ │ +
245 template<typename _Tp>
│ │ │ +
246 using __disable_if_is_duration
│ │ │ +
247 = typename enable_if<!__is_duration<_Tp>::value, _Tp>::type;
│ │ │ +
248
│ │ │ +
249#if __cplusplus >= 201703L
│ │ │ +
250 template<typename _Tp>
│ │ │ +
251 inline constexpr bool __is_duration_v = false;
│ │ │ +
252 template<typename _Rep, typename _Period>
│ │ │ +
253 inline constexpr bool __is_duration_v<duration<_Rep, _Period>> = true;
│ │ │ +
254 template<typename _Tp>
│ │ │ +
255 inline constexpr bool __is_time_point_v = false;
│ │ │ +
256 template<typename _Clock, typename _Dur>
│ │ │ +
257 inline constexpr bool __is_time_point_v<time_point<_Clock, _Dur>> = true;
│ │ │ +
258#endif
│ │ │ +
259
│ │ │ +
260 /// @endcond
│ │ │ +
261
│ │ │ +
262 /** Convert a `duration` to type `ToDur`.
│ │ │ +
263 *
│ │ │ +
264 * If the duration cannot be represented accurately in the result type,
│ │ │ +
265 * returns the result of integer truncation (i.e., rounded towards zero).
│ │ │ +
266 *
│ │ │ +
267 * @tparam _ToDur The result type must be a `duration`.
│ │ │ +
268 * @param __d A duration.
│ │ │ +
269 * @return The value of `__d` converted to type `_ToDur`.
│ │ │ +
270 * @since C++11
│ │ │ +
271 */
│ │ │ +
272 template<typename _ToDur, typename _Rep, typename _Period>
│ │ │ +
273 _GLIBCXX_NODISCARD
│ │ │ +
274 constexpr __enable_if_is_duration<_ToDur>
│ │ │ +
│ │ │ + │ │ │ +
276 {
│ │ │ +
277#if __cpp_inline_variables && __cpp_if_constexpr
│ │ │ +
278 if constexpr (is_same_v<_ToDur, duration<_Rep, _Period>>)
│ │ │ +
279 return __d;
│ │ │ +
280 else
│ │ │ +
281 {
│ │ │ +
282#endif
│ │ │ +
283 using __to_period = typename _ToDur::period;
│ │ │ +
284 using __to_rep = typename _ToDur::rep;
│ │ │ + │ │ │ + │ │ │ +
287 using __dc = __duration_cast_impl<_ToDur, __cf, __cr,
│ │ │ +
288 __cf::num == 1, __cf::den == 1>;
│ │ │ +
289 return __dc::__cast(__d);
│ │ │ +
290#if __cpp_inline_variables && __cpp_if_constexpr
│ │ │ +
291 }
│ │ │ +
292#endif
│ │ │ +
293 }
│ │ │ +
│ │ │ +
294
│ │ │ +
295 /** Trait indicating whether to treat a type as a floating-point type.
│ │ │ +
296 *
│ │ │ +
297 * The chrono library uses this trait to tell whether a `duration` can
│ │ │ +
298 * represent fractional values of the given precision, or only integral
│ │ │ +
299 * values.
│ │ │ +
300 *
│ │ │ +
301 * You should specialize this trait for your own numeric types that are
│ │ │ +
302 * used with `duration` and can represent non-integral values.
│ │ │ +
303 *
│ │ │ +
304 * @since C++11
│ │ │ +
305 */
│ │ │ +
306 template<typename _Rep>
│ │ │ +
│ │ │ + │ │ │ +
308 : is_floating_point<_Rep>
│ │ │ +
309 { };
│ │ │ +
│ │ │ +
310
│ │ │ +
311#if __cplusplus > 201402L
│ │ │ +
312 template <typename _Rep>
│ │ │ +
313 inline constexpr bool treat_as_floating_point_v =
│ │ │ + │ │ │ +
315
│ │ │ +
316 template<>
│ │ │ +
317 inline constexpr bool treat_as_floating_point_v<int> = false;
│ │ │ +
318 template<>
│ │ │ +
319 inline constexpr bool treat_as_floating_point_v<long> = false;
│ │ │ +
320 template<>
│ │ │ +
321 inline constexpr bool treat_as_floating_point_v<long long> = false;
│ │ │ +
322 template<>
│ │ │ +
323 inline constexpr bool treat_as_floating_point_v<float> = true;
│ │ │ +
324 template<>
│ │ │ +
325 inline constexpr bool treat_as_floating_point_v<double> = true;
│ │ │ +
326 template<>
│ │ │ +
327 inline constexpr bool treat_as_floating_point_v<long double> = true;
│ │ │ +
328#endif // C++17
│ │ │ +
329
│ │ │ +
330#if __cplusplus > 201703L
│ │ │ +
331#if __cpp_lib_concepts
│ │ │ +
332 template<typename _Tp>
│ │ │ +
333 inline constexpr bool is_clock_v = false;
│ │ │ +
334
│ │ │ +
335 template<typename _Tp>
│ │ │ +
336 requires requires {
│ │ │ +
337 typename _Tp::rep;
│ │ │ +
338 typename _Tp::period;
│ │ │ +
339 typename _Tp::duration;
│ │ │ +
340 typename _Tp::time_point::clock;
│ │ │ +
341 typename _Tp::time_point::duration;
│ │ │ +
342 { &_Tp::is_steady } -> same_as<const bool*>;
│ │ │ +
343 { _Tp::now() } -> same_as<typename _Tp::time_point>;
│ │ │ +
344 requires same_as<typename _Tp::duration,
│ │ │ +
345 duration<typename _Tp::rep, typename _Tp::period>>;
│ │ │ +
346 requires same_as<typename _Tp::time_point::duration,
│ │ │ +
347 typename _Tp::duration>;
│ │ │ +
348 }
│ │ │ +
349 inline constexpr bool is_clock_v<_Tp> = true;
│ │ │ +
350#else
│ │ │ +
351 template<typename _Tp, typename = void>
│ │ │ +
352 inline constexpr bool is_clock_v = false;
│ │ │ +
353
│ │ │ +
354 template<typename _Tp>
│ │ │ +
355 inline constexpr bool
│ │ │ +
356 is_clock_v<_Tp, void_t<typename _Tp::rep, typename _Tp::period,
│ │ │ +
357 typename _Tp::duration,
│ │ │ +
358 typename _Tp::time_point::duration,
│ │ │ +
359 decltype(_Tp::is_steady),
│ │ │ +
360 decltype(_Tp::now())>>
│ │ │ +
361 = __and_v<is_same<typename _Tp::duration,
│ │ │ + │ │ │ +
363 is_same<typename _Tp::time_point::duration,
│ │ │ +
364 typename _Tp::duration>,
│ │ │ +
365 is_same<decltype(&_Tp::is_steady), const bool*>,
│ │ │ +
366 is_same<decltype(_Tp::now()), typename _Tp::time_point>>;
│ │ │ +
367#endif
│ │ │ +
368
│ │ │ +
369 template<typename _Tp>
│ │ │ +
370 struct is_clock
│ │ │ +
371 : bool_constant<is_clock_v<_Tp>>
│ │ │ +
372 { };
│ │ │ +
373#endif // C++20
│ │ │ +
374
│ │ │ +
375#ifdef __glibcxx_chrono // C++ >= 17 && HOSTED
│ │ │ +
376 /** Convert a `duration` to type `ToDur` and round down.
│ │ │ +
377 *
│ │ │ +
378 * If the duration cannot be represented exactly in the result type,
│ │ │ +
379 * returns the closest value that is less than the argument.
│ │ │ +
380 *
│ │ │ +
381 * @tparam _ToDur The result type must be a `duration`.
│ │ │ +
382 * @param __d A duration.
│ │ │ +
383 * @return The value of `__d` converted to type `_ToDur`.
│ │ │ +
384 * @since C++17
│ │ │ +
385 */
│ │ │ +
386 template<typename _ToDur, typename _Rep, typename _Period>
│ │ │ +
387 [[nodiscard]] constexpr __enable_if_is_duration<_ToDur>
│ │ │ + │ │ │ +
389 {
│ │ │ +
390 auto __to = chrono::duration_cast<_ToDur>(__d);
│ │ │ +
391 if (__to > __d)
│ │ │ +
392 return __to - _ToDur{1};
│ │ │ +
393 return __to;
│ │ │ +
394 }
│ │ │ +
395
│ │ │ +
396 /** Convert a `duration` to type `ToDur` and round up.
│ │ │ +
397 *
│ │ │ +
398 * If the duration cannot be represented exactly in the result type,
│ │ │ +
399 * returns the closest value that is greater than the argument.
│ │ │ +
400 *
│ │ │ +
401 * @tparam _ToDur The result type must be a `duration`.
│ │ │ +
402 * @param __d A duration.
│ │ │ +
403 * @return The value of `__d` converted to type `_ToDur`.
│ │ │ +
404 * @since C++17
│ │ │ +
405 */
│ │ │ +
406 template<typename _ToDur, typename _Rep, typename _Period>
│ │ │ +
407 [[nodiscard]] constexpr __enable_if_is_duration<_ToDur>
│ │ │ +
408 ceil(const duration<_Rep, _Period>& __d)
│ │ │ +
409 {
│ │ │ +
410 auto __to = chrono::duration_cast<_ToDur>(__d);
│ │ │ +
411 if (__to < __d)
│ │ │ +
412 return __to + _ToDur{1};
│ │ │ +
413 return __to;
│ │ │ +
414 }
│ │ │ +
415
│ │ │ +
416 /** Convert a `duration` to type `ToDur` and round to the closest value.
│ │ │ +
417 *
│ │ │ +
418 * If the duration cannot be represented exactly in the result type,
│ │ │ +
419 * returns the closest value, rounding ties to even.
│ │ │ +
420 *
│ │ │ +
421 * @tparam _ToDur The result type must be a `duration` with a
│ │ │ +
422 * non-floating-point `rep` type.
│ │ │ +
423 * @param __d A duration.
│ │ │ +
424 * @return The value of `__d` converted to type `_ToDur`.
│ │ │ +
425 * @since C++17
│ │ │ +
426 */
│ │ │ +
427 template <typename _ToDur, typename _Rep, typename _Period>
│ │ │ +
428 [[nodiscard]] constexpr
│ │ │ + │ │ │ +
430 __and_<__is_duration<_ToDur>,
│ │ │ +
431 __not_<treat_as_floating_point<typename _ToDur::rep>>>::value,
│ │ │ +
432 _ToDur>
│ │ │ + │ │ │ +
434 {
│ │ │ +
435 _ToDur __t0 = chrono::floor<_ToDur>(__d);
│ │ │ +
436 _ToDur __t1 = __t0 + _ToDur{1};
│ │ │ +
437 auto __diff0 = __d - __t0;
│ │ │ +
438 auto __diff1 = __t1 - __d;
│ │ │ +
439 if (__diff0 == __diff1)
│ │ │ +
440 {
│ │ │ +
441 if (__t0.count() & 1)
│ │ │ +
442 return __t1;
│ │ │ +
443 return __t0;
│ │ │ +
444 }
│ │ │ +
445 else if (__diff0 < __diff1)
│ │ │ +
446 return __t0;
│ │ │ +
447 return __t1;
│ │ │ +
448 }
│ │ │ +
449
│ │ │ +
450 /** The absolute (non-negative) value of a duration.
│ │ │ +
451 *
│ │ │ +
452 * @param __d A duration with a signed `rep` type.
│ │ │ +
453 * @return A duration of the same type as the argument, with value |d|.
│ │ │ +
454 * @since C++17
│ │ │ +
455 */
│ │ │ +
456 template<typename _Rep, typename _Period>
│ │ │ +
457 [[nodiscard]] constexpr
│ │ │ +
458 enable_if_t<numeric_limits<_Rep>::is_signed, duration<_Rep, _Period>>
│ │ │ + │ │ │ +
460 {
│ │ │ +
461 if (__d >= __d.zero())
│ │ │ +
462 return __d;
│ │ │ +
463 return -__d;
│ │ │ +
464 }
│ │ │ +
465
│ │ │ +
466 // Make chrono::ceil<D> also usable as chrono::__detail::ceil<D>.
│ │ │ +
467 namespace __detail { using chrono::ceil; }
│ │ │ +
468
│ │ │ +
469#else // ! __glibcxx_chrono
│ │ │ +
470
│ │ │ +
471 // We want to use ceil even when compiling for earlier standards versions.
│ │ │ +
472 // C++11 only allows a single statement in a constexpr function, so we
│ │ │ +
473 // need to move the comparison into a separate function, __ceil_impl.
│ │ │ +
474 namespace __detail
│ │ │ +
475 {
│ │ │ +
476 template<typename _Tp, typename _Up>
│ │ │ +
477 constexpr _Tp
│ │ │ +
478 __ceil_impl(const _Tp& __t, const _Up& __u)
│ │ │ +
479 {
│ │ │ +
480 return (__t < __u) ? (__t + _Tp{1}) : __t;
│ │ │ +
481 }
│ │ │ +
482
│ │ │ +
483 // C++11-friendly version of std::chrono::ceil<D> for internal use.
│ │ │ +
484 template<typename _ToDur, typename _Rep, typename _Period>
│ │ │ +
485 constexpr _ToDur
│ │ │ +
486 ceil(const duration<_Rep, _Period>& __d)
│ │ │ +
487 {
│ │ │ +
488 return __detail::__ceil_impl(chrono::duration_cast<_ToDur>(__d), __d);
│ │ │ +
489 }
│ │ │ +
490 }
│ │ │ +
491#endif // __glibcxx_chrono
│ │ │ +
492
│ │ │ +
493 /// duration_values
│ │ │ +
494 template<typename _Rep>
│ │ │ +
│ │ │ + │ │ │ +
496 {
│ │ │ +
497 static constexpr _Rep
│ │ │ +
498 zero() noexcept
│ │ │ +
499 { return _Rep(0); }
│ │ │ +
500
│ │ │ +
501 static constexpr _Rep
│ │ │ +
502 max() noexcept
│ │ │ +
503 { return numeric_limits<_Rep>::max(); }
│ │ │ +
504
│ │ │ +
505 static constexpr _Rep
│ │ │ +
506 min() noexcept
│ │ │ +
507 { return numeric_limits<_Rep>::lowest(); }
│ │ │ +
508 };
│ │ │ +
│ │ │ +
509
│ │ │ +
510 template<typename _Rep, typename _Period>
│ │ │ +
│ │ │ +
511 class duration
│ │ │ +
512 {
│ │ │ +
513 static_assert(!__is_duration<_Rep>::value,
│ │ │ +
514 "rep cannot be a std::chrono::duration");
│ │ │ +
515 static_assert(__is_ratio<_Period>::value,
│ │ │ +
516 "period must be a specialization of std::ratio");
│ │ │ +
517 static_assert(_Period::num > 0, "period must be positive");
│ │ │ +
518
│ │ │ +
519 template<typename _Rep2>
│ │ │ +
520 using __is_float = treat_as_floating_point<_Rep2>;
│ │ │ +
521
│ │ │ +
522 static constexpr intmax_t
│ │ │ +
523 _S_gcd(intmax_t __m, intmax_t __n) noexcept
│ │ │ +
524 {
│ │ │ +
525 // Duration only allows positive periods so we don't need to
│ │ │ +
526 // handle negative values here (unlike __static_gcd and std::gcd).
│ │ │ +
527#if __cplusplus >= 201402L
│ │ │ +
528 do
│ │ │ +
529 {
│ │ │ +
530 intmax_t __rem = __m % __n;
│ │ │ +
531 __m = __n;
│ │ │ +
532 __n = __rem;
│ │ │ +
533 }
│ │ │ +
534 while (__n != 0);
│ │ │ +
535 return __m;
│ │ │ +
536#else
│ │ │ +
537 // C++11 doesn't allow loops in constexpr functions, but this
│ │ │ +
538 // recursive version can be more expensive to evaluate.
│ │ │ +
539 return (__n == 0) ? __m : _S_gcd(__n, __m % __n);
│ │ │ +
540#endif
│ │ │ +
541 }
│ │ │ +
542
│ │ │ +
543 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
544 // 2094. overflow shouldn't participate in overload resolution
│ │ │ +
545 // 3090. What is [2094] intended to mean?
│ │ │ +
546 // This only produces a valid type if no overflow occurs.
│ │ │ +
547 template<typename _R1, typename _R2,
│ │ │ +
548 intmax_t __gcd1 = _S_gcd(_R1::num, _R2::num),
│ │ │ +
549 intmax_t __gcd2 = _S_gcd(_R1::den, _R2::den)>
│ │ │ +
550 using __divide = ratio<(_R1::num / __gcd1) * (_R2::den / __gcd2),
│ │ │ +
551 (_R1::den / __gcd2) * (_R2::num / __gcd1)>;
│ │ │ +
552
│ │ │ +
553 // _Period2 is an exact multiple of _Period
│ │ │ +
554 template<typename _Period2>
│ │ │ +
555 using __is_harmonic
│ │ │ +
556 = __bool_constant<__divide<_Period2, _Period>::den == 1>;
│ │ │ +
557
│ │ │ +
558 public:
│ │ │ +
559
│ │ │ +
560 using rep = _Rep;
│ │ │ +
561 using period = typename _Period::type;
│ │ │ +
562
│ │ │ +
563 // 20.11.5.1 construction / copy / destroy
│ │ │ +
564 constexpr duration() = default;
│ │ │ +
565
│ │ │ +
566 duration(const duration&) = default;
│ │ │ +
567
│ │ │ +
568 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
569 // 3050. Conversion specification problem in chrono::duration
│ │ │ +
570 template<typename _Rep2, typename = _Require<
│ │ │ +
571 is_convertible<const _Rep2&, rep>,
│ │ │ +
572 __or_<__is_float<rep>, __not_<__is_float<_Rep2>>>>>
│ │ │ +
573 constexpr explicit duration(const _Rep2& __rep)
│ │ │ +
574 : __r(static_cast<rep>(__rep)) { }
│ │ │ +
575
│ │ │ +
576 template<typename _Rep2, typename _Period2, typename = _Require<
│ │ │ +
577 is_convertible<const _Rep2&, rep>,
│ │ │ +
578 __or_<__is_float<rep>,
│ │ │ +
579 __and_<__is_harmonic<_Period2>,
│ │ │ +
580 __not_<__is_float<_Rep2>>>>>>
│ │ │ +
581 constexpr duration(const duration<_Rep2, _Period2>& __d)
│ │ │ +
582 : __r(duration_cast<duration>(__d).count()) { }
│ │ │ +
583
│ │ │ +
584 ~duration() = default;
│ │ │ +
585 duration& operator=(const duration&) = default;
│ │ │ +
586
│ │ │ +
587 // 20.11.5.2 observer
│ │ │ +
588 constexpr rep
│ │ │ +
589 count() const
│ │ │ +
590 { return __r; }
│ │ │ +
591
│ │ │ +
592 // 20.11.5.3 arithmetic
│ │ │ +
593
│ │ │ +
594 constexpr duration<typename common_type<rep>::type, period>
│ │ │ +
595 operator+() const
│ │ │ +
596 { return duration<typename common_type<rep>::type, period>(__r); }
│ │ │ +
597
│ │ │ +
598 constexpr duration<typename common_type<rep>::type, period>
│ │ │ +
599 operator-() const
│ │ │ +
600 { return duration<typename common_type<rep>::type, period>(-__r); }
│ │ │ +
601
│ │ │ +
602 _GLIBCXX17_CONSTEXPR duration&
│ │ │ +
603 operator++()
│ │ │ +
604 {
│ │ │ +
605 ++__r;
│ │ │ +
606 return *this;
│ │ │ +
607 }
│ │ │ +
608
│ │ │ +
609 _GLIBCXX17_CONSTEXPR duration
│ │ │ +
610 operator++(int)
│ │ │ +
611 { return duration(__r++); }
│ │ │ +
612
│ │ │ +
613 _GLIBCXX17_CONSTEXPR duration&
│ │ │ +
614 operator--()
│ │ │ +
615 {
│ │ │ +
616 --__r;
│ │ │ +
617 return *this;
│ │ │ +
618 }
│ │ │ +
619
│ │ │ +
620 _GLIBCXX17_CONSTEXPR duration
│ │ │ +
621 operator--(int)
│ │ │ +
622 { return duration(__r--); }
│ │ │ +
623
│ │ │ +
624 _GLIBCXX17_CONSTEXPR duration&
│ │ │ +
625 operator+=(const duration& __d)
│ │ │ +
626 {
│ │ │ +
627 __r += __d.count();
│ │ │ +
628 return *this;
│ │ │ +
629 }
│ │ │ +
630
│ │ │ +
631 _GLIBCXX17_CONSTEXPR duration&
│ │ │ +
632 operator-=(const duration& __d)
│ │ │ +
633 {
│ │ │ +
634 __r -= __d.count();
│ │ │ +
635 return *this;
│ │ │ +
636 }
│ │ │ +
637
│ │ │ +
638 _GLIBCXX17_CONSTEXPR duration&
│ │ │ +
639 operator*=(const rep& __rhs)
│ │ │ +
640 {
│ │ │ +
641 __r *= __rhs;
│ │ │ +
642 return *this;
│ │ │ +
643 }
│ │ │ +
644
│ │ │ +
645 _GLIBCXX17_CONSTEXPR duration&
│ │ │ +
646 operator/=(const rep& __rhs)
│ │ │ +
647 {
│ │ │ +
648 __r /= __rhs;
│ │ │ +
649 return *this;
│ │ │ +
650 }
│ │ │ +
651
│ │ │ +
652 // DR 934.
│ │ │ +
653 template<typename _Rep2 = rep>
│ │ │ +
654 _GLIBCXX17_CONSTEXPR
│ │ │ +
655 __enable_if_t<!treat_as_floating_point<_Rep2>::value, duration&>
│ │ │ +
656 operator%=(const rep& __rhs)
│ │ │ +
657 {
│ │ │ +
658 __r %= __rhs;
│ │ │ +
659 return *this;
│ │ │ +
660 }
│ │ │ +
661
│ │ │ +
662 template<typename _Rep2 = rep>
│ │ │ +
663 _GLIBCXX17_CONSTEXPR
│ │ │ +
664 __enable_if_t<!treat_as_floating_point<_Rep2>::value, duration&>
│ │ │ +
665 operator%=(const duration& __d)
│ │ │ +
666 {
│ │ │ +
667 __r %= __d.count();
│ │ │ +
668 return *this;
│ │ │ +
669 }
│ │ │ +
670
│ │ │ +
671 // 20.11.5.4 special values
│ │ │ +
672 static constexpr duration
│ │ │ +
673 zero() noexcept
│ │ │ +
674 { return duration(duration_values<rep>::zero()); }
│ │ │ +
675
│ │ │ +
676 static constexpr duration
│ │ │ +
677 min() noexcept
│ │ │ +
678 { return duration(duration_values<rep>::min()); }
│ │ │ +
679
│ │ │ +
680 static constexpr duration
│ │ │ +
681 max() noexcept
│ │ │ +
682 { return duration(duration_values<rep>::max()); }
│ │ │ +
683
│ │ │ +
684 private:
│ │ │ +
685 rep __r;
│ │ │ +
686 };
│ │ │ +
│ │ │ +
687
│ │ │ +
688 /// @{
│ │ │ +
689 /// @relates std::chrono::duration
│ │ │ +
690
│ │ │ +
691 /// The sum of two durations.
│ │ │ +
692 template<typename _Rep1, typename _Period1,
│ │ │ +
693 typename _Rep2, typename _Period2>
│ │ │ +
694 constexpr typename common_type<duration<_Rep1, _Period1>,
│ │ │ + │ │ │ +
│ │ │ +
696 operator+(const duration<_Rep1, _Period1>& __lhs,
│ │ │ +
697 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
698 {
│ │ │ +
699 typedef duration<_Rep1, _Period1> __dur1;
│ │ │ +
700 typedef duration<_Rep2, _Period2> __dur2;
│ │ │ +
701 typedef typename common_type<__dur1,__dur2>::type __cd;
│ │ │ +
702 return __cd(__cd(__lhs).count() + __cd(__rhs).count());
│ │ │ +
703 }
│ │ │ +
│ │ │ +
704
│ │ │ +
705 /// The difference between two durations.
│ │ │ +
706 template<typename _Rep1, typename _Period1,
│ │ │ +
707 typename _Rep2, typename _Period2>
│ │ │ +
708 constexpr typename common_type<duration<_Rep1, _Period1>,
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
711 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
712 {
│ │ │ +
713 typedef duration<_Rep1, _Period1> __dur1;
│ │ │ +
714 typedef duration<_Rep2, _Period2> __dur2;
│ │ │ +
715 typedef typename common_type<__dur1,__dur2>::type __cd;
│ │ │ +
716 return __cd(__cd(__lhs).count() - __cd(__rhs).count());
│ │ │ +
717 }
│ │ │ +
│ │ │ +
718
│ │ │ +
719 /// @}
│ │ │ +
720
│ │ │ +
721 /// @cond undocumented
│ │ │ +
722
│ │ │ +
723 // SFINAE helper to obtain common_type<_Rep1, _Rep2> only if _Rep2
│ │ │ +
724 // is implicitly convertible to it.
│ │ │ +
725 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
726 // 3050. Conversion specification problem in chrono::duration constructor
│ │ │ +
727 template<typename _Rep1, typename _Rep2,
│ │ │ +
728 typename _CRep = typename common_type<_Rep1, _Rep2>::type>
│ │ │ +
729 using __common_rep_t = typename
│ │ │ + │ │ │ +
731
│ │ │ +
732 /// @endcond
│ │ │ +
733
│ │ │ +
734 /** @{
│ │ │ +
735 * Arithmetic operators for chrono::duration
│ │ │ +
736 * @relates std::chrono::duration
│ │ │ +
737 */
│ │ │ +
738
│ │ │ +
739 template<typename _Rep1, typename _Period, typename _Rep2>
│ │ │ +
740 constexpr duration<__common_rep_t<_Rep1, _Rep2>, _Period>
│ │ │ +
│ │ │ +
741 operator*(const duration<_Rep1, _Period>& __d, const _Rep2& __s)
│ │ │ +
742 {
│ │ │ +
743 typedef duration<typename common_type<_Rep1, _Rep2>::type, _Period>
│ │ │ +
744 __cd;
│ │ │ +
745 return __cd(__cd(__d).count() * __s);
│ │ │ +
746 }
│ │ │ +
│ │ │ +
747
│ │ │ +
748 template<typename _Rep1, typename _Rep2, typename _Period>
│ │ │ +
749 constexpr duration<__common_rep_t<_Rep2, _Rep1>, _Period>
│ │ │ +
│ │ │ +
750 operator*(const _Rep1& __s, const duration<_Rep2, _Period>& __d)
│ │ │ +
751 { return __d * __s; }
│ │ │ +
│ │ │ +
752
│ │ │ +
753 template<typename _Rep1, typename _Period, typename _Rep2>
│ │ │ +
754 constexpr
│ │ │ +
755 duration<__common_rep_t<_Rep1, __disable_if_is_duration<_Rep2>>, _Period>
│ │ │ +
│ │ │ +
756 operator/(const duration<_Rep1, _Period>& __d, const _Rep2& __s)
│ │ │ +
757 {
│ │ │ + │ │ │ +
759 __cd;
│ │ │ +
760 return __cd(__cd(__d).count() / __s);
│ │ │ +
761 }
│ │ │ +
│ │ │ +
762
│ │ │ +
763 template<typename _Rep1, typename _Period1,
│ │ │ +
764 typename _Rep2, typename _Period2>
│ │ │ +
765 constexpr typename common_type<_Rep1, _Rep2>::type
│ │ │ +
│ │ │ + │ │ │ +
767 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
768 {
│ │ │ +
769 typedef duration<_Rep1, _Period1> __dur1;
│ │ │ +
770 typedef duration<_Rep2, _Period2> __dur2;
│ │ │ +
771 typedef typename common_type<__dur1,__dur2>::type __cd;
│ │ │ +
772 return __cd(__lhs).count() / __cd(__rhs).count();
│ │ │ +
773 }
│ │ │ +
│ │ │ +
774
│ │ │ +
775 // DR 934.
│ │ │ +
776 template<typename _Rep1, typename _Period, typename _Rep2>
│ │ │ +
777 constexpr
│ │ │ +
778 duration<__common_rep_t<_Rep1, __disable_if_is_duration<_Rep2>>, _Period>
│ │ │ +
│ │ │ +
779 operator%(const duration<_Rep1, _Period>& __d, const _Rep2& __s)
│ │ │ +
780 {
│ │ │ + │ │ │ +
782 __cd;
│ │ │ +
783 return __cd(__cd(__d).count() % __s);
│ │ │ +
784 }
│ │ │ +
│ │ │ +
785
│ │ │ +
786 template<typename _Rep1, typename _Period1,
│ │ │ +
787 typename _Rep2, typename _Period2>
│ │ │ +
788 constexpr typename common_type<duration<_Rep1, _Period1>,
│ │ │ +
789 duration<_Rep2, _Period2>>::type
│ │ │ +
│ │ │ + │ │ │ +
791 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
792 {
│ │ │ +
793 typedef duration<_Rep1, _Period1> __dur1;
│ │ │ +
794 typedef duration<_Rep2, _Period2> __dur2;
│ │ │ +
795 typedef typename common_type<__dur1,__dur2>::type __cd;
│ │ │ +
796 return __cd(__cd(__lhs).count() % __cd(__rhs).count());
│ │ │ +
797 }
│ │ │ +
│ │ │ +
798 /// @}
│ │ │ +
799
│ │ │ +
800 // comparisons
│ │ │ +
801
│ │ │ +
802 /** @{
│ │ │ +
803 * Comparisons for chrono::duration
│ │ │ +
804 * @relates std::chrono::duration
│ │ │ +
805 */
│ │ │ +
806
│ │ │ +
807 template<typename _Rep1, typename _Period1,
│ │ │ +
808 typename _Rep2, typename _Period2>
│ │ │ +
809 constexpr bool
│ │ │ +
│ │ │ +
810 operator==(const duration<_Rep1, _Period1>& __lhs,
│ │ │ +
811 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
812 {
│ │ │ +
813 typedef duration<_Rep1, _Period1> __dur1;
│ │ │ +
814 typedef duration<_Rep2, _Period2> __dur2;
│ │ │ +
815 typedef typename common_type<__dur1,__dur2>::type __ct;
│ │ │ +
816 return __ct(__lhs).count() == __ct(__rhs).count();
│ │ │ +
817 }
│ │ │ +
│ │ │ +
818
│ │ │ +
819 template<typename _Rep1, typename _Period1,
│ │ │ +
820 typename _Rep2, typename _Period2>
│ │ │ +
│ │ │ +
821 constexpr bool
│ │ │ + │ │ │ +
823 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
824 {
│ │ │ +
825 typedef duration<_Rep1, _Period1> __dur1;
│ │ │ +
826 typedef duration<_Rep2, _Period2> __dur2;
│ │ │ +
827 typedef typename common_type<__dur1,__dur2>::type __ct;
│ │ │ +
828 return __ct(__lhs).count() < __ct(__rhs).count();
│ │ │ +
829 }
│ │ │ +
│ │ │ +
830
│ │ │ +
831#if __cpp_lib_three_way_comparison
│ │ │ +
832 template<typename _Rep1, typename _Period1,
│ │ │ +
833 typename _Rep2, typename _Period2>
│ │ │ +
834 requires three_way_comparable<common_type_t<_Rep1, _Rep2>>
│ │ │ +
│ │ │ +
835 constexpr auto
│ │ │ + │ │ │ +
837 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
838 {
│ │ │ + │ │ │ + │ │ │ +
841 return __ct(__lhs).count() <=> __ct(__rhs).count();
│ │ │ +
842 }
│ │ │ +
│ │ │ +
843#else
│ │ │ +
844 template<typename _Rep1, typename _Period1,
│ │ │ +
845 typename _Rep2, typename _Period2>
│ │ │ +
846 constexpr bool
│ │ │ +
847 operator!=(const duration<_Rep1, _Period1>& __lhs,
│ │ │ +
848 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
849 { return !(__lhs == __rhs); }
│ │ │ +
850#endif
│ │ │ +
851
│ │ │ +
852 template<typename _Rep1, typename _Period1,
│ │ │ +
853 typename _Rep2, typename _Period2>
│ │ │ +
│ │ │ +
854 constexpr bool
│ │ │ + │ │ │ +
856 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
857 { return !(__rhs < __lhs); }
│ │ │ +
│ │ │ +
858
│ │ │ +
859 template<typename _Rep1, typename _Period1,
│ │ │ +
860 typename _Rep2, typename _Period2>
│ │ │ +
861 constexpr bool
│ │ │ +
│ │ │ + │ │ │ +
863 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
864 { return __rhs < __lhs; }
│ │ │ +
│ │ │ +
865
│ │ │ +
866 template<typename _Rep1, typename _Period1,
│ │ │ +
867 typename _Rep2, typename _Period2>
│ │ │ +
868 constexpr bool
│ │ │ +
│ │ │ + │ │ │ +
870 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
871 { return !(__lhs < __rhs); }
│ │ │ +
│ │ │ +
872
│ │ │ +
873 /// @}
│ │ │ +
874
│ │ │ +
875 /// @cond undocumented
│ │ │ +
876#ifdef _GLIBCXX_USE_C99_STDINT
│ │ │ +
877# define _GLIBCXX_CHRONO_INT64_T int64_t
│ │ │ +
878#elif defined __INT64_TYPE__
│ │ │ +
879# define _GLIBCXX_CHRONO_INT64_T __INT64_TYPE__
│ │ │ +
880#else
│ │ │ + │ │ │ +
882 "Representation type for nanoseconds must have at least 64 bits");
│ │ │ +
883# define _GLIBCXX_CHRONO_INT64_T long long
│ │ │ +
884#endif
│ │ │ +
885 /// @endcond
│ │ │ +
886
│ │ │ +
887 /// nanoseconds
│ │ │ + │ │ │ +
889
│ │ │ +
890 /// microseconds
│ │ │ + │ │ │ +
892
│ │ │ +
893 /// milliseconds
│ │ │ + │ │ │ +
895
│ │ │ +
896 /// seconds
│ │ │ + │ │ │ +
898
│ │ │ +
899 /// minutes
│ │ │ + │ │ │ +
901
│ │ │ +
902 /// hours
│ │ │ + │ │ │ +
904
│ │ │ +
905#if __cplusplus > 201703L
│ │ │ +
906 /// days
│ │ │ + │ │ │ +
908
│ │ │ +
909 /// weeks
│ │ │ + │ │ │ +
911
│ │ │ +
912 /// years
│ │ │ + │ │ │ +
914
│ │ │ +
915 /// months
│ │ │ + │ │ │ +
917#endif // C++20
│ │ │ +
918
│ │ │ +
919#undef _GLIBCXX_CHRONO_INT64_T
│ │ │ +
920
│ │ │ +
921 template<typename _Clock, typename _Dur>
│ │ │ +
│ │ │ +
922 class time_point
│ │ │ +
923 {
│ │ │ +
924 static_assert(__is_duration<_Dur>::value,
│ │ │ +
925 "duration must be a specialization of std::chrono::duration");
│ │ │ +
926
│ │ │ +
927 public:
│ │ │ +
928 typedef _Clock clock;
│ │ │ +
929 typedef _Dur duration;
│ │ │ +
930 typedef typename duration::rep rep;
│ │ │ +
931 typedef typename duration::period period;
│ │ │ +
932
│ │ │ +
933 constexpr time_point() : __d(duration::zero())
│ │ │ +
934 { }
│ │ │ +
935
│ │ │ +
936 constexpr explicit time_point(const duration& __dur)
│ │ │ +
937 : __d(__dur)
│ │ │ +
938 { }
│ │ │ +
939
│ │ │ +
940 // conversions
│ │ │ +
941 template<typename _Dur2,
│ │ │ +
942 typename = _Require<is_convertible<_Dur2, _Dur>>>
│ │ │ +
943 constexpr time_point(const time_point<clock, _Dur2>& __t)
│ │ │ +
944 : __d(__t.time_since_epoch())
│ │ │ +
945 { }
│ │ │ +
946
│ │ │ +
947 // observer
│ │ │ +
948 constexpr duration
│ │ │ +
949 time_since_epoch() const
│ │ │ +
950 { return __d; }
│ │ │ +
951
│ │ │ +
952#if __cplusplus > 201703L
│ │ │ +
953 constexpr time_point&
│ │ │ +
954 operator++()
│ │ │ +
955 {
│ │ │ +
956 ++__d;
│ │ │ +
957 return *this;
│ │ │ +
958 }
│ │ │ +
959
│ │ │ +
960 constexpr time_point
│ │ │ +
961 operator++(int)
│ │ │ +
962 { return time_point{__d++}; }
│ │ │ +
963
│ │ │ +
964 constexpr time_point&
│ │ │ +
965 operator--()
│ │ │ +
966 {
│ │ │ +
967 --__d;
│ │ │ +
968 return *this;
│ │ │ +
969 }
│ │ │ +
970
│ │ │ +
971 constexpr time_point
│ │ │ +
972 operator--(int)
│ │ │ +
973 { return time_point{__d--}; }
│ │ │ +
974#endif
│ │ │ +
975
│ │ │ +
976 // arithmetic
│ │ │ +
977 _GLIBCXX17_CONSTEXPR time_point&
│ │ │ +
978 operator+=(const duration& __dur)
│ │ │ +
979 {
│ │ │ +
980 __d += __dur;
│ │ │ +
981 return *this;
│ │ │ +
982 }
│ │ │ +
983
│ │ │ +
984 _GLIBCXX17_CONSTEXPR time_point&
│ │ │ +
985 operator-=(const duration& __dur)
│ │ │ +
986 {
│ │ │ +
987 __d -= __dur;
│ │ │ +
988 return *this;
│ │ │ +
989 }
│ │ │ +
990
│ │ │ +
991 // special values
│ │ │ +
992 static constexpr time_point
│ │ │ +
993 min() noexcept
│ │ │ +
994 { return time_point(duration::min()); }
│ │ │ +
995
│ │ │ +
996 static constexpr time_point
│ │ │ +
997 max() noexcept
│ │ │ +
998 { return time_point(duration::max()); }
│ │ │ +
999
│ │ │ +
1000 private:
│ │ │ +
1001 duration __d;
│ │ │ +
1002 };
│ │ │ +
│ │ │ +
1003
│ │ │ +
1004 /** Convert a `time_point` to use `duration` type `ToDur`.
│ │ │ +
1005 *
│ │ │ +
1006 * The result is the same time point as measured by the same clock, but
│ │ │ +
1007 * using the specified `duration` to represent the time.
│ │ │ +
1008 * If the time point cannot be represented accurately in the result type,
│ │ │ +
1009 * returns the result of integer truncation (i.e., rounded towards zero).
│ │ │ +
1010 *
│ │ │ +
1011 * @tparam _ToDur The `duration` type to use for the result.
│ │ │ +
1012 * @param __t A time point.
│ │ │ +
1013 * @return The value of `__t` converted to use type `_ToDur`.
│ │ │ +
1014 * @since C++11
│ │ │ +
1015 */
│ │ │ +
1016 template<typename _ToDur, typename _Clock, typename _Dur>
│ │ │ +
1017 _GLIBCXX_NODISCARD constexpr
│ │ │ +
1018 __enable_if_t<__is_duration<_ToDur>::value, time_point<_Clock, _ToDur>>
│ │ │ +
│ │ │ + │ │ │ +
1020 {
│ │ │ +
1021 typedef time_point<_Clock, _ToDur> __time_point;
│ │ │ +
1022 return __time_point(duration_cast<_ToDur>(__t.time_since_epoch()));
│ │ │ +
1023 }
│ │ │ +
│ │ │ +
1024
│ │ │ +
1025#if __cplusplus > 201402L
│ │ │ +
1026 /** Convert a `time_point` to type `ToDur` and round down.
│ │ │ +
1027 *
│ │ │ +
1028 * The result is the same time point as measured by the same clock, but
│ │ │ +
1029 * using the specified `duration` to represent the time.
│ │ │ +
1030 * If the time point cannot be represented exactly in the result type,
│ │ │ +
1031 * returns the closest value that is less than the argument.
│ │ │ +
1032 *
│ │ │ +
1033 * @tparam _ToDur The `duration` type to use for the result.
│ │ │ +
1034 * @param __t A time point.
│ │ │ +
1035 * @return The value of `__d` converted to type `_ToDur`.
│ │ │ +
1036 * @since C++17
│ │ │ +
1037 */
│ │ │ +
1038 template<typename _ToDur, typename _Clock, typename _Dur>
│ │ │ +
1039 [[nodiscard]] constexpr
│ │ │ +
1040 enable_if_t<__is_duration_v<_ToDur>, time_point<_Clock, _ToDur>>
│ │ │ +
│ │ │ + │ │ │ +
1042 {
│ │ │ + │ │ │ +
1044 chrono::floor<_ToDur>(__tp.time_since_epoch())};
│ │ │ +
1045 }
│ │ │ +
│ │ │ +
1046
│ │ │ +
1047 /** Convert a `time_point` to type `ToDur` and round up.
│ │ │ +
1048 *
│ │ │ +
1049 * The result is the same time point as measured by the same clock, but
│ │ │ +
1050 * using the specified `duration` to represent the time.
│ │ │ +
1051 * If the time point cannot be represented exactly in the result type,
│ │ │ +
1052 * returns the closest value that is greater than the argument.
│ │ │ +
1053 *
│ │ │ +
1054 * @tparam _ToDur The `duration` type to use for the result.
│ │ │ +
1055 * @param __t A time point.
│ │ │ +
1056 * @return The value of `__d` converted to type `_ToDur`.
│ │ │ +
1057 * @since C++17
│ │ │ +
1058 */
│ │ │ +
1059 template<typename _ToDur, typename _Clock, typename _Dur>
│ │ │ +
1060 [[nodiscard]] constexpr
│ │ │ +
1061 enable_if_t<__is_duration_v<_ToDur>, time_point<_Clock, _ToDur>>
│ │ │ +
│ │ │ + │ │ │ +
1063 {
│ │ │ + │ │ │ +
1065 chrono::ceil<_ToDur>(__tp.time_since_epoch())};
│ │ │ +
1066 }
│ │ │ +
│ │ │ +
1067
│ │ │ +
1068 /** Convert a `time_point` to type `ToDur` and round to the closest value.
│ │ │ +
1069 *
│ │ │ +
1070 * The result is the same time point as measured by the same clock, but
│ │ │ +
1071 * using the specified `duration` to represent the time.
│ │ │ +
1072 * If the time point cannot be represented exactly in the result type,
│ │ │ +
1073 * returns the closest value, rounding ties to even.
│ │ │ +
1074 *
│ │ │ +
1075 * @tparam _ToDur The `duration` type to use for the result,
│ │ │ +
1076 * which must have a non-floating-point `rep` type.
│ │ │ +
1077 * @param __t A time point.
│ │ │ +
1078 * @return The value of `__d` converted to type `_ToDur`.
│ │ │ +
1079 * @since C++17
│ │ │ +
1080 */
│ │ │ +
1081 template<typename _ToDur, typename _Clock, typename _Dur>
│ │ │ +
1082 [[nodiscard]] constexpr
│ │ │ + │ │ │ +
1084 && !treat_as_floating_point_v<typename _ToDur::rep>,
│ │ │ +
1085 time_point<_Clock, _ToDur>>
│ │ │ +
│ │ │ + │ │ │ +
1087 {
│ │ │ + │ │ │ +
1089 chrono::round<_ToDur>(__tp.time_since_epoch())};
│ │ │ +
1090 }
│ │ │ +
│ │ │ +
1091#endif // C++17
│ │ │ +
1092
│ │ │ +
1093 /// @{
│ │ │ +
1094 /// @relates time_point
│ │ │ +
1095
│ │ │ +
1096 /// Adjust a time point forwards by the given duration.
│ │ │ +
1097 template<typename _Clock, typename _Dur1,
│ │ │ +
1098 typename _Rep2, typename _Period2>
│ │ │ +
1099 constexpr time_point<_Clock,
│ │ │ + │ │ │ +
│ │ │ +
1101 operator+(const time_point<_Clock, _Dur1>& __lhs,
│ │ │ +
1102 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
1103 {
│ │ │ +
1104 typedef duration<_Rep2, _Period2> __dur2;
│ │ │ +
1105 typedef typename common_type<_Dur1,__dur2>::type __ct;
│ │ │ +
1106 typedef time_point<_Clock, __ct> __time_point;
│ │ │ +
1107 return __time_point(__lhs.time_since_epoch() + __rhs);
│ │ │ +
1108 }
│ │ │ +
│ │ │ +
1109
│ │ │ +
1110 /// Adjust a time point forwards by the given duration.
│ │ │ +
1111 template<typename _Rep1, typename _Period1,
│ │ │ +
1112 typename _Clock, typename _Dur2>
│ │ │ +
1113 constexpr time_point<_Clock,
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1116 const time_point<_Clock, _Dur2>& __rhs)
│ │ │ +
1117 {
│ │ │ +
1118 typedef duration<_Rep1, _Period1> __dur1;
│ │ │ +
1119 typedef typename common_type<__dur1,_Dur2>::type __ct;
│ │ │ +
1120 typedef time_point<_Clock, __ct> __time_point;
│ │ │ +
1121 return __time_point(__rhs.time_since_epoch() + __lhs);
│ │ │ +
1122 }
│ │ │ +
│ │ │ +
1123
│ │ │ +
1124 /// Adjust a time point backwards by the given duration.
│ │ │ +
1125 template<typename _Clock, typename _Dur1,
│ │ │ +
1126 typename _Rep2, typename _Period2>
│ │ │ +
1127 constexpr time_point<_Clock,
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
1130 const duration<_Rep2, _Period2>& __rhs)
│ │ │ +
1131 {
│ │ │ +
1132 typedef duration<_Rep2, _Period2> __dur2;
│ │ │ +
1133 typedef typename common_type<_Dur1,__dur2>::type __ct;
│ │ │ +
1134 typedef time_point<_Clock, __ct> __time_point;
│ │ │ +
1135 return __time_point(__lhs.time_since_epoch() -__rhs);
│ │ │ +
1136 }
│ │ │ +
│ │ │ +
1137
│ │ │ +
1138 /// The difference between two time points (as a duration)
│ │ │ +
1139 template<typename _Clock, typename _Dur1, typename _Dur2>
│ │ │ +
1140 constexpr typename common_type<_Dur1, _Dur2>::type
│ │ │ +
│ │ │ + │ │ │ +
1142 const time_point<_Clock, _Dur2>& __rhs)
│ │ │ +
1143 { return __lhs.time_since_epoch() - __rhs.time_since_epoch(); }
│ │ │ +
│ │ │ +
1144 /// @}
│ │ │ +
1145
│ │ │ +
1146 /** @{
│ │ │ +
1147 * Comparisons for time_point
│ │ │ +
1148 * @relates chrono::time_point
│ │ │ +
1149 */
│ │ │ +
1150
│ │ │ +
1151 template<typename _Clock, typename _Dur1, typename _Dur2>
│ │ │ +
1152 constexpr bool
│ │ │ +
1153 operator==(const time_point<_Clock, _Dur1>& __lhs,
│ │ │ +
1154 const time_point<_Clock, _Dur2>& __rhs)
│ │ │ +
1155 { return __lhs.time_since_epoch() == __rhs.time_since_epoch(); }
│ │ │ +
1156
│ │ │ +
1157#if __cpp_lib_three_way_comparison
│ │ │ +
1158 template<typename _Clock, typename _Dur1,
│ │ │ +
1159 three_way_comparable_with<_Dur1> _Dur2>
│ │ │ +
1160 constexpr auto
│ │ │ +
1161 operator<=>(const time_point<_Clock, _Dur1>& __lhs,
│ │ │ +
1162 const time_point<_Clock, _Dur2>& __rhs)
│ │ │ +
1163 { return __lhs.time_since_epoch() <=> __rhs.time_since_epoch(); }
│ │ │ +
1164#else
│ │ │ +
1165 template<typename _Clock, typename _Dur1, typename _Dur2>
│ │ │ +
1166 constexpr bool
│ │ │ +
1167 operator!=(const time_point<_Clock, _Dur1>& __lhs,
│ │ │ +
1168 const time_point<_Clock, _Dur2>& __rhs)
│ │ │ +
1169 { return !(__lhs == __rhs); }
│ │ │ +
1170#endif
│ │ │ +
1171
│ │ │ +
1172 template<typename _Clock, typename _Dur1, typename _Dur2>
│ │ │ +
1173 constexpr bool
│ │ │ + │ │ │ +
1175 const time_point<_Clock, _Dur2>& __rhs)
│ │ │ +
1176 { return __lhs.time_since_epoch() < __rhs.time_since_epoch(); }
│ │ │ +
1177
│ │ │ +
1178 template<typename _Clock, typename _Dur1, typename _Dur2>
│ │ │ +
1179 constexpr bool
│ │ │ + │ │ │ +
1181 const time_point<_Clock, _Dur2>& __rhs)
│ │ │ +
1182 { return !(__rhs < __lhs); }
│ │ │ +
1183
│ │ │ +
1184 template<typename _Clock, typename _Dur1, typename _Dur2>
│ │ │ +
1185 constexpr bool
│ │ │ + │ │ │ +
1187 const time_point<_Clock, _Dur2>& __rhs)
│ │ │ +
1188 { return __rhs < __lhs; }
│ │ │ +
1189
│ │ │ +
1190 template<typename _Clock, typename _Dur1, typename _Dur2>
│ │ │ +
1191 constexpr bool
│ │ │ + │ │ │ +
1193 const time_point<_Clock, _Dur2>& __rhs)
│ │ │ +
1194 { return !(__lhs < __rhs); }
│ │ │ +
1195
│ │ │ +
1196 /// @}
│ │ │ +
1197 /// @} group chrono
│ │ │ +
1198
│ │ │ +
1199 // Clocks.
│ │ │ +
1200
│ │ │ +
1201 // Why nanosecond resolution as the default?
│ │ │ +
1202 // Why have std::system_clock always count in the highest
│ │ │ +
1203 // resolution (ie nanoseconds), even if on some OSes the low 3
│ │ │ +
1204 // or 9 decimal digits will be always zero? This allows later
│ │ │ +
1205 // implementations to change the system_clock::now()
│ │ │ +
1206 // implementation any time to provide better resolution without
│ │ │ +
1207 // changing function signature or units.
│ │ │ +
1208
│ │ │ +
1209 // To support the (forward) evolution of the library's defined
│ │ │ +
1210 // clocks, wrap inside inline namespace so that the current
│ │ │ +
1211 // defintions of system_clock, steady_clock, and
│ │ │ +
1212 // high_resolution_clock types are uniquely mangled. This way, new
│ │ │ +
1213 // code can use the latests clocks, while the library can contain
│ │ │ +
1214 // compatibility definitions for previous versions. At some
│ │ │ +
1215 // point, when these clocks settle down, the inlined namespaces
│ │ │ +
1216 // can be removed. XXX GLIBCXX_ABI Deprecated
│ │ │ +
1217_GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2)
│ │ │ +
1218
│ │ │ +
1219 /**
│ │ │ +
1220 * @brief System clock.
│ │ │ +
1221 *
│ │ │ +
1222 * Time returned represents wall time from the system-wide clock.
│ │ │ +
1223 * @ingroup chrono
│ │ │ +
1224 */
│ │ │ +
│ │ │ + │ │ │ +
1226 {
│ │ │ +
1227 typedef chrono::nanoseconds duration;
│ │ │ +
1228 typedef duration::rep rep;
│ │ │ +
1229 typedef duration::period period;
│ │ │ + │ │ │ +
1231
│ │ │ +
1232 static_assert(system_clock::duration::min()
│ │ │ +
1233 < system_clock::duration::zero(),
│ │ │ +
1234 "a clock's minimum duration cannot be less than its epoch");
│ │ │ +
1235
│ │ │ +
1236 static constexpr bool is_steady = false;
│ │ │ +
1237
│ │ │ +
1238 static time_point
│ │ │ +
1239 now() noexcept;
│ │ │ +
1240
│ │ │ +
1241 // Map to C API
│ │ │ +
1242 [[__gnu__::__always_inline__]]
│ │ │ +
1243 static std::time_t
│ │ │ +
1244 to_time_t(const time_point& __t) noexcept
│ │ │ +
1245 {
│ │ │ +
1246 return std::time_t(duration_cast<chrono::seconds>
│ │ │ +
1247 (__t.time_since_epoch()).count());
│ │ │ +
1248 }
│ │ │ +
1249
│ │ │ +
1250 [[__gnu__::__always_inline__]]
│ │ │ +
1251 static time_point
│ │ │ +
1252 from_time_t(std::time_t __t) noexcept
│ │ │ +
1253 {
│ │ │ + │ │ │ + │ │ │ +
1256 (__from(chrono::seconds(__t)));
│ │ │ +
1257 }
│ │ │ +
1258 };
│ │ │ +
│ │ │ +
1259
│ │ │ +
1260
│ │ │ +
1261 /**
│ │ │ +
1262 * @brief Monotonic clock
│ │ │ +
1263 *
│ │ │ +
1264 * Time returned has the property of only increasing at a uniform rate.
│ │ │ +
1265 * @ingroup chrono
│ │ │ +
1266 */
│ │ │ +
│ │ │ + │ │ │ +
1268 {
│ │ │ +
1269 typedef chrono::nanoseconds duration;
│ │ │ +
1270 typedef duration::rep rep;
│ │ │ +
1271 typedef duration::period period;
│ │ │ + │ │ │ +
1273
│ │ │ +
1274 static constexpr bool is_steady = true;
│ │ │ +
1275
│ │ │ +
1276 static time_point
│ │ │ +
1277 now() noexcept;
│ │ │ +
1278 };
│ │ │ +
│ │ │ +
1279
│ │ │ +
1280
│ │ │ +
1281 /**
│ │ │ +
1282 * @brief Highest-resolution clock
│ │ │ +
1283 *
│ │ │ +
1284 * This is the clock "with the shortest tick period." Alias to
│ │ │ +
1285 * std::system_clock until higher-than-nanosecond definitions
│ │ │ +
1286 * become feasible.
│ │ │ +
1287 * @ingroup chrono
│ │ │ +
1288 */
│ │ │ + │ │ │ +
1290
│ │ │ +
1291_GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
│ │ │ +
1292
│ │ │ +
1293#if __cplusplus >= 202002L
│ │ │ +
1294 /// @addtogroup chrono
│ │ │ +
1295 /// @{
│ │ │ +
1296 template<typename _Duration>
│ │ │ +
1297 using sys_time = time_point<system_clock, _Duration>;
│ │ │ +
1298 using sys_seconds = sys_time<seconds>;
│ │ │ +
1299 using sys_days = sys_time<days>;
│ │ │ +
1300
│ │ │ +
1301 using file_clock = ::std::filesystem::__file_clock;
│ │ │ +
1302
│ │ │ +
1303 template<typename _Duration>
│ │ │ +
1304 using file_time = time_point<file_clock, _Duration>;
│ │ │ +
1305
│ │ │ +
1306 template<> struct is_clock<system_clock> : true_type { };
│ │ │ +
1307 template<> struct is_clock<steady_clock> : true_type { };
│ │ │ +
1308 template<> struct is_clock<file_clock> : true_type { };
│ │ │ +
1309
│ │ │ +
1310 template<> inline constexpr bool is_clock_v<system_clock> = true;
│ │ │ +
1311 template<> inline constexpr bool is_clock_v<steady_clock> = true;
│ │ │ +
1312 template<> inline constexpr bool is_clock_v<file_clock> = true;
│ │ │ +
1313 /// @}
│ │ │ +
1314#endif // C++20
│ │ │ +
1315 } // namespace chrono
│ │ │ +
1316
│ │ │ +
1317#ifdef __glibcxx_chrono_udls // C++ >= 14 && HOSTED
│ │ │ +
1318 inline namespace literals
│ │ │ +
1319 {
│ │ │ +
1320 /** ISO C++ 2014 namespace for suffixes for duration literals.
│ │ │ +
1321 *
│ │ │ +
1322 * These suffixes can be used to create `chrono::duration` values with
│ │ │ +
1323 * tick periods of hours, minutes, seconds, milliseconds, microseconds
│ │ │ +
1324 * or nanoseconds. For example, `std::chrono::seconds(5)` can be written
│ │ │ +
1325 * as `5s` after making the suffix visible in the current scope.
│ │ │ +
1326 * The suffixes can be made visible by a using-directive or
│ │ │ +
1327 * using-declaration such as:
│ │ │ +
1328 * - `using namespace std::chrono_literals;`
│ │ │ +
1329 * - `using namespace std::literals;`
│ │ │ +
1330 * - `using namespace std::chrono;`
│ │ │ +
1331 * - `using namespace std;`
│ │ │ +
1332 * - `using std::chrono_literals::operator""s;`
│ │ │ +
1333 *
│ │ │ +
1334 * The result of these suffixes on an integer literal is one of the
│ │ │ +
1335 * standard typedefs such as `std::chrono::hours`.
│ │ │ +
1336 * The result on a floating-point literal is a duration type with the
│ │ │ +
1337 * specified tick period and an unspecified floating-point representation,
│ │ │ +
1338 * for example `1.5e2ms` might be equivalent to
│ │ │ +
1339 * `chrono::duration<long double, chrono::milli>(1.5e2)`.
│ │ │ +
1340 *
│ │ │ +
1341 * @since C+14
│ │ │ +
1342 * @ingroup chrono
│ │ │ +
1343 */
│ │ │ +
1344 inline namespace chrono_literals
│ │ │ +
1345 {
│ │ │ +
1346 /// @addtogroup chrono
│ │ │ +
1347 /// @{
│ │ │ +
1348
│ │ │ +
1349#pragma GCC diagnostic push
│ │ │ +
1350#pragma GCC diagnostic ignored "-Wliteral-suffix"
│ │ │ +
1351 /// @cond undocumented
│ │ │ +
1352 template<typename _Dur, char... _Digits>
│ │ │ +
1353 constexpr _Dur __check_overflow()
│ │ │ +
1354 {
│ │ │ +
1355 using _Val = __parse_int::_Parse_int<_Digits...>;
│ │ │ +
1356 constexpr typename _Dur::rep __repval = _Val::value;
│ │ │ +
1357 static_assert(__repval >= 0 && __repval == _Val::value,
│ │ │ +
1358 "literal value cannot be represented by duration type");
│ │ │ +
1359 return _Dur(__repval);
│ │ │ +
1360 }
│ │ │ +
1361 /// @endcond
│ │ │ +
1362
│ │ │ +
1363 /// Literal suffix for durations representing non-integer hours
│ │ │ +
1364 constexpr chrono::duration<long double, ratio<3600,1>>
│ │ │ +
1365 operator""h(long double __hours)
│ │ │ +
1366 { return chrono::duration<long double, ratio<3600,1>>{__hours}; }
│ │ │ +
1367
│ │ │ +
1368 /// Literal suffix for durations of type `std::chrono::hours`
│ │ │ +
1369 template <char... _Digits>
│ │ │ +
1370 constexpr chrono::hours
│ │ │ +
1371 operator""h()
│ │ │ +
1372 { return __check_overflow<chrono::hours, _Digits...>(); }
│ │ │ +
1373
│ │ │ +
1374 /// Literal suffix for durations representing non-integer minutes
│ │ │ +
1375 constexpr chrono::duration<long double, ratio<60,1>>
│ │ │ +
1376 operator""min(long double __mins)
│ │ │ +
1377 { return chrono::duration<long double, ratio<60,1>>{__mins}; }
│ │ │ +
1378
│ │ │ +
1379 /// Literal suffix for durations of type `std::chrono::minutes`
│ │ │ +
1380 template <char... _Digits>
│ │ │ +
1381 constexpr chrono::minutes
│ │ │ +
1382 operator""min()
│ │ │ +
1383 { return __check_overflow<chrono::minutes, _Digits...>(); }
│ │ │ +
1384
│ │ │ +
1385 /// Literal suffix for durations representing non-integer seconds
│ │ │ +
1386 constexpr chrono::duration<long double>
│ │ │ +
1387 operator""s(long double __secs)
│ │ │ +
1388 { return chrono::duration<long double>{__secs}; }
│ │ │ +
1389
│ │ │ +
1390 /// Literal suffix for durations of type `std::chrono::seconds`
│ │ │ +
1391 template <char... _Digits>
│ │ │ +
1392 constexpr chrono::seconds
│ │ │ +
1393 operator""s()
│ │ │ +
1394 { return __check_overflow<chrono::seconds, _Digits...>(); }
│ │ │ +
1395
│ │ │ +
1396 /// Literal suffix for durations representing non-integer milliseconds
│ │ │ +
1397 constexpr chrono::duration<long double, milli>
│ │ │ +
1398 operator""ms(long double __msecs)
│ │ │ +
1399 { return chrono::duration<long double, milli>{__msecs}; }
│ │ │ +
1400
│ │ │ +
1401 /// Literal suffix for durations of type `std::chrono::milliseconds`
│ │ │ +
1402 template <char... _Digits>
│ │ │ +
1403 constexpr chrono::milliseconds
│ │ │ +
1404 operator""ms()
│ │ │ +
1405 { return __check_overflow<chrono::milliseconds, _Digits...>(); }
│ │ │ +
1406
│ │ │ +
1407 /// Literal suffix for durations representing non-integer microseconds
│ │ │ +
1408 constexpr chrono::duration<long double, micro>
│ │ │ +
1409 operator""us(long double __usecs)
│ │ │ +
1410 { return chrono::duration<long double, micro>{__usecs}; }
│ │ │ +
1411
│ │ │ +
1412 /// Literal suffix for durations of type `std::chrono::microseconds`
│ │ │ +
1413 template <char... _Digits>
│ │ │ +
1414 constexpr chrono::microseconds
│ │ │ +
1415 operator""us()
│ │ │ +
1416 { return __check_overflow<chrono::microseconds, _Digits...>(); }
│ │ │ +
1417
│ │ │ +
1418 /// Literal suffix for durations representing non-integer nanoseconds
│ │ │ +
1419 constexpr chrono::duration<long double, nano>
│ │ │ +
1420 operator""ns(long double __nsecs)
│ │ │ +
1421 { return chrono::duration<long double, nano>{__nsecs}; }
│ │ │ +
1422
│ │ │ +
1423 /// Literal suffix for durations of type `std::chrono::nanoseconds`
│ │ │ +
1424 template <char... _Digits>
│ │ │ +
1425 constexpr chrono::nanoseconds
│ │ │ +
1426 operator""ns()
│ │ │ +
1427 { return __check_overflow<chrono::nanoseconds, _Digits...>(); }
│ │ │ +
1428
│ │ │ +
1429#pragma GCC diagnostic pop
│ │ │ +
1430 /// @}
│ │ │ +
1431 } // inline namespace chrono_literals
│ │ │ +
1432 } // inline namespace literals
│ │ │ +
1433
│ │ │ +
1434 namespace chrono
│ │ │ +
1435 {
│ │ │ +
1436 using namespace literals::chrono_literals;
│ │ │ +
1437 } // namespace chrono
│ │ │ +
1438#endif // __glibcxx_chrono_udls
│ │ │ +
1439
│ │ │ +
1440#if __cplusplus >= 201703L
│ │ │ +
1441 namespace filesystem
│ │ │ +
1442 {
│ │ │ +
1443 struct __file_clock
│ │ │ +
1444 {
│ │ │ +
1445 using duration = chrono::nanoseconds;
│ │ │ +
1446 using rep = duration::rep;
│ │ │ +
1447 using period = duration::period;
│ │ │ +
1448 using time_point = chrono::time_point<__file_clock>;
│ │ │ +
1449 static constexpr bool is_steady = false;
│ │ │ +
1450
│ │ │ +
1451 static time_point
│ │ │ +
1452 now() noexcept
│ │ │ +
1453 { return _S_from_sys(chrono::system_clock::now()); }
│ │ │ +
1454
│ │ │ +
1455#if __cplusplus > 201703L
│ │ │ +
1456 template<typename _Dur>
│ │ │ +
1457 static
│ │ │ +
1458 chrono::file_time<common_type_t<_Dur, chrono::seconds>>
│ │ │ +
1459 from_sys(const chrono::sys_time<_Dur>& __t) noexcept
│ │ │ +
1460 { return _S_from_sys(__t); }
│ │ │ +
1461
│ │ │ +
1462 // For internal use only
│ │ │ +
1463 template<typename _Dur>
│ │ │ +
1464 static
│ │ │ +
1465 chrono::sys_time<common_type_t<_Dur, chrono::seconds>>
│ │ │ +
1466 to_sys(const chrono::file_time<_Dur>& __t) noexcept
│ │ │ +
1467 { return _S_to_sys(__t); }
│ │ │ +
1468#endif // C++20
│ │ │ +
1469
│ │ │ +
1470 private:
│ │ │ +
1471 using __sys_clock = chrono::system_clock;
│ │ │ +
1472
│ │ │ +
1473 // This clock's (unspecified) epoch is 2174-01-01 00:00:00 UTC.
│ │ │ +
1474 // A signed 64-bit duration with nanosecond resolution gives roughly
│ │ │ +
1475 // +/- 292 years, which covers the 1901-2446 date range for ext4.
│ │ │ +
1476 static constexpr chrono::seconds _S_epoch_diff{6437664000};
│ │ │ +
1477
│ │ │ +
1478 protected:
│ │ │ +
1479 // For internal use only
│ │ │ +
1480 template<typename _Dur>
│ │ │ +
1481 static
│ │ │ +
1482 chrono::time_point<__file_clock, common_type_t<_Dur, chrono::seconds>>
│ │ │ +
1483 _S_from_sys(const chrono::time_point<__sys_clock, _Dur>& __t) noexcept
│ │ │ +
1484 {
│ │ │ + │ │ │ +
1486 using __file_time = chrono::time_point<__file_clock, _CDur>;
│ │ │ +
1487 return __file_time{__t.time_since_epoch()} - _S_epoch_diff;
│ │ │ +
1488 }
│ │ │ +
1489
│ │ │ +
1490 // For internal use only
│ │ │ +
1491 template<typename _Dur>
│ │ │ +
1492 static
│ │ │ +
1493 chrono::time_point<__sys_clock, common_type_t<_Dur, chrono::seconds>>
│ │ │ +
1494 _S_to_sys(const chrono::time_point<__file_clock, _Dur>& __t) noexcept
│ │ │ +
1495 {
│ │ │ + │ │ │ +
1497 using __sys_time = chrono::time_point<__sys_clock, _CDur>;
│ │ │ +
1498 return __sys_time{__t.time_since_epoch()} + _S_epoch_diff;
│ │ │ +
1499 }
│ │ │ +
1500 };
│ │ │ +
1501 } // namespace filesystem
│ │ │ +
1502#endif // C++17
│ │ │ +
1503
│ │ │ +
1504_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
1505} // namespace std
│ │ │ +
1506
│ │ │ +
1507#endif // C++11
│ │ │ +
1508
│ │ │ +
1509#endif //_GLIBCXX_CHRONO_H
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
constexpr enable_if_t< __is_duration_v< _ToDur >, time_point< _Clock, _ToDur > > ceil(const time_point< _Clock, _Dur > &__tp)
Definition chrono.h:1062
│ │ │ +
constexpr enable_if_t< __is_duration_v< _ToDur > &&!treat_as_floating_point_v< typename _ToDur::rep >, time_point< _Clock, _ToDur > > round(const time_point< _Clock, _Dur > &__tp)
Definition chrono.h:1086
│ │ │ +
constexpr bool operator==(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:810
│ │ │ +
duration< int64_t, ratio< 604800 > > weeks
weeks
Definition chrono.h:910
│ │ │ +
constexpr enable_if_t< __is_duration_v< _ToDur >, time_point< _Clock, _ToDur > > floor(const time_point< _Clock, _Dur > &__tp)
Definition chrono.h:1041
│ │ │ +
duration< int64_t, ratio< 2629746 > > months
months
Definition chrono.h:916
│ │ │ +
duration< int64_t, ratio< 86400 > > days
days
Definition chrono.h:907
│ │ │ +
duration< int64_t, ratio< 31556952 > > years
years
Definition chrono.h:913
│ │ │ +
constexpr bool operator<=(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:855
│ │ │ +
duration< int64_t, ratio< 3600 > > hours
hours
Definition chrono.h:903
│ │ │ +
constexpr bool operator>=(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:869
│ │ │ +
constexpr duration< __common_rep_t< _Rep2, _Rep1 >, _Period > operator*(const _Rep1 &__s, const duration< _Rep2, _Period > &__d)
Definition chrono.h:750
│ │ │ +
duration< int64_t, nano > nanoseconds
nanoseconds
Definition chrono.h:888
│ │ │ +
constexpr duration< __common_rep_t< _Rep1, __disable_if_is_duration< _Rep2 > >, _Period > operator%(const duration< _Rep1, _Period > &__d, const _Rep2 &__s)
Definition chrono.h:779
│ │ │ +
constexpr time_point< local_t, typename common_type< _Dur1, duration< _Rep2, _Period2 > >::type > operator+(const time_point< local_t, _Dur1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:1101
│ │ │ +
duration< int64_t, ratio< 60 > > minutes
minutes
Definition chrono.h:900
│ │ │ +
constexpr __enable_if_t< __is_duration< _ToDur >::value, time_point< _Clock, _ToDur > > time_point_cast(const time_point< _Clock, _Dur > &__t)
Definition chrono.h:1019
│ │ │ +
system_clock high_resolution_clock
Highest-resolution clock.
Definition chrono.h:1289
│ │ │ +
duration< int64_t, milli > milliseconds
milliseconds
Definition chrono.h:894
│ │ │ +
duration< int64_t, micro > microseconds
microseconds
Definition chrono.h:891
│ │ │ +
constexpr time_point< _Clock, typename common_type< duration< _Rep1, _Period1 >, _Dur2 >::type > operator+(const duration< _Rep1, _Period1 > &__lhs, const time_point< _Clock, _Dur2 > &__rhs)
Adjust a time point forwards by the given duration.
Definition chrono.h:1115
│ │ │ +
constexpr common_type< duration< _Rep1, _Period1 >, duration< _Rep2, _Period2 > >::type operator+(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
The sum of two durations.
Definition chrono.h:696
│ │ │ +
constexpr bool operator<(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:822
│ │ │ +
duration< int64_t > seconds
seconds
Definition chrono.h:897
│ │ │ +
constexpr bool operator>(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:862
│ │ │ +
constexpr common_type< duration< _Rep1, _Period1 >, duration< _Rep2, _Period2 > >::type operator-(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
The difference between two durations.
Definition chrono.h:710
│ │ │ +
constexpr duration< __common_rep_t< _Rep1, __disable_if_is_duration< _Rep2 > >, _Period > operator/(const duration< _Rep1, _Period > &__d, const _Rep2 &__s)
Definition chrono.h:756
│ │ │ +
constexpr duration< __common_rep_t< _Rep1, _Rep2 >, _Period > operator*(const duration< _Rep1, _Period > &__d, const _Rep2 &__s)
Definition chrono.h:741
│ │ │ +
constexpr auto operator<=>(const duration< _Rep1, _Period1 > &__lhs, const duration< _Rep2, _Period2 > &__rhs)
Definition chrono.h:836
│ │ │ +
constexpr __enable_if_is_duration< _ToDur > duration_cast(const duration< _Rep, _Period > &__d)
Definition chrono.h:275
│ │ │ +
_Tp abs(const complex< _Tp > &)
Return magnitude of z.
Definition complex:892
│ │ │ +
typename __ratio_divide< _R1, _R2 >::type ratio_divide
ratio_divide
Definition ratio:390
│ │ │
__bool_constant< true > true_type
The type used as a compile-time boolean with true value.
Definition type_traits:111
│ │ │ +
typename common_type< _Tp... >::type common_type_t
Alias template for common_type.
Definition type_traits:2717
│ │ │ +
typename enable_if< _Cond, _Tp >::type enable_if_t
Alias template for enable_if.
Definition type_traits:2709
│ │ │
__bool_constant< false > false_type
The type used as a compile-time boolean with false value.
Definition type_traits:114
│ │ │ -
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:71
│ │ │ -
exception_ptr current_exception() noexcept
│ │ │ -
void rethrow_exception(exception_ptr)
Throw the object pointed to by the exception_ptr.
│ │ │ -
void terminate() noexcept
│ │ │ -
void rethrow_if_nested(const _Ex &__ex)
│ │ │ -
void throw_with_nested(_Tp &&__t)
│ │ │ +
constexpr const _Tp & min(const _Tp &, const _Tp &)
This does what you think it does.
│ │ │ +
void void_t
A metafunction that always yields void, used for detecting valid types.
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
is_move_constructible
Definition type_traits:1169
│ │ │ -
is_base_of
Definition type_traits:1493
│ │ │ -
An opaque pointer to an arbitrary exception.
│ │ │ - │ │ │ -
void rethrow_nested() const
Rethrow the stored exception, or terminate if none was stored.
│ │ │ -
exception_ptr nested_ptr() const noexcept
Access the stored exception.
│ │ │ -
nested_exception() noexcept
The default constructor stores the current exception (if any).
│ │ │ +
ISO C++ inline namespace for literal suffixes.
│ │ │ +
ISO C++ 2011 namespace for date and time utilities.
│ │ │ +
ISO C++ 2017 namespace for File System library.
Definition chrono.h:54
│ │ │ +
static constexpr int digits
Definition limits:211
│ │ │ +
static constexpr _Tp max() noexcept
Definition limits:321
│ │ │ +
static constexpr _Tp lowest() noexcept
Definition limits:327
│ │ │ +
Provides compile-time rational arithmetic.
Definition ratio:270
│ │ │ +
Define a member typedef type only if a boolean constant is true.
Definition type_traits:129
│ │ │ +
is_floating_point
Definition type_traits:522
│ │ │ + │ │ │ +
common_type
Definition type_traits:2342
│ │ │ +
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
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -nested_exception.h │ │ │ │ +chrono.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// Nested Exception support header (nested_exception class) for -*- C++ -*- │ │ │ │ +1// chrono::duration and chrono::time_point -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2009-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,285 +21,1715 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file bits/nested_exception.h │ │ │ │ +25/** @file include/bits/chrono.h │ │ │ │ 26 * This is an internal header file, included by other library headers. │ │ │ │ -27 * Do not attempt to use it directly. @headername{exception} │ │ │ │ +27 * Do not attempt to use it directly. @headername{chrono} │ │ │ │ 28 */ │ │ │ │ 29 │ │ │ │ -30#ifndef _GLIBCXX_NESTED_EXCEPTION_H │ │ │ │ -31#define _GLIBCXX_NESTED_EXCEPTION_H 1 │ │ │ │ +30#ifndef _GLIBCXX_CHRONO_H │ │ │ │ +31#define _GLIBCXX_CHRONO_H 1 │ │ │ │ 32 │ │ │ │ -33#if __cplusplus < 201103L │ │ │ │ -34# include <_b_i_t_s_/_c_+_+_0_x___w_a_r_n_i_n_g_._h> │ │ │ │ -35#else │ │ │ │ +33#pragma GCC system_header │ │ │ │ +34 │ │ │ │ +35#if __cplusplus >= 201103L │ │ │ │ 36 │ │ │ │ -37#include <_b_i_t_s_/_m_o_v_e_._h> │ │ │ │ -38#include <_b_i_t_s_/_e_x_c_e_p_t_i_o_n___p_t_r_._h> │ │ │ │ -39 │ │ │ │ -40extern "C++" { │ │ │ │ -41 │ │ │ │ -42namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -43{ │ │ │ │ -44 /** │ │ │ │ -45 * @addtogroup exceptions │ │ │ │ -46 * @{ │ │ │ │ -47 */ │ │ │ │ +37#include <_r_a_t_i_o> │ │ │ │ +38#include <_t_y_p_e___t_r_a_i_t_s> │ │ │ │ +39#include <_l_i_m_i_t_s> │ │ │ │ +40#include <_c_t_i_m_e> │ │ │ │ +41#include <_b_i_t_s_/_p_a_r_s_e___n_u_m_b_e_r_s_._h> // for literals support. │ │ │ │ +42#if __cplusplus >= 202002L │ │ │ │ +43# include <_c_o_n_c_e_p_t_s> │ │ │ │ +44# include <_c_o_m_p_a_r_e> │ │ │ │ +45#endif │ │ │ │ +46 │ │ │ │ +47#include <_b_i_t_s_/_v_e_r_s_i_o_n_._h> │ │ │ │ 48 │ │ │ │ -49 /** Mixin class that stores the current exception. │ │ │ │ -50 * │ │ │ │ -51 * This type can be used via `std::throw_with_nested` to store │ │ │ │ -52 * the current exception nested within another exception. │ │ │ │ -53 * │ │ │ │ -54 * @headerfile exception │ │ │ │ -55 * @since C++11 │ │ │ │ -56 * @see std::throw_with_nested │ │ │ │ -57 * @ingroup exceptions │ │ │ │ -58 */ │ │ │ │ -_5_9 class _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n │ │ │ │ -60 { │ │ │ │ -61 _e_x_c_e_p_t_i_o_n___p_t_r _M_ptr; │ │ │ │ -62 │ │ │ │ -63 public: │ │ │ │ -64 /// The default constructor stores the current exception (if any). │ │ │ │ -_6_5 _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n() noexcept : _M_ptr(_c_u_r_r_e_n_t___e_x_c_e_p_t_i_o_n()) { } │ │ │ │ -66 │ │ │ │ -67 _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n(const _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n&) noexcept = default; │ │ │ │ -68 │ │ │ │ -69 _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n& operator=(const _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n&) noexcept = default; │ │ │ │ -70 │ │ │ │ -71 virtual _~_n_e_s_t_e_d___e_x_c_e_p_t_i_o_n() noexcept; │ │ │ │ -72 │ │ │ │ -73 /// Rethrow the stored exception, or terminate if none was stored. │ │ │ │ -74 [[noreturn]] │ │ │ │ -75 void │ │ │ │ -_7_6 _r_e_t_h_r_o_w___n_e_s_t_e_d() const │ │ │ │ -77 { │ │ │ │ -78 if (_M_ptr) │ │ │ │ -79 _r_e_t_h_r_o_w___e_x_c_e_p_t_i_o_n(_M_ptr); │ │ │ │ -80 _s_t_d_:_:_t_e_r_m_i_n_a_t_e(); │ │ │ │ -81 } │ │ │ │ +49namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +50{ │ │ │ │ +51_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +52 │ │ │ │ +53#if __cplusplus >= 201703L │ │ │ │ +_5_4 namespace _f_i_l_e_s_y_s_t_e_m { struct __file_clock; }; │ │ │ │ +55#endif │ │ │ │ +56 │ │ │ │ +57 namespace _c_h_r_o_n_o │ │ │ │ +58 { │ │ │ │ +59 /// @addtogroup chrono │ │ │ │ +60 /// @{ │ │ │ │ +61 │ │ │ │ +62 /// `chrono::duration` represents a distance between two points in time │ │ │ │ +63 template> │ │ │ │ +64 class duration; │ │ │ │ +65 │ │ │ │ +66 /// `chrono::time_point` represents a point in time as measured by a clock │ │ │ │ +67 template │ │ │ │ +68 class time_point; │ │ │ │ +69 /// @} │ │ │ │ +70 } │ │ │ │ +71 │ │ │ │ +72 /// @addtogroup chrono │ │ │ │ +73 /// @{ │ │ │ │ +74 │ │ │ │ +75 // 20.11.4.3 specialization of common_type (for duration, sfinae-friendly) │ │ │ │ +76 │ │ │ │ +77 /// @cond undocumented │ │ │ │ +78 │ │ │ │ +79 template │ │ │ │ +80 struct __duration_common_type │ │ │ │ +81 { }; │ │ │ │ 82 │ │ │ │ -83 /// Access the stored exception. │ │ │ │ -84 _e_x_c_e_p_t_i_o_n___p_t_r │ │ │ │ -_8_5 _n_e_s_t_e_d___p_t_r() const noexcept │ │ │ │ -86 { return _M_ptr; } │ │ │ │ -87 }; │ │ │ │ -88 │ │ │ │ -89 /// @cond undocumented │ │ │ │ -90 │ │ │ │ -91 template │ │ │ │ -92 struct _Nested_exception : public _Except, public nested_exception │ │ │ │ -93 { │ │ │ │ -94 explicit _Nested_exception(const _Except& __ex) │ │ │ │ -95 : _Except(__ex) │ │ │ │ -96 { } │ │ │ │ +83 template │ │ │ │ +84 struct __duration_common_type<_CT, _Period1, _Period2, │ │ │ │ +85 __void_t> │ │ │ │ +86 { │ │ │ │ +87 private: │ │ │ │ +88 using __gcd_num = __static_gcd<_Period1::num, _Period2::num>; │ │ │ │ +89 using __gcd_den = __static_gcd<_Period1::den, _Period2::den>; │ │ │ │ +90 using __cr = typename _CT::type; │ │ │ │ +91 using __r = ratio<__gcd_num::value, │ │ │ │ +92 (_Period1::den / __gcd_den::value) * _Period2::den>; │ │ │ │ +93 │ │ │ │ +94 public: │ │ │ │ +95 using type = chrono::duration<__cr, typename __r::type>; │ │ │ │ +96 }; │ │ │ │ 97 │ │ │ │ -98 explicit _Nested_exception(_Except&& __ex) │ │ │ │ -99 : _Except(static_cast<_Except&&>(__ex)) │ │ │ │ -100 { } │ │ │ │ -101 }; │ │ │ │ +98 /// @endcond │ │ │ │ +99 │ │ │ │ +100 /// @{ │ │ │ │ +101 /// @relates chrono::duration │ │ │ │ 102 │ │ │ │ -103#if __cplusplus < 201703L || ! defined __cpp_if_constexpr │ │ │ │ -104 // [except.nested]/8 │ │ │ │ -105 // Throw an exception of unspecified type that is publicly derived from │ │ │ │ -106 // both remove_reference_t<_Tp> and nested_exception. │ │ │ │ -107 template │ │ │ │ -108 [[noreturn]] │ │ │ │ -109 inline void │ │ │ │ -110 __throw_with_nested_impl(_Tp&& __t, _t_r_u_e___t_y_p_e) │ │ │ │ -111 { │ │ │ │ -112 throw _Nested_exception<__remove_cvref_t<_Tp>>{_s_t_d_:_:_f_o_r_w_a_r_d_<___T_p_>(__t)}; │ │ │ │ -113 } │ │ │ │ -114 │ │ │ │ -115 template │ │ │ │ -116 [[noreturn]] │ │ │ │ -117 inline void │ │ │ │ -118 __throw_with_nested_impl(_Tp&& __t, _f_a_l_s_e___t_y_p_e) │ │ │ │ -119 { throw _s_t_d_:_:_f_o_r_w_a_r_d_<___T_p_>(__t); } │ │ │ │ -120#endif │ │ │ │ -121 │ │ │ │ -122 /// @endcond │ │ │ │ -123 │ │ │ │ -124 /** Throw an exception that also stores the currently active exception. │ │ │ │ -125 * │ │ │ │ -126 * If `_Tp` is derived from `std::nested_exception` or is not usable │ │ │ │ -127 * as a base-class, throws a copy of `__t`. │ │ │ │ -128 * Otherwise, throws an object of an implementation-defined type derived │ │ │ │ -129 * from both `_Tp` and `std::nested_exception`, containing a copy of `__t` │ │ │ │ -130 * and the result of `std::current_exception()`. │ │ │ │ -131 * │ │ │ │ -132 * In other words, throws the argument as a new exception that contains │ │ │ │ -133 * the currently active exception nested within it. This is intended for │ │ │ │ -134 * use in a catch handler to replace the caught exception with a different │ │ │ │ -135 * type, while still preserving the original exception. When the new │ │ │ │ -136 * exception is caught, the nested exception can be rethrown by using │ │ │ │ -137 * `std::rethrow_if_nested`. │ │ │ │ -138 * │ │ │ │ -139 * This can be used at API boundaries, for example to catch a library's │ │ │ │ -140 * internal exception type and rethrow it nested with a `std:: │ │ │ │ -runtime_error`, │ │ │ │ -141 * or vice versa. │ │ │ │ -142 * │ │ │ │ -143 * @since C++11 │ │ │ │ -144 */ │ │ │ │ -145 template │ │ │ │ -146 [[noreturn]] │ │ │ │ -147 inline void │ │ │ │ -_1_4_8 _t_h_r_o_w___w_i_t_h___n_e_s_t_e_d(_Tp&& __t) │ │ │ │ -149 { │ │ │ │ -150 using _Up = typename decay<_Tp>::type; │ │ │ │ -151 using _CopyConstructible │ │ │ │ -152 = __and_, _i_s___m_o_v_e___c_o_n_s_t_r_u_c_t_i_b_l_e_<___U_p_>>; │ │ │ │ -153 static_assert(_CopyConstructible::value, │ │ │ │ -154 "throw_with_nested argument must be CopyConstructible"); │ │ │ │ +103 /// Specialization of common_type for chrono::duration types. │ │ │ │ +104 template │ │ │ │ +_1_0_5 struct _c_o_m_m_o_n___t_y_p_e<_c_h_r_o_n_o::duration<_Rep1, _Period1>, │ │ │ │ +106 _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n<_Rep2, _Period2>> │ │ │ │ +107 : __duration_common_type, │ │ │ │ +108 typename _Period1::type, │ │ │ │ +109 typename _Period2::type> │ │ │ │ +110 { }; │ │ │ │ +111 │ │ │ │ +112 /// Specialization of common_type for two identical chrono::duration types. │ │ │ │ +113 template │ │ │ │ +_1_1_4 struct _c_o_m_m_o_n___t_y_p_e<_c_h_r_o_n_o::duration<_Rep, _Period>, │ │ │ │ +115 _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n<_Rep, _Period>> │ │ │ │ +116 { │ │ │ │ +117 using type = _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_t_y_p_e_n_a_m_e_ _c_o_m_m_o_n___t_y_p_e_<___R_e_p_>_:_:_t_y_p_e, │ │ │ │ +118 typename _Period::type>; │ │ │ │ +119 }; │ │ │ │ +120 │ │ │ │ +121 /// Specialization of common_type for one chrono::duration type. │ │ │ │ +122 template │ │ │ │ +_1_2_3 struct _c_o_m_m_o_n___t_y_p_e<_c_h_r_o_n_o::duration<_Rep, _Period>> │ │ │ │ +124 { │ │ │ │ +125 using type = _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_<_t_y_p_e_n_a_m_e_ _c_o_m_m_o_n___t_y_p_e_<___R_e_p_>_:_:_t_y_p_e, │ │ │ │ +126 typename _Period::type>; │ │ │ │ +127 }; │ │ │ │ +128 /// @} │ │ │ │ +129 │ │ │ │ +130 // 20.11.4.3 specialization of common_type (for time_point, sfinae- │ │ │ │ +friendly) │ │ │ │ +131 │ │ │ │ +132 /// @cond undocumented │ │ │ │ +133 │ │ │ │ +134 template │ │ │ │ +135 struct __timepoint_common_type │ │ │ │ +136 { }; │ │ │ │ +137 │ │ │ │ +138 template │ │ │ │ +139 struct __timepoint_common_type<_CT, _Clock, __void_t> │ │ │ │ +140 { │ │ │ │ +141 using type = chrono::time_point<_Clock, typename _CT::type>; │ │ │ │ +142 }; │ │ │ │ +143 │ │ │ │ +144 /// @endcond │ │ │ │ +145 │ │ │ │ +146 /// @{ │ │ │ │ +147 /// @relates chrono::time_point │ │ │ │ +148 │ │ │ │ +149 /// Specialization of common_type for chrono::time_point types. │ │ │ │ +150 template │ │ │ │ +_1_5_1 struct _c_o_m_m_o_n___t_y_p_e<_c_h_r_o_n_o::time_point<_Clock, _Duration1>, │ │ │ │ +152 _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t<_Clock, _Duration2>> │ │ │ │ +153 : __timepoint_common_type, _Clock> │ │ │ │ +154 { }; │ │ │ │ 155 │ │ │ │ -156#if __cplusplus >= 201703L && __cpp_if_constexpr │ │ │ │ -157 if constexpr (is_class_v<_Up>) │ │ │ │ -158 if constexpr (!is_final_v<_Up>) │ │ │ │ -159 if constexpr (!is_base_of_v) │ │ │ │ -160 throw _Nested_exception<_Up>{_s_t_d_:_:_f_o_r_w_a_r_d_<___T_p_>(__t)}; │ │ │ │ -161 throw _s_t_d_:_:_f_o_r_w_a_r_d_<___T_p_>(__t); │ │ │ │ -162#else │ │ │ │ -163 using __nest = __and_, __bool_constant, │ │ │ │ -164 __not_>>; │ │ │ │ -165 std::__throw_with_nested_impl(_s_t_d_:_:_f_o_r_w_a_r_d_<___T_p_>(__t), __nest{}); │ │ │ │ -166#endif │ │ │ │ -167 } │ │ │ │ -168 │ │ │ │ -169#if __cplusplus < 201703L || ! defined __cpp_if_constexpr │ │ │ │ -170 /// @cond undocumented │ │ │ │ -171 │ │ │ │ -172 // Attempt dynamic_cast to nested_exception and call rethrow_nested(). │ │ │ │ -173 template │ │ │ │ -174 inline void │ │ │ │ -175 __rethrow_if_nested_impl(const _Ex* __ptr, true_type) │ │ │ │ -176 { │ │ │ │ -177 if (auto __ne_ptr = dynamic_cast(__ptr)) │ │ │ │ -178 __ne_ptr->rethrow_nested(); │ │ │ │ -179 } │ │ │ │ -180 │ │ │ │ -181 // Otherwise, no effects. │ │ │ │ -182 inline void │ │ │ │ -183 __rethrow_if_nested_impl(const void*, _f_a_l_s_e___t_y_p_e) │ │ │ │ -184 { } │ │ │ │ -185 │ │ │ │ -186 /// @endcond │ │ │ │ -187#endif │ │ │ │ -188 │ │ │ │ -189 /** Rethrow a nested exception │ │ │ │ -190 * │ │ │ │ -191 * If `__ex` contains a `std::nested_exception` object, call its │ │ │ │ -192 * `rethrow_nested()` member to rethrow the stored exception. │ │ │ │ -193 * │ │ │ │ -194 * After catching an exception thrown by a call to `std::throw_with_nested` │ │ │ │ -195 * this function can be used to rethrow the exception that was active when │ │ │ │ -196 * `std::throw_with_nested` was called. │ │ │ │ -197 * │ │ │ │ -198 * @since C++11 │ │ │ │ -199 */ │ │ │ │ -200 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ -201 // 2484. rethrow_if_nested() is doubly unimplementable │ │ │ │ -202 // 2784. Resolution to LWG 2484 is missing "otherwise, no effects" and │ │ │ │ -[...] │ │ │ │ -203 template │ │ │ │ -204# if ! __cpp_rtti │ │ │ │ -205 [[__gnu__::__always_inline__]] │ │ │ │ -206#endif │ │ │ │ -207 inline void │ │ │ │ -_2_0_8 _r_e_t_h_r_o_w___i_f___n_e_s_t_e_d(const _Ex& __ex) │ │ │ │ -209 { │ │ │ │ -210 const _Ex* __ptr = __builtin_addressof(__ex); │ │ │ │ -211#if __cplusplus < 201703L || ! defined __cpp_if_constexpr │ │ │ │ -212# if __cpp_rtti │ │ │ │ -213 using __cast = __and_, │ │ │ │ -214 __or_<__not_>, │ │ │ │ -215 is_convertible<_Ex*, nested_exception*>>>; │ │ │ │ -216# else │ │ │ │ -217 using __cast = __and_, │ │ │ │ -218 _i_s___b_a_s_e___o_f_<_n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_,_ ___E_x_>, │ │ │ │ -219 is_convertible<_Ex*, nested_exception*>>; │ │ │ │ -220# endif │ │ │ │ -221 std::__rethrow_if_nested_impl(__ptr, __cast{}); │ │ │ │ -222#else │ │ │ │ -223 if constexpr (!is_polymorphic_v<_Ex>) │ │ │ │ -224 return; │ │ │ │ -225 else if constexpr (is_base_of_v │ │ │ │ -226 && !is_convertible_v<_Ex*, nested_exception*>) │ │ │ │ -227 return; // nested_exception base class is inaccessible or ambiguous. │ │ │ │ -228# if ! __cpp_rtti │ │ │ │ -229 else if constexpr (!is_base_of_v) │ │ │ │ -230 return; // Cannot do polymorphic casts without RTTI. │ │ │ │ -231# endif │ │ │ │ -232 else if (auto __ne_ptr = dynamic_cast(__ptr)) │ │ │ │ -233 __ne_ptr->rethrow_nested(); │ │ │ │ -234#endif │ │ │ │ -235 } │ │ │ │ -236 │ │ │ │ -237 /// @} group exceptions │ │ │ │ -238} // namespace std │ │ │ │ -239 │ │ │ │ -240} // extern "C++" │ │ │ │ -241 │ │ │ │ -242#endif // C++11 │ │ │ │ -243#endif // _GLIBCXX_NESTED_EXCEPTION_H │ │ │ │ -_e_x_c_e_p_t_i_o_n___p_t_r_._h │ │ │ │ -_m_o_v_e_._h │ │ │ │ -_c_+_+_0_x___w_a_r_n_i_n_g_._h │ │ │ │ +156 /// Specialization of common_type for two identical chrono::time_point │ │ │ │ +types. │ │ │ │ +157 template │ │ │ │ +_1_5_8 struct _c_o_m_m_o_n___t_y_p_e<_c_h_r_o_n_o::time_point<_Clock, _Duration>, │ │ │ │ +159 _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t<_Clock, _Duration>> │ │ │ │ +160 { using type = _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_>; }; │ │ │ │ +161 │ │ │ │ +162 /// Specialization of common_type for one chrono::time_point type. │ │ │ │ +163 template │ │ │ │ +_1_6_4 struct _c_o_m_m_o_n___t_y_p_e<_c_h_r_o_n_o::time_point<_Clock, _Duration>> │ │ │ │ +165 { using type = _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_>; }; │ │ │ │ +166 /// @} │ │ │ │ +167 │ │ │ │ +168 /// @} group chrono │ │ │ │ +169 │ │ │ │ +170 namespace _c_h_r_o_n_o │ │ │ │ +171 { │ │ │ │ +172 /// @addtogroup chrono │ │ │ │ +173 /// @{ │ │ │ │ +174 │ │ │ │ +175 /// @cond undocumented │ │ │ │ +176 │ │ │ │ +177 // Primary template for duration_cast impl. │ │ │ │ +178 template │ │ │ │ +180 struct __duration_cast_impl │ │ │ │ +181 { │ │ │ │ +182 template │ │ │ │ +183 static constexpr _ToDur │ │ │ │ +184 __cast(const duration<_Rep, _Period>& __d) │ │ │ │ +185 { │ │ │ │ +186 typedef typename _ToDur::rep __to_rep; │ │ │ │ +187 return _ToDur(static_cast<__to_rep>(static_cast<_CR>(__d.count()) │ │ │ │ +188 * static_cast<_CR>(_CF::num) │ │ │ │ +189 / static_cast<_CR>(_CF::den))); │ │ │ │ +190 } │ │ │ │ +191 }; │ │ │ │ +192 │ │ │ │ +193 template │ │ │ │ +194 struct __duration_cast_impl<_ToDur, _CF, _CR, true, true> │ │ │ │ +195 { │ │ │ │ +196 template │ │ │ │ +197 static constexpr _ToDur │ │ │ │ +198 __cast(const duration<_Rep, _Period>& __d) │ │ │ │ +199 { │ │ │ │ +200 typedef typename _ToDur::rep __to_rep; │ │ │ │ +201 return _ToDur(static_cast<__to_rep>(__d.count())); │ │ │ │ +202 } │ │ │ │ +203 }; │ │ │ │ +204 │ │ │ │ +205 template │ │ │ │ +206 struct __duration_cast_impl<_ToDur, _CF, _CR, true, false> │ │ │ │ +207 { │ │ │ │ +208 template │ │ │ │ +209 static constexpr _ToDur │ │ │ │ +210 __cast(const duration<_Rep, _Period>& __d) │ │ │ │ +211 { │ │ │ │ +212 typedef typename _ToDur::rep __to_rep; │ │ │ │ +213 return _ToDur(static_cast<__to_rep>( │ │ │ │ +214 static_cast<_CR>(__d.count()) / static_cast<_CR>(_CF::den))); │ │ │ │ +215 } │ │ │ │ +216 }; │ │ │ │ +217 │ │ │ │ +218 template │ │ │ │ +219 struct __duration_cast_impl<_ToDur, _CF, _CR, false, true> │ │ │ │ +220 { │ │ │ │ +221 template │ │ │ │ +222 static constexpr _ToDur │ │ │ │ +223 __cast(const duration<_Rep, _Period>& __d) │ │ │ │ +224 { │ │ │ │ +225 typedef typename _ToDur::rep __to_rep; │ │ │ │ +226 return _ToDur(static_cast<__to_rep>( │ │ │ │ +227 static_cast<_CR>(__d.count()) * static_cast<_CR>(_CF::num))); │ │ │ │ +228 } │ │ │ │ +229 }; │ │ │ │ +230 │ │ │ │ +231 template │ │ │ │ +232 struct __is_duration │ │ │ │ +233 : _s_t_d_:_:_f_a_l_s_e___t_y_p_e │ │ │ │ +234 { }; │ │ │ │ +235 │ │ │ │ +236 template │ │ │ │ +237 struct __is_duration<_d_u_r_a_t_i_o_n<_Rep, _Period>> │ │ │ │ +238 : _s_t_d_:_:_t_r_u_e___t_y_p_e │ │ │ │ +239 { }; │ │ │ │ +240 │ │ │ │ +241 template │ │ │ │ +242 using __enable_if_is_duration │ │ │ │ +243 = typename enable_if<__is_duration<_Tp>::value, _Tp>::type; │ │ │ │ +244 │ │ │ │ +245 template │ │ │ │ +246 using __disable_if_is_duration │ │ │ │ +247 = typename enable_if::value, _Tp>::type; │ │ │ │ +248 │ │ │ │ +249#if __cplusplus >= 201703L │ │ │ │ +250 template │ │ │ │ +251 inline constexpr bool __is_duration_v = false; │ │ │ │ +252 template │ │ │ │ +253 inline constexpr bool __is_duration_v> = true; │ │ │ │ +254 template │ │ │ │ +255 inline constexpr bool __is_time_point_v = false; │ │ │ │ +256 template │ │ │ │ +257 inline constexpr bool __is_time_point_v> = true; │ │ │ │ +258#endif │ │ │ │ +259 │ │ │ │ +260 /// @endcond │ │ │ │ +261 │ │ │ │ +262 /** Convert a `duration` to type `ToDur`. │ │ │ │ +263 * │ │ │ │ +264 * If the duration cannot be represented accurately in the result type, │ │ │ │ +265 * returns the result of integer truncation (i.e., rounded towards zero). │ │ │ │ +266 * │ │ │ │ +267 * @tparam _ToDur The result type must be a `duration`. │ │ │ │ +268 * @param __d A duration. │ │ │ │ +269 * @return The value of `__d` converted to type `_ToDur`. │ │ │ │ +270 * @since C++11 │ │ │ │ +271 */ │ │ │ │ +272 template │ │ │ │ +273 _GLIBCXX_NODISCARD │ │ │ │ +274 constexpr __enable_if_is_duration<_ToDur> │ │ │ │ +_2_7_5 _d_u_r_a_t_i_o_n___c_a_s_t(const _d_u_r_a_t_i_o_n_<___R_e_p_,_ ___P_e_r_i_o_d_>& __d) │ │ │ │ +276 { │ │ │ │ +277#if __cpp_inline_variables && __cpp_if_constexpr │ │ │ │ +278 if constexpr (is_same_v<_ToDur, duration<_Rep, _Period>>) │ │ │ │ +279 return __d; │ │ │ │ +280 else │ │ │ │ +281 { │ │ │ │ +282#endif │ │ │ │ +283 using __to_period = typename _ToDur::period; │ │ │ │ +284 using __to_rep = typename _ToDur::rep; │ │ │ │ +285 using __cf = _r_a_t_i_o___d_i_v_i_d_e_<___P_e_r_i_o_d_,_ _____t_o___p_e_r_i_o_d_>; │ │ │ │ +286 using __cr = typename _c_o_m_m_o_n___t_y_p_e_<_____t_o___r_e_p_,_ ___R_e_p_,_ _i_n_t_m_a_x___t_>_:_:_t_y_p_e; │ │ │ │ +287 using __dc = __duration_cast_impl<_ToDur, __cf, __cr, │ │ │ │ +288 __cf::num == 1, __cf::den == 1>; │ │ │ │ +289 return __dc::__cast(__d); │ │ │ │ +290#if __cpp_inline_variables && __cpp_if_constexpr │ │ │ │ +291 } │ │ │ │ +292#endif │ │ │ │ +293 } │ │ │ │ +294 │ │ │ │ +295 /** Trait indicating whether to treat a type as a floating-point type. │ │ │ │ +296 * │ │ │ │ +297 * The chrono library uses this trait to tell whether a `duration` can │ │ │ │ +298 * represent fractional values of the given precision, or only integral │ │ │ │ +299 * values. │ │ │ │ +300 * │ │ │ │ +301 * You should specialize this trait for your own numeric types that are │ │ │ │ +302 * used with `duration` and can represent non-integral values. │ │ │ │ +303 * │ │ │ │ +304 * @since C++11 │ │ │ │ +305 */ │ │ │ │ +306 template │ │ │ │ +_3_0_7 struct _t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t │ │ │ │ +308 : _i_s___f_l_o_a_t_i_n_g___p_o_i_n_t<_Rep> │ │ │ │ +309 { }; │ │ │ │ +310 │ │ │ │ +311#if __cplusplus > 201402L │ │ │ │ +312 template │ │ │ │ +313 inline constexpr bool treat_as_floating_point_v = │ │ │ │ +314 _t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t_<___R_e_p_>_:_:_v_a_l_u_e; │ │ │ │ +315 │ │ │ │ +316 template<> │ │ │ │ +317 inline constexpr bool treat_as_floating_point_v = false; │ │ │ │ +318 template<> │ │ │ │ +319 inline constexpr bool treat_as_floating_point_v = false; │ │ │ │ +320 template<> │ │ │ │ +321 inline constexpr bool treat_as_floating_point_v = false; │ │ │ │ +322 template<> │ │ │ │ +323 inline constexpr bool treat_as_floating_point_v = true; │ │ │ │ +324 template<> │ │ │ │ +325 inline constexpr bool treat_as_floating_point_v = true; │ │ │ │ +326 template<> │ │ │ │ +327 inline constexpr bool treat_as_floating_point_v = true; │ │ │ │ +328#endif // C++17 │ │ │ │ +329 │ │ │ │ +330#if __cplusplus > 201703L │ │ │ │ +331#if __cpp_lib_concepts │ │ │ │ +332 template │ │ │ │ +333 inline constexpr bool is_clock_v = false; │ │ │ │ +334 │ │ │ │ +335 template │ │ │ │ +336 requires requires { │ │ │ │ +337 typename _Tp::rep; │ │ │ │ +338 typename _Tp::period; │ │ │ │ +339 typename _Tp::duration; │ │ │ │ +340 typename _Tp::time_point::clock; │ │ │ │ +341 typename _Tp::time_point::duration; │ │ │ │ +342 { &_Tp::is_steady } -> same_as; │ │ │ │ +343 { _Tp::now() } -> same_as; │ │ │ │ +344 requires same_as>; │ │ │ │ +346 requires same_as; │ │ │ │ +348 } │ │ │ │ +349 inline constexpr bool is_clock_v<_Tp> = true; │ │ │ │ +350#else │ │ │ │ +351 template │ │ │ │ +352 inline constexpr bool is_clock_v = false; │ │ │ │ +353 │ │ │ │ +354 template │ │ │ │ +355 inline constexpr bool │ │ │ │ +356 is_clock_v<_Tp, _v_o_i_d___t> │ │ │ │ +361 = __and_v>, │ │ │ │ +363 is_same, │ │ │ │ +365 is_same, │ │ │ │ +366 is_same>; │ │ │ │ +367#endif │ │ │ │ +368 │ │ │ │ +369 template │ │ │ │ +370 struct is_clock │ │ │ │ +371 : bool_constant> │ │ │ │ +372 { }; │ │ │ │ +373#endif // C++20 │ │ │ │ +374 │ │ │ │ +375#ifdef __glibcxx_chrono // C++ >= 17 && HOSTED │ │ │ │ +376 /** Convert a `duration` to type `ToDur` and round down. │ │ │ │ +377 * │ │ │ │ +378 * If the duration cannot be represented exactly in the result type, │ │ │ │ +379 * returns the closest value that is less than the argument. │ │ │ │ +380 * │ │ │ │ +381 * @tparam _ToDur The result type must be a `duration`. │ │ │ │ +382 * @param __d A duration. │ │ │ │ +383 * @return The value of `__d` converted to type `_ToDur`. │ │ │ │ +384 * @since C++17 │ │ │ │ +385 */ │ │ │ │ +386 template │ │ │ │ +387 [[nodiscard]] constexpr __enable_if_is_duration<_ToDur> │ │ │ │ +388 _f_l_o_o_r(const _d_u_r_a_t_i_o_n_<___R_e_p_,_ ___P_e_r_i_o_d_>& __d) │ │ │ │ +389 { │ │ │ │ +390 auto __to = _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n___c_a_s_t_<___T_o_D_u_r_>(__d); │ │ │ │ +391 if (__to > __d) │ │ │ │ +392 return __to - _ToDur{1}; │ │ │ │ +393 return __to; │ │ │ │ +394 } │ │ │ │ +395 │ │ │ │ +396 /** Convert a `duration` to type `ToDur` and round up. │ │ │ │ +397 * │ │ │ │ +398 * If the duration cannot be represented exactly in the result type, │ │ │ │ +399 * returns the closest value that is greater than the argument. │ │ │ │ +400 * │ │ │ │ +401 * @tparam _ToDur The result type must be a `duration`. │ │ │ │ +402 * @param __d A duration. │ │ │ │ +403 * @return The value of `__d` converted to type `_ToDur`. │ │ │ │ +404 * @since C++17 │ │ │ │ +405 */ │ │ │ │ +406 template │ │ │ │ +407 [[nodiscard]] constexpr __enable_if_is_duration<_ToDur> │ │ │ │ +408 _c_e_i_l(const _d_u_r_a_t_i_o_n_<___R_e_p_,_ ___P_e_r_i_o_d_>& __d) │ │ │ │ +409 { │ │ │ │ +410 auto __to = _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n___c_a_s_t_<___T_o_D_u_r_>(__d); │ │ │ │ +411 if (__to < __d) │ │ │ │ +412 return __to + _ToDur{1}; │ │ │ │ +413 return __to; │ │ │ │ +414 } │ │ │ │ +415 │ │ │ │ +416 /** Convert a `duration` to type `ToDur` and round to the closest value. │ │ │ │ +417 * │ │ │ │ +418 * If the duration cannot be represented exactly in the result type, │ │ │ │ +419 * returns the closest value, rounding ties to even. │ │ │ │ +420 * │ │ │ │ +421 * @tparam _ToDur The result type must be a `duration` with a │ │ │ │ +422 * non-floating-point `rep` type. │ │ │ │ +423 * @param __d A duration. │ │ │ │ +424 * @return The value of `__d` converted to type `_ToDur`. │ │ │ │ +425 * @since C++17 │ │ │ │ +426 */ │ │ │ │ +427 template │ │ │ │ +428 [[nodiscard]] constexpr │ │ │ │ +429 _e_n_a_b_l_e___i_f___t< │ │ │ │ +430 __and_<__is_duration<_ToDur>, │ │ │ │ +431 __not_>>::value, │ │ │ │ +432 _ToDur> │ │ │ │ +433 _r_o_u_n_d(const _d_u_r_a_t_i_o_n_<___R_e_p_,_ ___P_e_r_i_o_d_>& __d) │ │ │ │ +434 { │ │ │ │ +435 _ToDur __t0 = _c_h_r_o_n_o_:_:_f_l_o_o_r_<___T_o_D_u_r_>(__d); │ │ │ │ +436 _ToDur __t1 = __t0 + _ToDur{1}; │ │ │ │ +437 auto __diff0 = __d - __t0; │ │ │ │ +438 auto __diff1 = __t1 - __d; │ │ │ │ +439 if (__diff0 == __diff1) │ │ │ │ +440 { │ │ │ │ +441 if (__t0.count() & 1) │ │ │ │ +442 return __t1; │ │ │ │ +443 return __t0; │ │ │ │ +444 } │ │ │ │ +445 else if (__diff0 < __diff1) │ │ │ │ +446 return __t0; │ │ │ │ +447 return __t1; │ │ │ │ +448 } │ │ │ │ +449 │ │ │ │ +450 /** The absolute (non-negative) value of a duration. │ │ │ │ +451 * │ │ │ │ +452 * @param __d A duration with a signed `rep` type. │ │ │ │ +453 * @return A duration of the same type as the argument, with value |d|. │ │ │ │ +454 * @since C++17 │ │ │ │ +455 */ │ │ │ │ +456 template │ │ │ │ +457 [[nodiscard]] constexpr │ │ │ │ +458 enable_if_t::is_signed, _d_u_r_a_t_i_o_n_<___R_e_p_,_ ___P_e_r_i_o_d_>> │ │ │ │ +459 _a_b_s(_d_u_r_a_t_i_o_n_<___R_e_p_,_ ___P_e_r_i_o_d_> __d) │ │ │ │ +460 { │ │ │ │ +461 if (__d >= __d.zero()) │ │ │ │ +462 return __d; │ │ │ │ +463 return -__d; │ │ │ │ +464 } │ │ │ │ +465 │ │ │ │ +466 // Make chrono::ceil also usable as chrono::__detail::ceil. │ │ │ │ +467 namespace __detail { using _c_h_r_o_n_o_:_:_c_e_i_l; } │ │ │ │ +468 │ │ │ │ +469#else // ! __glibcxx_chrono │ │ │ │ +470 │ │ │ │ +471 // We want to use ceil even when compiling for earlier standards versions. │ │ │ │ +472 // C++11 only allows a single statement in a constexpr function, so we │ │ │ │ +473 // need to move the comparison into a separate function, __ceil_impl. │ │ │ │ +474 namespace __detail │ │ │ │ +475 { │ │ │ │ +476 template │ │ │ │ +477 constexpr _Tp │ │ │ │ +478 __ceil_impl(const _Tp& __t, const _Up& __u) │ │ │ │ +479 { │ │ │ │ +480 return (__t < __u) ? (__t + _Tp{1}) : __t; │ │ │ │ +481 } │ │ │ │ +482 │ │ │ │ +483 // C++11-friendly version of std::chrono::ceil for internal use. │ │ │ │ +484 template │ │ │ │ +485 constexpr _ToDur │ │ │ │ +486 ceil(const duration<_Rep, _Period>& __d) │ │ │ │ +487 { │ │ │ │ +488 return __detail::__ceil_impl(_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n___c_a_s_t_<___T_o_D_u_r_>(__d), __d); │ │ │ │ +489 } │ │ │ │ +490 } │ │ │ │ +491#endif // __glibcxx_chrono │ │ │ │ +492 │ │ │ │ +493 /// duration_values │ │ │ │ +494 template │ │ │ │ +_4_9_5 struct _d_u_r_a_t_i_o_n___v_a_l_u_e_s │ │ │ │ +496 { │ │ │ │ +497 static constexpr _Rep │ │ │ │ +498 zero() noexcept │ │ │ │ +499 { return _Rep(0); } │ │ │ │ +500 │ │ │ │ +501 static constexpr _Rep │ │ │ │ +502 max() noexcept │ │ │ │ +503 { return _n_u_m_e_r_i_c___l_i_m_i_t_s_<___R_e_p_>_:_:_m_a_x(); } │ │ │ │ +504 │ │ │ │ +505 static constexpr _Rep │ │ │ │ +506 min() noexcept │ │ │ │ +507 { return _n_u_m_e_r_i_c___l_i_m_i_t_s_<___R_e_p_>_:_:_l_o_w_e_s_t(); } │ │ │ │ +508 }; │ │ │ │ +509 │ │ │ │ +510 template │ │ │ │ +_5_1_1 class duration │ │ │ │ +512 { │ │ │ │ +513 static_assert(!__is_duration<_Rep>::value, │ │ │ │ +514 "rep cannot be a std::chrono::duration"); │ │ │ │ +515 static_assert(__is_ratio<_Period>::value, │ │ │ │ +516 "period must be a specialization of std::ratio"); │ │ │ │ +517 static_assert(_Period::num > 0, "period must be positive"); │ │ │ │ +518 │ │ │ │ +519 template │ │ │ │ +520 using __is_float = _t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t_<___R_e_p_2_>; │ │ │ │ +521 │ │ │ │ +522 static constexpr intmax_t │ │ │ │ +523 _S_gcd(intmax_t __m, intmax_t __n) noexcept │ │ │ │ +524 { │ │ │ │ +525 // Duration only allows positive periods so we don't need to │ │ │ │ +526 // handle negative values here (unlike __static_gcd and std::gcd). │ │ │ │ +527#if __cplusplus >= 201402L │ │ │ │ +528 do │ │ │ │ +529 { │ │ │ │ +530 intmax_t __rem = __m % __n; │ │ │ │ +531 __m = __n; │ │ │ │ +532 __n = __rem; │ │ │ │ +533 } │ │ │ │ +534 while (__n != 0); │ │ │ │ +535 return __m; │ │ │ │ +536#else │ │ │ │ +537 // C++11 doesn't allow loops in constexpr functions, but this │ │ │ │ +538 // recursive version can be more expensive to evaluate. │ │ │ │ +539 return (__n == 0) ? __m : _S_gcd(__n, __m % __n); │ │ │ │ +540#endif │ │ │ │ +541 } │ │ │ │ +542 │ │ │ │ +543 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +544 // 2094. overflow shouldn't participate in overload resolution │ │ │ │ +545 // 3090. What is [2094] intended to mean? │ │ │ │ +546 // This only produces a valid type if no overflow occurs. │ │ │ │ +547 template │ │ │ │ +550 using __divide = _r_a_t_i_o<(_R1::num / __gcd1) * (_R2::den / __gcd2), │ │ │ │ +551 (_R1::den / __gcd2) * (_R2::num / __gcd1)>; │ │ │ │ +552 │ │ │ │ +553 // _Period2 is an exact multiple of _Period │ │ │ │ +554 template │ │ │ │ +555 using __is_harmonic │ │ │ │ +556 = __bool_constant<__divide<_Period2, _Period>::den == 1>; │ │ │ │ +557 │ │ │ │ +558 public: │ │ │ │ +559 │ │ │ │ +560 using rep = _Rep; │ │ │ │ +561 using period = typename _Period::type; │ │ │ │ +562 │ │ │ │ +563 // 20.11.5.1 construction / copy / destroy │ │ │ │ +564 constexpr duration() = default; │ │ │ │ +565 │ │ │ │ +566 duration(const duration&) = default; │ │ │ │ +567 │ │ │ │ +568 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +569 // 3050. Conversion specification problem in chrono::duration │ │ │ │ +570 template, │ │ │ │ +572 __or_<__is_float, __not_<__is_float<_Rep2>>>>> │ │ │ │ +573 constexpr explicit duration(const _Rep2& __rep) │ │ │ │ +574 : __r(static_cast(__rep)) { } │ │ │ │ +575 │ │ │ │ +576 template, │ │ │ │ +578 __or_<__is_float, │ │ │ │ +579 __and_<__is_harmonic<_Period2>, │ │ │ │ +580 __not_<__is_float<_Rep2>>>>>> │ │ │ │ +581 constexpr duration(const duration<_Rep2, _Period2>& __d) │ │ │ │ +582 : __r(_d_u_r_a_t_i_o_n___c_a_s_t_<_d_u_r_a_t_i_o_n_>(__d).count()) { } │ │ │ │ +583 │ │ │ │ +584 ~duration() = default; │ │ │ │ +585 duration& operator=(const duration&) = default; │ │ │ │ +586 │ │ │ │ +587 // 20.11.5.2 observer │ │ │ │ +588 constexpr rep │ │ │ │ +589 count() const │ │ │ │ +590 { return __r; } │ │ │ │ +591 │ │ │ │ +592 // 20.11.5.3 arithmetic │ │ │ │ +593 │ │ │ │ +594 constexpr duration::type, period> │ │ │ │ +595 operator+() const │ │ │ │ +596 { return duration::type, period>(__r); } │ │ │ │ +597 │ │ │ │ +598 constexpr duration::type, period> │ │ │ │ +599 operator-() const │ │ │ │ +600 { return duration::type, period>(-__r); } │ │ │ │ +601 │ │ │ │ +602 _GLIBCXX17_CONSTEXPR duration& │ │ │ │ +603 operator++() │ │ │ │ +604 { │ │ │ │ +605 ++__r; │ │ │ │ +606 return *this; │ │ │ │ +607 } │ │ │ │ +608 │ │ │ │ +609 _GLIBCXX17_CONSTEXPR duration │ │ │ │ +610 operator++(int) │ │ │ │ +611 { return duration(__r++); } │ │ │ │ +612 │ │ │ │ +613 _GLIBCXX17_CONSTEXPR duration& │ │ │ │ +614 operator--() │ │ │ │ +615 { │ │ │ │ +616 --__r; │ │ │ │ +617 return *this; │ │ │ │ +618 } │ │ │ │ +619 │ │ │ │ +620 _GLIBCXX17_CONSTEXPR duration │ │ │ │ +621 operator--(int) │ │ │ │ +622 { return duration(__r--); } │ │ │ │ +623 │ │ │ │ +624 _GLIBCXX17_CONSTEXPR duration& │ │ │ │ +625 operator+=(const duration& __d) │ │ │ │ +626 { │ │ │ │ +627 __r += __d.count(); │ │ │ │ +628 return *this; │ │ │ │ +629 } │ │ │ │ +630 │ │ │ │ +631 _GLIBCXX17_CONSTEXPR duration& │ │ │ │ +632 operator-=(const duration& __d) │ │ │ │ +633 { │ │ │ │ +634 __r -= __d.count(); │ │ │ │ +635 return *this; │ │ │ │ +636 } │ │ │ │ +637 │ │ │ │ +638 _GLIBCXX17_CONSTEXPR duration& │ │ │ │ +639 operator*=(const rep& __rhs) │ │ │ │ +640 { │ │ │ │ +641 __r *= __rhs; │ │ │ │ +642 return *this; │ │ │ │ +643 } │ │ │ │ +644 │ │ │ │ +645 _GLIBCXX17_CONSTEXPR duration& │ │ │ │ +646 operator/=(const rep& __rhs) │ │ │ │ +647 { │ │ │ │ +648 __r /= __rhs; │ │ │ │ +649 return *this; │ │ │ │ +650 } │ │ │ │ +651 │ │ │ │ +652 // DR 934. │ │ │ │ +653 template │ │ │ │ +654 _GLIBCXX17_CONSTEXPR │ │ │ │ +655 __enable_if_t::value, duration&> │ │ │ │ +656 operator%=(const rep& __rhs) │ │ │ │ +657 { │ │ │ │ +658 __r %= __rhs; │ │ │ │ +659 return *this; │ │ │ │ +660 } │ │ │ │ +661 │ │ │ │ +662 template │ │ │ │ +663 _GLIBCXX17_CONSTEXPR │ │ │ │ +664 __enable_if_t::value, duration&> │ │ │ │ +665 operator%=(const duration& __d) │ │ │ │ +666 { │ │ │ │ +667 __r %= __d.count(); │ │ │ │ +668 return *this; │ │ │ │ +669 } │ │ │ │ +670 │ │ │ │ +671 // 20.11.5.4 special values │ │ │ │ +672 static constexpr duration │ │ │ │ +673 zero() noexcept │ │ │ │ +674 { return duration(duration_values::zero()); } │ │ │ │ +675 │ │ │ │ +676 static constexpr duration │ │ │ │ +677 min() noexcept │ │ │ │ +678 { return duration(duration_values::min()); } │ │ │ │ +679 │ │ │ │ +680 static constexpr duration │ │ │ │ +681 max() noexcept │ │ │ │ +682 { return duration(duration_values::max()); } │ │ │ │ +683 │ │ │ │ +684 private: │ │ │ │ +685 rep __r; │ │ │ │ +686 }; │ │ │ │ +687 │ │ │ │ +688 /// @{ │ │ │ │ +689 /// @relates std::chrono::duration │ │ │ │ +690 │ │ │ │ +691 /// The sum of two durations. │ │ │ │ +692 template │ │ │ │ +694 constexpr typename _c_o_m_m_o_n___t_y_p_e_<_d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>, │ │ │ │ +695 _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>>_:_:_t_y_p_e │ │ │ │ +_6_9_6 _o_p_e_r_a_t_o_r_+(const duration<_Rep1, _Period1>& __lhs, │ │ │ │ +697 const duration<_Rep2, _Period2>& __rhs) │ │ │ │ +698 { │ │ │ │ +699 typedef duration<_Rep1, _Period1> __dur1; │ │ │ │ +700 typedef duration<_Rep2, _Period2> __dur2; │ │ │ │ +701 typedef typename _c_o_m_m_o_n___t_y_p_e_<_____d_u_r_1_,_____d_u_r_2_>_:_:_t_y_p_e __cd; │ │ │ │ +702 return __cd(__cd(__lhs).count() + __cd(__rhs).count()); │ │ │ │ +703 } │ │ │ │ +704 │ │ │ │ +705 /// The difference between two durations. │ │ │ │ +706 template │ │ │ │ +708 constexpr typename _c_o_m_m_o_n___t_y_p_e_<_d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>, │ │ │ │ +709 _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>>_:_:_t_y_p_e │ │ │ │ +_7_1_0 _o_p_e_r_a_t_o_r_-(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>& __lhs, │ │ │ │ +711 const _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>& __rhs) │ │ │ │ +712 { │ │ │ │ +713 typedef _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_> __dur1; │ │ │ │ +714 typedef _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_> __dur2; │ │ │ │ +715 typedef typename _c_o_m_m_o_n___t_y_p_e_<_____d_u_r_1_,_____d_u_r_2_>_:_:_t_y_p_e __cd; │ │ │ │ +716 return __cd(__cd(__lhs).count() - __cd(__rhs).count()); │ │ │ │ +717 } │ │ │ │ +718 │ │ │ │ +719 /// @} │ │ │ │ +720 │ │ │ │ +721 /// @cond undocumented │ │ │ │ +722 │ │ │ │ +723 // SFINAE helper to obtain common_type<_Rep1, _Rep2> only if _Rep2 │ │ │ │ +724 // is implicitly convertible to it. │ │ │ │ +725 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +726 // 3050. Conversion specification problem in chrono::duration constructor │ │ │ │ +727 template_:_:_t_y_p_e> │ │ │ │ +729 using __common_rep_t = typename │ │ │ │ +730 _e_n_a_b_l_e___i_f_<_i_s___c_o_n_v_e_r_t_i_b_l_e_<_c_o_n_s_t_ ___R_e_p_2_&_,_ ___C_R_e_p_>_:_:_v_a_l_u_e, _CRep>_:_:_t_y_p_e; │ │ │ │ +731 │ │ │ │ +732 /// @endcond │ │ │ │ +733 │ │ │ │ +734 /** @{ │ │ │ │ +735 * Arithmetic operators for chrono::duration │ │ │ │ +736 * @relates std::chrono::duration │ │ │ │ +737 */ │ │ │ │ +738 │ │ │ │ +739 template │ │ │ │ +740 constexpr duration<__common_rep_t<_Rep1, _Rep2>, _Period> │ │ │ │ +_7_4_1 _o_p_e_r_a_t_o_r_*(const duration<_Rep1, _Period>& __d, const _Rep2& __s) │ │ │ │ +742 { │ │ │ │ +743 typedef duration::type, _Period> │ │ │ │ +744 __cd; │ │ │ │ +745 return __cd(__cd(__d).count() * __s); │ │ │ │ +746 } │ │ │ │ +747 │ │ │ │ +748 template │ │ │ │ +749 constexpr _d_u_r_a_t_i_o_n_<_____c_o_m_m_o_n___r_e_p___t_<___R_e_p_2_,_ ___R_e_p_1_>, _Period> │ │ │ │ +_7_5_0 _o_p_e_r_a_t_o_r_*(const _Rep1& __s, const _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_>& __d) │ │ │ │ +751 { return __d * __s; } │ │ │ │ +752 │ │ │ │ +753 template │ │ │ │ +754 constexpr │ │ │ │ +755 duration<__common_rep_t<_Rep1, __disable_if_is_duration<_Rep2>>, _Period> │ │ │ │ +_7_5_6 _o_p_e_r_a_t_o_r_/(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_>& __d, const _Rep2& __s) │ │ │ │ +757 { │ │ │ │ +758 typedef _d_u_r_a_t_i_o_n_<_t_y_p_e_n_a_m_e_ _c_o_m_m_o_n___t_y_p_e_<___R_e_p_1_,_ ___R_e_p_2_>_:_:_t_y_p_e, _Period> │ │ │ │ +759 __cd; │ │ │ │ +760 return __cd(__cd(__d).count() / __s); │ │ │ │ +761 } │ │ │ │ +762 │ │ │ │ +763 template │ │ │ │ +765 constexpr typename _c_o_m_m_o_n___t_y_p_e_<___R_e_p_1_,_ ___R_e_p_2_>_:_:_t_y_p_e │ │ │ │ +_7_6_6 _o_p_e_r_a_t_o_r_/(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>& __lhs, │ │ │ │ +767 const _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>& __rhs) │ │ │ │ +768 { │ │ │ │ +769 typedef _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_> __dur1; │ │ │ │ +770 typedef _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_> __dur2; │ │ │ │ +771 typedef typename _c_o_m_m_o_n___t_y_p_e_<_____d_u_r_1_,_____d_u_r_2_>_:_:_t_y_p_e __cd; │ │ │ │ +772 return __cd(__lhs).count() / __cd(__rhs).count(); │ │ │ │ +773 } │ │ │ │ +774 │ │ │ │ +775 // DR 934. │ │ │ │ +776 template │ │ │ │ +777 constexpr │ │ │ │ +778 duration<__common_rep_t<_Rep1, __disable_if_is_duration<_Rep2>>, _Period> │ │ │ │ +_7_7_9 _o_p_e_r_a_t_o_r_%(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_>& __d, const _Rep2& __s) │ │ │ │ +780 { │ │ │ │ +781 typedef _d_u_r_a_t_i_o_n_<_t_y_p_e_n_a_m_e_ _c_o_m_m_o_n___t_y_p_e_<___R_e_p_1_,_ ___R_e_p_2_>_:_:_t_y_p_e, _Period> │ │ │ │ +782 __cd; │ │ │ │ +783 return __cd(__cd(__d).count() % __s); │ │ │ │ +784 } │ │ │ │ +785 │ │ │ │ +786 template │ │ │ │ +788 constexpr typename _c_o_m_m_o_n___t_y_p_e_<_d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>, │ │ │ │ +789 duration<_Rep2, _Period2>>_:_:_t_y_p_e │ │ │ │ +_7_9_0 _o_p_e_r_a_t_o_r_%(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>& __lhs, │ │ │ │ +791 const _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>& __rhs) │ │ │ │ +792 { │ │ │ │ +793 typedef _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_> __dur1; │ │ │ │ +794 typedef _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_> __dur2; │ │ │ │ +795 typedef typename _c_o_m_m_o_n___t_y_p_e_<_____d_u_r_1_,_____d_u_r_2_>_:_:_t_y_p_e __cd; │ │ │ │ +796 return __cd(__cd(__lhs).count() % __cd(__rhs).count()); │ │ │ │ +797 } │ │ │ │ +798 /// @} │ │ │ │ +799 │ │ │ │ +800 // comparisons │ │ │ │ +801 │ │ │ │ +802 /** @{ │ │ │ │ +803 * Comparisons for chrono::duration │ │ │ │ +804 * @relates std::chrono::duration │ │ │ │ +805 */ │ │ │ │ +806 │ │ │ │ +807 template │ │ │ │ +809 constexpr bool │ │ │ │ +_8_1_0 _o_p_e_r_a_t_o_r_=_=(const duration<_Rep1, _Period1>& __lhs, │ │ │ │ +811 const duration<_Rep2, _Period2>& __rhs) │ │ │ │ +812 { │ │ │ │ +813 typedef duration<_Rep1, _Period1> __dur1; │ │ │ │ +814 typedef duration<_Rep2, _Period2> __dur2; │ │ │ │ +815 typedef typename _c_o_m_m_o_n___t_y_p_e_<_____d_u_r_1_,_____d_u_r_2_>_:_:_t_y_p_e __ct; │ │ │ │ +816 return __ct(__lhs).count() == __ct(__rhs).count(); │ │ │ │ +817 } │ │ │ │ +818 │ │ │ │ +819 template │ │ │ │ +_8_2_1 constexpr bool │ │ │ │ +822 _o_p_e_r_a_t_o_r_<(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>& __lhs, │ │ │ │ +823 const _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>& __rhs) │ │ │ │ +824 { │ │ │ │ +825 typedef _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_> __dur1; │ │ │ │ +826 typedef _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_> __dur2; │ │ │ │ +827 typedef typename _c_o_m_m_o_n___t_y_p_e_<_____d_u_r_1_,_____d_u_r_2_>_:_:_t_y_p_e __ct; │ │ │ │ +828 return __ct(__lhs).count() < __ct(__rhs).count(); │ │ │ │ +829 } │ │ │ │ +830 │ │ │ │ +831#if __cpp_lib_three_way_comparison │ │ │ │ +832 template │ │ │ │ +834 requires three_way_comparable> │ │ │ │ +_8_3_5 constexpr auto │ │ │ │ +836 _o_p_e_r_a_t_o_r_<_=_>(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>& __lhs, │ │ │ │ +837 const _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>& __rhs) │ │ │ │ +838 { │ │ │ │ +839 using __ct = _c_o_m_m_o_n___t_y_p_e___t_<_d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>, │ │ │ │ +840 _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>>; │ │ │ │ +841 return __ct(__lhs).count() <=> __ct(__rhs).count(); │ │ │ │ +842 } │ │ │ │ +843#else │ │ │ │ +844 template │ │ │ │ +846 constexpr bool │ │ │ │ +847 operator!=(const duration<_Rep1, _Period1>& __lhs, │ │ │ │ +848 const duration<_Rep2, _Period2>& __rhs) │ │ │ │ +849 { return !(__lhs == __rhs); } │ │ │ │ +850#endif │ │ │ │ +851 │ │ │ │ +852 template │ │ │ │ +_8_5_4 constexpr bool │ │ │ │ +855 _o_p_e_r_a_t_o_r_<_=(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>& __lhs, │ │ │ │ +856 const _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>& __rhs) │ │ │ │ +857 { return !(__rhs < __lhs); } │ │ │ │ +858 │ │ │ │ +859 template │ │ │ │ +861 constexpr bool │ │ │ │ +_8_6_2 _o_p_e_r_a_t_o_r_>(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>& __lhs, │ │ │ │ +863 const _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>& __rhs) │ │ │ │ +864 { return __rhs < __lhs; } │ │ │ │ +865 │ │ │ │ +866 template │ │ │ │ +868 constexpr bool │ │ │ │ +_8_6_9 _o_p_e_r_a_t_o_r_>_=(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>& __lhs, │ │ │ │ +870 const _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>& __rhs) │ │ │ │ +871 { return !(__lhs < __rhs); } │ │ │ │ +872 │ │ │ │ +873 /// @} │ │ │ │ +874 │ │ │ │ +875 /// @cond undocumented │ │ │ │ +876#ifdef _GLIBCXX_USE_C99_STDINT │ │ │ │ +877# define _GLIBCXX_CHRONO_INT64_T int64_t │ │ │ │ +878#elif defined __INT64_TYPE__ │ │ │ │ +879# define _GLIBCXX_CHRONO_INT64_T __INT64_TYPE__ │ │ │ │ +880#else │ │ │ │ +881 static_assert(_s_t_d_:_:_n_u_m_e_r_i_c___l_i_m_i_t_s_<_u_n_s_i_g_n_e_d_ _l_o_n_g_ _l_o_n_g_>_:_:_d_i_g_i_t_s >= 64, │ │ │ │ +882 "Representation type for nanoseconds must have at least 64 bits"); │ │ │ │ +883# define _GLIBCXX_CHRONO_INT64_T long long │ │ │ │ +884#endif │ │ │ │ +885 /// @endcond │ │ │ │ +886 │ │ │ │ +887 /// nanoseconds │ │ │ │ +_8_8_8 using _n_a_n_o_s_e_c_o_n_d_s = _d_u_r_a_t_i_o_n_<___G_L_I_B_C_X_X___C_H_R_O_N_O___I_N_T_6_4___T_,_ _n_a_n_o_>; │ │ │ │ +889 │ │ │ │ +890 /// microseconds │ │ │ │ +_8_9_1 using _m_i_c_r_o_s_e_c_o_n_d_s = _d_u_r_a_t_i_o_n_<___G_L_I_B_C_X_X___C_H_R_O_N_O___I_N_T_6_4___T_,_ _m_i_c_r_o_>; │ │ │ │ +892 │ │ │ │ +893 /// milliseconds │ │ │ │ +_8_9_4 using _m_i_l_l_i_s_e_c_o_n_d_s = _d_u_r_a_t_i_o_n_<___G_L_I_B_C_X_X___C_H_R_O_N_O___I_N_T_6_4___T_,_ _m_i_l_l_i_>; │ │ │ │ +895 │ │ │ │ +896 /// seconds │ │ │ │ +_8_9_7 using _s_e_c_o_n_d_s = _d_u_r_a_t_i_o_n_<___G_L_I_B_C_X_X___C_H_R_O_N_O___I_N_T_6_4___T_>; │ │ │ │ +898 │ │ │ │ +899 /// minutes │ │ │ │ +_9_0_0 using _m_i_n_u_t_e_s = _d_u_r_a_t_i_o_n_<___G_L_I_B_C_X_X___C_H_R_O_N_O___I_N_T_6_4___T_,_ _r_a_t_i_o_<_ _6_0_>>; │ │ │ │ +901 │ │ │ │ +902 /// hours │ │ │ │ +_9_0_3 using _h_o_u_r_s = _d_u_r_a_t_i_o_n_<___G_L_I_B_C_X_X___C_H_R_O_N_O___I_N_T_6_4___T_,_ _r_a_t_i_o_<_3_6_0_0_>>; │ │ │ │ +904 │ │ │ │ +905#if __cplusplus > 201703L │ │ │ │ +906 /// days │ │ │ │ +_9_0_7 using _d_a_y_s = _d_u_r_a_t_i_o_n_<___G_L_I_B_C_X_X___C_H_R_O_N_O___I_N_T_6_4___T_,_ _r_a_t_i_o_<_8_6_4_0_0_>>; │ │ │ │ +908 │ │ │ │ +909 /// weeks │ │ │ │ +_9_1_0 using _w_e_e_k_s = _d_u_r_a_t_i_o_n_<___G_L_I_B_C_X_X___C_H_R_O_N_O___I_N_T_6_4___T_,_ _r_a_t_i_o_<_6_0_4_8_0_0_>>; │ │ │ │ +911 │ │ │ │ +912 /// years │ │ │ │ +_9_1_3 using _y_e_a_r_s = _d_u_r_a_t_i_o_n_<___G_L_I_B_C_X_X___C_H_R_O_N_O___I_N_T_6_4___T_,_ _r_a_t_i_o_<_3_1_5_5_6_9_5_2_>>; │ │ │ │ +914 │ │ │ │ +915 /// months │ │ │ │ +_9_1_6 using _m_o_n_t_h_s = _d_u_r_a_t_i_o_n_<___G_L_I_B_C_X_X___C_H_R_O_N_O___I_N_T_6_4___T_,_ _r_a_t_i_o_<_2_6_2_9_7_4_6_>>; │ │ │ │ +917#endif // C++20 │ │ │ │ +918 │ │ │ │ +919#undef _GLIBCXX_CHRONO_INT64_T │ │ │ │ +920 │ │ │ │ +921 template │ │ │ │ +_9_2_2 class time_point │ │ │ │ +923 { │ │ │ │ +924 static_assert(__is_duration<_Dur>::value, │ │ │ │ +925 "duration must be a specialization of std::chrono::duration"); │ │ │ │ +926 │ │ │ │ +927 public: │ │ │ │ +928 typedef _Clock clock; │ │ │ │ +929 typedef _Dur duration; │ │ │ │ +930 typedef typename duration::rep rep; │ │ │ │ +931 typedef typename duration::period period; │ │ │ │ +932 │ │ │ │ +933 constexpr time_point() : __d(duration::zero()) │ │ │ │ +934 { } │ │ │ │ +935 │ │ │ │ +936 constexpr explicit time_point(const duration& __dur) │ │ │ │ +937 : __d(__dur) │ │ │ │ +938 { } │ │ │ │ +939 │ │ │ │ +940 // conversions │ │ │ │ +941 template>> │ │ │ │ +943 constexpr time_point(const time_point& __t) │ │ │ │ +944 : __d(__t.time_since_epoch()) │ │ │ │ +945 { } │ │ │ │ +946 │ │ │ │ +947 // observer │ │ │ │ +948 constexpr duration │ │ │ │ +949 time_since_epoch() const │ │ │ │ +950 { return __d; } │ │ │ │ +951 │ │ │ │ +952#if __cplusplus > 201703L │ │ │ │ +953 constexpr time_point& │ │ │ │ +954 operator++() │ │ │ │ +955 { │ │ │ │ +956 ++__d; │ │ │ │ +957 return *this; │ │ │ │ +958 } │ │ │ │ +959 │ │ │ │ +960 constexpr time_point │ │ │ │ +961 operator++(int) │ │ │ │ +962 { return time_point{__d++}; } │ │ │ │ +963 │ │ │ │ +964 constexpr time_point& │ │ │ │ +965 operator--() │ │ │ │ +966 { │ │ │ │ +967 --__d; │ │ │ │ +968 return *this; │ │ │ │ +969 } │ │ │ │ +970 │ │ │ │ +971 constexpr time_point │ │ │ │ +972 operator--(int) │ │ │ │ +973 { return time_point{__d--}; } │ │ │ │ +974#endif │ │ │ │ +975 │ │ │ │ +976 // arithmetic │ │ │ │ +977 _GLIBCXX17_CONSTEXPR time_point& │ │ │ │ +978 operator+=(const duration& __dur) │ │ │ │ +979 { │ │ │ │ +980 __d += __dur; │ │ │ │ +981 return *this; │ │ │ │ +982 } │ │ │ │ +983 │ │ │ │ +984 _GLIBCXX17_CONSTEXPR time_point& │ │ │ │ +985 operator-=(const duration& __dur) │ │ │ │ +986 { │ │ │ │ +987 __d -= __dur; │ │ │ │ +988 return *this; │ │ │ │ +989 } │ │ │ │ +990 │ │ │ │ +991 // special values │ │ │ │ +992 static constexpr time_point │ │ │ │ +993 min() noexcept │ │ │ │ +994 { return time_point(duration::min()); } │ │ │ │ +995 │ │ │ │ +996 static constexpr time_point │ │ │ │ +997 max() noexcept │ │ │ │ +998 { return time_point(duration::max()); } │ │ │ │ +999 │ │ │ │ +1000 private: │ │ │ │ +1001 duration __d; │ │ │ │ +1002 }; │ │ │ │ +1003 │ │ │ │ +1004 /** Convert a `time_point` to use `duration` type `ToDur`. │ │ │ │ +1005 * │ │ │ │ +1006 * The result is the same time point as measured by the same clock, but │ │ │ │ +1007 * using the specified `duration` to represent the time. │ │ │ │ +1008 * If the time point cannot be represented accurately in the result type, │ │ │ │ +1009 * returns the result of integer truncation (i.e., rounded towards zero). │ │ │ │ +1010 * │ │ │ │ +1011 * @tparam _ToDur The `duration` type to use for the result. │ │ │ │ +1012 * @param __t A time point. │ │ │ │ +1013 * @return The value of `__t` converted to use type `_ToDur`. │ │ │ │ +1014 * @since C++11 │ │ │ │ +1015 */ │ │ │ │ +1016 template │ │ │ │ +1017 _GLIBCXX_NODISCARD constexpr │ │ │ │ +1018 __enable_if_t<__is_duration<_ToDur>::value, _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___T_o_D_u_r_>> │ │ │ │ +_1_0_1_9 _t_i_m_e___p_o_i_n_t___c_a_s_t(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_>& __t) │ │ │ │ +1020 { │ │ │ │ +1021 typedef _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___T_o_D_u_r_> __time_point; │ │ │ │ +1022 return __time_point(_d_u_r_a_t_i_o_n___c_a_s_t_<___T_o_D_u_r_>(__t.time_since_epoch())); │ │ │ │ +1023 } │ │ │ │ +1024 │ │ │ │ +1025#if __cplusplus > 201402L │ │ │ │ +1026 /** Convert a `time_point` to type `ToDur` and round down. │ │ │ │ +1027 * │ │ │ │ +1028 * The result is the same time point as measured by the same clock, but │ │ │ │ +1029 * using the specified `duration` to represent the time. │ │ │ │ +1030 * If the time point cannot be represented exactly in the result type, │ │ │ │ +1031 * returns the closest value that is less than the argument. │ │ │ │ +1032 * │ │ │ │ +1033 * @tparam _ToDur The `duration` type to use for the result. │ │ │ │ +1034 * @param __t A time point. │ │ │ │ +1035 * @return The value of `__d` converted to type `_ToDur`. │ │ │ │ +1036 * @since C++17 │ │ │ │ +1037 */ │ │ │ │ +1038 template │ │ │ │ +1039 [[nodiscard]] constexpr │ │ │ │ +1040 _e_n_a_b_l_e___i_f___t_<_____i_s___d_u_r_a_t_i_o_n___v_<___T_o_D_u_r_>, time_point<_Clock, _ToDur>> │ │ │ │ +_1_0_4_1 _f_l_o_o_r(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_>& __tp) │ │ │ │ +1042 { │ │ │ │ +1043 return _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___T_o_D_u_r_>{ │ │ │ │ +1044 _c_h_r_o_n_o_:_:_f_l_o_o_r_<___T_o_D_u_r_>(__tp.time_since_epoch())}; │ │ │ │ +1045 } │ │ │ │ +1046 │ │ │ │ +1047 /** Convert a `time_point` to type `ToDur` and round up. │ │ │ │ +1048 * │ │ │ │ +1049 * The result is the same time point as measured by the same clock, but │ │ │ │ +1050 * using the specified `duration` to represent the time. │ │ │ │ +1051 * If the time point cannot be represented exactly in the result type, │ │ │ │ +1052 * returns the closest value that is greater than the argument. │ │ │ │ +1053 * │ │ │ │ +1054 * @tparam _ToDur The `duration` type to use for the result. │ │ │ │ +1055 * @param __t A time point. │ │ │ │ +1056 * @return The value of `__d` converted to type `_ToDur`. │ │ │ │ +1057 * @since C++17 │ │ │ │ +1058 */ │ │ │ │ +1059 template │ │ │ │ +1060 [[nodiscard]] constexpr │ │ │ │ +1061 _e_n_a_b_l_e___i_f___t_<_____i_s___d_u_r_a_t_i_o_n___v_<___T_o_D_u_r_>, time_point<_Clock, _ToDur>> │ │ │ │ +_1_0_6_2 _c_e_i_l(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_>& __tp) │ │ │ │ +1063 { │ │ │ │ +1064 return _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___T_o_D_u_r_>{ │ │ │ │ +1065 _c_h_r_o_n_o_:_:_c_e_i_l_<___T_o_D_u_r_>(__tp.time_since_epoch())}; │ │ │ │ +1066 } │ │ │ │ +1067 │ │ │ │ +1068 /** Convert a `time_point` to type `ToDur` and round to the closest value. │ │ │ │ +1069 * │ │ │ │ +1070 * The result is the same time point as measured by the same clock, but │ │ │ │ +1071 * using the specified `duration` to represent the time. │ │ │ │ +1072 * If the time point cannot be represented exactly in the result type, │ │ │ │ +1073 * returns the closest value, rounding ties to even. │ │ │ │ +1074 * │ │ │ │ +1075 * @tparam _ToDur The `duration` type to use for the result, │ │ │ │ +1076 * which must have a non-floating-point `rep` type. │ │ │ │ +1077 * @param __t A time point. │ │ │ │ +1078 * @return The value of `__d` converted to type `_ToDur`. │ │ │ │ +1079 * @since C++17 │ │ │ │ +1080 */ │ │ │ │ +1081 template │ │ │ │ +1082 [[nodiscard]] constexpr │ │ │ │ +1083 _e_n_a_b_l_e___i_f___t_<_____i_s___d_u_r_a_t_i_o_n___v_<___T_o_D_u_r_> │ │ │ │ +1084 && !treat_as_floating_point_v, │ │ │ │ +1085 time_point<_Clock, _ToDur>> │ │ │ │ +_1_0_8_6 _r_o_u_n_d(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_>& __tp) │ │ │ │ +1087 { │ │ │ │ +1088 return _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___T_o_D_u_r_>{ │ │ │ │ +1089 _c_h_r_o_n_o_:_:_r_o_u_n_d_<___T_o_D_u_r_>(__tp.time_since_epoch())}; │ │ │ │ +1090 } │ │ │ │ +1091#endif // C++17 │ │ │ │ +1092 │ │ │ │ +1093 /// @{ │ │ │ │ +1094 /// @relates time_point │ │ │ │ +1095 │ │ │ │ +1096 /// Adjust a time point forwards by the given duration. │ │ │ │ +1097 template │ │ │ │ +1099 constexpr time_point<_Clock, │ │ │ │ +1100 typename _c_o_m_m_o_n___t_y_p_e_<___D_u_r_1_,_ _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>>_:_:_t_y_p_e> │ │ │ │ +_1_1_0_1 _o_p_e_r_a_t_o_r_+(const time_point<_Clock, _Dur1>& __lhs, │ │ │ │ +1102 const duration<_Rep2, _Period2>& __rhs) │ │ │ │ +1103 { │ │ │ │ +1104 typedef duration<_Rep2, _Period2> __dur2; │ │ │ │ +1105 typedef typename _c_o_m_m_o_n___t_y_p_e_<___D_u_r_1_,_____d_u_r_2_>_:_:_t_y_p_e __ct; │ │ │ │ +1106 typedef time_point<_Clock, __ct> __time_point; │ │ │ │ +1107 return __time_point(__lhs.time_since_epoch() + __rhs); │ │ │ │ +1108 } │ │ │ │ +1109 │ │ │ │ +1110 /// Adjust a time point forwards by the given duration. │ │ │ │ +1111 template │ │ │ │ +1113 constexpr _t_i_m_e___p_o_i_n_t<_Clock, │ │ │ │ +1114 typename _c_o_m_m_o_n___t_y_p_e_<_d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>, _Dur2>_:_:_t_y_p_e> │ │ │ │ +_1_1_1_5 _o_p_e_r_a_t_o_r_+(const _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_>& __lhs, │ │ │ │ +1116 const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_2_>& __rhs) │ │ │ │ +1117 { │ │ │ │ +1118 typedef _d_u_r_a_t_i_o_n_<___R_e_p_1_,_ ___P_e_r_i_o_d_1_> __dur1; │ │ │ │ +1119 typedef typename _c_o_m_m_o_n___t_y_p_e_<_____d_u_r_1_,___D_u_r_2_>_:_:_t_y_p_e __ct; │ │ │ │ +1120 typedef _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ _____c_t_> __time_point; │ │ │ │ +1121 return __time_point(__rhs.time_since_epoch() + __lhs); │ │ │ │ +1122 } │ │ │ │ +1123 │ │ │ │ +1124 /// Adjust a time point backwards by the given duration. │ │ │ │ +1125 template │ │ │ │ +1127 constexpr time_point<_Clock, │ │ │ │ +1128 typename _c_o_m_m_o_n___t_y_p_e_<___D_u_r_1_,_ _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>>_:_:_t_y_p_e> │ │ │ │ +_1_1_2_9 _o_p_e_r_a_t_o_r_-(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_1_>& __lhs, │ │ │ │ +1130 const _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_>& __rhs) │ │ │ │ +1131 { │ │ │ │ +1132 typedef _d_u_r_a_t_i_o_n_<___R_e_p_2_,_ ___P_e_r_i_o_d_2_> __dur2; │ │ │ │ +1133 typedef typename _c_o_m_m_o_n___t_y_p_e_<___D_u_r_1_,_____d_u_r_2_>_:_:_t_y_p_e __ct; │ │ │ │ +1134 typedef _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ _____c_t_> __time_point; │ │ │ │ +1135 return __time_point(__lhs.time_since_epoch() -__rhs); │ │ │ │ +1136 } │ │ │ │ +1137 │ │ │ │ +1138 /// The difference between two time points (as a duration) │ │ │ │ +1139 template │ │ │ │ +1140 constexpr typename _c_o_m_m_o_n___t_y_p_e_<___D_u_r_1_,_ ___D_u_r_2_>_:_:_t_y_p_e │ │ │ │ +_1_1_4_1 _o_p_e_r_a_t_o_r_-(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_1_>& __lhs, │ │ │ │ +1142 const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_2_>& __rhs) │ │ │ │ +1143 { return __lhs.time_since_epoch() - __rhs.time_since_epoch(); } │ │ │ │ +1144 /// @} │ │ │ │ +1145 │ │ │ │ +1146 /** @{ │ │ │ │ +1147 * Comparisons for time_point │ │ │ │ +1148 * @relates chrono::time_point │ │ │ │ +1149 */ │ │ │ │ +1150 │ │ │ │ +1151 template │ │ │ │ +1152 constexpr bool │ │ │ │ +1153 operator==(const time_point<_Clock, _Dur1>& __lhs, │ │ │ │ +1154 const time_point<_Clock, _Dur2>& __rhs) │ │ │ │ +1155 { return __lhs.time_since_epoch() == __rhs.time_since_epoch(); } │ │ │ │ +1156 │ │ │ │ +1157#if __cpp_lib_three_way_comparison │ │ │ │ +1158 template _Dur2> │ │ │ │ +1160 constexpr auto │ │ │ │ +1161 _o_p_e_r_a_t_o_r_<_=_>(const time_point<_Clock, _Dur1>& __lhs, │ │ │ │ +1162 const time_point<_Clock, _Dur2>& __rhs) │ │ │ │ +1163 { return __lhs.time_since_epoch() <=> __rhs.time_since_epoch(); } │ │ │ │ +1164#else │ │ │ │ +1165 template │ │ │ │ +1166 constexpr bool │ │ │ │ +1167 operator!=(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_1_>& __lhs, │ │ │ │ +1168 const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_2_>& __rhs) │ │ │ │ +1169 { return !(__lhs == __rhs); } │ │ │ │ +1170#endif │ │ │ │ +1171 │ │ │ │ +1172 template │ │ │ │ +1173 constexpr bool │ │ │ │ +1174 _o_p_e_r_a_t_o_r_<(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_1_>& __lhs, │ │ │ │ +1175 const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_2_>& __rhs) │ │ │ │ +1176 { return __lhs.time_since_epoch() < __rhs.time_since_epoch(); } │ │ │ │ +1177 │ │ │ │ +1178 template │ │ │ │ +1179 constexpr bool │ │ │ │ +1180 _o_p_e_r_a_t_o_r_<_=(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_1_>& __lhs, │ │ │ │ +1181 const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_2_>& __rhs) │ │ │ │ +1182 { return !(__rhs < __lhs); } │ │ │ │ +1183 │ │ │ │ +1184 template │ │ │ │ +1185 constexpr bool │ │ │ │ +1186 _o_p_e_r_a_t_o_r_>(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_1_>& __lhs, │ │ │ │ +1187 const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_2_>& __rhs) │ │ │ │ +1188 { return __rhs < __lhs; } │ │ │ │ +1189 │ │ │ │ +1190 template │ │ │ │ +1191 constexpr bool │ │ │ │ +1192 _o_p_e_r_a_t_o_r_>_=(const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_1_>& __lhs, │ │ │ │ +1193 const _t_i_m_e___p_o_i_n_t_<___C_l_o_c_k_,_ ___D_u_r_2_>& __rhs) │ │ │ │ +1194 { return !(__lhs < __rhs); } │ │ │ │ +1195 │ │ │ │ +1196 /// @} │ │ │ │ +1197 /// @} group chrono │ │ │ │ +1198 │ │ │ │ +1199 // Clocks. │ │ │ │ +1200 │ │ │ │ +1201 // Why nanosecond resolution as the default? │ │ │ │ +1202 // Why have std::system_clock always count in the highest │ │ │ │ +1203 // resolution (ie nanoseconds), even if on some OSes the low 3 │ │ │ │ +1204 // or 9 decimal digits will be always zero? This allows later │ │ │ │ +1205 // implementations to change the system_clock::now() │ │ │ │ +1206 // implementation any time to provide better resolution without │ │ │ │ +1207 // changing function signature or units. │ │ │ │ +1208 │ │ │ │ +1209 // To support the (forward) evolution of the library's defined │ │ │ │ +1210 // clocks, wrap inside inline namespace so that the current │ │ │ │ +1211 // defintions of system_clock, steady_clock, and │ │ │ │ +1212 // high_resolution_clock types are uniquely mangled. This way, new │ │ │ │ +1213 // code can use the latests clocks, while the library can contain │ │ │ │ +1214 // compatibility definitions for previous versions. At some │ │ │ │ +1215 // point, when these clocks settle down, the inlined namespaces │ │ │ │ +1216 // can be removed. XXX GLIBCXX_ABI Deprecated │ │ │ │ +1217_GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2) │ │ │ │ +1218 │ │ │ │ +1219 /** │ │ │ │ +1220 * @brief System clock. │ │ │ │ +1221 * │ │ │ │ +1222 * Time returned represents wall time from the system-wide clock. │ │ │ │ +1223 * @ingroup chrono │ │ │ │ +1224 */ │ │ │ │ +_1_2_2_5 struct _s_y_s_t_e_m___c_l_o_c_k │ │ │ │ +1226 { │ │ │ │ +1227 typedef _c_h_r_o_n_o_:_:_n_a_n_o_s_e_c_o_n_d_s duration; │ │ │ │ +1228 typedef duration::rep rep; │ │ │ │ +1229 typedef duration::period period; │ │ │ │ +1230 typedef _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<_s_y_s_t_e_m___c_l_o_c_k_,_ _d_u_r_a_t_i_o_n_> time_point; │ │ │ │ +1231 │ │ │ │ +1232 static_assert(system_clock::duration::min() │ │ │ │ +1233 < system_clock::duration::zero(), │ │ │ │ +1234 "a clock's minimum duration cannot be less than its epoch"); │ │ │ │ +1235 │ │ │ │ +1236 static constexpr bool is_steady = false; │ │ │ │ +1237 │ │ │ │ +1238 static time_point │ │ │ │ +1239 now() noexcept; │ │ │ │ +1240 │ │ │ │ +1241 // Map to C API │ │ │ │ +1242 [[__gnu__::__always_inline__]] │ │ │ │ +1243 static std::time_t │ │ │ │ +1244 to_time_t(const time_point& __t) noexcept │ │ │ │ +1245 { │ │ │ │ +1246 return std::time_t(_d_u_r_a_t_i_o_n___c_a_s_t_<_c_h_r_o_n_o_:_:_s_e_c_o_n_d_s_> │ │ │ │ +1247 (__t.time_since_epoch()).count()); │ │ │ │ +1248 } │ │ │ │ +1249 │ │ │ │ +1250 [[__gnu__::__always_inline__]] │ │ │ │ +1251 static time_point │ │ │ │ +1252 from_time_t(std::time_t __t) noexcept │ │ │ │ +1253 { │ │ │ │ +1254 typedef _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<_s_y_s_t_e_m___c_l_o_c_k_,_ _s_e_c_o_n_d_s_> __from; │ │ │ │ +1255 return _t_i_m_e___p_o_i_n_t___c_a_s_t_<_s_y_s_t_e_m___c_l_o_c_k_:_:_d_u_r_a_t_i_o_n_> │ │ │ │ +1256 (__from(_c_h_r_o_n_o_:_:_s_e_c_o_n_d_s(__t))); │ │ │ │ +1257 } │ │ │ │ +1258 }; │ │ │ │ +1259 │ │ │ │ +1260 │ │ │ │ +1261 /** │ │ │ │ +1262 * @brief Monotonic clock │ │ │ │ +1263 * │ │ │ │ +1264 * Time returned has the property of only increasing at a uniform rate. │ │ │ │ +1265 * @ingroup chrono │ │ │ │ +1266 */ │ │ │ │ +_1_2_6_7 struct _s_t_e_a_d_y___c_l_o_c_k │ │ │ │ +1268 { │ │ │ │ +1269 typedef _c_h_r_o_n_o_:_:_n_a_n_o_s_e_c_o_n_d_s duration; │ │ │ │ +1270 typedef duration::rep rep; │ │ │ │ +1271 typedef duration::period period; │ │ │ │ +1272 typedef _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<_s_t_e_a_d_y___c_l_o_c_k_,_ _d_u_r_a_t_i_o_n_> time_point; │ │ │ │ +1273 │ │ │ │ +1274 static constexpr bool is_steady = true; │ │ │ │ +1275 │ │ │ │ +1276 static time_point │ │ │ │ +1277 now() noexcept; │ │ │ │ +1278 }; │ │ │ │ +1279 │ │ │ │ +1280 │ │ │ │ +1281 /** │ │ │ │ +1282 * @brief Highest-resolution clock │ │ │ │ +1283 * │ │ │ │ +1284 * This is the clock "with the shortest tick period." Alias to │ │ │ │ +1285 * std::system_clock until higher-than-nanosecond definitions │ │ │ │ +1286 * become feasible. │ │ │ │ +1287 * @ingroup chrono │ │ │ │ +1288 */ │ │ │ │ +_1_2_8_9 using _h_i_g_h___r_e_s_o_l_u_t_i_o_n___c_l_o_c_k = _s_y_s_t_e_m___c_l_o_c_k; │ │ │ │ +1290 │ │ │ │ +1291_GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) │ │ │ │ +1292 │ │ │ │ +1293#if __cplusplus >= 202002L │ │ │ │ +1294 /// @addtogroup chrono │ │ │ │ +1295 /// @{ │ │ │ │ +1296 template │ │ │ │ +1297 using sys_time = _t_i_m_e___p_o_i_n_t_<_s_y_s_t_e_m___c_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_>; │ │ │ │ +1298 using sys_seconds = sys_time; │ │ │ │ +1299 using sys_days = sys_time; │ │ │ │ +1300 │ │ │ │ +1301 using file_clock = ::std::filesystem::__file_clock; │ │ │ │ +1302 │ │ │ │ +1303 template │ │ │ │ +1304 using file_time = _t_i_m_e___p_o_i_n_t_<_f_i_l_e___c_l_o_c_k_,_ ___D_u_r_a_t_i_o_n_>; │ │ │ │ +1305 │ │ │ │ +1306 template<> struct is_clock<_s_y_s_t_e_m___c_l_o_c_k> : _t_r_u_e___t_y_p_e { }; │ │ │ │ +1307 template<> struct is_clock<_s_t_e_a_d_y___c_l_o_c_k> : _t_r_u_e___t_y_p_e { }; │ │ │ │ +1308 template<> struct is_clock : _t_r_u_e___t_y_p_e { }; │ │ │ │ +1309 │ │ │ │ +1310 template<> inline constexpr bool is_clock_v = true; │ │ │ │ +1311 template<> inline constexpr bool is_clock_v = true; │ │ │ │ +1312 template<> inline constexpr bool is_clock_v = true; │ │ │ │ +1313 /// @} │ │ │ │ +1314#endif // C++20 │ │ │ │ +1315 } // namespace chrono │ │ │ │ +1316 │ │ │ │ +1317#ifdef __glibcxx_chrono_udls // C++ >= 14 && HOSTED │ │ │ │ +1318 inline namespace _l_i_t_e_r_a_l_s │ │ │ │ +1319 { │ │ │ │ +1320 /** ISO C++ 2014 namespace for suffixes for duration literals. │ │ │ │ +1321 * │ │ │ │ +1322 * These suffixes can be used to create `chrono::duration` values with │ │ │ │ +1323 * tick periods of hours, minutes, seconds, milliseconds, microseconds │ │ │ │ +1324 * or nanoseconds. For example, `std::chrono::seconds(5)` can be written │ │ │ │ +1325 * as `5s` after making the suffix visible in the current scope. │ │ │ │ +1326 * The suffixes can be made visible by a using-directive or │ │ │ │ +1327 * using-declaration such as: │ │ │ │ +1328 * - `using namespace std::chrono_literals;` │ │ │ │ +1329 * - `using namespace std::literals;` │ │ │ │ +1330 * - `using namespace std::chrono;` │ │ │ │ +1331 * - `using namespace std;` │ │ │ │ +1332 * - `using std::chrono_literals::operator""s;` │ │ │ │ +1333 * │ │ │ │ +1334 * The result of these suffixes on an integer literal is one of the │ │ │ │ +1335 * standard typedefs such as `std::chrono::hours`. │ │ │ │ +1336 * The result on a floating-point literal is a duration type with the │ │ │ │ +1337 * specified tick period and an unspecified floating-point representation, │ │ │ │ +1338 * for example `1.5e2ms` might be equivalent to │ │ │ │ +1339 * `chrono::duration(1.5e2)`. │ │ │ │ +1340 * │ │ │ │ +1341 * @since C+14 │ │ │ │ +1342 * @ingroup chrono │ │ │ │ +1343 */ │ │ │ │ +1344 inline namespace chrono_literals │ │ │ │ +1345 { │ │ │ │ +1346 /// @addtogroup chrono │ │ │ │ +1347 /// @{ │ │ │ │ +1348 │ │ │ │ +1349#pragma GCC diagnostic push │ │ │ │ +1350#pragma GCC diagnostic ignored "-Wliteral-suffix" │ │ │ │ +1351 /// @cond undocumented │ │ │ │ +1352 template │ │ │ │ +1353 constexpr _Dur __check_overflow() │ │ │ │ +1354 { │ │ │ │ +1355 using _Val = __parse_int::_Parse_int<_Digits...>; │ │ │ │ +1356 constexpr typename _Dur::rep __repval = _Val::value; │ │ │ │ +1357 static_assert(__repval >= 0 && __repval == _Val::value, │ │ │ │ +1358 "literal value cannot be represented by duration type"); │ │ │ │ +1359 return _Dur(__repval); │ │ │ │ +1360 } │ │ │ │ +1361 /// @endcond │ │ │ │ +1362 │ │ │ │ +1363 /// Literal suffix for durations representing non-integer hours │ │ │ │ +1364 constexpr chrono::duration> │ │ │ │ +1365 operator""h(long double __hours) │ │ │ │ +1366 { return chrono::duration>{__hours}; } │ │ │ │ +1367 │ │ │ │ +1368 /// Literal suffix for durations of type `std::chrono::hours` │ │ │ │ +1369 template │ │ │ │ +1370 constexpr _c_h_r_o_n_o_:_:_h_o_u_r_s │ │ │ │ +1371 operator""h() │ │ │ │ +1372 { return __check_overflow<_c_h_r_o_n_o_:_:_h_o_u_r_s, _Digits...>(); } │ │ │ │ +1373 │ │ │ │ +1374 /// Literal suffix for durations representing non-integer minutes │ │ │ │ +1375 constexpr chrono::duration> │ │ │ │ +1376 operator""_m_i_n(long double __mins) │ │ │ │ +1377 { return chrono::duration>{__mins}; } │ │ │ │ +1378 │ │ │ │ +1379 /// Literal suffix for durations of type `std::chrono::minutes` │ │ │ │ +1380 template │ │ │ │ +1381 constexpr _c_h_r_o_n_o_:_:_m_i_n_u_t_e_s │ │ │ │ +1382 operator""_m_i_n() │ │ │ │ +1383 { return __check_overflow<_c_h_r_o_n_o_:_:_m_i_n_u_t_e_s, _Digits...>(); } │ │ │ │ +1384 │ │ │ │ +1385 /// Literal suffix for durations representing non-integer seconds │ │ │ │ +1386 constexpr chrono::duration │ │ │ │ +1387 operator""s(long double __secs) │ │ │ │ +1388 { return chrono::duration{__secs}; } │ │ │ │ +1389 │ │ │ │ +1390 /// Literal suffix for durations of type `std::chrono::seconds` │ │ │ │ +1391 template │ │ │ │ +1392 constexpr _c_h_r_o_n_o_:_:_s_e_c_o_n_d_s │ │ │ │ +1393 operator""s() │ │ │ │ +1394 { return __check_overflow<_c_h_r_o_n_o_:_:_s_e_c_o_n_d_s, _Digits...>(); } │ │ │ │ +1395 │ │ │ │ +1396 /// Literal suffix for durations representing non-integer milliseconds │ │ │ │ +1397 constexpr chrono::duration │ │ │ │ +1398 operator""ms(long double __msecs) │ │ │ │ +1399 { return chrono::duration{__msecs}; } │ │ │ │ +1400 │ │ │ │ +1401 /// Literal suffix for durations of type `std::chrono::milliseconds` │ │ │ │ +1402 template │ │ │ │ +1403 constexpr _c_h_r_o_n_o_:_:_m_i_l_l_i_s_e_c_o_n_d_s │ │ │ │ +1404 operator""ms() │ │ │ │ +1405 { return __check_overflow<_c_h_r_o_n_o_:_:_m_i_l_l_i_s_e_c_o_n_d_s, _Digits...>(); } │ │ │ │ +1406 │ │ │ │ +1407 /// Literal suffix for durations representing non-integer microseconds │ │ │ │ +1408 constexpr chrono::duration │ │ │ │ +1409 operator""us(long double __usecs) │ │ │ │ +1410 { return chrono::duration{__usecs}; } │ │ │ │ +1411 │ │ │ │ +1412 /// Literal suffix for durations of type `std::chrono::microseconds` │ │ │ │ +1413 template │ │ │ │ +1414 constexpr _c_h_r_o_n_o_:_:_m_i_c_r_o_s_e_c_o_n_d_s │ │ │ │ +1415 operator""us() │ │ │ │ +1416 { return __check_overflow<_c_h_r_o_n_o_:_:_m_i_c_r_o_s_e_c_o_n_d_s, _Digits...>(); } │ │ │ │ +1417 │ │ │ │ +1418 /// Literal suffix for durations representing non-integer nanoseconds │ │ │ │ +1419 constexpr chrono::duration │ │ │ │ +1420 operator""ns(long double __nsecs) │ │ │ │ +1421 { return chrono::duration{__nsecs}; } │ │ │ │ +1422 │ │ │ │ +1423 /// Literal suffix for durations of type `std::chrono::nanoseconds` │ │ │ │ +1424 template │ │ │ │ +1425 constexpr _c_h_r_o_n_o_:_:_n_a_n_o_s_e_c_o_n_d_s │ │ │ │ +1426 operator""ns() │ │ │ │ +1427 { return __check_overflow<_c_h_r_o_n_o_:_:_n_a_n_o_s_e_c_o_n_d_s, _Digits...>(); } │ │ │ │ +1428 │ │ │ │ +1429#pragma GCC diagnostic pop │ │ │ │ +1430 /// @} │ │ │ │ +1431 } // inline namespace chrono_literals │ │ │ │ +1432 } // inline namespace literals │ │ │ │ +1433 │ │ │ │ +1434 namespace _c_h_r_o_n_o │ │ │ │ +1435 { │ │ │ │ +1436 using namespace literals::chrono_literals; │ │ │ │ +1437 } // namespace chrono │ │ │ │ +1438#endif // __glibcxx_chrono_udls │ │ │ │ +1439 │ │ │ │ +1440#if __cplusplus >= 201703L │ │ │ │ +1441 namespace _f_i_l_e_s_y_s_t_e_m │ │ │ │ +1442 { │ │ │ │ +1443 struct __file_clock │ │ │ │ +1444 { │ │ │ │ +1445 using duration = _c_h_r_o_n_o_:_:_n_a_n_o_s_e_c_o_n_d_s; │ │ │ │ +1446 using rep = duration::rep; │ │ │ │ +1447 using period = duration::period; │ │ │ │ +1448 using time_point = chrono::time_point<__file_clock>; │ │ │ │ +1449 static constexpr bool is_steady = false; │ │ │ │ +1450 │ │ │ │ +1451 static time_point │ │ │ │ +1452 now() noexcept │ │ │ │ +1453 { return _S_from_sys(chrono::system_clock::now()); } │ │ │ │ +1454 │ │ │ │ +1455#if __cplusplus > 201703L │ │ │ │ +1456 template │ │ │ │ +1457 static │ │ │ │ +1458 chrono::file_time> │ │ │ │ +1459 from_sys(const chrono::sys_time<_Dur>& __t) noexcept │ │ │ │ +1460 { return _S_from_sys(__t); } │ │ │ │ +1461 │ │ │ │ +1462 // For internal use only │ │ │ │ +1463 template │ │ │ │ +1464 static │ │ │ │ +1465 chrono::sys_time> │ │ │ │ +1466 to_sys(const chrono::file_time<_Dur>& __t) noexcept │ │ │ │ +1467 { return _S_to_sys(__t); } │ │ │ │ +1468#endif // C++20 │ │ │ │ +1469 │ │ │ │ +1470 private: │ │ │ │ +1471 using __sys_clock = chrono::system_clock; │ │ │ │ +1472 │ │ │ │ +1473 // This clock's (unspecified) epoch is 2174-01-01 00:00:00 UTC. │ │ │ │ +1474 // A signed 64-bit duration with nanosecond resolution gives roughly │ │ │ │ +1475 // +/- 292 years, which covers the 1901-2446 date range for ext4. │ │ │ │ +1476 static constexpr _c_h_r_o_n_o_:_:_s_e_c_o_n_d_s _S_epoch_diff{6437664000}; │ │ │ │ +1477 │ │ │ │ +1478 protected: │ │ │ │ +1479 // For internal use only │ │ │ │ +1480 template │ │ │ │ +1481 static │ │ │ │ +1482 chrono::time_point<__file_clock, common_type_t<_Dur, chrono::seconds>> │ │ │ │ +1483 _S_from_sys(const chrono::time_point<__sys_clock, _Dur>& __t) noexcept │ │ │ │ +1484 { │ │ │ │ +1485 using _CDur = _c_o_m_m_o_n___t_y_p_e___t_<___D_u_r_,_ _c_h_r_o_n_o_:_:_s_e_c_o_n_d_s_>; │ │ │ │ +1486 using __file_time = chrono::time_point<__file_clock, _CDur>; │ │ │ │ +1487 return __file_time{__t.time_since_epoch()} - _S_epoch_diff; │ │ │ │ +1488 } │ │ │ │ +1489 │ │ │ │ +1490 // For internal use only │ │ │ │ +1491 template │ │ │ │ +1492 static │ │ │ │ +1493 chrono::time_point<__sys_clock, common_type_t<_Dur, chrono::seconds>> │ │ │ │ +1494 _S_to_sys(const chrono::time_point<__file_clock, _Dur>& __t) noexcept │ │ │ │ +1495 { │ │ │ │ +1496 using _CDur = _c_o_m_m_o_n___t_y_p_e___t_<___D_u_r_,_ _c_h_r_o_n_o_:_:_s_e_c_o_n_d_s_>; │ │ │ │ +1497 using __sys_time = chrono::time_point<__sys_clock, _CDur>; │ │ │ │ +1498 return __sys_time{__t.time_since_epoch()} + _S_epoch_diff; │ │ │ │ +1499 } │ │ │ │ +1500 }; │ │ │ │ +1501 } // namespace filesystem │ │ │ │ +1502#endif // C++17 │ │ │ │ +1503 │ │ │ │ +1504_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +1505} // namespace std │ │ │ │ +1506 │ │ │ │ +1507#endif // C++11 │ │ │ │ +1508 │ │ │ │ +1509#endif //_GLIBCXX_CHRONO_H │ │ │ │ +_c_o_m_p_a_r_e │ │ │ │ +_c_o_n_c_e_p_t_s │ │ │ │ +_l_i_m_i_t_s │ │ │ │ +_r_a_t_i_o │ │ │ │ +_t_y_p_e___t_r_a_i_t_s │ │ │ │ +_c_t_i_m_e │ │ │ │ +_v_e_r_s_i_o_n_._h │ │ │ │ +_p_a_r_s_e___n_u_m_b_e_r_s_._h │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_c_e_i_l │ │ │ │ +constexpr enable_if_t< __is_duration_v< _ToDur >, time_point< _Clock, _ToDur > │ │ │ │ +> ceil(const time_point< _Clock, _Dur > &__tp) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_1_0_6_2 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_r_o_u_n_d │ │ │ │ +constexpr enable_if_t< __is_duration_v< _ToDur > &&!treat_as_floating_point_v< │ │ │ │ +typename _ToDur::rep >, time_point< _Clock, _ToDur > > round(const time_point< │ │ │ │ +_Clock, _Dur > &__tp) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_1_0_8_6 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_:_:_o_p_e_r_a_t_o_r_=_= │ │ │ │ +constexpr bool operator==(const duration< _Rep1, _Period1 > &__lhs, const │ │ │ │ +duration< _Rep2, _Period2 > &__rhs) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_8_1_0 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_w_e_e_k_s │ │ │ │ +duration< int64_t, ratio< 604800 > > weeks │ │ │ │ +weeks │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_9_1_0 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_f_l_o_o_r │ │ │ │ +constexpr enable_if_t< __is_duration_v< _ToDur >, time_point< _Clock, _ToDur > │ │ │ │ +> floor(const time_point< _Clock, _Dur > &__tp) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_1_0_4_1 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_m_o_n_t_h_s │ │ │ │ +duration< int64_t, ratio< 2629746 > > months │ │ │ │ +months │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_9_1_6 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_d_a_y_s │ │ │ │ +duration< int64_t, ratio< 86400 > > days │ │ │ │ +days │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_9_0_7 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_y_e_a_r_s │ │ │ │ +duration< int64_t, ratio< 31556952 > > years │ │ │ │ +years │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_9_1_3 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_<_= │ │ │ │ +constexpr bool operator<=(const duration< _Rep1, _Period1 > &__lhs, const │ │ │ │ +duration< _Rep2, _Period2 > &__rhs) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_8_5_5 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_h_o_u_r_s │ │ │ │ +duration< int64_t, ratio< 3600 > > hours │ │ │ │ +hours │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_9_0_3 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_>_= │ │ │ │ +constexpr bool operator>=(const duration< _Rep1, _Period1 > &__lhs, const │ │ │ │ +duration< _Rep2, _Period2 > &__rhs) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_8_6_9 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_* │ │ │ │ +constexpr duration< __common_rep_t< _Rep2, _Rep1 >, _Period > operator*(const │ │ │ │ +_Rep1 &__s, const duration< _Rep2, _Period > &__d) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_7_5_0 │ │ │ │ +_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 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_% │ │ │ │ +constexpr duration< __common_rep_t< _Rep1, __disable_if_is_duration< _Rep2 > >, │ │ │ │ +_Period > operator%(const duration< _Rep1, _Period > &__d, const _Rep2 &__s) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_7_7_9 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t_<_ _l_o_c_a_l___t_,_ ___D_u_r_a_t_i_o_n_ _>_:_:_o_p_e_r_a_t_o_r_+ │ │ │ │ +constexpr time_point< local_t, typename common_type< _Dur1, duration< _Rep2, │ │ │ │ +_Period2 > >::type > operator+(const time_point< local_t, _Dur1 > &__lhs, const │ │ │ │ +duration< _Rep2, _Period2 > &__rhs) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_1_1_0_1 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_m_i_n_u_t_e_s │ │ │ │ +duration< int64_t, ratio< 60 > > minutes │ │ │ │ +minutes │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_9_0_0 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t___c_a_s_t │ │ │ │ +constexpr __enable_if_t< __is_duration< _ToDur >::value, time_point< _Clock, │ │ │ │ +_ToDur > > time_point_cast(const time_point< _Clock, _Dur > &__t) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_1_0_1_9 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:___V_2_:_:_h_i_g_h___r_e_s_o_l_u_t_i_o_n___c_l_o_c_k │ │ │ │ +system_clock high_resolution_clock │ │ │ │ +Highest-resolution clock. │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_1_2_8_9 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_m_i_l_l_i_s_e_c_o_n_d_s │ │ │ │ +duration< int64_t, milli > milliseconds │ │ │ │ +milliseconds │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_8_9_4 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_m_i_c_r_o_s_e_c_o_n_d_s │ │ │ │ +duration< int64_t, micro > microseconds │ │ │ │ +microseconds │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_8_9_1 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_+ │ │ │ │ +constexpr time_point< _Clock, typename common_type< duration< _Rep1, _Period1 │ │ │ │ +>, _Dur2 >::type > operator+(const duration< _Rep1, _Period1 > &__lhs, const │ │ │ │ +time_point< _Clock, _Dur2 > &__rhs) │ │ │ │ +Adjust a time point forwards by the given duration. │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_1_1_1_5 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_:_:_o_p_e_r_a_t_o_r_+ │ │ │ │ +constexpr common_type< duration< _Rep1, _Period1 >, duration< _Rep2, _Period2 > │ │ │ │ +>::type operator+(const duration< _Rep1, _Period1 > &__lhs, const duration< │ │ │ │ +_Rep2, _Period2 > &__rhs) │ │ │ │ +The sum of two durations. │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_6_9_6 │ │ │ │ +_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_:_:_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_:_:_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_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_- │ │ │ │ +constexpr common_type< duration< _Rep1, _Period1 >, duration< _Rep2, _Period2 > │ │ │ │ +>::type operator-(const duration< _Rep1, _Period1 > &__lhs, const duration< │ │ │ │ +_Rep2, _Period2 > &__rhs) │ │ │ │ +The difference between two durations. │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_7_1_0 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_/ │ │ │ │ +constexpr duration< __common_rep_t< _Rep1, __disable_if_is_duration< _Rep2 > >, │ │ │ │ +_Period > operator/(const duration< _Rep1, _Period > &__d, const _Rep2 &__s) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_7_5_6 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n_:_:_o_p_e_r_a_t_o_r_* │ │ │ │ +constexpr duration< __common_rep_t< _Rep1, _Rep2 >, _Period > operator*(const │ │ │ │ +duration< _Rep1, _Period > &__d, const _Rep2 &__s) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_7_4_1 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_o_p_e_r_a_t_o_r_<_=_> │ │ │ │ +constexpr auto operator<=>(const duration< _Rep1, _Period1 > &__lhs, const │ │ │ │ +duration< _Rep2, _Period2 > &__rhs) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_8_3_6 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n___c_a_s_t │ │ │ │ +constexpr __enable_if_is_duration< _ToDur > duration_cast(const duration< _Rep, │ │ │ │ +_Period > &__d) │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_2_7_5 │ │ │ │ +_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_2 │ │ │ │ +_s_t_d_:_:_r_a_t_i_o___d_i_v_i_d_e │ │ │ │ +typename __ratio_divide< _R1, _R2 >::type ratio_divide │ │ │ │ +ratio_divide │ │ │ │ +DDeeffiinniittiioonn _r_a_t_i_o_:_3_9_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_:_:_c_o_m_m_o_n___t_y_p_e___t │ │ │ │ +typename common_type< _Tp... >::type common_type_t │ │ │ │ +Alias template for common_type. │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_2_7_1_7 │ │ │ │ +_s_t_d_:_:_e_n_a_b_l_e___i_f___t │ │ │ │ +typename enable_if< _Cond, _Tp >::type enable_if_t │ │ │ │ +Alias template for enable_if. │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_2_7_0_9 │ │ │ │ _s_t_d_:_:_f_a_l_s_e___t_y_p_e │ │ │ │ __bool_constant< false > false_type │ │ │ │ The type used as a compile-time boolean with false value. │ │ │ │ DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_1_4 │ │ │ │ -_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_:_:_c_u_r_r_e_n_t___e_x_c_e_p_t_i_o_n │ │ │ │ -exception_ptr current_exception() noexcept │ │ │ │ -_s_t_d_:_:_r_e_t_h_r_o_w___e_x_c_e_p_t_i_o_n │ │ │ │ -void rethrow_exception(exception_ptr) │ │ │ │ -Throw the object pointed to by the exception_ptr. │ │ │ │ -_s_t_d_:_:_t_e_r_m_i_n_a_t_e │ │ │ │ -void terminate() noexcept │ │ │ │ -_s_t_d_:_:_r_e_t_h_r_o_w___i_f___n_e_s_t_e_d │ │ │ │ -void rethrow_if_nested(const _Ex &__ex) │ │ │ │ -DDeeffiinniittiioonn _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_._h_:_2_0_8 │ │ │ │ -_s_t_d_:_:_t_h_r_o_w___w_i_t_h___n_e_s_t_e_d │ │ │ │ -void throw_with_nested(_Tp &&__t) │ │ │ │ -DDeeffiinniittiioonn _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_._h_:_1_4_8 │ │ │ │ +_s_t_d_:_:_m_i_n │ │ │ │ +constexpr const _Tp & min(const _Tp &, const _Tp &) │ │ │ │ +This does what you think it does. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___a_l_g_o_b_a_s_e_._h_:_2_3_3 │ │ │ │ +_s_t_d_:_:_e_x_p_e_r_i_m_e_n_t_a_l_:_:_f_u_n_d_a_m_e_n_t_a_l_s___v_2_:_:_v_o_i_d___t │ │ │ │ +void void_t │ │ │ │ +A metafunction that always yields void, used for detecting valid types. │ │ │ │ +DDeeffiinniittiioonn _e_x_p_e_r_i_m_e_n_t_a_l_/_t_y_p_e___t_r_a_i_t_s_:_2_5_7 │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ -_s_t_d_:_:_i_s___m_o_v_e___c_o_n_s_t_r_u_c_t_i_b_l_e │ │ │ │ -is_move_constructible │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_1_6_9 │ │ │ │ -_s_t_d_:_:_i_s___b_a_s_e___o_f │ │ │ │ -is_base_of │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_4_9_3 │ │ │ │ -_s_t_d_:_:_____u_n_s_p_e_c_i_f_i_e_d_____:_:_e_x_c_e_p_t_i_o_n___p_t_r │ │ │ │ -An opaque pointer to an arbitrary exception. │ │ │ │ -DDeeffiinniittiioonn _e_x_c_e_p_t_i_o_n___p_t_r_._h_:_9_8 │ │ │ │ -_s_t_d_:_:_n_e_s_t_e_d___e_x_c_e_p_t_i_o_n │ │ │ │ -DDeeffiinniittiioonn _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_._h_:_6_0 │ │ │ │ -_s_t_d_:_:_n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_:_:_r_e_t_h_r_o_w___n_e_s_t_e_d │ │ │ │ -void rethrow_nested() const │ │ │ │ -Rethrow the stored exception, or terminate if none was stored. │ │ │ │ -DDeeffiinniittiioonn _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_._h_:_7_6 │ │ │ │ -_s_t_d_:_:_n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_:_:_n_e_s_t_e_d___p_t_r │ │ │ │ -exception_ptr nested_ptr() const noexcept │ │ │ │ -Access the stored exception. │ │ │ │ -DDeeffiinniittiioonn _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_._h_:_8_5 │ │ │ │ -_s_t_d_:_:_n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_:_:_n_e_s_t_e_d___e_x_c_e_p_t_i_o_n │ │ │ │ -nested_exception() noexcept │ │ │ │ -The default constructor stores the current exception (if any). │ │ │ │ -DDeeffiinniittiioonn _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_._h_:_6_5 │ │ │ │ +_s_t_d_:_:_l_i_t_e_r_a_l_s │ │ │ │ +ISO C++ inline namespace for literal suffixes. │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o │ │ │ │ +ISO C++ 2011 namespace for date and time utilities. │ │ │ │ +_s_t_d_:_:_f_i_l_e_s_y_s_t_e_m │ │ │ │ +ISO C++ 2017 namespace for File System library. │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_5_4 │ │ │ │ +_s_t_d_:_:_____n_u_m_e_r_i_c___l_i_m_i_t_s___b_a_s_e_:_:_d_i_g_i_t_s │ │ │ │ +static constexpr int digits │ │ │ │ +DDeeffiinniittiioonn _l_i_m_i_t_s_:_2_1_1 │ │ │ │ +_s_t_d_:_:_n_u_m_e_r_i_c___l_i_m_i_t_s_:_:_m_a_x │ │ │ │ +static constexpr _Tp max() noexcept │ │ │ │ +DDeeffiinniittiioonn _l_i_m_i_t_s_:_3_2_1 │ │ │ │ +_s_t_d_:_:_n_u_m_e_r_i_c___l_i_m_i_t_s_:_:_l_o_w_e_s_t │ │ │ │ +static constexpr _Tp lowest() noexcept │ │ │ │ +DDeeffiinniittiioonn _l_i_m_i_t_s_:_3_2_7 │ │ │ │ +_s_t_d_:_:_r_a_t_i_o │ │ │ │ +Provides compile-time rational arithmetic. │ │ │ │ +DDeeffiinniittiioonn _r_a_t_i_o_:_2_7_0 │ │ │ │ +_s_t_d_:_:_e_n_a_b_l_e___i_f │ │ │ │ +Define a member typedef type only if a boolean constant is true. │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_2_9 │ │ │ │ +_s_t_d_:_:_i_s___f_l_o_a_t_i_n_g___p_o_i_n_t │ │ │ │ +is_floating_point │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_5_2_2 │ │ │ │ +_s_t_d_:_:_t_y_p_e │ │ │ │ +_s_t_d_:_:_c_o_m_m_o_n___t_y_p_e │ │ │ │ +common_type │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_2_3_4_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_:_:_c_h_r_o_n_o_:_:_t_r_e_a_t___a_s___f_l_o_a_t_i_n_g___p_o_i_n_t │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_3_0_9 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n___v_a_l_u_e_s │ │ │ │ +duration_values │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_4_9_6 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:___V_2_:_:_s_y_s_t_e_m___c_l_o_c_k │ │ │ │ +System clock. │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_1_2_2_6 │ │ │ │ +_s_t_d_:_:_c_h_r_o_n_o_:_:___V_2_:_:_s_t_e_a_d_y___c_l_o_c_k │ │ │ │ +Monotonic clock. │ │ │ │ +DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_1_2_6_8 │ │ │ │ * bbiittss │ │ │ │ - * _n_e_s_t_e_d___e_x_c_e_p_t_i_o_n_._h │ │ │ │ + * _c_h_r_o_n_o_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00344.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: hash_bytes.h File Reference │ │ │ +libstdc++: valarray_before.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,47 +48,41 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
hash_bytes.h File Reference
│ │ │ +
valarray_before.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ Namespaces

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

│ │ │ -Functions

│ │ │ -size_t std::_Fnv_hash_bytes (const void *__ptr, size_t __len, size_t __seed)
│ │ │ -size_t std::_Hash_bytes (const void *__ptr, size_t __len, size_t __seed)
namespace  std::__detail
│ │ │

Detailed Description

│ │ │ -

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

│ │ │ +

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

│ │ │ │ │ │ -

Definition in file hash_bytes.h.

│ │ │ +

Definition in file valarray_before.h.

│ │ │
│ │ │
│ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,15 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -hash_bytes.h File Reference │ │ │ │ +valarray_before.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ -FFuunnccttiioonnss │ │ │ │ -size_t  ssttdd::::__FFnnvv__hhaasshh__bbyytteess (const void *__ptr, size_t __len, size_t __seed) │ │ │ │ -size_t  ssttdd::::__HHaasshh__bbyytteess (const void *__ptr, size_t __len, size_t __seed) │ │ │ │ +namespace   _s_t_d_:_:_____d_e_t_a_i_l │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _h_a_s_h___b_y_t_e_s_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _v_a_l_a_r_r_a_y___b_e_f_o_r_e_._h. │ │ │ │ * bbiittss │ │ │ │ - * _h_a_s_h___b_y_t_e_s_._h │ │ │ │ + * _v_a_l_a_r_r_a_y___b_e_f_o_r_e_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00344_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: hash_bytes.h Source File │ │ │ +libstdc++: valarray_before.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
hash_bytes.h
│ │ │ +
valarray_before.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// Declarations for hash functions. -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// The template and inlines for the -*- C++ -*- internal _Meta class.
│ │ │
2
│ │ │ -
3// Copyright (C) 2010-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
│ │ │ @@ -75,56 +75,768 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file bits/hash_bytes.h
│ │ │ +
25/** @file bits/valarray_before.h
│ │ │
26 * This is an internal header file, included by other library headers.
│ │ │ -
27 * Do not attempt to use it directly. @headername{functional}
│ │ │ +
27 * Do not attempt to use it directly. @headername{valarray}
│ │ │
28 */
│ │ │
29
│ │ │ -
30#ifndef _HASH_BYTES_H
│ │ │ -
31#define _HASH_BYTES_H 1
│ │ │ -
32
│ │ │ -
33#pragma GCC system_header
│ │ │ +
30// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>
│ │ │ +
31
│ │ │ +
32#ifndef _VALARRAY_BEFORE_H
│ │ │ +
33#define _VALARRAY_BEFORE_H 1
│ │ │
34
│ │ │ -
35#include <bits/c++config.h>
│ │ │ +
35#pragma GCC system_header
│ │ │
36
│ │ │ -
37namespace std
│ │ │ -
38{
│ │ │ -
39_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ -
40
│ │ │ -
41 // Hash function implementation for the nontrivial specialization.
│ │ │ -
42 // All of them are based on a primitive that hashes a pointer to a
│ │ │ -
43 // byte array. The actual hash algorithm is not guaranteed to stay
│ │ │ -
44 // the same from release to release -- it may be updated or tuned to
│ │ │ -
45 // improve hash quality or speed.
│ │ │ -
46 size_t
│ │ │ -
47 _Hash_bytes(const void* __ptr, size_t __len, size_t __seed);
│ │ │ -
48
│ │ │ -
49 // A similar hash primitive, using the FNV hash algorithm. This
│ │ │ -
50 // algorithm is guaranteed to stay the same from release to release.
│ │ │ -
51 // (although it might not produce the same values on different
│ │ │ -
52 // machines.)
│ │ │ -
53 size_t
│ │ │ -
54 _Fnv_hash_bytes(const void* __ptr, size_t __len, size_t __seed);
│ │ │ -
55
│ │ │ -
56_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ -
57} // namespace
│ │ │ -
58
│ │ │ -
59#endif
│ │ │ - │ │ │ +
37#include <bits/slice_array.h>
│ │ │ +
38
│ │ │ +
39namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
40{
│ │ │ +
41_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
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 };
│ │ │ +
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 };
│ │ │ +
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>
│ │ │ +
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
│ │ │ +
580 {
│ │ │ +
581 public:
│ │ │ +
582 typedef typename _Clos::value_type _Vt;
│ │ │ +
583 typedef typename __fun<_Oper, _Vt>::result_type value_type;
│ │ │ +
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 };
│ │ │ +
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:1121
│ │ │ +
complex< _Tp > log(const complex< _Tp > &)
Return complex natural logarithm of z.
Definition complex:1086
│ │ │ +
complex< _Tp > tan(const complex< _Tp > &)
Return complex tangent of z.
Definition complex:1222
│ │ │ +
_Tp abs(const complex< _Tp > &)
Return magnitude of z.
Definition complex:892
│ │ │ +
complex< _Tp > exp(const complex< _Tp > &)
Return complex base e exponential of z.
Definition complex:1059
│ │ │ +
complex< _Tp > cosh(const complex< _Tp > &)
Return complex hyperbolic cosine of z.
Definition complex:1033
│ │ │ +
complex< _Tp > tanh(const complex< _Tp > &)
Return complex hyperbolic tangent of z.
Definition complex:1250
│ │ │ +
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:1151
│ │ │ +
complex< _Tp > cos(const complex< _Tp > &)
Return complex cosine of z.
Definition complex:1003
│ │ │ +
complex< _Tp > sqrt(const complex< _Tp > &)
Return complex square root of z.
Definition complex:1195
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ +
Implementation details not part of the namespace std interface.
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -hash_bytes.h │ │ │ │ +valarray_before.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// Declarations for hash functions. -*- C++ -*- │ │ │ │ +1// The template and inlines for the -*- C++ -*- internal _Meta class. │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2010-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,48 +21,798 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file bits/hash_bytes.h │ │ │ │ +25/** @file bits/valarray_before.h │ │ │ │ 26 * This is an internal header file, included by other library headers. │ │ │ │ -27 * Do not attempt to use it directly. @headername{functional} │ │ │ │ +27 * Do not attempt to use it directly. @headername{valarray} │ │ │ │ 28 */ │ │ │ │ 29 │ │ │ │ -30#ifndef _HASH_BYTES_H │ │ │ │ -31#define _HASH_BYTES_H 1 │ │ │ │ -32 │ │ │ │ -33#pragma GCC system_header │ │ │ │ +30// Written by Gabriel Dos Reis │ │ │ │ +31 │ │ │ │ +32#ifndef _VALARRAY_BEFORE_H │ │ │ │ +33#define _VALARRAY_BEFORE_H 1 │ │ │ │ 34 │ │ │ │ -35#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ +35#pragma GCC system_header │ │ │ │ 36 │ │ │ │ -37namespace _s_t_d │ │ │ │ -38{ │ │ │ │ -39_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ -40 │ │ │ │ -41 // Hash function implementation for the nontrivial specialization. │ │ │ │ -42 // All of them are based on a primitive that hashes a pointer to a │ │ │ │ -43 // byte array. The actual hash algorithm is not guaranteed to stay │ │ │ │ -44 // the same from release to release -- it may be updated or tuned to │ │ │ │ -45 // improve hash quality or speed. │ │ │ │ -46 size_t │ │ │ │ -47 _Hash_bytes(const void* __ptr, size_t __len, size_t __seed); │ │ │ │ -48 │ │ │ │ -49 // A similar hash primitive, using the FNV hash algorithm. This │ │ │ │ -50 // algorithm is guaranteed to stay the same from release to release. │ │ │ │ -51 // (although it might not produce the same values on different │ │ │ │ -52 // machines.) │ │ │ │ -53 size_t │ │ │ │ -54 _Fnv_hash_bytes(const void* __ptr, size_t __len, size_t __seed); │ │ │ │ -55 │ │ │ │ -56_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ -57} // namespace │ │ │ │ -58 │ │ │ │ -59#endif │ │ │ │ -_c_+_+_c_o_n_f_i_g_._h │ │ │ │ +37#include <_b_i_t_s_/_s_l_i_c_e___a_r_r_a_y_._h> │ │ │ │ +38 │ │ │ │ +39namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +40{ │ │ │ │ +41_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +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 │ │ │ │ +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 }; │ │ │ │ +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 }; │ │ │ │ +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 }; │ │ │ │ +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> │ │ │ │ +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 }; │ │ │ │ +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 _____d_e_t_a_i_l │ │ │ │ +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 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 │ │ │ │ +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 size() 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 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 │ │ │ │ +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 │ │ │ │ +579 class _BinBase1 │ │ │ │ +580 { │ │ │ │ +581 public: │ │ │ │ +582 typedef typename _Clos::value_type _Vt; │ │ │ │ +583 typedef typename __fun<_Oper, _Vt>::result_type value_type; │ │ │ │ +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 │ │ │ │ +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; │ │ │ │ +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 }; │ │ │ │ +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) {} │ │ │ │ +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 │ │ │ │ +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 │ │ │ │ +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 │ │ │ │ +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_1 │ │ │ │ +_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_8_6 │ │ │ │ +_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_2 │ │ │ │ +_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_2 │ │ │ │ +_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_5_9 │ │ │ │ +_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_3 │ │ │ │ +_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_0 │ │ │ │ +_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_1 │ │ │ │ +_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_3 │ │ │ │ +_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_5 │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ +_s_t_d_:_:_____d_e_t_a_i_l │ │ │ │ +Implementation details not part of the namespace std interface. │ │ │ │ * bbiittss │ │ │ │ - * _h_a_s_h___b_y_t_e_s_._h │ │ │ │ + * _v_a_l_a_r_r_a_y___b_e_f_o_r_e_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00347.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: exception_ptr.h File Reference │ │ │ +libstdc++: stl_stack.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,91 +48,69 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
exception_ptr.h File Reference
│ │ │ +
stl_stack.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ Classes

class  std::__unspecified__::exception_ptr
class  std::exception_ptr
class  std::stack< _Tp, _Sequence >
│ │ │ │ │ │ │ │ │

│ │ │ Namespaces

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

│ │ │ Functions

exception_ptr std::current_exception () noexcept
template<typename _Ex>
exception_ptr std::make_exception_ptr (_Ex __ex) noexcept
void std::__unspecified__::rethrow_exception (exception_ptr)
void std::rethrow_exception (exception_ptr)
void std::swap (exception_ptr &__lhs, exception_ptr &__rhs)
template<typename _Tp, typename _Seq>
bool std::operator!= (const stack< _Tp, _Seq > &__x, const stack< _Tp, _Seq > &__y)
template<typename _Tp, typename _Seq>
bool std::operator< (const stack< _Tp, _Seq > &__x, const stack< _Tp, _Seq > &__y)
template<typename _Tp, typename _Seq>
bool std::operator<= (const stack< _Tp, _Seq > &__x, const stack< _Tp, _Seq > &__y)
template<typename _Tp, three_way_comparable _Seq>
compare_three_way_result_t< _Seq > std::operator<=> (const stack< _Tp, _Seq > &__x, const stack< _Tp, _Seq > &__y)
template<typename _Tp, typename _Seq>
bool std::operator== (const stack< _Tp, _Seq > &__x, const stack< _Tp, _Seq > &__y)
template<typename _Tp, typename _Seq>
bool std::operator> (const stack< _Tp, _Seq > &__x, const stack< _Tp, _Seq > &__y)
template<typename _Tp, typename _Seq>
bool std::operator>= (const stack< _Tp, _Seq > &__x, const stack< _Tp, _Seq > &__y)
│ │ │ +template<typename _Container, typename = _RequireNotAllocator<_Container>>
 std::stack (_Container) -> stack< typename _Container::value_type, _Container >
│ │ │ +template<typename _Container, typename _Allocator, typename = _RequireNotAllocator<_Container>>
 std::stack (_Container, _Allocator) -> stack< typename _Container::value_type, _Container >
template<typename _Tp, typename _Seq>
enable_if< __is_swappable< _Seq >::value >::type std::swap (stack< _Tp, _Seq > &__x, stack< _Tp, _Seq > &__y) noexcept(noexcept(__x.swap(__y)))
│ │ │

Detailed Description

│ │ │ -

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

│ │ │ +

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

│ │ │ │ │ │ -

Definition in file exception_ptr.h.

│ │ │ -

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ _GLIBCXX_EH_PTR_USED

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

Definition at line 47 of file exception_ptr.h.

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

Function Documentation

│ │ │ - │ │ │ -

◆ rethrow_exception()

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

Throw the object pointed to by the exception_ptr.

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

Definition in file stl_stack.h.

│ │ │ +
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,30 +1,49 @@ │ │ │ │ libstdc++ │ │ │ │ -exception_ptr.h File Reference │ │ │ │ +stl_stack.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ CCllaasssseess │ │ │ │ -class   _s_t_d_:_:_____u_n_s_p_e_c_i_f_i_e_d_____:_:_e_x_c_e_p_t_i_o_n___p_t_r │ │ │ │ -class   _s_t_d_:_:_e_x_c_e_p_t_i_o_n___p_t_r │ │ │ │ +class   _s_t_d_:_:_s_t_a_c_k_<_ ___T_p_,_ ___S_e_q_u_e_n_c_e_ _> │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ FFuunnccttiioonnss │ │ │ │ -_e_x_c_e_p_t_i_o_n___p_t_r  _s_t_d_:_:_c_u_r_r_e_n_t___e_x_c_e_p_t_i_o_n () noexcept │ │ │ │ -template │ │ │ │ -_e_x_c_e_p_t_i_o_n___p_t_r  _s_t_d_:_:_m_a_k_e___e_x_c_e_p_t_i_o_n___p_t_r (_Ex __ex) noexcept │ │ │ │ - void  _s_t_d_:_:_____u_n_s_p_e_c_i_f_i_e_d_____:_:_r_e_t_h_r_o_w___e_x_c_e_p_t_i_o_n (_e_x_c_e_p_t_i_o_n___p_t_r) │ │ │ │ - void  _s_t_d_:_:_r_e_t_h_r_o_w___e_x_c_e_p_t_i_o_n (_e_x_c_e_p_t_i_o_n___p_t_r) │ │ │ │ - void  _s_t_d_:_:_s_w_a_p (_e_x_c_e_p_t_i_o_n___p_t_r &__lhs, _e_x_c_e_p_t_i_o_n___p_t_r &__rhs) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_!_= (const _s_t_a_c_k< _Tp, _Seq │ │ │ │ + > &__x, const _s_t_a_c_k< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_< (const _s_t_a_c_k< _Tp, _Seq > │ │ │ │ + &__x, const _s_t_a_c_k< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_<_= (const _s_t_a_c_k< _Tp, _Seq │ │ │ │ + > &__x, const _s_t_a_c_k< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ +_c_o_m_p_a_r_e___t_h_r_e_e___w_a_y___r_e_s_u_l_t___t< _Seq >  _s_t_d_:_:_o_p_e_r_a_t_o_r_<_=_> (const _s_t_a_c_k< _Tp, _Seq │ │ │ │ + > &__x, const _s_t_a_c_k< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const _s_t_a_c_k< _Tp, _Seq │ │ │ │ + > &__x, const _s_t_a_c_k< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_> (const _s_t_a_c_k< _Tp, _Seq > │ │ │ │ + &__x, const _s_t_a_c_k< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_>_= (const _s_t_a_c_k< _Tp, _Seq │ │ │ │ + > &__x, const _s_t_a_c_k< _Tp, _Seq > &__y) │ │ │ │ +template> │ │ │ │ +   ssttdd::::ssttaacckk (_Container) -> stack< │ │ │ │ + typename _Container::value_type, │ │ │ │ + _Container > │ │ │ │ +template> │ │ │ │ +   ssttdd::::ssttaacckk (_Container, _Allocator) - │ │ │ │ + > stack< typename _Container:: │ │ │ │ + value_type, _Container > │ │ │ │ +template │ │ │ │ +_e_n_a_b_l_e___i_f< __is_swappable< _Seq >:: _s_t_d_:_:_s_w_a_p (_s_t_a_c_k< _Tp, _Seq > &__x, │ │ │ │ + value >_:_:_t_y_p_e  _s_t_a_c_k< _Tp, _Seq > &__y) noexcept │ │ │ │ + (noexcept(__x.swap(__y))) │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _e_x_c_e_p_t_i_o_n___p_t_r_._h. │ │ │ │ -********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? __GGLLIIBBCCXXXX__EEHH__PPTTRR__UUSSEEDD ********** │ │ │ │ -#define _GLIBCXX_EH_PTR_USED │ │ │ │ -Definition at line _4_7 of file _e_x_c_e_p_t_i_o_n___p_t_r_._h. │ │ │ │ -********** FFuunnccttiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? rreetthhrrooww__eexxcceeppttiioonn(()) ********** │ │ │ │ -void _s_t_d_:_:_r_e_t_h_r_o_w___e_x_c_e_p_t_i_o_n ( _e_x_c_e_p_t_i_o_n___p_t_r ) │ │ │ │ -Throw the object pointed to by the exception_ptr. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _s_t_l___s_t_a_c_k_._h. │ │ │ │ * bbiittss │ │ │ │ - * _e_x_c_e_p_t_i_o_n___p_t_r_._h │ │ │ │ + * _s_t_l___s_t_a_c_k_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00347.js │ │ │ ├── js-beautify {} │ │ │ │ @@ -1,7 +1,8 @@ │ │ │ │ var a00347 = [ │ │ │ │ - ["std::exception_ptr", "a21139.html", null], │ │ │ │ - ["std::current_exception", "a01641.html#ga02cdcc517fefe661313437aa9356a28f", null], │ │ │ │ - ["std::make_exception_ptr", "a01641.html#ga200c1d3152b2fd43b206da6c031b9730", null], │ │ │ │ - ["std::__unspecified__::rethrow_exception", "a00347.html#a3d868a099252fe5a49e09b53b2d403cc", null], │ │ │ │ - ["std::rethrow_exception", "a01641.html#ga3d868a099252fe5a49e09b53b2d403cc", null] │ │ │ │ + ["std::operator!=", "a01700.html#a481ee02f06a7c42bd2762516975d7082", null], │ │ │ │ + ["std::operator<", "a01700.html#a53d215eee36632ee43c5039c54d648ae", null], │ │ │ │ + ["std::operator<=", "a01700.html#a930dd0467ade4b159f585b09a918c395", null], │ │ │ │ + ["std::operator==", "a01700.html#a05fbef1e7e15558f5933ed15a339e97d", null], │ │ │ │ + ["std::operator>", "a01700.html#a886fc839debeebe4e1453774a028d1e3", null], │ │ │ │ + ["std::operator>=", "a01700.html#a11bb9b3800196c309babae27f4b4a900", null] │ │ │ │ ]; │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00347_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: exception_ptr.h Source File │ │ │ +libstdc++: stl_stack.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,333 +48,503 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
exception_ptr.h
│ │ │ +
stl_stack.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// Exception Handling support header (exception_ptr class) for -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// Stack implementation -*- C++ -*-
│ │ │
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 GCC.
│ │ │ -
6//
│ │ │ -
7// GCC is free software; you can redistribute it and/or modify
│ │ │ -
8// it under the terms of the GNU General Public License as published by
│ │ │ -
9// the Free Software Foundation; either version 3, or (at your option)
│ │ │ -
10// any later version.
│ │ │ -
11//
│ │ │ -
12// GCC is distributed in the hope that it will be useful,
│ │ │ -
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
│ │ │ -
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
│ │ │ -
15// GNU General Public License for more details.
│ │ │ -
16//
│ │ │ -
17// Under Section 7 of GPL version 3, you are granted additional
│ │ │ -
18// permissions described in the GCC Runtime Library Exception, version
│ │ │ -
19// 3.1, as published by the Free Software Foundation.
│ │ │ -
20
│ │ │ -
21// You should have received a copy of the GNU General Public License and
│ │ │ -
22// a copy of the GCC Runtime Library Exception along with this program;
│ │ │ -
23// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │ -
24// <http://www.gnu.org/licenses/>.
│ │ │ -
25
│ │ │ -
26/** @file bits/exception_ptr.h
│ │ │ -
27 * This is an internal header file, included by other library headers.
│ │ │ -
28 * Do not attempt to use it directly. @headername{exception}
│ │ │ -
29 */
│ │ │ -
30
│ │ │ -
31#ifndef _EXCEPTION_PTR_H
│ │ │ -
32#define _EXCEPTION_PTR_H
│ │ │ -
33
│ │ │ -
34#include <bits/c++config.h>
│ │ │ - │ │ │ - │ │ │ -
37#include <typeinfo>
│ │ │ -
38#include <new>
│ │ │ -
39
│ │ │ -
40#if __cplusplus >= 201103L
│ │ │ -
41# include <bits/move.h>
│ │ │ -
42#endif
│ │ │ -
43
│ │ │ -
44#ifdef _GLIBCXX_EH_PTR_RELOPS_COMPAT
│ │ │ -
45# define _GLIBCXX_EH_PTR_USED __attribute__((__used__))
│ │ │ -
46#else
│ │ │ -
47# define _GLIBCXX_EH_PTR_USED
│ │ │ -
48#endif
│ │ │ -
49
│ │ │ -
50extern "C++" {
│ │ │ -
51
│ │ │ -
52namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
53{
│ │ │ -
54 class type_info;
│ │ │ -
55
│ │ │ -
56 /**
│ │ │ -
57 * @addtogroup exceptions
│ │ │ -
58 * @{
│ │ │ -
59 */
│ │ │ -
60
│ │ │ -
61 namespace __exception_ptr
│ │ │ -
62 {
│ │ │ -
63 class exception_ptr;
│ │ │ -
64 }
│ │ │ -
65
│ │ │ -
66 using __exception_ptr::exception_ptr;
│ │ │ -
67
│ │ │ -
68 /** Obtain an exception_ptr to the currently handled exception.
│ │ │ -
69 *
│ │ │ -
70 * If there is none, or the currently handled exception is foreign,
│ │ │ -
71 * return the null value.
│ │ │ -
72 *
│ │ │ -
73 * @since C++11
│ │ │ -
74 */
│ │ │ -
75 exception_ptr current_exception() _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
76
│ │ │ -
77 template<typename _Ex>
│ │ │ -
78 exception_ptr make_exception_ptr(_Ex) _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
79
│ │ │ -
80 /// Throw the object pointed to by the exception_ptr.
│ │ │ -
81 void rethrow_exception(exception_ptr) __attribute__ ((__noreturn__));
│ │ │ -
82
│ │ │ -
83 namespace __exception_ptr
│ │ │ -
84 {
│ │ │ -
85 using std::rethrow_exception; // So that ADL finds it.
│ │ │ -
86
│ │ │ -
87 /**
│ │ │ -
88 * @brief An opaque pointer to an arbitrary exception.
│ │ │ -
89 *
│ │ │ -
90 * The actual name of this type is unspecified, so the alias
│ │ │ -
91 * `std::exception_ptr` should be used to refer to it.
│ │ │ -
92 *
│ │ │ -
93 * @headerfile exception
│ │ │ -
94 * @since C++11 (but usable in C++98 as a GCC extension)
│ │ │ -
95 * @ingroup exceptions
│ │ │ -
96 */
│ │ │ -
│ │ │ -
97 class exception_ptr
│ │ │ -
98 {
│ │ │ -
99 void* _M_exception_object;
│ │ │ -
100
│ │ │ -
101 explicit exception_ptr(void* __e) _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
102
│ │ │ -
103 void _M_addref() _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
104 void _M_release() _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
105
│ │ │ -
106 void *_M_get() const _GLIBCXX_NOEXCEPT __attribute__ ((__pure__));
│ │ │ -
107
│ │ │ -
108 friend exception_ptr std::current_exception() _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
109 friend void std::rethrow_exception(exception_ptr);
│ │ │ -
110 template<typename _Ex>
│ │ │ -
111 friend exception_ptr std::make_exception_ptr(_Ex) _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
112
│ │ │ -
113 public:
│ │ │ -
114 exception_ptr() _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
115
│ │ │ -
116 exception_ptr(const exception_ptr&) _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
117
│ │ │ -
118#if __cplusplus >= 201103L
│ │ │ -
119 exception_ptr(nullptr_t) noexcept
│ │ │ -
120 : _M_exception_object(nullptr)
│ │ │ -
121 { }
│ │ │ -
122
│ │ │ -
123 exception_ptr(exception_ptr&& __o) noexcept
│ │ │ -
124 : _M_exception_object(__o._M_exception_object)
│ │ │ -
125 { __o._M_exception_object = nullptr; }
│ │ │ -
126#endif
│ │ │ -
127
│ │ │ -
128#if (__cplusplus < 201103L) || defined (_GLIBCXX_EH_PTR_COMPAT)
│ │ │ -
129 typedef void (exception_ptr::*__safe_bool)();
│ │ │ -
130
│ │ │ -
131 // For construction from nullptr or 0.
│ │ │ -
132 exception_ptr(__safe_bool) _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
133#endif
│ │ │ -
134
│ │ │ -
135 exception_ptr&
│ │ │ -
136 operator=(const exception_ptr&) _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
137
│ │ │ -
138#if __cplusplus >= 201103L
│ │ │ -
139 exception_ptr&
│ │ │ -
140 operator=(exception_ptr&& __o) noexcept
│ │ │ -
141 {
│ │ │ -
142 exception_ptr(static_cast<exception_ptr&&>(__o)).swap(*this);
│ │ │ -
143 return *this;
│ │ │ -
144 }
│ │ │ -
145#endif
│ │ │ -
146
│ │ │ -
147 ~exception_ptr() _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
148
│ │ │ -
149 void
│ │ │ -
150 swap(exception_ptr&) _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
151
│ │ │ -
152#ifdef _GLIBCXX_EH_PTR_COMPAT
│ │ │ -
153 // Retained for compatibility with CXXABI_1.3.
│ │ │ -
154 void _M_safe_bool_dummy() _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
155 bool operator!() const _GLIBCXX_USE_NOEXCEPT
│ │ │ -
156 __attribute__ ((__pure__));
│ │ │ -
157 operator __safe_bool() const _GLIBCXX_USE_NOEXCEPT;
│ │ │ -
158#endif
│ │ │ -
159
│ │ │ -
160#if __cplusplus >= 201103L
│ │ │ -
161 explicit operator bool() const noexcept
│ │ │ -
162 { return _M_exception_object; }
│ │ │ -
163#endif
│ │ │ +
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │ +
6// software; you can redistribute it and/or modify it under the
│ │ │ +
7// terms of the GNU General Public License as published by the
│ │ │ +
8// Free Software Foundation; either version 3, or (at your option)
│ │ │ +
9// any later version.
│ │ │ +
10
│ │ │ +
11// This library is distributed in the hope that it will be useful,
│ │ │ +
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
│ │ │ +
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
│ │ │ +
14// GNU General Public License for more details.
│ │ │ +
15
│ │ │ +
16// Under Section 7 of GPL version 3, you are granted additional
│ │ │ +
17// permissions described in the GCC Runtime Library Exception, version
│ │ │ +
18// 3.1, as published by the Free Software Foundation.
│ │ │ +
19
│ │ │ +
20// You should have received a copy of the GNU General Public License and
│ │ │ +
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │ +
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │ +
23// <http://www.gnu.org/licenses/>.
│ │ │ +
24
│ │ │ +
25/*
│ │ │ +
26 *
│ │ │ +
27 * Copyright (c) 1994
│ │ │ +
28 * Hewlett-Packard Company
│ │ │ +
29 *
│ │ │ +
30 * Permission to use, copy, modify, distribute and sell this software
│ │ │ +
31 * and its documentation for any purpose is hereby granted without fee,
│ │ │ +
32 * provided that the above copyright notice appear in all copies and
│ │ │ +
33 * that both that copyright notice and this permission notice appear
│ │ │ +
34 * in supporting documentation. Hewlett-Packard Company makes no
│ │ │ +
35 * representations about the suitability of this software for any
│ │ │ +
36 * purpose. It is provided "as is" without express or implied warranty.
│ │ │ +
37 *
│ │ │ +
38 *
│ │ │ +
39 * Copyright (c) 1996,1997
│ │ │ +
40 * Silicon Graphics Computer Systems, Inc.
│ │ │ +
41 *
│ │ │ +
42 * Permission to use, copy, modify, distribute and sell this software
│ │ │ +
43 * and its documentation for any purpose is hereby granted without fee,
│ │ │ +
44 * provided that the above copyright notice appear in all copies and
│ │ │ +
45 * that both that copyright notice and this permission notice appear
│ │ │ +
46 * in supporting documentation. Silicon Graphics makes no
│ │ │ +
47 * representations about the suitability of this software for any
│ │ │ +
48 * purpose. It is provided "as is" without express or implied warranty.
│ │ │ +
49 */
│ │ │ +
50
│ │ │ +
51/** @file bits/stl_stack.h
│ │ │ +
52 * This is an internal header file, included by other library headers.
│ │ │ +
53 * Do not attempt to use it directly. @headername{stack}
│ │ │ +
54 */
│ │ │ +
55
│ │ │ +
56#ifndef _STL_STACK_H
│ │ │ +
57#define _STL_STACK_H 1
│ │ │ +
58
│ │ │ +
59#include <bits/concept_check.h>
│ │ │ +
60#include <debug/debug.h>
│ │ │ +
61#if __cplusplus >= 201103L
│ │ │ +
62# include <bits/uses_allocator.h>
│ │ │ +
63#endif
│ │ │ +
64
│ │ │ +
65namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
66{
│ │ │ +
67_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
68
│ │ │ +
69 /**
│ │ │ +
70 * @brief A standard container giving FILO 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
│ │ │ +
83 * another container, and provides a wrapper interface to that
│ │ │ +
84 * container. The wrapper is what enforces strict
│ │ │ +
85 * first-in-last-out %stack behavior.
│ │ │ +
86 *
│ │ │ +
87 * The second template parameter defines the type of the underlying
│ │ │ +
88 * sequence/container. It defaults to std::deque, but it can be
│ │ │ +
89 * any type that supports @c back, @c push_back, and @c pop_back,
│ │ │ +
90 * such as std::list, std::vector, or an appropriate user-defined
│ │ │ +
91 * type.
│ │ │ +
92 *
│ │ │ +
93 * Members not found in @a normal containers are @c container_type,
│ │ │ +
94 * which is a typedef for the second Sequence parameter, and @c
│ │ │ +
95 * push, @c pop, and @c top, which are standard %stack/FILO
│ │ │ +
96 * operations.
│ │ │ +
97 */
│ │ │ +
98 template<typename _Tp, typename _Sequence = deque<_Tp> >
│ │ │ +
│ │ │ +
99 class stack
│ │ │ +
100 {
│ │ │ +
101#ifdef _GLIBCXX_CONCEPT_CHECKS
│ │ │ +
102 // concept requirements
│ │ │ +
103 typedef typename _Sequence::value_type _Sequence_value_type;
│ │ │ +
104# if __cplusplus < 201103L
│ │ │ +
105 __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
│ │ │ +
106 __glibcxx_class_requires(_Sequence, _BackInsertionSequenceConcept)
│ │ │ +
107# endif
│ │ │ +
108 __glibcxx_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept)
│ │ │ +
109#endif
│ │ │ +
110
│ │ │ +
111 template<typename _Tp1, typename _Seq1>
│ │ │ +
112 friend bool
│ │ │ +
113 operator==(const stack<_Tp1, _Seq1>&, const stack<_Tp1, _Seq1>&);
│ │ │ +
114
│ │ │ +
115 template<typename _Tp1, typename _Seq1>
│ │ │ +
116 friend bool
│ │ │ +
117 operator<(const stack<_Tp1, _Seq1>&, const stack<_Tp1, _Seq1>&);
│ │ │ +
118
│ │ │ +
119#if __cpp_lib_three_way_comparison
│ │ │ +
120 template<typename _Tp1, three_way_comparable _Seq1>
│ │ │ + │ │ │ +
122 operator<=>(const stack<_Tp1, _Seq1>&, const stack<_Tp1, _Seq1>&);
│ │ │ +
123#endif
│ │ │ +
124
│ │ │ +
125#if __cplusplus >= 201103L
│ │ │ +
126 template<typename _Alloc>
│ │ │ +
127 using _Uses = typename
│ │ │ + │ │ │ +
129
│ │ │ +
130#if __cplusplus >= 201703L
│ │ │ +
131 // _GLIBCXX_RESOLVE_LIB_DEFECTS
│ │ │ +
132 // 2566. Requirements on the first template parameter of container
│ │ │ +
133 // adaptors
│ │ │ + │ │ │ +
135 "value_type must be the same as the underlying container");
│ │ │ +
136#endif // C++17
│ │ │ +
137#endif // C++11
│ │ │ +
138
│ │ │ +
139 public:
│ │ │ +
140 typedef typename _Sequence::value_type value_type;
│ │ │ +
141 typedef typename _Sequence::reference reference;
│ │ │ +
142 typedef typename _Sequence::const_reference const_reference;
│ │ │ +
143 typedef typename _Sequence::size_type size_type;
│ │ │ +
144 typedef _Sequence container_type;
│ │ │ +
145
│ │ │ +
146 protected:
│ │ │ +
147 // See queue::c for notes on this name.
│ │ │ +
148 _Sequence c;
│ │ │ +
149
│ │ │ +
150 public:
│ │ │ +
151 // XXX removed old def ctor, added def arg to this one to match 14882
│ │ │ +
152 /**
│ │ │ +
153 * @brief Default constructor creates no elements.
│ │ │ +
154 */
│ │ │ +
155#if __cplusplus < 201103L
│ │ │ +
156 explicit
│ │ │ +
157 stack(const _Sequence& __c = _Sequence())
│ │ │ +
158 : c(__c) { }
│ │ │ +
159#else
│ │ │ +
160 template<typename _Seq = _Sequence, typename _Requires = typename
│ │ │ + │ │ │ +
│ │ │ + │ │ │ +
163 : c() { }
│ │ │ +
│ │ │
164
│ │ │ -
165#if __cpp_impl_three_way_comparison >= 201907L \
│ │ │ -
166 && ! defined _GLIBCXX_EH_PTR_RELOPS_COMPAT
│ │ │ -
167 friend bool
│ │ │ -
168 operator==(const exception_ptr&, const exception_ptr&) noexcept = default;
│ │ │ -
169#else
│ │ │ -
170 friend _GLIBCXX_EH_PTR_USED bool
│ │ │ -
171 operator==(const exception_ptr& __x, const exception_ptr& __y)
│ │ │ -
172 _GLIBCXX_USE_NOEXCEPT
│ │ │ -
173 { return __x._M_exception_object == __y._M_exception_object; }
│ │ │ -
174
│ │ │ -
175 friend _GLIBCXX_EH_PTR_USED bool
│ │ │ -
176 operator!=(const exception_ptr& __x, const exception_ptr& __y)
│ │ │ -
177 _GLIBCXX_USE_NOEXCEPT
│ │ │ -
178 { return __x._M_exception_object != __y._M_exception_object; }
│ │ │ -
179#endif
│ │ │ +
165 explicit
│ │ │ +
166 stack(const _Sequence& __c)
│ │ │ +
167 : c(__c) { }
│ │ │ +
168
│ │ │ +
169 explicit
│ │ │ +
170 stack(_Sequence&& __c)
│ │ │ +
171 : c(std::move(__c)) { }
│ │ │ +
172
│ │ │ +
173#ifdef __glibcxx_adaptor_iterator_pair_constructor // C++ >= 23 && HOSTED
│ │ │ +
174 template<typename _InputIterator,
│ │ │ +
175 typename = _RequireInputIter<_InputIterator>>
│ │ │ +
176 stack(_InputIterator __first, _InputIterator __last)
│ │ │ +
177 : c(__first, __last) { }
│ │ │ +
178#endif
│ │ │ +
179
│ │ │
180
│ │ │ -
181 const class std::type_info*
│ │ │ -
182 __cxa_exception_type() const _GLIBCXX_USE_NOEXCEPT
│ │ │ -
183 __attribute__ ((__pure__));
│ │ │ -
184 };
│ │ │ -
│ │ │ +
181 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
182 explicit
│ │ │ +
183 stack(const _Alloc& __a)
│ │ │ +
184 : c(__a) { }
│ │ │
185
│ │ │ -
186 _GLIBCXX_EH_PTR_USED
│ │ │ -
187 inline
│ │ │ -
188 exception_ptr::exception_ptr() _GLIBCXX_USE_NOEXCEPT
│ │ │ -
189 : _M_exception_object(0)
│ │ │ -
190 { }
│ │ │ -
191
│ │ │ -
192 _GLIBCXX_EH_PTR_USED
│ │ │ -
193 inline
│ │ │ -
194 exception_ptr::exception_ptr(const exception_ptr& __other)
│ │ │ -
195 _GLIBCXX_USE_NOEXCEPT
│ │ │ -
196 : _M_exception_object(__other._M_exception_object)
│ │ │ -
197 {
│ │ │ -
198 if (_M_exception_object)
│ │ │ -
199 _M_addref();
│ │ │ -
200 }
│ │ │ +
186 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
187 stack(const _Sequence& __c, const _Alloc& __a)
│ │ │ +
188 : c(__c, __a) { }
│ │ │ +
189
│ │ │ +
190 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
191 stack(_Sequence&& __c, const _Alloc& __a)
│ │ │ +
192 : c(std::move(__c), __a) { }
│ │ │ +
193
│ │ │ +
194 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
195 stack(const stack& __q, const _Alloc& __a)
│ │ │ +
196 : c(__q.c, __a) { }
│ │ │ +
197
│ │ │ +
198 template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
│ │ │ +
199 stack(stack&& __q, const _Alloc& __a)
│ │ │ +
200 : c(std::move(__q.c), __a) { }
│ │ │
201
│ │ │ -
202 _GLIBCXX_EH_PTR_USED
│ │ │ -
203 inline
│ │ │ -
204 exception_ptr::~exception_ptr() _GLIBCXX_USE_NOEXCEPT
│ │ │ -
205 {
│ │ │ -
206 if (_M_exception_object)
│ │ │ -
207 _M_release();
│ │ │ -
208 }
│ │ │ -
209
│ │ │ -
210 _GLIBCXX_EH_PTR_USED
│ │ │ -
211 inline exception_ptr&
│ │ │ -
212 exception_ptr::operator=(const exception_ptr& __other) _GLIBCXX_USE_NOEXCEPT
│ │ │ -
213 {
│ │ │ -
214 exception_ptr(__other).swap(*this);
│ │ │ -
215 return *this;
│ │ │ -
216 }
│ │ │ -
217
│ │ │ -
218 _GLIBCXX_EH_PTR_USED
│ │ │ -
219 inline void
│ │ │ -
220 exception_ptr::swap(exception_ptr &__other) _GLIBCXX_USE_NOEXCEPT
│ │ │ -
221 {
│ │ │ -
222 void *__tmp = _M_exception_object;
│ │ │ -
223 _M_exception_object = __other._M_exception_object;
│ │ │ -
224 __other._M_exception_object = __tmp;
│ │ │ -
225 }
│ │ │ -
226
│ │ │ -
227 /// @relates exception_ptr
│ │ │ -
228 inline void
│ │ │ -
229 swap(exception_ptr& __lhs, exception_ptr& __rhs)
│ │ │ -
230 { __lhs.swap(__rhs); }
│ │ │ -
231
│ │ │ -
232 /// @cond undocumented
│ │ │ -
233 template<typename _Ex>
│ │ │ -
234 _GLIBCXX_CDTOR_CALLABI
│ │ │ -
235 inline void
│ │ │ -
236 __dest_thunk(void* __x)
│ │ │ -
237 { static_cast<_Ex*>(__x)->~_Ex(); }
│ │ │ -
238 /// @endcond
│ │ │ -
239
│ │ │ -
240 } // namespace __exception_ptr
│ │ │ -
241
│ │ │ -
242 using __exception_ptr::swap; // So that std::swap(exp1, exp2) finds it.
│ │ │ -
243
│ │ │ -
244 /// Obtain an exception_ptr pointing to a copy of the supplied object.
│ │ │ -
245#if (__cplusplus >= 201103L && __cpp_rtti) || __cpp_exceptions
│ │ │ -
246 template<typename _Ex>
│ │ │ - │ │ │ -
│ │ │ -
248 make_exception_ptr(_Ex __ex) _GLIBCXX_USE_NOEXCEPT
│ │ │ -
249 {
│ │ │ -
250#if __cplusplus >= 201103L && __cpp_rtti
│ │ │ -
251 using _Ex2 = typename decay<_Ex>::type;
│ │ │ -
252 void* __e = __cxxabiv1::__cxa_allocate_exception(sizeof(_Ex));
│ │ │ -
253 (void) __cxxabiv1::__cxa_init_primary_exception(
│ │ │ -
254 __e, const_cast<std::type_info*>(&typeid(_Ex)),
│ │ │ -
255 __exception_ptr::__dest_thunk<_Ex2>);
│ │ │ -
256 __try
│ │ │ -
257 {
│ │ │ -
258 ::new (__e) _Ex2(__ex);
│ │ │ -
259 return exception_ptr(__e);
│ │ │ -
260 }
│ │ │ -
261 __catch(...)
│ │ │ -
262 {
│ │ │ -
263 __cxxabiv1::__cxa_free_exception(__e);
│ │ │ -
264 return current_exception();
│ │ │ -
265 }
│ │ │ -
266#else
│ │ │ -
267 try
│ │ │ -
268 {
│ │ │ -
269 throw __ex;
│ │ │ -
270 }
│ │ │ -
271 catch(...)
│ │ │ -
272 {
│ │ │ -
273 return current_exception();
│ │ │ -
274 }
│ │ │ -
275#endif
│ │ │ -
276 }
│ │ │ -
│ │ │ -
277#else // no RTTI and no exceptions
│ │ │ -
278 // This is always_inline so the linker will never use this useless definition
│ │ │ -
279 // instead of a working one compiled with RTTI and/or exceptions enabled.
│ │ │ -
280 template<typename _Ex>
│ │ │ -
281 __attribute__ ((__always_inline__))
│ │ │ -
282 inline exception_ptr
│ │ │ -
283 make_exception_ptr(_Ex) _GLIBCXX_USE_NOEXCEPT
│ │ │ -
284 { return exception_ptr(); }
│ │ │ -
285#endif
│ │ │ -
286
│ │ │ -
287#undef _GLIBCXX_EH_PTR_USED
│ │ │ -
288
│ │ │ -
289 /// @} group exceptions
│ │ │ -
290} // namespace std
│ │ │ -
291
│ │ │ -
292} // extern "C++"
│ │ │ -
293
│ │ │ -
294#endif
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
exception_ptr current_exception() noexcept
│ │ │ -
exception_ptr make_exception_ptr(_Ex) noexcept
Obtain an exception_ptr pointing to a copy of the supplied object.
│ │ │ -
void rethrow_exception(exception_ptr)
Throw the object pointed to by the exception_ptr.
│ │ │ +
202#if __cplusplus > 202002L
│ │ │ +
203 template<typename _InputIterator, typename _Alloc,
│ │ │ +
204 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
205 typename = _Uses<_Alloc>>
│ │ │ +
206 stack(_InputIterator __first, _InputIterator __last, const _Alloc& __a)
│ │ │ +
207 : c(__first, __last, __a) { }
│ │ │ +
208#endif
│ │ │ +
209#endif
│ │ │ +
210
│ │ │ +
211 /**
│ │ │ +
212 * Returns true if the %stack is empty.
│ │ │ +
213 */
│ │ │ +
214 _GLIBCXX_NODISCARD bool
│ │ │ +
│ │ │ +
215 empty() const
│ │ │ +
216 { return c.empty(); }
│ │ │ +
│ │ │ +
217
│ │ │ +
218 /** Returns the number of elements in the %stack. */
│ │ │ +
219 _GLIBCXX_NODISCARD
│ │ │ + │ │ │ +
│ │ │ +
221 size() const
│ │ │ +
222 { return c.size(); }
│ │ │ +
│ │ │ +
223
│ │ │ +
224 /**
│ │ │ +
225 * Returns a read/write reference to the data at the first
│ │ │ +
226 * element of the %stack.
│ │ │ +
227 */
│ │ │ +
228 _GLIBCXX_NODISCARD
│ │ │ +
229 reference
│ │ │ +
│ │ │ + │ │ │ +
231 {
│ │ │ +
232 __glibcxx_requires_nonempty();
│ │ │ +
233 return c.back();
│ │ │ +
234 }
│ │ │ +
│ │ │ +
235
│ │ │ +
236 /**
│ │ │ +
237 * Returns a read-only (constant) reference to the data at the first
│ │ │ +
238 * element of the %stack.
│ │ │ +
239 */
│ │ │ +
240 _GLIBCXX_NODISCARD
│ │ │ +
241 const_reference
│ │ │ +
│ │ │ +
242 top() const
│ │ │ +
243 {
│ │ │ +
244 __glibcxx_requires_nonempty();
│ │ │ +
245 return c.back();
│ │ │ +
246 }
│ │ │ +
│ │ │ +
247
│ │ │ +
248 /**
│ │ │ +
249 * @brief Add data to the top of the %stack.
│ │ │ +
250 * @param __x Data to be added.
│ │ │ +
251 *
│ │ │ +
252 * This is a typical %stack operation. The function creates an
│ │ │ +
253 * element at the top of the %stack and assigns the given data
│ │ │ +
254 * to it. The time complexity of the operation depends on the
│ │ │ +
255 * underlying sequence.
│ │ │ +
256 */
│ │ │ +
257 void
│ │ │ +
│ │ │ +
258 push(const value_type& __x)
│ │ │ +
259 { c.push_back(__x); }
│ │ │ +
│ │ │ +
260
│ │ │ +
261#if __cplusplus >= 201103L
│ │ │ +
262 void
│ │ │ +
263 push(value_type&& __x)
│ │ │ +
264 { c.push_back(std::move(__x)); }
│ │ │ +
265
│ │ │ +
266#if __cplusplus > 201402L
│ │ │ +
267 template<typename... _Args>
│ │ │ +
268 decltype(auto)
│ │ │ +
269 emplace(_Args&&... __args)
│ │ │ +
270 { return c.emplace_back(std::forward<_Args>(__args)...); }
│ │ │ +
271#else
│ │ │ +
272 template<typename... _Args>
│ │ │ +
273 void
│ │ │ +
274 emplace(_Args&&... __args)
│ │ │ +
275 { c.emplace_back(std::forward<_Args>(__args)...); }
│ │ │ +
276#endif
│ │ │ +
277#endif
│ │ │ +
278
│ │ │ +
279 /**
│ │ │ +
280 * @brief Removes first element.
│ │ │ +
281 *
│ │ │ +
282 * This is a typical %stack operation. It shrinks the %stack
│ │ │ +
283 * by one. The time complexity of the operation depends on the
│ │ │ +
284 * underlying sequence.
│ │ │ +
285 *
│ │ │ +
286 * Note that no data is returned, and if the first element's
│ │ │ +
287 * data is needed, it should be retrieved before pop() is
│ │ │ +
288 * called.
│ │ │ +
289 */
│ │ │ +
290 void
│ │ │ +
│ │ │ + │ │ │ +
292 {
│ │ │ +
293 __glibcxx_requires_nonempty();
│ │ │ +
294 c.pop_back();
│ │ │ +
295 }
│ │ │ +
│ │ │ +
296
│ │ │ +
297#if __cplusplus >= 201103L
│ │ │ +
298 void
│ │ │ +
299 swap(stack& __s)
│ │ │ +
300#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
│ │ │ +
301 noexcept(__is_nothrow_swappable<_Sequence>::value)
│ │ │ +
302#else
│ │ │ +
303 noexcept(__is_nothrow_swappable<_Tp>::value)
│ │ │ +
304#endif
│ │ │ +
305 {
│ │ │ +
306 using std::swap;
│ │ │ +
307 swap(c, __s.c);
│ │ │ +
308 }
│ │ │ +
309#endif // __cplusplus >= 201103L
│ │ │ +
310 };
│ │ │ +
│ │ │ +
311
│ │ │ +
312#if __cpp_deduction_guides >= 201606
│ │ │ +
313 template<typename _Container,
│ │ │ +
314 typename = _RequireNotAllocator<_Container>>
│ │ │ + │ │ │ +
316
│ │ │ +
317 template<typename _Container, typename _Allocator,
│ │ │ +
318 typename = _RequireNotAllocator<_Container>>
│ │ │ +
319 stack(_Container, _Allocator)
│ │ │ + │ │ │ +
321
│ │ │ +
322#ifdef __glibcxx_adaptor_iterator_pair_constructor
│ │ │ +
323 template<typename _InputIterator,
│ │ │ +
324 typename _ValT
│ │ │ + │ │ │ +
326 typename = _RequireInputIter<_InputIterator>>
│ │ │ +
327 stack(_InputIterator, _InputIterator) -> stack<_ValT>;
│ │ │ +
328
│ │ │ +
329 template<typename _InputIterator, typename _Allocator,
│ │ │ +
330 typename _ValT
│ │ │ + │ │ │ +
332 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
333 typename = _RequireAllocator<_Allocator>>
│ │ │ +
334 stack(_InputIterator, _InputIterator, _Allocator)
│ │ │ + │ │ │ +
336#endif
│ │ │ +
337#endif
│ │ │ +
338
│ │ │ +
339 /**
│ │ │ +
340 * @brief Stack equality comparison.
│ │ │ +
341 * @param __x A %stack.
│ │ │ +
342 * @param __y A %stack of the same type as @a __x.
│ │ │ +
343 * @return True iff the size and elements of the stacks are equal.
│ │ │ +
344 *
│ │ │ +
345 * This is an equivalence relation. Complexity and semantics
│ │ │ +
346 * depend on the underlying sequence type, but the expected rules
│ │ │ +
347 * are: this relation is linear in the size of the sequences, and
│ │ │ +
348 * stacks are considered equivalent if their sequences compare
│ │ │ +
349 * equal.
│ │ │ +
350 */
│ │ │ +
351 template<typename _Tp, typename _Seq>
│ │ │ +
352 _GLIBCXX_NODISCARD
│ │ │ +
353 inline bool
│ │ │ +
│ │ │ +
354 operator==(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
│ │ │ +
355 { return __x.c == __y.c; }
│ │ │ +
│ │ │ +
356
│ │ │ +
357 /**
│ │ │ +
358 * @brief Stack ordering relation.
│ │ │ +
359 * @param __x A %stack.
│ │ │ +
360 * @param __y A %stack of the same type as @a x.
│ │ │ +
361 * @return True iff @a x is lexicographically less than @a __y.
│ │ │ +
362 *
│ │ │ +
363 * This is an total ordering relation. Complexity and semantics
│ │ │ +
364 * depend on the underlying sequence type, but the expected rules
│ │ │ +
365 * are: this relation is linear in the size of the sequences, the
│ │ │ +
366 * elements must be comparable with @c <, and
│ │ │ +
367 * std::lexicographical_compare() is usually used to make the
│ │ │ +
368 * determination.
│ │ │ +
369 */
│ │ │ +
370 template<typename _Tp, typename _Seq>
│ │ │ +
371 _GLIBCXX_NODISCARD
│ │ │ +
│ │ │ +
372 inline bool
│ │ │ +
373 operator<(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
│ │ │ +
374 { return __x.c < __y.c; }
│ │ │ +
│ │ │ +
375
│ │ │ +
376 /// Based on operator==
│ │ │ +
377 template<typename _Tp, typename _Seq>
│ │ │ +
378 _GLIBCXX_NODISCARD
│ │ │ +
379 inline bool
│ │ │ +
│ │ │ +
380 operator!=(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
│ │ │ +
381 { return !(__x == __y); }
│ │ │ +
│ │ │ +
382
│ │ │ +
383 /// Based on operator<
│ │ │ +
384 template<typename _Tp, typename _Seq>
│ │ │ +
385 _GLIBCXX_NODISCARD
│ │ │ +
386 inline bool
│ │ │ +
│ │ │ +
387 operator>(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
│ │ │ +
388 { return __y < __x; }
│ │ │ +
│ │ │ +
389
│ │ │ +
390 /// Based on operator<
│ │ │ +
391 template<typename _Tp, typename _Seq>
│ │ │ +
392 _GLIBCXX_NODISCARD
│ │ │ +
│ │ │ +
393 inline bool
│ │ │ +
394 operator<=(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
│ │ │ +
395 { return !(__y < __x); }
│ │ │ +
│ │ │ +
396
│ │ │ +
397 /// Based on operator<
│ │ │ +
398 template<typename _Tp, typename _Seq>
│ │ │ +
399 _GLIBCXX_NODISCARD
│ │ │ +
400 inline bool
│ │ │ +
│ │ │ +
401 operator>=(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
│ │ │ +
402 { return !(__x < __y); }
│ │ │ +
│ │ │ +
403
│ │ │ +
404#if __cpp_lib_three_way_comparison
│ │ │ +
405 template<typename _Tp, three_way_comparable _Seq>
│ │ │ +
406 [[nodiscard]]
│ │ │ + │ │ │ +
408 operator<=>(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
│ │ │ +
409 { return __x.c <=> __y.c; }
│ │ │ +
410#endif
│ │ │ +
411
│ │ │ +
412#if __cplusplus >= 201103L
│ │ │ +
413 template<typename _Tp, typename _Seq>
│ │ │ +
414 inline
│ │ │ +
415#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
│ │ │ +
416 // Constrained free swap overload, see p0185r1
│ │ │ + │ │ │ +
418#else
│ │ │ +
419 void
│ │ │ +
420#endif
│ │ │ +
421 swap(stack<_Tp, _Seq>& __x, stack<_Tp, _Seq>& __y)
│ │ │ +
422 noexcept(noexcept(__x.swap(__y)))
│ │ │ +
423 { __x.swap(__y); }
│ │ │ +
424
│ │ │ +
425 template<typename _Tp, typename _Seq, typename _Alloc>
│ │ │ +
426 struct uses_allocator<stack<_Tp, _Seq>, _Alloc>
│ │ │ +
427 : public uses_allocator<_Seq, _Alloc>::type { };
│ │ │ +
428#endif // __cplusplus >= 201103L
│ │ │ +
429
│ │ │ +
430_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
431} // namespace
│ │ │ +
432
│ │ │ +
433#endif /* _STL_STACK_H */
│ │ │ + │ │ │ + │ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │ +
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:71
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
Part of RTTI.
Definition typeinfo:92
│ │ │ -
An opaque pointer to an arbitrary exception.
│ │ │ -
An opaque pointer to an arbitrary exception.
│ │ │ +
typename __detail::__cmp3way_res_impl< _Tp, _Up >::type compare_three_way_result_t
[cmp.result], result of three-way comparison
Definition compare:518
│ │ │ +
Define a member typedef type only if a boolean constant is true.
Definition type_traits:129
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
Declare uses_allocator so it can be specialized in <queue> etc.
Definition memoryfwd.h:73
│ │ │ +
A standard container giving FILO behavior.
Definition stl_stack.h:100
│ │ │ +
void pop()
Removes first element.
Definition stl_stack.h:291
│ │ │ +
size_type size() const
Definition stl_stack.h:221
│ │ │ +
void push(const value_type &__x)
Add data to the top of the stack.
Definition stl_stack.h:258
│ │ │ +
bool empty() const
Definition stl_stack.h:215
│ │ │ +
const_reference top() const
Definition stl_stack.h:242
│ │ │ +
stack()
Default constructor creates no elements.
Definition stl_stack.h:162
│ │ │ +
reference top()
Definition stl_stack.h:230
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,328 +1,496 @@ │ │ │ │ libstdc++ │ │ │ │ -exception_ptr.h │ │ │ │ +stl_stack.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// Exception Handling support header (exception_ptr class) for -*- C++ -*- │ │ │ │ +1// Stack implementation -*- C++ -*- │ │ │ │ 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 GCC. │ │ │ │ -6// │ │ │ │ -7// GCC is free software; you can redistribute it and/or modify │ │ │ │ -8// it under the terms of the GNU General Public License as published by │ │ │ │ -9// the Free Software Foundation; either version 3, or (at your option) │ │ │ │ -10// any later version. │ │ │ │ -11// │ │ │ │ -12// GCC is distributed in the hope that it will be useful, │ │ │ │ -13// but WITHOUT ANY WARRANTY; without even the implied warranty of │ │ │ │ -14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the │ │ │ │ -15// GNU General Public License for more details. │ │ │ │ -16// │ │ │ │ -17// Under Section 7 of GPL version 3, you are granted additional │ │ │ │ -18// permissions described in the GCC Runtime Library Exception, version │ │ │ │ -19// 3.1, as published by the Free Software Foundation. │ │ │ │ -20 │ │ │ │ -21// You should have received a copy of the GNU General Public License and │ │ │ │ -22// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ -23// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ -24// . │ │ │ │ -25 │ │ │ │ -26/** @file bits/exception_ptr.h │ │ │ │ -27 * This is an internal header file, included by other library headers. │ │ │ │ -28 * Do not attempt to use it directly. @headername{exception} │ │ │ │ -29 */ │ │ │ │ -30 │ │ │ │ -31#ifndef _EXCEPTION_PTR_H │ │ │ │ -32#define _EXCEPTION_PTR_H │ │ │ │ -33 │ │ │ │ -34#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ -35#include <_b_i_t_s_/_e_x_c_e_p_t_i_o_n___d_e_f_i_n_e_s_._h> │ │ │ │ -36#include <_b_i_t_s_/_c_x_x_a_b_i___i_n_i_t___e_x_c_e_p_t_i_o_n_._h> │ │ │ │ -37#include <_t_y_p_e_i_n_f_o> │ │ │ │ -38#include <_n_e_w> │ │ │ │ -39 │ │ │ │ -40#if __cplusplus >= 201103L │ │ │ │ -41# include <_b_i_t_s_/_m_o_v_e_._h> │ │ │ │ -42#endif │ │ │ │ -43 │ │ │ │ -44#ifdef _GLIBCXX_EH_PTR_RELOPS_COMPAT │ │ │ │ -45# define _GLIBCXX_EH_PTR_USED __attribute__((__used__)) │ │ │ │ -46#else │ │ │ │ -47# define _GLIBCXX_EH_PTR_USED │ │ │ │ -48#endif │ │ │ │ -49 │ │ │ │ -50extern "C++" { │ │ │ │ -51 │ │ │ │ -52namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -53{ │ │ │ │ -54 class _t_y_p_e___i_n_f_o; │ │ │ │ +5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ +6// software; you can redistribute it and/or modify it under the │ │ │ │ +7// terms of the GNU General Public License as published by the │ │ │ │ +8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ +9// any later version. │ │ │ │ +10 │ │ │ │ +11// This library is distributed in the hope that it will be useful, │ │ │ │ +12// but WITHOUT ANY WARRANTY; without even the implied warranty of │ │ │ │ +13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the │ │ │ │ +14// GNU General Public License for more details. │ │ │ │ +15 │ │ │ │ +16// Under Section 7 of GPL version 3, you are granted additional │ │ │ │ +17// permissions described in the GCC Runtime Library Exception, version │ │ │ │ +18// 3.1, as published by the Free Software Foundation. │ │ │ │ +19 │ │ │ │ +20// You should have received a copy of the GNU General Public License and │ │ │ │ +21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ +22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ +23// . │ │ │ │ +24 │ │ │ │ +25/* │ │ │ │ +26 * │ │ │ │ +27 * Copyright (c) 1994 │ │ │ │ +28 * Hewlett-Packard Company │ │ │ │ +29 * │ │ │ │ +30 * Permission to use, copy, modify, distribute and sell this software │ │ │ │ +31 * and its documentation for any purpose is hereby granted without fee, │ │ │ │ +32 * provided that the above copyright notice appear in all copies and │ │ │ │ +33 * that both that copyright notice and this permission notice appear │ │ │ │ +34 * in supporting documentation. Hewlett-Packard Company makes no │ │ │ │ +35 * representations about the suitability of this software for any │ │ │ │ +36 * purpose. It is provided "as is" without express or implied warranty. │ │ │ │ +37 * │ │ │ │ +38 * │ │ │ │ +39 * Copyright (c) 1996,1997 │ │ │ │ +40 * Silicon Graphics Computer Systems, Inc. │ │ │ │ +41 * │ │ │ │ +42 * Permission to use, copy, modify, distribute and sell this software │ │ │ │ +43 * and its documentation for any purpose is hereby granted without fee, │ │ │ │ +44 * provided that the above copyright notice appear in all copies and │ │ │ │ +45 * that both that copyright notice and this permission notice appear │ │ │ │ +46 * in supporting documentation. Silicon Graphics makes no │ │ │ │ +47 * representations about the suitability of this software for any │ │ │ │ +48 * purpose. It is provided "as is" without express or implied warranty. │ │ │ │ +49 */ │ │ │ │ +50 │ │ │ │ +51/** @file bits/stl_stack.h │ │ │ │ +52 * This is an internal header file, included by other library headers. │ │ │ │ +53 * Do not attempt to use it directly. @headername{stack} │ │ │ │ +54 */ │ │ │ │ 55 │ │ │ │ -56 /** │ │ │ │ -57 * @addtogroup exceptions │ │ │ │ -58 * @{ │ │ │ │ -59 */ │ │ │ │ -60 │ │ │ │ -61 namespace __exception_ptr │ │ │ │ -62 { │ │ │ │ -63 class exception_ptr; │ │ │ │ -64 } │ │ │ │ -65 │ │ │ │ -66 using __exception_ptr::exception_ptr; │ │ │ │ -67 │ │ │ │ -68 /** Obtain an exception_ptr to the currently handled exception. │ │ │ │ -69 * │ │ │ │ -70 * If there is none, or the currently handled exception is foreign, │ │ │ │ -71 * return the null value. │ │ │ │ -72 * │ │ │ │ -73 * @since C++11 │ │ │ │ -74 */ │ │ │ │ -_7_5 _e_x_c_e_p_t_i_o_n___p_t_r _c_u_r_r_e_n_t___e_x_c_e_p_t_i_o_n() _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -76 │ │ │ │ -77 template │ │ │ │ -78 _e_x_c_e_p_t_i_o_n___p_t_r _m_a_k_e___e_x_c_e_p_t_i_o_n___p_t_r(_Ex) _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -79 │ │ │ │ -80 /// Throw the object pointed to by the exception_ptr. │ │ │ │ -_8_1 void _r_e_t_h_r_o_w___e_x_c_e_p_t_i_o_n(_e_x_c_e_p_t_i_o_n___p_t_r) __attribute__ ((__noreturn__)); │ │ │ │ -82 │ │ │ │ -83 namespace __exception_ptr │ │ │ │ -84 { │ │ │ │ -85 using _s_t_d_:_:_r_e_t_h_r_o_w___e_x_c_e_p_t_i_o_n; // So that ADL finds it. │ │ │ │ -86 │ │ │ │ -87 /** │ │ │ │ -88 * @brief An opaque pointer to an arbitrary exception. │ │ │ │ -89 * │ │ │ │ -90 * The actual name of this type is unspecified, so the alias │ │ │ │ -91 * `std::exception_ptr` should be used to refer to it. │ │ │ │ +56#ifndef _STL_STACK_H │ │ │ │ +57#define _STL_STACK_H 1 │ │ │ │ +58 │ │ │ │ +59#include <_b_i_t_s_/_c_o_n_c_e_p_t___c_h_e_c_k_._h> │ │ │ │ +60#include <_d_e_b_u_g_/_d_e_b_u_g_._h> │ │ │ │ +61#if __cplusplus >= 201103L │ │ │ │ +62# include │ │ │ │ +63#endif │ │ │ │ +64 │ │ │ │ +65namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +66{ │ │ │ │ +67_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +68 │ │ │ │ +69 /** │ │ │ │ +70 * @brief A standard container giving FILO 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 │ │ │ │ +83 * another container, and provides a wrapper interface to that │ │ │ │ +84 * container. The wrapper is what enforces strict │ │ │ │ +85 * first-in-last-out %stack behavior. │ │ │ │ +86 * │ │ │ │ +87 * The second template parameter defines the type of the underlying │ │ │ │ +88 * sequence/container. It defaults to std::deque, but it can be │ │ │ │ +89 * any type that supports @c back, @c push_back, and @c pop_back, │ │ │ │ +90 * such as std::list, std::vector, or an appropriate user-defined │ │ │ │ +91 * type. │ │ │ │ 92 * │ │ │ │ -93 * @headerfile exception │ │ │ │ -94 * @since C++11 (but usable in C++98 as a GCC extension) │ │ │ │ -95 * @ingroup exceptions │ │ │ │ -96 */ │ │ │ │ -_9_7 class exception_ptr │ │ │ │ -98 { │ │ │ │ -99 void* _M_exception_object; │ │ │ │ -100 │ │ │ │ -101 explicit exception_ptr(void* __e) _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -102 │ │ │ │ -103 void _M_addref() _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -104 void _M_release() _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -105 │ │ │ │ -106 void *_M_get() const _GLIBCXX_NOEXCEPT __attribute__ ((__pure__)); │ │ │ │ -107 │ │ │ │ -108 friend exception_ptr _s_t_d_:_:_c_u_r_r_e_n_t___e_x_c_e_p_t_i_o_n() _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -109 friend void _s_t_d_:_:_r_e_t_h_r_o_w___e_x_c_e_p_t_i_o_n(exception_ptr); │ │ │ │ -110 template │ │ │ │ -111 friend exception_ptr _s_t_d_:_:_m_a_k_e___e_x_c_e_p_t_i_o_n___p_t_r(_Ex) _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -112 │ │ │ │ -113 public: │ │ │ │ -114 exception_ptr() _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -115 │ │ │ │ -116 exception_ptr(const exception_ptr&) _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -117 │ │ │ │ -118#if __cplusplus >= 201103L │ │ │ │ -119 exception_ptr(nullptr_t) noexcept │ │ │ │ -120 : _M_exception_object(nullptr) │ │ │ │ -121 { } │ │ │ │ -122 │ │ │ │ -123 exception_ptr(exception_ptr&& __o) noexcept │ │ │ │ -124 : _M_exception_object(__o._M_exception_object) │ │ │ │ -125 { __o._M_exception_object = nullptr; } │ │ │ │ -126#endif │ │ │ │ -127 │ │ │ │ -128#if (__cplusplus < 201103L) || defined (_GLIBCXX_EH_PTR_COMPAT) │ │ │ │ -129 typedef void (exception_ptr::*__safe_bool)(); │ │ │ │ -130 │ │ │ │ -131 // For construction from nullptr or 0. │ │ │ │ -132 exception_ptr(__safe_bool) _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -133#endif │ │ │ │ -134 │ │ │ │ -135 exception_ptr& │ │ │ │ -136 operator=(const exception_ptr&) _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -137 │ │ │ │ -138#if __cplusplus >= 201103L │ │ │ │ -139 exception_ptr& │ │ │ │ -140 operator=(exception_ptr&& __o) noexcept │ │ │ │ -141 { │ │ │ │ -142 exception_ptr(static_cast(__o)).swap(*this); │ │ │ │ -143 return *this; │ │ │ │ -144 } │ │ │ │ -145#endif │ │ │ │ -146 │ │ │ │ -147 ~exception_ptr() _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -148 │ │ │ │ -149 void │ │ │ │ -150 swap(exception_ptr&) _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -151 │ │ │ │ -152#ifdef _GLIBCXX_EH_PTR_COMPAT │ │ │ │ -153 // Retained for compatibility with CXXABI_1.3. │ │ │ │ -154 void _M_safe_bool_dummy() _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -155 bool operator!() const _GLIBCXX_USE_NOEXCEPT │ │ │ │ -156 __attribute__ ((__pure__)); │ │ │ │ -157 operator __safe_bool() const _GLIBCXX_USE_NOEXCEPT; │ │ │ │ -158#endif │ │ │ │ -159 │ │ │ │ -160#if __cplusplus >= 201103L │ │ │ │ -161 explicit operator bool() const noexcept │ │ │ │ -162 { return _M_exception_object; } │ │ │ │ -163#endif │ │ │ │ +93 * Members not found in @a normal containers are @c container_type, │ │ │ │ +94 * which is a typedef for the second Sequence parameter, and @c │ │ │ │ +95 * push, @c pop, and @c top, which are standard %stack/FILO │ │ │ │ +96 * operations. │ │ │ │ +97 */ │ │ │ │ +98 template > │ │ │ │ +_9_9 class _s_t_a_c_k │ │ │ │ +100 { │ │ │ │ +101#ifdef _GLIBCXX_CONCEPT_CHECKS │ │ │ │ +102 // concept requirements │ │ │ │ +103 typedef typename _Sequence::value_type _Sequence_value_type; │ │ │ │ +104# if __cplusplus < 201103L │ │ │ │ +105 __glibcxx_class_requires(_Tp, _SGIAssignableConcept) │ │ │ │ +106 __glibcxx_class_requires(_Sequence, _BackInsertionSequenceConcept) │ │ │ │ +107# endif │ │ │ │ +108 __glibcxx_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept) │ │ │ │ +109#endif │ │ │ │ +110 │ │ │ │ +111 template │ │ │ │ +112 friend bool │ │ │ │ +113 operator==(const _s_t_a_c_k_<___T_p_1_,_ ___S_e_q_1_>&, const _s_t_a_c_k_<___T_p_1_,_ ___S_e_q_1_>&); │ │ │ │ +114 │ │ │ │ +115 template │ │ │ │ +116 friend bool │ │ │ │ +117 operator<(const _s_t_a_c_k_<___T_p_1_,_ ___S_e_q_1_>&, const _s_t_a_c_k_<___T_p_1_,_ ___S_e_q_1_>&); │ │ │ │ +118 │ │ │ │ +119#if __cpp_lib_three_way_comparison │ │ │ │ +120 template │ │ │ │ +121 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_> │ │ │ │ +122 operator<=>(const _s_t_a_c_k_<___T_p_1_,_ ___S_e_q_1_>&, const _s_t_a_c_k_<___T_p_1_,_ ___S_e_q_1_>&); │ │ │ │ +123#endif │ │ │ │ +124 │ │ │ │ +125#if __cplusplus >= 201103L │ │ │ │ +126 template │ │ │ │ +127 using _Uses = typename │ │ │ │ +128 _e_n_a_b_l_e___i_f_<_u_s_e_s___a_l_l_o_c_a_t_o_r_<___S_e_q_u_e_n_c_e_,_ ___A_l_l_o_c_>_:_:_v_a_l_u_e>_:_:_t_y_p_e; │ │ │ │ +129 │ │ │ │ +130#if __cplusplus >= 201703L │ │ │ │ +131 // _GLIBCXX_RESOLVE_LIB_DEFECTS │ │ │ │ +132 // 2566. Requirements on the first template parameter of container │ │ │ │ +133 // adaptors │ │ │ │ +134 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, │ │ │ │ +135 "value_type must be the same as the underlying container"); │ │ │ │ +136#endif // C++17 │ │ │ │ +137#endif // C++11 │ │ │ │ +138 │ │ │ │ +139 public: │ │ │ │ +140 typedef typename _Sequence::value_type value_type; │ │ │ │ +141 typedef typename _Sequence::reference reference; │ │ │ │ +142 typedef typename _Sequence::const_reference const_reference; │ │ │ │ +143 typedef typename _Sequence::size_type size_type; │ │ │ │ +144 typedef _Sequence container_type; │ │ │ │ +145 │ │ │ │ +146 protected: │ │ │ │ +147 // See queue::c for notes on this name. │ │ │ │ +148 _Sequence c; │ │ │ │ +149 │ │ │ │ +150 public: │ │ │ │ +151 // XXX removed old def ctor, added def arg to this one to match 14882 │ │ │ │ +152 /** │ │ │ │ +153 * @brief Default constructor creates no elements. │ │ │ │ +154 */ │ │ │ │ +155#if __cplusplus < 201103L │ │ │ │ +156 explicit │ │ │ │ +157 _s_t_a_c_k(const _Sequence& __c = _Sequence()) │ │ │ │ +158 : c(__c) { } │ │ │ │ +159#else │ │ │ │ +160 template_:_:_v_a_l_u_e>_:_:_t_y_p_e> │ │ │ │ +_1_6_2 _s_t_a_c_k() │ │ │ │ +163 : c() { } │ │ │ │ 164 │ │ │ │ -165#if __cpp_impl_three_way_comparison >= 201907L \ │ │ │ │ -166 && ! defined _GLIBCXX_EH_PTR_RELOPS_COMPAT │ │ │ │ -167 friend bool │ │ │ │ -168 operator==(const exception_ptr&, const exception_ptr&) noexcept = default; │ │ │ │ -169#else │ │ │ │ -170 friend _GLIBCXX_EH_PTR_USED bool │ │ │ │ -171 operator==(const exception_ptr& __x, const exception_ptr& __y) │ │ │ │ -172 _GLIBCXX_USE_NOEXCEPT │ │ │ │ -173 { return __x._M_exception_object == __y._M_exception_object; } │ │ │ │ -174 │ │ │ │ -175 friend _GLIBCXX_EH_PTR_USED bool │ │ │ │ -176 operator!=(const exception_ptr& __x, const exception_ptr& __y) │ │ │ │ -177 _GLIBCXX_USE_NOEXCEPT │ │ │ │ -178 { return __x._M_exception_object != __y._M_exception_object; } │ │ │ │ -179#endif │ │ │ │ +165 explicit │ │ │ │ +166 _s_t_a_c_k(const _Sequence& __c) │ │ │ │ +167 : c(__c) { } │ │ │ │ +168 │ │ │ │ +169 explicit │ │ │ │ +170 _s_t_a_c_k(_Sequence&& __c) │ │ │ │ +171 : c(_s_t_d::_m_o_v_e(__c)) { } │ │ │ │ +172 │ │ │ │ +173#ifdef __glibcxx_adaptor_iterator_pair_constructor // C++ >= 23 && HOSTED │ │ │ │ +174 template> │ │ │ │ +176 _s_t_a_c_k(_InputIterator __first, _InputIterator __last) │ │ │ │ +177 : c(__first, __last) { } │ │ │ │ +178#endif │ │ │ │ +179 │ │ │ │ 180 │ │ │ │ -181 const class _s_t_d_:_:_t_y_p_e___i_n_f_o* │ │ │ │ -182 __cxa_exception_type() const _GLIBCXX_USE_NOEXCEPT │ │ │ │ -183 __attribute__ ((__pure__)); │ │ │ │ -184 }; │ │ │ │ +181 template> │ │ │ │ +182 explicit │ │ │ │ +183 _s_t_a_c_k(const _Alloc& __a) │ │ │ │ +184 : c(__a) { } │ │ │ │ 185 │ │ │ │ -186 _GLIBCXX_EH_PTR_USED │ │ │ │ -187 inline │ │ │ │ -188 exception_ptr::exception_ptr() _GLIBCXX_USE_NOEXCEPT │ │ │ │ -189 : _M_exception_object(0) │ │ │ │ -190 { } │ │ │ │ -191 │ │ │ │ -192 _GLIBCXX_EH_PTR_USED │ │ │ │ -193 inline │ │ │ │ -194 exception_ptr::exception_ptr(const _e_x_c_e_p_t_i_o_n___p_t_r& __other) │ │ │ │ -195 _GLIBCXX_USE_NOEXCEPT │ │ │ │ -196 : _M_exception_object(__other._M_exception_object) │ │ │ │ -197 { │ │ │ │ -198 if (_M_exception_object) │ │ │ │ -199 _M_addref(); │ │ │ │ -200 } │ │ │ │ +186 template> │ │ │ │ +187 _s_t_a_c_k(const _Sequence& __c, const _Alloc& __a) │ │ │ │ +188 : c(__c, __a) { } │ │ │ │ +189 │ │ │ │ +190 template> │ │ │ │ +191 _s_t_a_c_k(_Sequence&& __c, const _Alloc& __a) │ │ │ │ +192 : c(std::_m_o_v_e(__c), __a) { } │ │ │ │ +193 │ │ │ │ +194 template> │ │ │ │ +195 _s_t_a_c_k(const _s_t_a_c_k& __q, const _Alloc& __a) │ │ │ │ +196 : c(__q.c, __a) { } │ │ │ │ +197 │ │ │ │ +198 template> │ │ │ │ +199 _s_t_a_c_k(_s_t_a_c_k&& __q, const _Alloc& __a) │ │ │ │ +200 : c(std::_m_o_v_e(__q.c), __a) { } │ │ │ │ 201 │ │ │ │ -202 _GLIBCXX_EH_PTR_USED │ │ │ │ -203 inline │ │ │ │ -204 exception_ptr::~exception_ptr() _GLIBCXX_USE_NOEXCEPT │ │ │ │ -205 { │ │ │ │ -206 if (_M_exception_object) │ │ │ │ -207 _M_release(); │ │ │ │ -208 } │ │ │ │ -209 │ │ │ │ -210 _GLIBCXX_EH_PTR_USED │ │ │ │ -211 inline _e_x_c_e_p_t_i_o_n___p_t_r& │ │ │ │ -212 exception_ptr::operator=(const _e_x_c_e_p_t_i_o_n___p_t_r& __other) │ │ │ │ -_GLIBCXX_USE_NOEXCEPT │ │ │ │ -213 { │ │ │ │ -214 _e_x_c_e_p_t_i_o_n___p_t_r(__other).swap(*this); │ │ │ │ -215 return *this; │ │ │ │ -216 } │ │ │ │ +202#if __cplusplus > 202002L │ │ │ │ +203 template, │ │ │ │ +205 typename = _Uses<_Alloc>> │ │ │ │ +206 _s_t_a_c_k(_InputIterator __first, _InputIterator __last, const _Alloc& __a) │ │ │ │ +207 : c(__first, __last, __a) { } │ │ │ │ +208#endif │ │ │ │ +209#endif │ │ │ │ +210 │ │ │ │ +211 /** │ │ │ │ +212 * Returns true if the %stack is empty. │ │ │ │ +213 */ │ │ │ │ +214 _GLIBCXX_NODISCARD bool │ │ │ │ +_2_1_5 _e_m_p_t_y() const │ │ │ │ +216 { return c.empty(); } │ │ │ │ 217 │ │ │ │ -218 _GLIBCXX_EH_PTR_USED │ │ │ │ -219 inline void │ │ │ │ -220 exception_ptr::swap(_e_x_c_e_p_t_i_o_n___p_t_r &__other) _GLIBCXX_USE_NOEXCEPT │ │ │ │ -221 { │ │ │ │ -222 void *__tmp = _M_exception_object; │ │ │ │ -223 _M_exception_object = __other._M_exception_object; │ │ │ │ -224 __other._M_exception_object = __tmp; │ │ │ │ -225 } │ │ │ │ -226 │ │ │ │ -227 /// @relates exception_ptr │ │ │ │ -228 inline void │ │ │ │ -229 swap(_e_x_c_e_p_t_i_o_n___p_t_r& __lhs, _e_x_c_e_p_t_i_o_n___p_t_r& __rhs) │ │ │ │ -230 { __lhs.swap(__rhs); } │ │ │ │ -231 │ │ │ │ -232 /// @cond undocumented │ │ │ │ -233 template │ │ │ │ -234 _GLIBCXX_CDTOR_CALLABI │ │ │ │ -235 inline void │ │ │ │ -236 __dest_thunk(void* __x) │ │ │ │ -237 { static_cast<_Ex*>(__x)->~_Ex(); } │ │ │ │ -238 /// @endcond │ │ │ │ -239 │ │ │ │ -240 } // namespace __exception_ptr │ │ │ │ -241 │ │ │ │ -242 using __exception_ptr::swap; // So that std::swap(exp1, exp2) finds it. │ │ │ │ -243 │ │ │ │ -244 /// Obtain an exception_ptr pointing to a copy of the supplied object. │ │ │ │ -245#if (__cplusplus >= 201103L && __cpp_rtti) || __cpp_exceptions │ │ │ │ -246 template │ │ │ │ -247 _e_x_c_e_p_t_i_o_n___p_t_r │ │ │ │ -_2_4_8 _m_a_k_e___e_x_c_e_p_t_i_o_n___p_t_r(_Ex __ex) _GLIBCXX_USE_NOEXCEPT │ │ │ │ -249 { │ │ │ │ -250#if __cplusplus >= 201103L && __cpp_rtti │ │ │ │ -251 using _Ex2 = typename decay<_Ex>::type; │ │ │ │ -252 void* __e = __cxxabiv1::__cxa_allocate_exception(sizeof(_Ex)); │ │ │ │ -253 (void) __cxxabiv1::__cxa_init_primary_exception( │ │ │ │ -254 __e, const_cast<_s_t_d_:_:_t_y_p_e___i_n_f_o*>(&typeid(_Ex)), │ │ │ │ -255 __exception_ptr::__dest_thunk<_Ex2>); │ │ │ │ -256 __try │ │ │ │ -257 { │ │ │ │ -258 ::new (__e) _Ex2(__ex); │ │ │ │ -259 return _e_x_c_e_p_t_i_o_n___p_t_r(__e); │ │ │ │ -260 } │ │ │ │ -261 __catch(...) │ │ │ │ -262 { │ │ │ │ -263 __cxxabiv1::__cxa_free_exception(__e); │ │ │ │ -264 return _c_u_r_r_e_n_t___e_x_c_e_p_t_i_o_n(); │ │ │ │ -265 } │ │ │ │ -266#else │ │ │ │ -267 try │ │ │ │ -268 { │ │ │ │ -269 throw __ex; │ │ │ │ -270 } │ │ │ │ -271 catch(...) │ │ │ │ -272 { │ │ │ │ -273 return _c_u_r_r_e_n_t___e_x_c_e_p_t_i_o_n(); │ │ │ │ -274 } │ │ │ │ -275#endif │ │ │ │ -276 } │ │ │ │ -277#else // no RTTI and no exceptions │ │ │ │ -278 // This is always_inline so the linker will never use this useless │ │ │ │ -definition │ │ │ │ -279 // instead of a working one compiled with RTTI and/or exceptions enabled. │ │ │ │ -280 template │ │ │ │ -281 __attribute__ ((__always_inline__)) │ │ │ │ -282 inline _e_x_c_e_p_t_i_o_n___p_t_r │ │ │ │ -283 _m_a_k_e___e_x_c_e_p_t_i_o_n___p_t_r(_Ex) _GLIBCXX_USE_NOEXCEPT │ │ │ │ -284 { return _e_x_c_e_p_t_i_o_n___p_t_r(); } │ │ │ │ -285#endif │ │ │ │ -286 │ │ │ │ -287#undef _GLIBCXX_EH_PTR_USED │ │ │ │ -288 │ │ │ │ -289 /// @} group exceptions │ │ │ │ -290} // namespace std │ │ │ │ -291 │ │ │ │ -292} // extern "C++" │ │ │ │ -293 │ │ │ │ -294#endif │ │ │ │ -_n_e_w │ │ │ │ -_t_y_p_e_i_n_f_o │ │ │ │ -_e_x_c_e_p_t_i_o_n___d_e_f_i_n_e_s_._h │ │ │ │ -_c_x_x_a_b_i___i_n_i_t___e_x_c_e_p_t_i_o_n_._h │ │ │ │ -_m_o_v_e_._h │ │ │ │ -_c_+_+_c_o_n_f_i_g_._h │ │ │ │ -_s_t_d_:_:_c_u_r_r_e_n_t___e_x_c_e_p_t_i_o_n │ │ │ │ -exception_ptr current_exception() noexcept │ │ │ │ -_s_t_d_:_:_m_a_k_e___e_x_c_e_p_t_i_o_n___p_t_r │ │ │ │ -exception_ptr make_exception_ptr(_Ex) noexcept │ │ │ │ -Obtain an exception_ptr pointing to a copy of the supplied object. │ │ │ │ -DDeeffiinniittiioonn _e_x_c_e_p_t_i_o_n___p_t_r_._h_:_2_4_8 │ │ │ │ -_s_t_d_:_:_r_e_t_h_r_o_w___e_x_c_e_p_t_i_o_n │ │ │ │ -void rethrow_exception(exception_ptr) │ │ │ │ -Throw the object pointed to by the exception_ptr. │ │ │ │ +218 /** Returns the number of elements in the %stack. */ │ │ │ │ +219 _GLIBCXX_NODISCARD │ │ │ │ +220 _s_i_z_e___t_y_p_e │ │ │ │ +_2_2_1 _s_i_z_e() const │ │ │ │ +222 { return c.size(); } │ │ │ │ +223 │ │ │ │ +224 /** │ │ │ │ +225 * Returns a read/write reference to the data at the first │ │ │ │ +226 * element of the %stack. │ │ │ │ +227 */ │ │ │ │ +228 _GLIBCXX_NODISCARD │ │ │ │ +229 reference │ │ │ │ +_2_3_0 _t_o_p() │ │ │ │ +231 { │ │ │ │ +232 __glibcxx_requires_nonempty(); │ │ │ │ +233 return c.back(); │ │ │ │ +234 } │ │ │ │ +235 │ │ │ │ +236 /** │ │ │ │ +237 * Returns a read-only (constant) reference to the data at the first │ │ │ │ +238 * element of the %stack. │ │ │ │ +239 */ │ │ │ │ +240 _GLIBCXX_NODISCARD │ │ │ │ +241 const_reference │ │ │ │ +_2_4_2 _t_o_p() const │ │ │ │ +243 { │ │ │ │ +244 __glibcxx_requires_nonempty(); │ │ │ │ +245 return c.back(); │ │ │ │ +246 } │ │ │ │ +247 │ │ │ │ +248 /** │ │ │ │ +249 * @brief Add data to the top of the %stack. │ │ │ │ +250 * @param __x Data to be added. │ │ │ │ +251 * │ │ │ │ +252 * This is a typical %stack operation. The function creates an │ │ │ │ +253 * element at the top of the %stack and assigns the given data │ │ │ │ +254 * to it. The time complexity of the operation depends on the │ │ │ │ +255 * underlying sequence. │ │ │ │ +256 */ │ │ │ │ +257 void │ │ │ │ +_2_5_8 _p_u_s_h(const value_type& __x) │ │ │ │ +259 { c.push_back(__x); } │ │ │ │ +260 │ │ │ │ +261#if __cplusplus >= 201103L │ │ │ │ +262 void │ │ │ │ +263 _p_u_s_h(_v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ +264 { c.push_back(_s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ +265 │ │ │ │ +266#if __cplusplus > 201402L │ │ │ │ +267 template │ │ │ │ +268 decltype(auto) │ │ │ │ +269 emplace(_Args&&... __args) │ │ │ │ +270 { return c.emplace_back(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ +271#else │ │ │ │ +272 template │ │ │ │ +273 void │ │ │ │ +274 emplace(_Args&&... __args) │ │ │ │ +275 { c.emplace_back(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ +276#endif │ │ │ │ +277#endif │ │ │ │ +278 │ │ │ │ +279 /** │ │ │ │ +280 * @brief Removes first element. │ │ │ │ +281 * │ │ │ │ +282 * This is a typical %stack operation. It shrinks the %stack │ │ │ │ +283 * by one. The time complexity of the operation depends on the │ │ │ │ +284 * underlying sequence. │ │ │ │ +285 * │ │ │ │ +286 * Note that no data is returned, and if the first element's │ │ │ │ +287 * data is needed, it should be retrieved before pop() is │ │ │ │ +288 * called. │ │ │ │ +289 */ │ │ │ │ +290 void │ │ │ │ +_2_9_1 _p_o_p() │ │ │ │ +292 { │ │ │ │ +293 __glibcxx_requires_nonempty(); │ │ │ │ +294 c.pop_back(); │ │ │ │ +295 } │ │ │ │ +296 │ │ │ │ +297#if __cplusplus >= 201103L │ │ │ │ +298 void │ │ │ │ +299 swap(_s_t_a_c_k& __s) │ │ │ │ +300#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 │ │ │ │ +301 noexcept(__is_nothrow_swappable<_Sequence>::value) │ │ │ │ +302#else │ │ │ │ +303 noexcept(__is_nothrow_swappable<_Tp>::value) │ │ │ │ +304#endif │ │ │ │ +305 { │ │ │ │ +306 using std::swap; │ │ │ │ +307 swap(c, __s.c); │ │ │ │ +308 } │ │ │ │ +309#endif // __cplusplus >= 201103L │ │ │ │ +310 }; │ │ │ │ +311 │ │ │ │ +312#if __cpp_deduction_guides >= 201606 │ │ │ │ +313 template> │ │ │ │ +315 _s_t_a_c_k(_Container) -> _s_t_a_c_k_<_t_y_p_e_n_a_m_e_ ___C_o_n_t_a_i_n_e_r_:_:_v_a_l_u_e___t_y_p_e_,_ ___C_o_n_t_a_i_n_e_r_>; │ │ │ │ +316 │ │ │ │ +317 template> │ │ │ │ +319 _s_t_a_c_k(_Container, _Allocator) │ │ │ │ +320 -> _s_t_a_c_k_<_t_y_p_e_n_a_m_e_ ___C_o_n_t_a_i_n_e_r_:_:_v_a_l_u_e___t_y_p_e_,_ ___C_o_n_t_a_i_n_e_r_>; │ │ │ │ +321 │ │ │ │ +322#ifdef __glibcxx_adaptor_iterator_pair_constructor │ │ │ │ +323 template_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ +326 typename = _RequireInputIter<_InputIterator>> │ │ │ │ +327 _s_t_a_c_k(_InputIterator, _InputIterator) -> _s_t_a_c_k_<___V_a_l_T_>; │ │ │ │ +328 │ │ │ │ +329 template_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ +332 typename = _RequireInputIter<_InputIterator>, │ │ │ │ +333 typename = _RequireAllocator<_Allocator>> │ │ │ │ +334 _s_t_a_c_k(_InputIterator, _InputIterator, _Allocator) │ │ │ │ +335 -> _s_t_a_c_k_<___V_a_l_T_,_ _d_e_q_u_e_<___V_a_l_T_,_ ___A_l_l_o_c_a_t_o_r_>>; │ │ │ │ +336#endif │ │ │ │ +337#endif │ │ │ │ +338 │ │ │ │ +339 /** │ │ │ │ +340 * @brief Stack equality comparison. │ │ │ │ +341 * @param __x A %stack. │ │ │ │ +342 * @param __y A %stack of the same type as @a __x. │ │ │ │ +343 * @return True iff the size and elements of the stacks are equal. │ │ │ │ +344 * │ │ │ │ +345 * This is an equivalence relation. Complexity and semantics │ │ │ │ +346 * depend on the underlying sequence type, but the expected rules │ │ │ │ +347 * are: this relation is linear in the size of the sequences, and │ │ │ │ +348 * stacks are considered equivalent if their sequences compare │ │ │ │ +349 * equal. │ │ │ │ +350 */ │ │ │ │ +351 template │ │ │ │ +352 _GLIBCXX_NODISCARD │ │ │ │ +353 inline bool │ │ │ │ +_3_5_4 operator==(const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __x, const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +355 { return __x.c == __y.c; } │ │ │ │ +356 │ │ │ │ +357 /** │ │ │ │ +358 * @brief Stack ordering relation. │ │ │ │ +359 * @param __x A %stack. │ │ │ │ +360 * @param __y A %stack of the same type as @a x. │ │ │ │ +361 * @return True iff @a x is lexicographically less than @a __y. │ │ │ │ +362 * │ │ │ │ +363 * This is an total ordering relation. Complexity and semantics │ │ │ │ +364 * depend on the underlying sequence type, but the expected rules │ │ │ │ +365 * are: this relation is linear in the size of the sequences, the │ │ │ │ +366 * elements must be comparable with @c <, and │ │ │ │ +367 * std::lexicographical_compare() is usually used to make the │ │ │ │ +368 * determination. │ │ │ │ +369 */ │ │ │ │ +370 template │ │ │ │ +371 _GLIBCXX_NODISCARD │ │ │ │ +_3_7_2 inline bool │ │ │ │ +373 operator<(const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __x, const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +374 { return __x.c < __y.c; } │ │ │ │ +375 │ │ │ │ +376 /// Based on operator== │ │ │ │ +377 template │ │ │ │ +378 _GLIBCXX_NODISCARD │ │ │ │ +379 inline bool │ │ │ │ +_3_8_0 operator!=(const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __x, const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +381 { return !(__x == __y); } │ │ │ │ +382 │ │ │ │ +383 /// Based on operator< │ │ │ │ +384 template │ │ │ │ +385 _GLIBCXX_NODISCARD │ │ │ │ +386 inline bool │ │ │ │ +_3_8_7 operator>(const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __x, const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +388 { return __y < __x; } │ │ │ │ +389 │ │ │ │ +390 /// Based on operator< │ │ │ │ +391 template │ │ │ │ +392 _GLIBCXX_NODISCARD │ │ │ │ +_3_9_3 inline bool │ │ │ │ +394 operator<=(const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __x, const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +395 { return !(__y < __x); } │ │ │ │ +396 │ │ │ │ +397 /// Based on operator< │ │ │ │ +398 template │ │ │ │ +399 _GLIBCXX_NODISCARD │ │ │ │ +400 inline bool │ │ │ │ +_4_0_1 operator>=(const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __x, const _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +402 { return !(__x < __y); } │ │ │ │ +403 │ │ │ │ +404#if __cpp_lib_three_way_comparison │ │ │ │ +405 template │ │ │ │ +406 [[nodiscard]] │ │ │ │ +407 inline _c_o_m_p_a_r_e___t_h_r_e_e___w_a_y___r_e_s_u_l_t___t_<___S_e_q_> │ │ │ │ +408 operator<=>(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y) │ │ │ │ +409 { return __x.c <=> __y.c; } │ │ │ │ +410#endif │ │ │ │ +411 │ │ │ │ +412#if __cplusplus >= 201103L │ │ │ │ +413 template │ │ │ │ +414 inline │ │ │ │ +415#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 │ │ │ │ +416 // Constrained free swap overload, see p0185r1 │ │ │ │ +417 typename _e_n_a_b_l_e___i_f_<_____i_s___s_w_a_p_p_a_b_l_e_<___S_e_q_>_:_:_v_a_l_u_e>::type │ │ │ │ +418#else │ │ │ │ +419 void │ │ │ │ +420#endif │ │ │ │ +421 swap(_s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __x, _s_t_a_c_k_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +422 noexcept(noexcept(__x.swap(__y))) │ │ │ │ +423 { __x.swap(__y); } │ │ │ │ +424 │ │ │ │ +425 template │ │ │ │ +426 struct _u_s_e_s___a_l_l_o_c_a_t_o_r<_s_t_a_c_k<_Tp, _Seq>, _Alloc> │ │ │ │ +427 : public _u_s_e_s___a_l_l_o_c_a_t_o_r<_Seq, _Alloc>::type { }; │ │ │ │ +428#endif // __cplusplus >= 201103L │ │ │ │ +429 │ │ │ │ +430_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +431} // namespace │ │ │ │ +432 │ │ │ │ +433#endif /* _STL_STACK_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_:_:_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 │ │ │ │ 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 │ │ │ │ -_s_t_d_:_:_____u_n_s_p_e_c_i_f_i_e_d_____:_:_e_x_c_e_p_t_i_o_n___p_t_r │ │ │ │ -An opaque pointer to an arbitrary exception. │ │ │ │ -DDeeffiinniittiioonn _e_x_c_e_p_t_i_o_n___p_t_r_._h_:_9_8 │ │ │ │ -_s_t_d_:_:_e_x_c_e_p_t_i_o_n___p_t_r │ │ │ │ -An opaque pointer to an arbitrary exception. │ │ │ │ -DDeeffiinniittiioonn _e_x_c_e_p_t_i_o_n___p_t_r_._h_:_9_8 │ │ │ │ +_s_t_d_:_:_c_o_m_p_a_r_e___t_h_r_e_e___w_a_y___r_e_s_u_l_t___t │ │ │ │ +typename __detail::__cmp3way_res_impl< _Tp, _Up >::type │ │ │ │ +compare_three_way_result_t │ │ │ │ +[cmp.result], result of three-way comparison │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_a_r_e_:_5_1_8 │ │ │ │ +_s_t_d_:_:_e_n_a_b_l_e___i_f │ │ │ │ +Define a member typedef type only if a boolean constant is true. │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_2_9 │ │ │ │ +_s_t_d_:_:_i_s___s_a_m_e │ │ │ │ +is_same │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_4_7_6 │ │ │ │ +_s_t_d_:_:_t_y_p_e │ │ │ │ +_s_t_d_:_:_s_i_z_e___t_y_p_e │ │ │ │ +_s_t_d_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ +_s_t_d_:_:_u_s_e_s___a_l_l_o_c_a_t_o_r │ │ │ │ +Declare uses_allocator so it can be specialized in etc. │ │ │ │ +DDeeffiinniittiioonn _m_e_m_o_r_y_f_w_d_._h_:_7_3 │ │ │ │ +_s_t_d_:_:_s_t_a_c_k │ │ │ │ +A standard container giving FILO behavior. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___s_t_a_c_k_._h_:_1_0_0 │ │ │ │ +_s_t_d_:_:_s_t_a_c_k_:_:_p_o_p │ │ │ │ +void pop() │ │ │ │ +Removes first element. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___s_t_a_c_k_._h_:_2_9_1 │ │ │ │ +_s_t_d_:_:_s_t_a_c_k_:_:_s_i_z_e │ │ │ │ +size_type size() const │ │ │ │ +DDeeffiinniittiioonn _s_t_l___s_t_a_c_k_._h_:_2_2_1 │ │ │ │ +_s_t_d_:_:_s_t_a_c_k_:_:_p_u_s_h │ │ │ │ +void push(const value_type &__x) │ │ │ │ +Add data to the top of the stack. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___s_t_a_c_k_._h_:_2_5_8 │ │ │ │ +_s_t_d_:_:_s_t_a_c_k_:_:_e_m_p_t_y │ │ │ │ +bool empty() const │ │ │ │ +DDeeffiinniittiioonn _s_t_l___s_t_a_c_k_._h_:_2_1_5 │ │ │ │ +_s_t_d_:_:_s_t_a_c_k_:_:_t_o_p │ │ │ │ +const_reference top() const │ │ │ │ +DDeeffiinniittiioonn _s_t_l___s_t_a_c_k_._h_:_2_4_2 │ │ │ │ +_s_t_d_:_:_s_t_a_c_k_:_:_s_t_a_c_k │ │ │ │ +stack() │ │ │ │ +Default constructor creates no elements. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___s_t_a_c_k_._h_:_1_6_2 │ │ │ │ +_s_t_d_:_:_s_t_a_c_k_:_:_t_o_p │ │ │ │ +reference top() │ │ │ │ +DDeeffiinniittiioonn _s_t_l___s_t_a_c_k_._h_:_2_3_0 │ │ │ │ * bbiittss │ │ │ │ - * _e_x_c_e_p_t_i_o_n___p_t_r_._h │ │ │ │ + * _s_t_l___s_t_a_c_k_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00350.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: exception_defines.h File Reference │ │ │ +libstdc++: stl_numeric.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,79 +48,70 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
exception_defines.h File Reference
│ │ │ +
stl_numeric.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ +Namespaces

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

│ │ │ Macros

#define __catch(X)
#define __throw_exception_again
#define __try
#define _GLIBCXX_MOVE_IF_20(_E)
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ +Functions

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

Detailed Description

│ │ │ -

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

│ │ │ +

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

│ │ │ │ │ │ -

Definition in file exception_defines.h.

│ │ │ +

Definition in file stl_numeric.h.

│ │ │

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ __catch

│ │ │ + │ │ │ +

◆ _GLIBCXX_MOVE_IF_20

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

Definition at line 41 of file exception_defines.h.

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

◆ __throw_exception_again

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

Definition at line 42 of file exception_defines.h.

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

◆ __try

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

Definition at line 40 of file exception_defines.h.

│ │ │ +

Definition at line 112 of file stl_numeric.h.

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

Go to the source code of this file.

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

│ │ │ -Classes

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

│ │ │ Namespaces

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

│ │ │ +Functions

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

Detailed Description

│ │ │ -

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

│ │ │ +

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

│ │ │ │ │ │ -

Definition in file exception.h.

│ │ │ +

Definition in file regex.tcc.

│ │ │
│ │ │
│ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,14 +1,20 @@ │ │ │ │ libstdc++ │ │ │ │ -exception.h File Reference │ │ │ │ +regex.tcc File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -CCllaasssseess │ │ │ │ -class   _s_t_d_:_:_e_x_c_e_p_t_i_o_n │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ +namespace   _s_t_d_:_:_____d_e_t_a_i_l │ │ │ │ +FFuunnccttiioonnss │ │ │ │ +template │ │ │ │ +_Out_iter  _s_t_d_:_:_____r_e_g_e_x___r_e_p_l_a_c_e (_Out_iter __out, _Bi_iter __first, _Bi_iter │ │ │ │ + __last, const _b_a_s_i_c___r_e_g_e_x< _Ch_type, _Rx_traits > &__e, const │ │ │ │ + _Ch_type *__fmt, size_t __len, _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___f_l_a_g___t_y_p_e │ │ │ │ + __flags) │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. │ │ │ │ -Definition in file _e_x_c_e_p_t_i_o_n_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _r_e_g_e_x_._t_c_c. │ │ │ │ * bbiittss │ │ │ │ - * _e_x_c_e_p_t_i_o_n_._h │ │ │ │ + * _r_e_g_e_x_._t_c_c │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00353_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: exception.h Source File │ │ │ +libstdc++: regex.tcc Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,110 +48,745 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
exception.h
│ │ │ +
regex.tcc
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// Exception Handling support header for -*- C++ -*-
│ │ │ +Go to the documentation of this file.
1// class template regex -*- C++ -*-
│ │ │
2
│ │ │ -
3// Copyright (C) 2016-2024 Free Software Foundation, Inc.
│ │ │ +
3// Copyright (C) 2013-2024 Free Software Foundation, Inc.
│ │ │
4//
│ │ │ -
5// This file is part of GCC.
│ │ │ -
6//
│ │ │ -
7// GCC is free software; you can redistribute it and/or modify
│ │ │ -
8// it under the terms of the GNU General Public License as published by
│ │ │ -
9// the Free Software Foundation; either version 3, or (at your option)
│ │ │ -
10// any later version.
│ │ │ -
11//
│ │ │ -
12// GCC is distributed in the hope that it will be useful,
│ │ │ -
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
│ │ │ -
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
│ │ │ -
15// GNU General Public License for more details.
│ │ │ -
16//
│ │ │ -
17// Under Section 7 of GPL version 3, you are granted additional
│ │ │ -
18// permissions described in the GCC Runtime Library Exception, version
│ │ │ -
19// 3.1, as published by the Free Software Foundation.
│ │ │ -
20
│ │ │ -
21// You should have received a copy of the GNU General Public License and
│ │ │ -
22// a copy of the GCC Runtime Library Exception along with this program;
│ │ │ -
23// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │ -
24// <http://www.gnu.org/licenses/>.
│ │ │ -
25
│ │ │ -
26/** @file bits/exception.h
│ │ │ +
5// This file is part of the GNU ISO C++ Library. This library is free
│ │ │ +
6// software; you can redistribute it and/or modify it under the
│ │ │ +
7// terms of the GNU General Public License as published by the
│ │ │ +
8// Free Software Foundation; either version 3, or (at your option)
│ │ │ +
9// any later version.
│ │ │ +
10
│ │ │ +
11// This library is distributed in the hope that it will be useful,
│ │ │ +
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
│ │ │ +
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
│ │ │ +
14// GNU General Public License for more details.
│ │ │ +
15
│ │ │ +
16// Under Section 7 of GPL version 3, you are granted additional
│ │ │ +
17// permissions described in the GCC Runtime Library Exception, version
│ │ │ +
18// 3.1, as published by the Free Software Foundation.
│ │ │ +
19
│ │ │ +
20// You should have received a copy of the GNU General Public License and
│ │ │ +
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │ +
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │ +
23// <http://www.gnu.org/licenses/>.
│ │ │ +
24
│ │ │ +
25/**
│ │ │ +
26 * @file bits/regex.tcc
│ │ │
27 * This is an internal header file, included by other library headers.
│ │ │ -
28 * Do not attempt to use it directly.
│ │ │ +
28 * Do not attempt to use it directly. @headername{regex}
│ │ │
29 */
│ │ │
30
│ │ │ -
31#ifndef __EXCEPTION_H
│ │ │ -
32#define __EXCEPTION_H 1
│ │ │ -
33
│ │ │ -
34#pragma GCC system_header
│ │ │ -
35
│ │ │ -
36#include <bits/c++config.h>
│ │ │ -
37
│ │ │ -
38extern "C++" {
│ │ │ -
39
│ │ │ -
40namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ -
41{
│ │ │ -
42 /**
│ │ │ -
43 * @defgroup exceptions Exceptions
│ │ │ -
44 * @ingroup diagnostics
│ │ │ -
45 * @since C++98
│ │ │ -
46 *
│ │ │ -
47 * Classes and functions for reporting errors via exceptions.
│ │ │ -
48 * @{
│ │ │ -
49 */
│ │ │ -
50
│ │ │ -
51 /**
│ │ │ -
52 * @brief Base class for all library exceptions.
│ │ │ -
53 *
│ │ │ -
54 * This is the base class for all exceptions thrown by the standard
│ │ │ -
55 * library, and by certain language expressions. You are free to derive
│ │ │ -
56 * your own %exception classes, or use a different hierarchy, or to
│ │ │ -
57 * throw non-class data (e.g., fundamental types).
│ │ │ -
58 */
│ │ │ -
│ │ │ -
59 class exception
│ │ │ -
60 {
│ │ │ -
61 public:
│ │ │ -
62 exception() _GLIBCXX_NOTHROW { }
│ │ │ -
63 virtual ~exception() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
│ │ │ -
64#if __cplusplus >= 201103L
│ │ │ -
65 exception(const exception&) = default;
│ │ │ -
66 exception& operator=(const exception&) = default;
│ │ │ -
67 exception(exception&&) = default;
│ │ │ -
68 exception& operator=(exception&&) = default;
│ │ │ -
69#endif
│ │ │ -
70
│ │ │ -
71 /** Returns a C-style character string describing the general cause
│ │ │ -
72 * of the current error. */
│ │ │ -
73 virtual const char*
│ │ │ -
74 what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
│ │ │ -
75 };
│ │ │ -
│ │ │ -
76
│ │ │ -
77 /// @}
│ │ │ -
78
│ │ │ -
79} // namespace std
│ │ │ -
80
│ │ │ -
81}
│ │ │ -
82
│ │ │ -
83#endif
│ │ │ - │ │ │ +
31namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
32{
│ │ │ +
33_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
34
│ │ │ +
35namespace __detail
│ │ │ +
36{
│ │ │ +
37 /// @cond undocumented
│ │ │ +
38
│ │ │ +
39 // Result of merging regex_match and regex_search.
│ │ │ +
40 //
│ │ │ +
41 // __policy now can be _S_auto (auto dispatch) and _S_alternate (use
│ │ │ +
42 // the other one if possible, for test purpose).
│ │ │ +
43 //
│ │ │ +
44 // That __match_mode is true means regex_match, else regex_search.
│ │ │ +
45 template<typename _BiIter, typename _Alloc,
│ │ │ +
46 typename _CharT, typename _TraitsT>
│ │ │ +
47 bool
│ │ │ +
48 __regex_algo_impl(_BiIter __s,
│ │ │ +
49 _BiIter __e,
│ │ │ +
50 match_results<_BiIter, _Alloc>& __m,
│ │ │ +
51 const basic_regex<_CharT, _TraitsT>& __re,
│ │ │ + │ │ │ +
53 _RegexExecutorPolicy __policy,
│ │ │ +
54 bool __match_mode)
│ │ │ +
55 {
│ │ │ +
56 if (__re._M_automaton == nullptr)
│ │ │ +
57 return false;
│ │ │ +
58
│ │ │ +
59 typename match_results<_BiIter, _Alloc>::_Unchecked& __res = __m;
│ │ │ +
60 __m._M_begin = __s;
│ │ │ +
61 __m._M_resize(__re._M_automaton->_M_sub_count());
│ │ │ +
62
│ │ │ +
63 bool __ret;
│ │ │ +
64 if ((__re.flags() & regex_constants::__polynomial)
│ │ │ +
65 || (__policy == _RegexExecutorPolicy::_S_alternate
│ │ │ +
66 && !__re._M_automaton->_M_has_backref))
│ │ │ +
67 {
│ │ │ + │ │ │ +
69 __executor(__s, __e, __res, __re, __flags);
│ │ │ +
70 if (__match_mode)
│ │ │ +
71 __ret = __executor._M_match();
│ │ │ +
72 else
│ │ │ +
73 __ret = __executor._M_search();
│ │ │ +
74 }
│ │ │ +
75 else
│ │ │ +
76 {
│ │ │ + │ │ │ +
78 __executor(__s, __e, __res, __re, __flags);
│ │ │ +
79 if (__match_mode)
│ │ │ +
80 __ret = __executor._M_match();
│ │ │ +
81 else
│ │ │ +
82 __ret = __executor._M_search();
│ │ │ +
83 }
│ │ │ +
84 if (__ret)
│ │ │ +
85 {
│ │ │ +
86 for (auto& __it : __res)
│ │ │ +
87 if (!__it.matched)
│ │ │ +
88 __it.first = __it.second = __e;
│ │ │ +
89 auto& __pre = __m._M_prefix();
│ │ │ +
90 auto& __suf = __m._M_suffix();
│ │ │ +
91 if (__match_mode)
│ │ │ +
92 {
│ │ │ +
93 __pre.matched = false;
│ │ │ +
94 __pre.first = __s;
│ │ │ +
95 __pre.second = __s;
│ │ │ +
96 __suf.matched = false;
│ │ │ +
97 __suf.first = __e;
│ │ │ +
98 __suf.second = __e;
│ │ │ +
99 }
│ │ │ +
100 else
│ │ │ +
101 {
│ │ │ +
102 __pre.first = __s;
│ │ │ +
103 __pre.second = __res[0].first;
│ │ │ +
104 __pre.matched = (__pre.first != __pre.second);
│ │ │ +
105 __suf.first = __res[0].second;
│ │ │ +
106 __suf.second = __e;
│ │ │ +
107 __suf.matched = (__suf.first != __suf.second);
│ │ │ +
108 }
│ │ │ +
109 }
│ │ │ +
110 else
│ │ │ +
111 {
│ │ │ +
112 __m._M_establish_failed_match(__e);
│ │ │ +
113 }
│ │ │ +
114 return __ret;
│ │ │ +
115 }
│ │ │ +
116 /// @endcond
│ │ │ +
117} // namespace __detail
│ │ │ +
118
│ │ │ +
119 template<typename _Ch_type>
│ │ │ +
120 template<typename _Fwd_iter>
│ │ │ +
121 typename regex_traits<_Ch_type>::string_type
│ │ │ +
│ │ │ + │ │ │ +
123 lookup_collatename(_Fwd_iter __first, _Fwd_iter __last) const
│ │ │ +
124 {
│ │ │ +
125 typedef std::ctype<char_type> __ctype_type;
│ │ │ +
126 const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
│ │ │ +
127
│ │ │ +
128 static const char* __collatenames[] =
│ │ │ +
129 {
│ │ │ +
130 "NUL",
│ │ │ +
131 "SOH",
│ │ │ +
132 "STX",
│ │ │ +
133 "ETX",
│ │ │ +
134 "EOT",
│ │ │ +
135 "ENQ",
│ │ │ +
136 "ACK",
│ │ │ +
137 "alert",
│ │ │ +
138 "backspace",
│ │ │ +
139 "tab",
│ │ │ +
140 "newline",
│ │ │ +
141 "vertical-tab",
│ │ │ +
142 "form-feed",
│ │ │ +
143 "carriage-return",
│ │ │ +
144 "SO",
│ │ │ +
145 "SI",
│ │ │ +
146 "DLE",
│ │ │ +
147 "DC1",
│ │ │ +
148 "DC2",
│ │ │ +
149 "DC3",
│ │ │ +
150 "DC4",
│ │ │ +
151 "NAK",
│ │ │ +
152 "SYN",
│ │ │ +
153 "ETB",
│ │ │ +
154 "CAN",
│ │ │ +
155 "EM",
│ │ │ +
156 "SUB",
│ │ │ +
157 "ESC",
│ │ │ +
158 "IS4",
│ │ │ +
159 "IS3",
│ │ │ +
160 "IS2",
│ │ │ +
161 "IS1",
│ │ │ +
162 "space",
│ │ │ +
163 "exclamation-mark",
│ │ │ +
164 "quotation-mark",
│ │ │ +
165 "number-sign",
│ │ │ +
166 "dollar-sign",
│ │ │ +
167 "percent-sign",
│ │ │ +
168 "ampersand",
│ │ │ +
169 "apostrophe",
│ │ │ +
170 "left-parenthesis",
│ │ │ +
171 "right-parenthesis",
│ │ │ +
172 "asterisk",
│ │ │ +
173 "plus-sign",
│ │ │ +
174 "comma",
│ │ │ +
175 "hyphen",
│ │ │ +
176 "period",
│ │ │ +
177 "slash",
│ │ │ +
178 "zero",
│ │ │ +
179 "one",
│ │ │ +
180 "two",
│ │ │ +
181 "three",
│ │ │ +
182 "four",
│ │ │ +
183 "five",
│ │ │ +
184 "six",
│ │ │ +
185 "seven",
│ │ │ +
186 "eight",
│ │ │ +
187 "nine",
│ │ │ +
188 "colon",
│ │ │ +
189 "semicolon",
│ │ │ +
190 "less-than-sign",
│ │ │ +
191 "equals-sign",
│ │ │ +
192 "greater-than-sign",
│ │ │ +
193 "question-mark",
│ │ │ +
194 "commercial-at",
│ │ │ +
195 "A",
│ │ │ +
196 "B",
│ │ │ +
197 "C",
│ │ │ +
198 "D",
│ │ │ +
199 "E",
│ │ │ +
200 "F",
│ │ │ +
201 "G",
│ │ │ +
202 "H",
│ │ │ +
203 "I",
│ │ │ +
204 "J",
│ │ │ +
205 "K",
│ │ │ +
206 "L",
│ │ │ +
207 "M",
│ │ │ +
208 "N",
│ │ │ +
209 "O",
│ │ │ +
210 "P",
│ │ │ +
211 "Q",
│ │ │ +
212 "R",
│ │ │ +
213 "S",
│ │ │ +
214 "T",
│ │ │ +
215 "U",
│ │ │ +
216 "V",
│ │ │ +
217 "W",
│ │ │ +
218 "X",
│ │ │ +
219 "Y",
│ │ │ +
220 "Z",
│ │ │ +
221 "left-square-bracket",
│ │ │ +
222 "backslash",
│ │ │ +
223 "right-square-bracket",
│ │ │ +
224 "circumflex",
│ │ │ +
225 "underscore",
│ │ │ +
226 "grave-accent",
│ │ │ +
227 "a",
│ │ │ +
228 "b",
│ │ │ +
229 "c",
│ │ │ +
230 "d",
│ │ │ +
231 "e",
│ │ │ +
232 "f",
│ │ │ +
233 "g",
│ │ │ +
234 "h",
│ │ │ +
235 "i",
│ │ │ +
236 "j",
│ │ │ +
237 "k",
│ │ │ +
238 "l",
│ │ │ +
239 "m",
│ │ │ +
240 "n",
│ │ │ +
241 "o",
│ │ │ +
242 "p",
│ │ │ +
243 "q",
│ │ │ +
244 "r",
│ │ │ +
245 "s",
│ │ │ +
246 "t",
│ │ │ +
247 "u",
│ │ │ +
248 "v",
│ │ │ +
249 "w",
│ │ │ +
250 "x",
│ │ │ +
251 "y",
│ │ │ +
252 "z",
│ │ │ +
253 "left-curly-bracket",
│ │ │ +
254 "vertical-line",
│ │ │ +
255 "right-curly-bracket",
│ │ │ +
256 "tilde",
│ │ │ +
257 "DEL",
│ │ │ +
258 };
│ │ │ +
259
│ │ │ +
260 string __s;
│ │ │ +
261 for (; __first != __last; ++__first)
│ │ │ +
262 __s += __fctyp.narrow(*__first, 0);
│ │ │ +
263
│ │ │ +
264 for (const auto& __it : __collatenames)
│ │ │ +
265 if (__s == __it)
│ │ │ +
266 return string_type(1, __fctyp.widen(
│ │ │ +
267 static_cast<char>(&__it - __collatenames)));
│ │ │ +
268
│ │ │ +
269 // TODO Add digraph support:
│ │ │ +
270 // http://boost.sourceforge.net/libs/regex/doc/collating_names.html
│ │ │ +
271
│ │ │ +
272 return string_type();
│ │ │ +
273 }
│ │ │ +
│ │ │ +
274
│ │ │ +
275 template<typename _Ch_type>
│ │ │ +
276 template<typename _Fwd_iter>
│ │ │ +
277 typename regex_traits<_Ch_type>::char_class_type
│ │ │ +
│ │ │ + │ │ │ +
279 lookup_classname(_Fwd_iter __first, _Fwd_iter __last, bool __icase) const
│ │ │ +
280 {
│ │ │ +
281 typedef std::ctype<char_type> __ctype_type;
│ │ │ +
282 const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
│ │ │ +
283
│ │ │ +
284 // Mappings from class name to class mask.
│ │ │ +
285 static const pair<const char*, char_class_type> __classnames[] =
│ │ │ +
286 {
│ │ │ +
287 {"d", ctype_base::digit},
│ │ │ +
288 {"w", {ctype_base::alnum, _RegexMask::_S_under}},
│ │ │ +
289 {"s", ctype_base::space},
│ │ │ +
290 {"alnum", ctype_base::alnum},
│ │ │ +
291 {"alpha", ctype_base::alpha},
│ │ │ +
292 {"blank", ctype_base::blank},
│ │ │ +
293 {"cntrl", ctype_base::cntrl},
│ │ │ +
294 {"digit", ctype_base::digit},
│ │ │ +
295 {"graph", ctype_base::graph},
│ │ │ +
296 {"lower", ctype_base::lower},
│ │ │ +
297 {"print", ctype_base::print},
│ │ │ +
298 {"punct", ctype_base::punct},
│ │ │ +
299 {"space", ctype_base::space},
│ │ │ +
300 {"upper", ctype_base::upper},
│ │ │ +
301 {"xdigit", ctype_base::xdigit},
│ │ │ +
302 };
│ │ │ +
303
│ │ │ +
304 string __s;
│ │ │ +
305 for (; __first != __last; ++__first)
│ │ │ +
306 __s += __fctyp.narrow(__fctyp.tolower(*__first), 0);
│ │ │ +
307
│ │ │ +
308 for (const auto& __it : __classnames)
│ │ │ +
309 if (__s == __it.first)
│ │ │ +
310 {
│ │ │ +
311 if (__icase
│ │ │ +
312 && ((__it.second
│ │ │ +
313 & (ctype_base::lower | ctype_base::upper)) != 0))
│ │ │ +
314 return ctype_base::alpha;
│ │ │ +
315 return __it.second;
│ │ │ +
316 }
│ │ │ +
317 return 0;
│ │ │ +
318 }
│ │ │ +
│ │ │ +
319
│ │ │ +
320 template<typename _Ch_type>
│ │ │ +
321 bool
│ │ │ +
│ │ │ + │ │ │ +
323 isctype(_Ch_type __c, char_class_type __f) const
│ │ │ +
324 {
│ │ │ +
325 typedef std::ctype<char_type> __ctype_type;
│ │ │ +
326 const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
│ │ │ +
327
│ │ │ +
328 return __fctyp.is(__f._M_base, __c)
│ │ │ +
329 // [[:w:]]
│ │ │ +
330 || ((__f._M_extended & _RegexMask::_S_under)
│ │ │ +
331 && __c == __fctyp.widen('_'));
│ │ │ +
332 }
│ │ │ +
│ │ │ +
333
│ │ │ +
334 template<typename _Ch_type>
│ │ │ +
335 int
│ │ │ +
│ │ │ + │ │ │ +
337 value(_Ch_type __ch, int __radix) const
│ │ │ +
338 {
│ │ │ +
339 std::basic_istringstream<char_type> __is(string_type(1, __ch));
│ │ │ +
340 long __v;
│ │ │ +
341 if (__radix == 8)
│ │ │ +
342 __is >> std::oct;
│ │ │ +
343 else if (__radix == 16)
│ │ │ +
344 __is >> std::hex;
│ │ │ +
345 __is >> __v;
│ │ │ +
346 return __is.fail() ? -1 : __v;
│ │ │ +
347 }
│ │ │ +
│ │ │ +
348
│ │ │ +
349 template<typename _Bi_iter, typename _Alloc>
│ │ │ +
350 template<typename _Out_iter>
│ │ │ +
351 _Out_iter
│ │ │ + │ │ │ +
353 format(_Out_iter __out,
│ │ │ +
354 const match_results<_Bi_iter, _Alloc>::char_type* __fmt_first,
│ │ │ +
355 const match_results<_Bi_iter, _Alloc>::char_type* __fmt_last,
│ │ │ +
356 match_flag_type __flags) const
│ │ │ +
357 {
│ │ │ +
358 __glibcxx_assert( ready() );
│ │ │ + │ │ │ +
360 typedef std::ctype<char_type> __ctype_type;
│ │ │ +
361 const __ctype_type&
│ │ │ +
362 __fctyp(use_facet<__ctype_type>(__traits.getloc()));
│ │ │ +
363
│ │ │ +
364 auto __output = [&](size_t __idx)
│ │ │ +
365 {
│ │ │ +
366 auto& __sub = (*this)[__idx];
│ │ │ +
367 if (__sub.matched)
│ │ │ +
368 __out = std::copy(__sub.first, __sub.second, __out);
│ │ │ +
369 };
│ │ │ +
370
│ │ │ +
371 if (__flags & regex_constants::format_sed)
│ │ │ +
372 {
│ │ │ +
373 bool __escaping = false;
│ │ │ +
374 for (; __fmt_first != __fmt_last; __fmt_first++)
│ │ │ +
375 {
│ │ │ +
376 if (__escaping)
│ │ │ +
377 {
│ │ │ +
378 __escaping = false;
│ │ │ +
379 if (__fctyp.is(__ctype_type::digit, *__fmt_first))
│ │ │ +
380 __output(__traits.value(*__fmt_first, 10));
│ │ │ +
381 else
│ │ │ +
382 *__out++ = *__fmt_first;
│ │ │ +
383 continue;
│ │ │ +
384 }
│ │ │ +
385 if (*__fmt_first == '\\')
│ │ │ +
386 {
│ │ │ +
387 __escaping = true;
│ │ │ +
388 continue;
│ │ │ +
389 }
│ │ │ +
390 if (*__fmt_first == '&')
│ │ │ +
391 {
│ │ │ +
392 __output(0);
│ │ │ +
393 continue;
│ │ │ +
394 }
│ │ │ +
395 *__out++ = *__fmt_first;
│ │ │ +
396 }
│ │ │ +
397 if (__escaping)
│ │ │ +
398 *__out++ = '\\';
│ │ │ +
399 }
│ │ │ +
400 else
│ │ │ +
401 {
│ │ │ +
402 while (1)
│ │ │ +
403 {
│ │ │ +
404 auto __next = std::find(__fmt_first, __fmt_last, '$');
│ │ │ +
405 if (__next == __fmt_last)
│ │ │ +
406 break;
│ │ │ +
407
│ │ │ +
408 __out = std::copy(__fmt_first, __next, __out);
│ │ │ +
409
│ │ │ +
410 auto __eat = [&](char __ch) -> bool
│ │ │ +
411 {
│ │ │ +
412 if (*__next == __ch)
│ │ │ +
413 {
│ │ │ +
414 ++__next;
│ │ │ +
415 return true;
│ │ │ +
416 }
│ │ │ +
417 return false;
│ │ │ +
418 };
│ │ │ +
419
│ │ │ +
420 if (++__next == __fmt_last)
│ │ │ +
421 *__out++ = '$';
│ │ │ +
422 else if (__eat('$'))
│ │ │ +
423 *__out++ = '$';
│ │ │ +
424 else if (__eat('&'))
│ │ │ +
425 __output(0);
│ │ │ +
426 else if (__eat('`'))
│ │ │ +
427 {
│ │ │ +
428 auto& __sub = _M_prefix();
│ │ │ +
429 if (__sub.matched)
│ │ │ +
430 __out = std::copy(__sub.first, __sub.second, __out);
│ │ │ +
431 }
│ │ │ +
432 else if (__eat('\''))
│ │ │ +
433 {
│ │ │ +
434 auto& __sub = _M_suffix();
│ │ │ +
435 if (__sub.matched)
│ │ │ +
436 __out = std::copy(__sub.first, __sub.second, __out);
│ │ │ +
437 }
│ │ │ +
438 else if (__fctyp.is(__ctype_type::digit, *__next))
│ │ │ +
439 {
│ │ │ +
440 long __num = __traits.value(*__next, 10);
│ │ │ +
441 if (++__next != __fmt_last
│ │ │ +
442 && __fctyp.is(__ctype_type::digit, *__next))
│ │ │ +
443 {
│ │ │ +
444 __num *= 10;
│ │ │ +
445 __num += __traits.value(*__next++, 10);
│ │ │ +
446 }
│ │ │ +
447 if (0 <= __num && __num < this->size())
│ │ │ +
448 __output(__num);
│ │ │ +
449 }
│ │ │ +
450 else
│ │ │ +
451 *__out++ = '$';
│ │ │ +
452 __fmt_first = __next;
│ │ │ +
453 }
│ │ │ +
454 __out = std::copy(__fmt_first, __fmt_last, __out);
│ │ │ +
455 }
│ │ │ +
456 return __out;
│ │ │ +
457 }
│ │ │ +
458
│ │ │ +
459 template<typename _Out_iter, typename _Bi_iter,
│ │ │ +
460 typename _Rx_traits, typename _Ch_type>
│ │ │ +
461 _Out_iter
│ │ │ +
462 __regex_replace(_Out_iter __out, _Bi_iter __first, _Bi_iter __last,
│ │ │ + │ │ │ +
464 const _Ch_type* __fmt, size_t __len,
│ │ │ + │ │ │ +
466 {
│ │ │ + │ │ │ +
468 _IterT __i(__first, __last, __e, __flags);
│ │ │ +
469 _IterT __end;
│ │ │ +
470 if (__i == __end)
│ │ │ +
471 {
│ │ │ +
472 if (!(__flags & regex_constants::format_no_copy))
│ │ │ +
473 __out = std::copy(__first, __last, __out);
│ │ │ +
474 }
│ │ │ +
475 else
│ │ │ +
476 {
│ │ │ +
477 sub_match<_Bi_iter> __last;
│ │ │ +
478 for (; __i != __end; ++__i)
│ │ │ +
479 {
│ │ │ +
480 if (!(__flags & regex_constants::format_no_copy))
│ │ │ +
481 __out = std::copy(__i->prefix().first, __i->prefix().second,
│ │ │ +
482 __out);
│ │ │ +
483 __out = __i->format(__out, __fmt, __fmt + __len, __flags);
│ │ │ +
484 __last = __i->suffix();
│ │ │ + │ │ │ +
486 break;
│ │ │ +
487 }
│ │ │ +
488 if (!(__flags & regex_constants::format_no_copy))
│ │ │ +
489 __out = std::copy(__last.first, __last.second, __out);
│ │ │ +
490 }
│ │ │ +
491 return __out;
│ │ │ +
492 }
│ │ │ +
493
│ │ │ +
494 template<typename _Bi_iter,
│ │ │ +
495 typename _Ch_type,
│ │ │ +
496 typename _Rx_traits>
│ │ │ +
497 bool
│ │ │ +
│ │ │ + │ │ │ +
499 operator==(const regex_iterator& __rhs) const noexcept
│ │ │ +
500 {
│ │ │ +
501 if (_M_pregex == nullptr && __rhs._M_pregex == nullptr)
│ │ │ +
502 return true;
│ │ │ +
503 return _M_pregex == __rhs._M_pregex
│ │ │ +
504 && _M_begin == __rhs._M_begin
│ │ │ +
505 && _M_end == __rhs._M_end
│ │ │ +
506 && _M_flags == __rhs._M_flags
│ │ │ +
507 && _M_match[0] == __rhs._M_match[0];
│ │ │ +
508 }
│ │ │ +
│ │ │ +
509
│ │ │ +
510 template<typename _Bi_iter,
│ │ │ +
511 typename _Ch_type,
│ │ │ +
512 typename _Rx_traits>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ +
516 {
│ │ │ +
517 // In all cases in which the call to regex_search returns true,
│ │ │ +
518 // match.prefix().first shall be equal to the previous value of
│ │ │ +
519 // match[0].second, and for each index i in the half-open range
│ │ │ +
520 // [0, match.size()) for which match[i].matched is true,
│ │ │ +
521 // match[i].position() shall return distance(begin, match[i].first).
│ │ │ +
522 // [28.12.1.4.5]
│ │ │ +
523 if (_M_match[0].matched)
│ │ │ +
524 {
│ │ │ +
525 auto __start = _M_match[0].second;
│ │ │ +
526 auto __prefix_first = _M_match[0].second;
│ │ │ +
527 if (_M_match[0].first == _M_match[0].second)
│ │ │ +
528 {
│ │ │ +
529 if (__start == _M_end)
│ │ │ +
530 {
│ │ │ +
531 _M_pregex = nullptr;
│ │ │ +
532 return *this;
│ │ │ +
533 }
│ │ │ +
534 else
│ │ │ +
535 {
│ │ │ +
536 if (regex_search(__start, _M_end, _M_match, *_M_pregex,
│ │ │ +
537 _M_flags
│ │ │ + │ │ │ + │ │ │ +
540 {
│ │ │ +
541 __glibcxx_assert(_M_match[0].matched);
│ │ │ +
542 auto& __prefix = _M_match._M_prefix();
│ │ │ +
543 __prefix.first = __prefix_first;
│ │ │ +
544 __prefix.matched = __prefix.first != __prefix.second;
│ │ │ +
545 // [28.12.1.4.5]
│ │ │ +
546 _M_match._M_begin = _M_begin;
│ │ │ +
547 return *this;
│ │ │ +
548 }
│ │ │ +
549 else
│ │ │ +
550 ++__start;
│ │ │ +
551 }
│ │ │ +
552 }
│ │ │ + │ │ │ +
554 if (regex_search(__start, _M_end, _M_match, *_M_pregex, _M_flags))
│ │ │ +
555 {
│ │ │ +
556 __glibcxx_assert(_M_match[0].matched);
│ │ │ +
557 auto& __prefix = _M_match._M_prefix();
│ │ │ +
558 __prefix.first = __prefix_first;
│ │ │ +
559 __prefix.matched = __prefix.first != __prefix.second;
│ │ │ +
560 // [28.12.1.4.5]
│ │ │ +
561 _M_match._M_begin = _M_begin;
│ │ │ +
562 }
│ │ │ +
563 else
│ │ │ +
564 _M_pregex = nullptr;
│ │ │ +
565 }
│ │ │ +
566 return *this;
│ │ │ +
567 }
│ │ │ +
│ │ │ +
568
│ │ │ +
569 template<typename _Bi_iter,
│ │ │ +
570 typename _Ch_type,
│ │ │ +
571 typename _Rx_traits>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ +
575 {
│ │ │ +
576 _M_position = __rhs._M_position;
│ │ │ +
577 _M_subs = __rhs._M_subs;
│ │ │ +
578 _M_n = __rhs._M_n;
│ │ │ +
579 _M_suffix = __rhs._M_suffix;
│ │ │ +
580 _M_has_m1 = __rhs._M_has_m1;
│ │ │ +
581 _M_normalize_result();
│ │ │ +
582 return *this;
│ │ │ +
583 }
│ │ │ +
│ │ │ +
584
│ │ │ +
585 template<typename _Bi_iter,
│ │ │ +
586 typename _Ch_type,
│ │ │ +
587 typename _Rx_traits>
│ │ │ +
588 bool
│ │ │ +
│ │ │ + │ │ │ +
590 operator==(const regex_token_iterator& __rhs) const
│ │ │ +
591 {
│ │ │ +
592 if (_M_end_of_seq() && __rhs._M_end_of_seq())
│ │ │ +
593 return true;
│ │ │ +
594 if (_M_suffix.matched && __rhs._M_suffix.matched
│ │ │ +
595 && _M_suffix == __rhs._M_suffix)
│ │ │ +
596 return true;
│ │ │ +
597 if (_M_end_of_seq() || _M_suffix.matched
│ │ │ +
598 || __rhs._M_end_of_seq() || __rhs._M_suffix.matched)
│ │ │ +
599 return false;
│ │ │ +
600 return _M_position == __rhs._M_position
│ │ │ +
601 && _M_n == __rhs._M_n
│ │ │ +
602 && _M_subs == __rhs._M_subs;
│ │ │ +
603 }
│ │ │ +
│ │ │ +
604
│ │ │ +
605 template<typename _Bi_iter,
│ │ │ +
606 typename _Ch_type,
│ │ │ +
607 typename _Rx_traits>
│ │ │ + │ │ │ +
│ │ │ + │ │ │ + │ │ │ +
611 {
│ │ │ +
612 _Position __prev = _M_position;
│ │ │ +
613 if (_M_suffix.matched)
│ │ │ +
614 *this = regex_token_iterator();
│ │ │ +
615 else if (_M_n + 1 < _M_subs.size())
│ │ │ +
616 {
│ │ │ +
617 _M_n++;
│ │ │ +
618 _M_result = &_M_current_match();
│ │ │ +
619 }
│ │ │ +
620 else
│ │ │ +
621 {
│ │ │ +
622 _M_n = 0;
│ │ │ +
623 ++_M_position;
│ │ │ +
624 if (_M_position != _Position())
│ │ │ +
625 _M_result = &_M_current_match();
│ │ │ +
626 else if (_M_has_m1 && __prev->suffix().length() != 0)
│ │ │ +
627 {
│ │ │ +
628 _M_suffix.matched = true;
│ │ │ +
629 _M_suffix.first = __prev->suffix().first;
│ │ │ +
630 _M_suffix.second = __prev->suffix().second;
│ │ │ +
631 _M_result = &_M_suffix;
│ │ │ +
632 }
│ │ │ +
633 else
│ │ │ +
634 *this = regex_token_iterator();
│ │ │ +
635 }
│ │ │ +
636 return *this;
│ │ │ +
637 }
│ │ │ +
│ │ │ +
638
│ │ │ +
639 template<typename _Bi_iter,
│ │ │ +
640 typename _Ch_type,
│ │ │ +
641 typename _Rx_traits>
│ │ │ +
642 void
│ │ │ + │ │ │ +
644 _M_init(_Bi_iter __a, _Bi_iter __b)
│ │ │ +
645 {
│ │ │ +
646 _M_has_m1 = false;
│ │ │ +
647 for (auto __it : _M_subs)
│ │ │ +
648 if (__it == -1)
│ │ │ +
649 {
│ │ │ +
650 _M_has_m1 = true;
│ │ │ +
651 break;
│ │ │ +
652 }
│ │ │ +
653 if (_M_position != _Position())
│ │ │ +
654 _M_result = &_M_current_match();
│ │ │ +
655 else if (_M_has_m1)
│ │ │ +
656 {
│ │ │ +
657 _M_suffix.matched = true;
│ │ │ +
658 _M_suffix.first = __a;
│ │ │ +
659 _M_suffix.second = __b;
│ │ │ +
660 _M_result = &_M_suffix;
│ │ │ +
661 }
│ │ │ +
662 else
│ │ │ +
663 _M_result = nullptr;
│ │ │ +
664 }
│ │ │ +
665
│ │ │ +
666_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
667} // namespace
│ │ │ +
const _Facet & use_facet(const locale &__loc)
Return a facet.
│ │ │ +
bool regex_search(_Bi_iter __s, _Bi_iter __e, match_results< _Bi_iter, _Alloc > &__m, const basic_regex< _Ch_type, _Rx_traits > &__re, regex_constants::match_flag_type __flags=regex_constants::match_default)
Definition regex.h:2418
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
virtual const char * what() const noexcept
│ │ │ +
ios_base & hex(ios_base &__base)
Calls base.setf(ios_base::hex, ios_base::basefield).
Definition ios_base.h:1087
│ │ │ +
constexpr auto size(const _Container &__cont) noexcept(noexcept(__cont.size())) -> decltype(__cont.size())
Return the size of a container.
│ │ │ +
ios_base & oct(ios_base &__base)
Calls base.setf(ios_base::oct, ios_base::basefield).
Definition ios_base.h:1095
│ │ │ +
Implementation details not part of the namespace std interface.
│ │ │ +
constexpr syntax_option_type __polynomial
│ │ │ +
constexpr match_flag_type format_first_only
│ │ │ +
constexpr match_flag_type match_continuous
│ │ │ +
match_flag_type
This is a bitmask type indicating regex matching rules.
│ │ │ +
constexpr match_flag_type match_prev_avail
│ │ │ +
constexpr match_flag_type format_sed
│ │ │ +
constexpr match_flag_type match_not_null
│ │ │ +
constexpr match_flag_type format_no_copy
│ │ │ +
bool fail() const
Fast error checking.
Definition basic_ios.h:205
│ │ │ +
Controlling input for std::string.
Definition sstream:548
│ │ │ +
Primary class template ctype facet.
│ │ │ +
A regular expression.
Definition regex.h:419
│ │ │ +
_Out_iter format(_Out_iter __out, const char_type *__fmt_first, const char_type *__fmt_last, match_flag_type __flags=regex_constants::format_default) const
│ │ │ +
Takes a regex and an input string and does the matching.
│ │ │ +
Describes aspects of a regular expression.
Definition regex.h:97
│ │ │ +
int value(_Ch_type __ch, int __radix) const
Converts a digit to an int.
Definition regex.tcc:337
│ │ │ +
string_type lookup_collatename(_Fwd_iter __first, _Fwd_iter __last) const
Gets a collation element by name.
Definition regex.tcc:123
│ │ │ +
locale_type getloc() const
Gets a copy of the current locale in use by the regex_traits object.
Definition regex.h:389
│ │ │ +
bool isctype(_Ch_type __c, char_class_type __f) const
Determines if c is a member of an identified class.
Definition regex.tcc:323
│ │ │ +
char_class_type lookup_classname(_Fwd_iter __first, _Fwd_iter __last, bool __icase=false) const
Maps one or more characters to a named character classification.
Definition regex.tcc:279
│ │ │ + │ │ │ + │ │ │ +
regex_iterator()=default
Provides a singular iterator, useful for indicating one-past-the-end of a range.
│ │ │ +
bool operator==(const regex_iterator &) const noexcept
Tests the equivalence of two regex iterators.
Definition regex.tcc:499
│ │ │ +
regex_iterator & operator++()
Increments a regex_iterator.
Definition regex.tcc:515
│ │ │ + │ │ │ +
bool operator==(const regex_token_iterator &__rhs) const
Compares a regex_token_iterator to another for equality.
Definition regex.tcc:590
│ │ │ +
regex_token_iterator & operator=(const regex_token_iterator &__rhs)
Assigns a regex_token_iterator to another.
Definition regex.tcc:574
│ │ │ +
regex_token_iterator & operator++()
Increments a regex_token_iterator.
Definition regex.tcc:610
│ │ │ +
regex_token_iterator()
Default constructs a regex_token_iterator.
Definition regex.h:2887
│ │ │ +
Struct holding two objects of arbitrary type.
Definition stl_pair.h:286
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,94 +1,804 @@ │ │ │ │ libstdc++ │ │ │ │ -exception.h │ │ │ │ +regex.tcc │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// Exception Handling support header for -*- C++ -*- │ │ │ │ +1// class template regex -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2016-2024 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2013-2024 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ -5// This file is part of GCC. │ │ │ │ -6// │ │ │ │ -7// GCC is free software; you can redistribute it and/or modify │ │ │ │ -8// it under the terms of the GNU General Public License as published by │ │ │ │ -9// the Free Software Foundation; either version 3, or (at your option) │ │ │ │ -10// any later version. │ │ │ │ -11// │ │ │ │ -12// GCC is distributed in the hope that it will be useful, │ │ │ │ -13// but WITHOUT ANY WARRANTY; without even the implied warranty of │ │ │ │ -14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the │ │ │ │ -15// GNU General Public License for more details. │ │ │ │ -16// │ │ │ │ -17// Under Section 7 of GPL version 3, you are granted additional │ │ │ │ -18// permissions described in the GCC Runtime Library Exception, version │ │ │ │ -19// 3.1, as published by the Free Software Foundation. │ │ │ │ -20 │ │ │ │ -21// You should have received a copy of the GNU General Public License and │ │ │ │ -22// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ -23// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ -24// . │ │ │ │ -25 │ │ │ │ -26/** @file bits/exception.h │ │ │ │ +5// This file is part of the GNU ISO C++ Library. This library is free │ │ │ │ +6// software; you can redistribute it and/or modify it under the │ │ │ │ +7// terms of the GNU General Public License as published by the │ │ │ │ +8// Free Software Foundation; either version 3, or (at your option) │ │ │ │ +9// any later version. │ │ │ │ +10 │ │ │ │ +11// This library is distributed in the hope that it will be useful, │ │ │ │ +12// but WITHOUT ANY WARRANTY; without even the implied warranty of │ │ │ │ +13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the │ │ │ │ +14// GNU General Public License for more details. │ │ │ │ +15 │ │ │ │ +16// Under Section 7 of GPL version 3, you are granted additional │ │ │ │ +17// permissions described in the GCC Runtime Library Exception, version │ │ │ │ +18// 3.1, as published by the Free Software Foundation. │ │ │ │ +19 │ │ │ │ +20// You should have received a copy of the GNU General Public License and │ │ │ │ +21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ +22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ +23// . │ │ │ │ +24 │ │ │ │ +25/** │ │ │ │ +26 * @file bits/regex.tcc │ │ │ │ 27 * This is an internal header file, included by other library headers. │ │ │ │ -28 * Do not attempt to use it directly. │ │ │ │ +28 * Do not attempt to use it directly. @headername{regex} │ │ │ │ 29 */ │ │ │ │ 30 │ │ │ │ -31#ifndef __EXCEPTION_H │ │ │ │ -32#define __EXCEPTION_H 1 │ │ │ │ -33 │ │ │ │ -34#pragma GCC system_header │ │ │ │ -35 │ │ │ │ -36#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ -37 │ │ │ │ -38extern "C++" { │ │ │ │ -39 │ │ │ │ -40namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ -41{ │ │ │ │ -42 /** │ │ │ │ -43 * @defgroup exceptions Exceptions │ │ │ │ -44 * @ingroup diagnostics │ │ │ │ -45 * @since C++98 │ │ │ │ -46 * │ │ │ │ -47 * Classes and functions for reporting errors via exceptions. │ │ │ │ -48 * @{ │ │ │ │ -49 */ │ │ │ │ -50 │ │ │ │ -51 /** │ │ │ │ -52 * @brief Base class for all library exceptions. │ │ │ │ -53 * │ │ │ │ -54 * This is the base class for all exceptions thrown by the standard │ │ │ │ -55 * library, and by certain language expressions. You are free to derive │ │ │ │ -56 * your own %exception classes, or use a different hierarchy, or to │ │ │ │ -57 * throw non-class data (e.g., fundamental types). │ │ │ │ -58 */ │ │ │ │ -_5_9 class exception │ │ │ │ -60 { │ │ │ │ -61 public: │ │ │ │ -62 exception() _GLIBCXX_NOTHROW { } │ │ │ │ -63 virtual ~exception() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW; │ │ │ │ -64#if __cplusplus >= 201103L │ │ │ │ -65 exception(const exception&) = default; │ │ │ │ -66 exception& operator=(const exception&) = default; │ │ │ │ -67 exception(exception&&) = default; │ │ │ │ -68 exception& operator=(exception&&) = default; │ │ │ │ -69#endif │ │ │ │ -70 │ │ │ │ -71 /** Returns a C-style character string describing the general cause │ │ │ │ -72 * of the current error. */ │ │ │ │ -73 virtual const char* │ │ │ │ -_7_4 _w_h_a_t() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW; │ │ │ │ -75 }; │ │ │ │ -76 │ │ │ │ -77 /// @} │ │ │ │ -78 │ │ │ │ -79} // namespace std │ │ │ │ -80 │ │ │ │ -81} │ │ │ │ -82 │ │ │ │ -83#endif │ │ │ │ -_c_+_+_c_o_n_f_i_g_._h │ │ │ │ +31namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +32{ │ │ │ │ +33_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +34 │ │ │ │ +35namespace _____d_e_t_a_i_l │ │ │ │ +36{ │ │ │ │ +37 /// @cond undocumented │ │ │ │ +38 │ │ │ │ +39 // Result of merging regex_match and regex_search. │ │ │ │ +40 // │ │ │ │ +41 // __policy now can be _S_auto (auto dispatch) and _S_alternate (use │ │ │ │ +42 // the other one if possible, for test purpose). │ │ │ │ +43 // │ │ │ │ +44 // That __match_mode is true means regex_match, else regex_search. │ │ │ │ +45 template │ │ │ │ +47 bool │ │ │ │ +48 __regex_algo_impl(_BiIter __s, │ │ │ │ +49 _BiIter __e, │ │ │ │ +50 match_results<_BiIter, _Alloc>& __m, │ │ │ │ +51 const basic_regex<_CharT, _TraitsT>& __re, │ │ │ │ +52 _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___f_l_a_g___t_y_p_e __flags, │ │ │ │ +53 _RegexExecutorPolicy __policy, │ │ │ │ +54 bool __match_mode) │ │ │ │ +55 { │ │ │ │ +56 if (__re._M_automaton == nullptr) │ │ │ │ +57 return false; │ │ │ │ +58 │ │ │ │ +59 typename match_results<_BiIter, _Alloc>::_Unchecked& __res = __m; │ │ │ │ +60 __m._M_begin = __s; │ │ │ │ +61 __m._M_resize(__re._M_automaton->_M_sub_count()); │ │ │ │ +62 │ │ │ │ +63 bool __ret; │ │ │ │ +64 if ((__re.flags() & _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_____p_o_l_y_n_o_m_i_a_l) │ │ │ │ +65 || (__policy == _RegexExecutorPolicy::_S_alternate │ │ │ │ +66 && !__re._M_automaton->_M_has_backref)) │ │ │ │ +67 { │ │ │ │ +68 ___E_x_e_c_u_t_o_r_<___B_i_I_t_e_r_,_ ___A_l_l_o_c_,_ ___T_r_a_i_t_s_T_,_ _f_a_l_s_e_> │ │ │ │ +69 __executor(__s, __e, __res, __re, __flags); │ │ │ │ +70 if (__match_mode) │ │ │ │ +71 __ret = __executor._M_match(); │ │ │ │ +72 else │ │ │ │ +73 __ret = __executor._M_search(); │ │ │ │ +74 } │ │ │ │ +75 else │ │ │ │ +76 { │ │ │ │ +77 ___E_x_e_c_u_t_o_r_<___B_i_I_t_e_r_,_ ___A_l_l_o_c_,_ ___T_r_a_i_t_s_T_,_ _t_r_u_e_> │ │ │ │ +78 __executor(__s, __e, __res, __re, __flags); │ │ │ │ +79 if (__match_mode) │ │ │ │ +80 __ret = __executor._M_match(); │ │ │ │ +81 else │ │ │ │ +82 __ret = __executor._M_search(); │ │ │ │ +83 } │ │ │ │ +84 if (__ret) │ │ │ │ +85 { │ │ │ │ +86 for (auto& __it : __res) │ │ │ │ +87 if (!__it.matched) │ │ │ │ +88 __it.first = __it.second = __e; │ │ │ │ +89 auto& __pre = __m._M_prefix(); │ │ │ │ +90 auto& __suf = __m._M_suffix(); │ │ │ │ +91 if (__match_mode) │ │ │ │ +92 { │ │ │ │ +93 __pre.matched = false; │ │ │ │ +94 __pre.first = __s; │ │ │ │ +95 __pre.second = __s; │ │ │ │ +96 __suf.matched = false; │ │ │ │ +97 __suf.first = __e; │ │ │ │ +98 __suf.second = __e; │ │ │ │ +99 } │ │ │ │ +100 else │ │ │ │ +101 { │ │ │ │ +102 __pre.first = __s; │ │ │ │ +103 __pre.second = __res[0].first; │ │ │ │ +104 __pre.matched = (__pre.first != __pre.second); │ │ │ │ +105 __suf.first = __res[0].second; │ │ │ │ +106 __suf.second = __e; │ │ │ │ +107 __suf.matched = (__suf.first != __suf.second); │ │ │ │ +108 } │ │ │ │ +109 } │ │ │ │ +110 else │ │ │ │ +111 { │ │ │ │ +112 __m._M_establish_failed_match(__e); │ │ │ │ +113 } │ │ │ │ +114 return __ret; │ │ │ │ +115 } │ │ │ │ +116 /// @endcond │ │ │ │ +117} // namespace __detail │ │ │ │ +118 │ │ │ │ +119 template │ │ │ │ +120 template │ │ │ │ +121 typename regex_traits<_Ch_type>::string_type │ │ │ │ +_1_2_2 _r_e_g_e_x___t_r_a_i_t_s_<___C_h___t_y_p_e_>_:_: │ │ │ │ +123_ _l_o_o_k_u_p___c_o_l_l_a_t_e_n_a_m_e(_Fwd_iter __first, _Fwd_iter __last) const │ │ │ │ +124 { │ │ │ │ +125 typedef _s_t_d_:_:_c_t_y_p_e_<_c_h_a_r___t_y_p_e_> __ctype_type; │ │ │ │ +126 const __ctype_type& __fctyp(_u_s_e___f_a_c_e_t_<_____c_t_y_p_e___t_y_p_e_>(_M_locale)); │ │ │ │ +127 │ │ │ │ +128 static const char* __collatenames[] = │ │ │ │ +129 { │ │ │ │ +130 "NUL", │ │ │ │ +131 "SOH", │ │ │ │ +132 "STX", │ │ │ │ +133 "ETX", │ │ │ │ +134 "EOT", │ │ │ │ +135 "ENQ", │ │ │ │ +136 "ACK", │ │ │ │ +137 "alert", │ │ │ │ +138 "backspace", │ │ │ │ +139 "tab", │ │ │ │ +140 "newline", │ │ │ │ +141 "vertical-tab", │ │ │ │ +142 "form-feed", │ │ │ │ +143 "carriage-return", │ │ │ │ +144 "SO", │ │ │ │ +145 "SI", │ │ │ │ +146 "DLE", │ │ │ │ +147 "DC1", │ │ │ │ +148 "DC2", │ │ │ │ +149 "DC3", │ │ │ │ +150 "DC4", │ │ │ │ +151 "NAK", │ │ │ │ +152 "SYN", │ │ │ │ +153 "ETB", │ │ │ │ +154 "CAN", │ │ │ │ +155 "EM", │ │ │ │ +156 "SUB", │ │ │ │ +157 "ESC", │ │ │ │ +158 "IS4", │ │ │ │ +159 "IS3", │ │ │ │ +160 "IS2", │ │ │ │ +161 "IS1", │ │ │ │ +162 "space", │ │ │ │ +163 "exclamation-mark", │ │ │ │ +164 "quotation-mark", │ │ │ │ +165 "number-sign", │ │ │ │ +166 "dollar-sign", │ │ │ │ +167 "percent-sign", │ │ │ │ +168 "ampersand", │ │ │ │ +169 "apostrophe", │ │ │ │ +170 "left-parenthesis", │ │ │ │ +171 "right-parenthesis", │ │ │ │ +172 "asterisk", │ │ │ │ +173 "plus-sign", │ │ │ │ +174 "comma", │ │ │ │ +175 "hyphen", │ │ │ │ +176 "period", │ │ │ │ +177 "slash", │ │ │ │ +178 "zero", │ │ │ │ +179 "one", │ │ │ │ +180 "two", │ │ │ │ +181 "three", │ │ │ │ +182 "four", │ │ │ │ +183 "five", │ │ │ │ +184 "six", │ │ │ │ +185 "seven", │ │ │ │ +186 "eight", │ │ │ │ +187 "nine", │ │ │ │ +188 "colon", │ │ │ │ +189 "semicolon", │ │ │ │ +190 "less-than-sign", │ │ │ │ +191 "equals-sign", │ │ │ │ +192 "greater-than-sign", │ │ │ │ +193 "question-mark", │ │ │ │ +194 "commercial-at", │ │ │ │ +195 "A", │ │ │ │ +196 "B", │ │ │ │ +197 "C", │ │ │ │ +198 "D", │ │ │ │ +199 "E", │ │ │ │ +200 "F", │ │ │ │ +201 "G", │ │ │ │ +202 "H", │ │ │ │ +203 "I", │ │ │ │ +204 "J", │ │ │ │ +205 "K", │ │ │ │ +206 "L", │ │ │ │ +207 "M", │ │ │ │ +208 "N", │ │ │ │ +209 "O", │ │ │ │ +210 "P", │ │ │ │ +211 "Q", │ │ │ │ +212 "R", │ │ │ │ +213 "S", │ │ │ │ +214 "T", │ │ │ │ +215 "U", │ │ │ │ +216 "V", │ │ │ │ +217 "W", │ │ │ │ +218 "X", │ │ │ │ +219 "Y", │ │ │ │ +220 "Z", │ │ │ │ +221 "left-square-bracket", │ │ │ │ +222 "backslash", │ │ │ │ +223 "right-square-bracket", │ │ │ │ +224 "circumflex", │ │ │ │ +225 "underscore", │ │ │ │ +226 "grave-accent", │ │ │ │ +227 "a", │ │ │ │ +228 "b", │ │ │ │ +229 "c", │ │ │ │ +230 "d", │ │ │ │ +231 "e", │ │ │ │ +232 "f", │ │ │ │ +233 "g", │ │ │ │ +234 "h", │ │ │ │ +235 "i", │ │ │ │ +236 "j", │ │ │ │ +237 "k", │ │ │ │ +238 "l", │ │ │ │ +239 "m", │ │ │ │ +240 "n", │ │ │ │ +241 "o", │ │ │ │ +242 "p", │ │ │ │ +243 "q", │ │ │ │ +244 "r", │ │ │ │ +245 "s", │ │ │ │ +246 "t", │ │ │ │ +247 "u", │ │ │ │ +248 "v", │ │ │ │ +249 "w", │ │ │ │ +250 "x", │ │ │ │ +251 "y", │ │ │ │ +252 "z", │ │ │ │ +253 "left-curly-bracket", │ │ │ │ +254 "vertical-line", │ │ │ │ +255 "right-curly-bracket", │ │ │ │ +256 "tilde", │ │ │ │ +257 "DEL", │ │ │ │ +258 }; │ │ │ │ +259 │ │ │ │ +260 string __s; │ │ │ │ +261 for (; __first != __last; ++__first) │ │ │ │ +262 __s += __fctyp.narrow(*__first, 0); │ │ │ │ +263 │ │ │ │ +264 for (const auto& __it : __collatenames) │ │ │ │ +265 if (__s == __it) │ │ │ │ +266 return string_type(1, __fctyp.widen( │ │ │ │ +267 static_cast(&__it - __collatenames))); │ │ │ │ +268 │ │ │ │ +269 // TODO Add digraph support: │ │ │ │ +270 // http://boost.sourceforge.net/libs/regex/doc/collating_names.html │ │ │ │ +271 │ │ │ │ +272 return string_type(); │ │ │ │ +273 } │ │ │ │ +274 │ │ │ │ +275 template │ │ │ │ +276 template │ │ │ │ +277 typename regex_traits<_Ch_type>::char_class_type │ │ │ │ +_2_7_8 _r_e_g_e_x___t_r_a_i_t_s_<___C_h___t_y_p_e_>_:_: │ │ │ │ +279_ _l_o_o_k_u_p___c_l_a_s_s_n_a_m_e(_Fwd_iter __first, _Fwd_iter __last, bool __icase) const │ │ │ │ +280 { │ │ │ │ +281 typedef _s_t_d_:_:_c_t_y_p_e_<_c_h_a_r___t_y_p_e_> __ctype_type; │ │ │ │ +282 const __ctype_type& __fctyp(_u_s_e___f_a_c_e_t_<_____c_t_y_p_e___t_y_p_e_>(_M_locale)); │ │ │ │ +283 │ │ │ │ +284 // Mappings from class name to class mask. │ │ │ │ +285 static const _p_a_i_r_<_c_o_n_s_t_ _c_h_a_r_*_,_ _c_h_a_r___c_l_a_s_s___t_y_p_e_> __classnames[] = │ │ │ │ +286 { │ │ │ │ +287 {"d", ctype_base::digit}, │ │ │ │ +288 {"w", {ctype_base::alnum, _RegexMask::_S_under}}, │ │ │ │ +289 {"s", ctype_base::space}, │ │ │ │ +290 {"alnum", ctype_base::alnum}, │ │ │ │ +291 {"alpha", ctype_base::alpha}, │ │ │ │ +292 {"blank", ctype_base::blank}, │ │ │ │ +293 {"cntrl", ctype_base::cntrl}, │ │ │ │ +294 {"digit", ctype_base::digit}, │ │ │ │ +295 {"graph", ctype_base::graph}, │ │ │ │ +296 {"lower", ctype_base::lower}, │ │ │ │ +297 {"print", ctype_base::print}, │ │ │ │ +298 {"punct", ctype_base::punct}, │ │ │ │ +299 {"space", ctype_base::space}, │ │ │ │ +300 {"upper", ctype_base::upper}, │ │ │ │ +301 {"xdigit", ctype_base::xdigit}, │ │ │ │ +302 }; │ │ │ │ +303 │ │ │ │ +304 string __s; │ │ │ │ +305 for (; __first != __last; ++__first) │ │ │ │ +306 __s += __fctyp.narrow(__fctyp.tolower(*__first), 0); │ │ │ │ +307 │ │ │ │ +308 for (const auto& __it : __classnames) │ │ │ │ +309 if (__s == __it.first) │ │ │ │ +310 { │ │ │ │ +311 if (__icase │ │ │ │ +312 && ((__it.second │ │ │ │ +313 & (ctype_base::lower | ctype_base::upper)) != 0)) │ │ │ │ +314 return ctype_base::alpha; │ │ │ │ +315 return __it.second; │ │ │ │ +316 } │ │ │ │ +317 return 0; │ │ │ │ +318 } │ │ │ │ +319 │ │ │ │ +320 template │ │ │ │ +321 bool │ │ │ │ +_3_2_2 _r_e_g_e_x___t_r_a_i_t_s_<___C_h___t_y_p_e_>_:_: │ │ │ │ +323_ _i_s_c_t_y_p_e(_Ch_type __c, char_class_type __f) const │ │ │ │ +324 { │ │ │ │ +325 typedef _s_t_d_:_:_c_t_y_p_e_<_c_h_a_r___t_y_p_e_> __ctype_type; │ │ │ │ +326 const __ctype_type& __fctyp(_u_s_e___f_a_c_e_t_<_____c_t_y_p_e___t_y_p_e_>(_M_locale)); │ │ │ │ +327 │ │ │ │ +328 return __fctyp.is(__f._M_base, __c) │ │ │ │ +329 // [[:w:]] │ │ │ │ +330 || ((__f._M_extended & _RegexMask::_S_under) │ │ │ │ +331 && __c == __fctyp.widen('_')); │ │ │ │ +332 } │ │ │ │ +333 │ │ │ │ +334 template │ │ │ │ +335 int │ │ │ │ +_3_3_6 _r_e_g_e_x___t_r_a_i_t_s_<___C_h___t_y_p_e_>_:_: │ │ │ │ +337_ _v_a_l_u_e(_Ch_type __ch, int __radix) const │ │ │ │ +338 { │ │ │ │ +339 _s_t_d_:_:_b_a_s_i_c___i_s_t_r_i_n_g_s_t_r_e_a_m_<_c_h_a_r___t_y_p_e_> __is(string_type(1, __ch)); │ │ │ │ +340 long __v; │ │ │ │ +341 if (__radix == 8) │ │ │ │ +342 __is >> _s_t_d_:_:_o_c_t; │ │ │ │ +343 else if (__radix == 16) │ │ │ │ +344 __is >> _s_t_d_:_:_h_e_x; │ │ │ │ +345 __is >> __v; │ │ │ │ +346 return __is._f_a_i_l() ? -1 : __v; │ │ │ │ +347 } │ │ │ │ +348 │ │ │ │ +349 template │ │ │ │ +350 template │ │ │ │ +351 _Out_iter │ │ │ │ +352 _m_a_t_c_h___r_e_s_u_l_t_s_<___B_i___i_t_e_r_,_ ___A_l_l_o_c_>_:_: │ │ │ │ +353_ _f_o_r_m_a_t(_Out_iter __out, │ │ │ │ +354 const match_results<_Bi_iter, _Alloc>::char_type* __fmt_first, │ │ │ │ +355 const match_results<_Bi_iter, _Alloc>::char_type* __fmt_last, │ │ │ │ +356 match_flag_type __flags) const │ │ │ │ +357 { │ │ │ │ +358 __glibcxx_assert( ready() ); │ │ │ │ +359 _r_e_g_e_x___t_r_a_i_t_s_<_c_h_a_r___t_y_p_e_> __traits; │ │ │ │ +360 typedef _s_t_d_:_:_c_t_y_p_e_<_c_h_a_r___t_y_p_e_> __ctype_type; │ │ │ │ +361 const __ctype_type& │ │ │ │ +362 __fctyp(_u_s_e___f_a_c_e_t_<_____c_t_y_p_e___t_y_p_e_>(__traits._g_e_t_l_o_c())); │ │ │ │ +363 │ │ │ │ +364 auto __output = [&](size_t __idx) │ │ │ │ +365 { │ │ │ │ +366 auto& __sub = (*this)[__idx]; │ │ │ │ +367 if (__sub.matched) │ │ │ │ +368 __out = std::copy(__sub.first, __sub.second, __out); │ │ │ │ +369 }; │ │ │ │ +370 │ │ │ │ +371 if (__flags & _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___s_e_d) │ │ │ │ +372 { │ │ │ │ +373 bool __escaping = false; │ │ │ │ +374 for (; __fmt_first != __fmt_last; __fmt_first++) │ │ │ │ +375 { │ │ │ │ +376 if (__escaping) │ │ │ │ +377 { │ │ │ │ +378 __escaping = false; │ │ │ │ +379 if (__fctyp.is(__ctype_type::digit, *__fmt_first)) │ │ │ │ +380 __output(__traits._v_a_l_u_e(*__fmt_first, 10)); │ │ │ │ +381 else │ │ │ │ +382 *__out++ = *__fmt_first; │ │ │ │ +383 continue; │ │ │ │ +384 } │ │ │ │ +385 if (*__fmt_first == '\\') │ │ │ │ +386 { │ │ │ │ +387 __escaping = true; │ │ │ │ +388 continue; │ │ │ │ +389 } │ │ │ │ +390 if (*__fmt_first == '&') │ │ │ │ +391 { │ │ │ │ +392 __output(0); │ │ │ │ +393 continue; │ │ │ │ +394 } │ │ │ │ +395 *__out++ = *__fmt_first; │ │ │ │ +396 } │ │ │ │ +397 if (__escaping) │ │ │ │ +398 *__out++ = '\\'; │ │ │ │ +399 } │ │ │ │ +400 else │ │ │ │ +401 { │ │ │ │ +402 while (1) │ │ │ │ +403 { │ │ │ │ +404 auto __next = std::find(__fmt_first, __fmt_last, '$'); │ │ │ │ +405 if (__next == __fmt_last) │ │ │ │ +406 break; │ │ │ │ +407 │ │ │ │ +408 __out = std::copy(__fmt_first, __next, __out); │ │ │ │ +409 │ │ │ │ +410 auto __eat = [&](char __ch) -> bool │ │ │ │ +411 { │ │ │ │ +412 if (*__next == __ch) │ │ │ │ +413 { │ │ │ │ +414 ++__next; │ │ │ │ +415 return true; │ │ │ │ +416 } │ │ │ │ +417 return false; │ │ │ │ +418 }; │ │ │ │ +419 │ │ │ │ +420 if (++__next == __fmt_last) │ │ │ │ +421 *__out++ = '$'; │ │ │ │ +422 else if (__eat('$')) │ │ │ │ +423 *__out++ = '$'; │ │ │ │ +424 else if (__eat('&')) │ │ │ │ +425 __output(0); │ │ │ │ +426 else if (__eat('`')) │ │ │ │ +427 { │ │ │ │ +428 auto& __sub = _M_prefix(); │ │ │ │ +429 if (__sub.matched) │ │ │ │ +430 __out = std::copy(__sub.first, __sub.second, __out); │ │ │ │ +431 } │ │ │ │ +432 else if (__eat('\'')) │ │ │ │ +433 { │ │ │ │ +434 auto& __sub = _M_suffix(); │ │ │ │ +435 if (__sub.matched) │ │ │ │ +436 __out = std::copy(__sub.first, __sub.second, __out); │ │ │ │ +437 } │ │ │ │ +438 else if (__fctyp.is(__ctype_type::digit, *__next)) │ │ │ │ +439 { │ │ │ │ +440 long __num = __traits._v_a_l_u_e(*__next, 10); │ │ │ │ +441 if (++__next != __fmt_last │ │ │ │ +442 && __fctyp.is(__ctype_type::digit, *__next)) │ │ │ │ +443 { │ │ │ │ +444 __num *= 10; │ │ │ │ +445 __num += __traits._v_a_l_u_e(*__next++, 10); │ │ │ │ +446 } │ │ │ │ +447 if (0 <= __num && __num < this->_s_i_z_e()) │ │ │ │ +448 __output(__num); │ │ │ │ +449 } │ │ │ │ +450 else │ │ │ │ +451 *__out++ = '$'; │ │ │ │ +452 __fmt_first = __next; │ │ │ │ +453 } │ │ │ │ +454 __out = std::copy(__fmt_first, __fmt_last, __out); │ │ │ │ +455 } │ │ │ │ +456 return __out; │ │ │ │ +457 } │ │ │ │ +458 │ │ │ │ +459 template │ │ │ │ +461 _Out_iter │ │ │ │ +462 __regex_replace(_Out_iter __out, _Bi_iter __first, _Bi_iter __last, │ │ │ │ +463 const _b_a_s_i_c___r_e_g_e_x_<___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_>& __e, │ │ │ │ +464 const _Ch_type* __fmt, size_t __len, │ │ │ │ +465 _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___f_l_a_g___t_y_p_e __flags) │ │ │ │ +466 { │ │ │ │ +467 typedef _r_e_g_e_x___i_t_e_r_a_t_o_r_<___B_i___i_t_e_r_,_ ___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_> _IterT; │ │ │ │ +468 _IterT __i(__first, __last, __e, __flags); │ │ │ │ +469 _IterT __end; │ │ │ │ +470 if (__i == __end) │ │ │ │ +471 { │ │ │ │ +472 if (!(__flags & _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___n_o___c_o_p_y)) │ │ │ │ +473 __out = std::copy(__first, __last, __out); │ │ │ │ +474 } │ │ │ │ +475 else │ │ │ │ +476 { │ │ │ │ +477 _s_u_b___m_a_t_c_h_<___B_i___i_t_e_r_> __last; │ │ │ │ +478 for (; __i != __end; ++__i) │ │ │ │ +479 { │ │ │ │ +480 if (!(__flags & _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___n_o___c_o_p_y)) │ │ │ │ +481 __out = std::copy(__i->prefix().first, __i->prefix().second, │ │ │ │ +482 __out); │ │ │ │ +483 __out = __i->format(__out, __fmt, __fmt + __len, __flags); │ │ │ │ +484 __last = __i->suffix(); │ │ │ │ +485 if (__flags & _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___f_i_r_s_t___o_n_l_y) │ │ │ │ +486 break; │ │ │ │ +487 } │ │ │ │ +488 if (!(__flags & _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___n_o___c_o_p_y)) │ │ │ │ +489 __out = std::copy(__last.first, __last.second, __out); │ │ │ │ +490 } │ │ │ │ +491 return __out; │ │ │ │ +492 } │ │ │ │ +493 │ │ │ │ +494 template │ │ │ │ +497 bool │ │ │ │ +_4_9_8 _r_e_g_e_x___i_t_e_r_a_t_o_r_<___B_i___i_t_e_r_,_ ___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_>_:_: │ │ │ │ +499_ _o_p_e_r_a_t_o_r_=_=(const _r_e_g_e_x___i_t_e_r_a_t_o_r& __rhs) const noexcept │ │ │ │ +500 { │ │ │ │ +501 if (_M_pregex == nullptr && __rhs._M_pregex == nullptr) │ │ │ │ +502 return true; │ │ │ │ +503 return _M_pregex == __rhs._M_pregex │ │ │ │ +504 && _M_begin == __rhs._M_begin │ │ │ │ +505 && _M_end == __rhs._M_end │ │ │ │ +506 && _M_flags == __rhs._M_flags │ │ │ │ +507 && _M_match[0] == __rhs._M_match[0]; │ │ │ │ +508 } │ │ │ │ +509 │ │ │ │ +510 template │ │ │ │ +513 _r_e_g_e_x___i_t_e_r_a_t_o_r_<___B_i___i_t_e_r_,_ ___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_>& │ │ │ │ +_5_1_4 _r_e_g_e_x___i_t_e_r_a_t_o_r_<___B_i___i_t_e_r_,_ ___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_>_:_: │ │ │ │ +515_ _o_p_e_r_a_t_o_r_+_+() │ │ │ │ +516 { │ │ │ │ +517 // In all cases in which the call to regex_search returns true, │ │ │ │ +518 // match.prefix().first shall be equal to the previous value of │ │ │ │ +519 // match[0].second, and for each index i in the half-open range │ │ │ │ +520 // [0, match.size()) for which match[i].matched is true, │ │ │ │ +521 // match[i].position() shall return distance(begin, match[i].first). │ │ │ │ +522 // [28.12.1.4.5] │ │ │ │ +523 if (_M_match[0].matched) │ │ │ │ +524 { │ │ │ │ +525 auto __start = _M_match[0].second; │ │ │ │ +526 auto __prefix_first = _M_match[0].second; │ │ │ │ +527 if (_M_match[0].first == _M_match[0].second) │ │ │ │ +528 { │ │ │ │ +529 if (__start == _M_end) │ │ │ │ +530 { │ │ │ │ +531 _M_pregex = nullptr; │ │ │ │ +532 return *this; │ │ │ │ +533 } │ │ │ │ +534 else │ │ │ │ +535 { │ │ │ │ +536 if (_r_e_g_e_x___s_e_a_r_c_h(__start, _M_end, _M_match, *_M_pregex, │ │ │ │ +537 _M_flags │ │ │ │ +538 | _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___n_o_t___n_u_l_l │ │ │ │ +539 | _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___c_o_n_t_i_n_u_o_u_s)) │ │ │ │ +540 { │ │ │ │ +541 __glibcxx_assert(_M_match[0].matched); │ │ │ │ +542 auto& __prefix = _M_match._M_prefix(); │ │ │ │ +543 __prefix.first = __prefix_first; │ │ │ │ +544 __prefix.matched = __prefix.first != __prefix.second; │ │ │ │ +545 // [28.12.1.4.5] │ │ │ │ +546 _M_match._M_begin = _M_begin; │ │ │ │ +547 return *this; │ │ │ │ +548 } │ │ │ │ +549 else │ │ │ │ +550 ++__start; │ │ │ │ +551 } │ │ │ │ +552 } │ │ │ │ +553 _M_flags |= _r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___p_r_e_v___a_v_a_i_l; │ │ │ │ +554 if (_r_e_g_e_x___s_e_a_r_c_h(__start, _M_end, _M_match, *_M_pregex, _M_flags)) │ │ │ │ +555 { │ │ │ │ +556 __glibcxx_assert(_M_match[0].matched); │ │ │ │ +557 auto& __prefix = _M_match._M_prefix(); │ │ │ │ +558 __prefix.first = __prefix_first; │ │ │ │ +559 __prefix.matched = __prefix.first != __prefix.second; │ │ │ │ +560 // [28.12.1.4.5] │ │ │ │ +561 _M_match._M_begin = _M_begin; │ │ │ │ +562 } │ │ │ │ +563 else │ │ │ │ +564 _M_pregex = nullptr; │ │ │ │ +565 } │ │ │ │ +566 return *this; │ │ │ │ +567 } │ │ │ │ +568 │ │ │ │ +569 template │ │ │ │ +572 _r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r_<___B_i___i_t_e_r_,_ ___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_>& │ │ │ │ +_5_7_3 _r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r_<___B_i___i_t_e_r_,_ ___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_>_:_: │ │ │ │ +574_ _o_p_e_r_a_t_o_r_=(const _r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r& __rhs) │ │ │ │ +575 { │ │ │ │ +576 _M_position = __rhs._M_position; │ │ │ │ +577 _M_subs = __rhs._M_subs; │ │ │ │ +578 _M_n = __rhs._M_n; │ │ │ │ +579 _M_suffix = __rhs._M_suffix; │ │ │ │ +580 _M_has_m1 = __rhs._M_has_m1; │ │ │ │ +581 _M_normalize_result(); │ │ │ │ +582 return *this; │ │ │ │ +583 } │ │ │ │ +584 │ │ │ │ +585 template │ │ │ │ +588 bool │ │ │ │ +_5_8_9 _r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r_<___B_i___i_t_e_r_,_ ___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_>_:_: │ │ │ │ +590_ _o_p_e_r_a_t_o_r_=_=(const _r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r& __rhs) const │ │ │ │ +591 { │ │ │ │ +592 if (_M_end_of_seq() && __rhs._M_end_of_seq()) │ │ │ │ +593 return true; │ │ │ │ +594 if (_M_suffix.matched && __rhs._M_suffix.matched │ │ │ │ +595 && _M_suffix == __rhs._M_suffix) │ │ │ │ +596 return true; │ │ │ │ +597 if (_M_end_of_seq() || _M_suffix.matched │ │ │ │ +598 || __rhs._M_end_of_seq() || __rhs._M_suffix.matched) │ │ │ │ +599 return false; │ │ │ │ +600 return _M_position == __rhs._M_position │ │ │ │ +601 && _M_n == __rhs._M_n │ │ │ │ +602 && _M_subs == __rhs._M_subs; │ │ │ │ +603 } │ │ │ │ +604 │ │ │ │ +605 template │ │ │ │ +608 _r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r_<___B_i___i_t_e_r_,_ ___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_>& │ │ │ │ +_6_0_9 _r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r_<___B_i___i_t_e_r_,_ ___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_>_:_: │ │ │ │ +610_ _o_p_e_r_a_t_o_r_+_+() │ │ │ │ +611 { │ │ │ │ +612 _Position __prev = _M_position; │ │ │ │ +613 if (_M_suffix.matched) │ │ │ │ +614 *this = _r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r(); │ │ │ │ +615 else if (_M_n + 1 < _M_subs.size()) │ │ │ │ +616 { │ │ │ │ +617 _M_n++; │ │ │ │ +618 _M_result = &_M_current_match(); │ │ │ │ +619 } │ │ │ │ +620 else │ │ │ │ +621 { │ │ │ │ +622 _M_n = 0; │ │ │ │ +623 ++_M_position; │ │ │ │ +624 if (_M_position != _Position()) │ │ │ │ +625 _M_result = &_M_current_match(); │ │ │ │ +626 else if (_M_has_m1 && __prev->suffix().length() != 0) │ │ │ │ +627 { │ │ │ │ +628 _M_suffix.matched = true; │ │ │ │ +629 _M_suffix.first = __prev->suffix().first; │ │ │ │ +630 _M_suffix.second = __prev->suffix().second; │ │ │ │ +631 _M_result = &_M_suffix; │ │ │ │ +632 } │ │ │ │ +633 else │ │ │ │ +634 *this = _r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r(); │ │ │ │ +635 } │ │ │ │ +636 return *this; │ │ │ │ +637 } │ │ │ │ +638 │ │ │ │ +639 template │ │ │ │ +642 void │ │ │ │ +643 _r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r_<___B_i___i_t_e_r_,_ ___C_h___t_y_p_e_,_ ___R_x___t_r_a_i_t_s_>_:_: │ │ │ │ +644_ ___M___i_n_i_t(_Bi_iter __a, _Bi_iter __b) │ │ │ │ +645 { │ │ │ │ +646 _M_has_m1 = false; │ │ │ │ +647 for (auto __it : _M_subs) │ │ │ │ +648 if (__it == -1) │ │ │ │ +649 { │ │ │ │ +650 _M_has_m1 = true; │ │ │ │ +651 break; │ │ │ │ +652 } │ │ │ │ +653 if (_M_position != _Position()) │ │ │ │ +654 _M_result = &_M_current_match(); │ │ │ │ +655 else if (_M_has_m1) │ │ │ │ +656 { │ │ │ │ +657 _M_suffix.matched = true; │ │ │ │ +658 _M_suffix.first = __a; │ │ │ │ +659 _M_suffix.second = __b; │ │ │ │ +660 _M_result = &_M_suffix; │ │ │ │ +661 } │ │ │ │ +662 else │ │ │ │ +663 _M_result = nullptr; │ │ │ │ +664 } │ │ │ │ +665 │ │ │ │ +666_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +667} // namespace │ │ │ │ +_s_t_d_:_:_u_s_e___f_a_c_e_t │ │ │ │ +const _Facet & use_facet(const locale &__loc) │ │ │ │ +Return a facet. │ │ │ │ +DDeeffiinniittiioonn _l_o_c_a_l_e___c_l_a_s_s_e_s_._t_c_c_:_1_9_7 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___s_e_a_r_c_h │ │ │ │ +bool regex_search(_Bi_iter __s, _Bi_iter __e, match_results< _Bi_iter, _Alloc > │ │ │ │ +&__m, const basic_regex< _Ch_type, _Rx_traits > &__re, regex_constants:: │ │ │ │ +match_flag_type __flags=regex_constants::match_default) │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._h_:_2_4_1_8 │ │ │ │ _s_t_d │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ -_s_t_d_:_:_e_x_c_e_p_t_i_o_n_:_:_w_h_a_t │ │ │ │ -virtual const char * what() const noexcept │ │ │ │ +_s_t_d_:_:_h_e_x │ │ │ │ +ios_base & hex(ios_base &__base) │ │ │ │ +Calls base.setf(ios_base::hex, ios_base::basefield). │ │ │ │ +DDeeffiinniittiioonn _i_o_s___b_a_s_e_._h_:_1_0_8_7 │ │ │ │ +_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_:_:_o_c_t │ │ │ │ +ios_base & oct(ios_base &__base) │ │ │ │ +Calls base.setf(ios_base::oct, ios_base::basefield). │ │ │ │ +DDeeffiinniittiioonn _i_o_s___b_a_s_e_._h_:_1_0_9_5 │ │ │ │ +_s_t_d_:_:_____d_e_t_a_i_l │ │ │ │ +Implementation details not part of the namespace std interface. │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_____p_o_l_y_n_o_m_i_a_l │ │ │ │ +constexpr syntax_option_type __polynomial │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_1_8_7 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___f_i_r_s_t___o_n_l_y │ │ │ │ +constexpr match_flag_type format_first_only │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_3_7_2 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___c_o_n_t_i_n_u_o_u_s │ │ │ │ +constexpr match_flag_type match_continuous │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_3_1_5 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___f_l_a_g___t_y_p_e │ │ │ │ +match_flag_type │ │ │ │ +This is a bitmask type indicating regex matching rules. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_2_5_4 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___p_r_e_v___a_v_a_i_l │ │ │ │ +constexpr match_flag_type match_prev_avail │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_3_2_3 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___s_e_d │ │ │ │ +constexpr match_flag_type format_sed │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_3_5_9 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_m_a_t_c_h___n_o_t___n_u_l_l │ │ │ │ +constexpr match_flag_type match_not_null │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_3_1_0 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___c_o_n_s_t_a_n_t_s_:_:_f_o_r_m_a_t___n_o___c_o_p_y │ │ │ │ +constexpr match_flag_type format_no_copy │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___c_o_n_s_t_a_n_t_s_._h_:_3_6_6 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___i_o_s_:_:_f_a_i_l │ │ │ │ +bool fail() const │ │ │ │ +Fast error checking. │ │ │ │ +DDeeffiinniittiioonn _b_a_s_i_c___i_o_s_._h_:_2_0_5 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___i_s_t_r_i_n_g_s_t_r_e_a_m │ │ │ │ +Controlling input for std::string. │ │ │ │ +DDeeffiinniittiioonn _s_s_t_r_e_a_m_:_5_4_8 │ │ │ │ +_s_t_d_:_:_c_t_y_p_e │ │ │ │ +Primary class template ctype facet. │ │ │ │ +DDeeffiinniittiioonn _l_o_c_a_l_e___f_a_c_e_t_s_._h_:_6_1_6 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___r_e_g_e_x │ │ │ │ +A regular expression. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._h_:_4_1_9 │ │ │ │ +_s_t_d_:_:_m_a_t_c_h___r_e_s_u_l_t_s_:_:_f_o_r_m_a_t │ │ │ │ +_Out_iter format(_Out_iter __out, const char_type *__fmt_first, const char_type │ │ │ │ +*__fmt_last, match_flag_type __flags=regex_constants::format_default) const │ │ │ │ +_s_t_d_:_:_____d_e_t_a_i_l_:_:___E_x_e_c_u_t_o_r │ │ │ │ +Takes a regex and an input string and does the matching. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x___e_x_e_c_u_t_o_r_._h_:_5_3 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_r_a_i_t_s │ │ │ │ +Describes aspects of a regular expression. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._h_:_9_7 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_r_a_i_t_s_:_:_v_a_l_u_e │ │ │ │ +int value(_Ch_type __ch, int __radix) const │ │ │ │ +Converts a digit to an int. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._t_c_c_:_3_3_7 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_r_a_i_t_s_:_:_l_o_o_k_u_p___c_o_l_l_a_t_e_n_a_m_e │ │ │ │ +string_type lookup_collatename(_Fwd_iter __first, _Fwd_iter __last) const │ │ │ │ +Gets a collation element by name. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._t_c_c_:_1_2_3 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_r_a_i_t_s_:_:_g_e_t_l_o_c │ │ │ │ +locale_type getloc() const │ │ │ │ +Gets a copy of the current locale in use by the regex_traits object. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._h_:_3_8_9 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_r_a_i_t_s_:_:_i_s_c_t_y_p_e │ │ │ │ +bool isctype(_Ch_type __c, char_class_type __f) const │ │ │ │ +Determines if c is a member of an identified class. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._t_c_c_:_3_2_3 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_r_a_i_t_s_:_:_l_o_o_k_u_p___c_l_a_s_s_n_a_m_e │ │ │ │ +char_class_type lookup_classname(_Fwd_iter __first, _Fwd_iter __last, bool │ │ │ │ +__icase=false) const │ │ │ │ +Maps one or more characters to a named character classification. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._t_c_c_:_2_7_9 │ │ │ │ +_s_t_d_:_:_s_u_b___m_a_t_c_h │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._h_:_9_2_4 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___i_t_e_r_a_t_o_r │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._h_:_2_7_3_5 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___i_t_e_r_a_t_o_r_:_:_r_e_g_e_x___i_t_e_r_a_t_o_r │ │ │ │ +regex_iterator()=default │ │ │ │ +Provides a singular iterator, useful for indicating one-past-the-end of a │ │ │ │ +range. │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_=_= │ │ │ │ +bool operator==(const regex_iterator &) const noexcept │ │ │ │ +Tests the equivalence of two regex iterators. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._t_c_c_:_4_9_9 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_+_+ │ │ │ │ +regex_iterator & operator++() │ │ │ │ +Increments a regex_iterator. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._t_c_c_:_5_1_5 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._h_:_2_8_6_7 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_=_= │ │ │ │ +bool operator==(const regex_token_iterator &__rhs) const │ │ │ │ +Compares a regex_token_iterator to another for equality. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._t_c_c_:_5_9_0 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ +regex_token_iterator & operator=(const regex_token_iterator &__rhs) │ │ │ │ +Assigns a regex_token_iterator to another. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._t_c_c_:_5_7_4 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_+_+ │ │ │ │ +regex_token_iterator & operator++() │ │ │ │ +Increments a regex_token_iterator. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._t_c_c_:_6_1_0 │ │ │ │ +_s_t_d_:_:_r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r_:_:_r_e_g_e_x___t_o_k_e_n___i_t_e_r_a_t_o_r │ │ │ │ +regex_token_iterator() │ │ │ │ +Default constructs a regex_token_iterator. │ │ │ │ +DDeeffiinniittiioonn _r_e_g_e_x_._h_:_2_8_8_7 │ │ │ │ +_s_t_d_:_:_p_a_i_r │ │ │ │ +Struct holding two objects of arbitrary type. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___p_a_i_r_._h_:_2_8_6 │ │ │ │ * bbiittss │ │ │ │ - * _e_x_c_e_p_t_i_o_n_._h │ │ │ │ + * _r_e_g_e_x_._t_c_c │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00356.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: cxxabi_init_exception.h File Reference │ │ │ +libstdc++: regex_constants.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,87 +48,125 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
cxxabi_init_exception.h File Reference
│ │ │ +
regex_constants.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ Namespaces

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

│ │ │ -Macros

#define _GLIBCXX_CDTOR_CALLABI
#define _GLIBCXX_HAVE_CDTOR_CALLABI

│ │ │ +5.1 Regular Expression Syntax Options

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

│ │ │ -Functions

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

│ │ │ +5.2 Matching Rules

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

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

Detailed Description

│ │ │ -

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

│ │ │ +

Constant definitions for the std regex library.

│ │ │ +

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

│ │ │ │ │ │ -

Definition in file cxxabi_init_exception.h.

│ │ │ -

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ _GLIBCXX_CDTOR_CALLABI

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

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.

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

Definition in file regex_constants.h.

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

Go to the source code of this file.

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

│ │ │ -Classes

class  __cxxabiv1::__forced_unwind

│ │ │ +Namespaces

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

│ │ │ +Macros

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

│ │ │ +Functions

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

Detailed Description

│ │ │ -

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

│ │ │ +

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

│ │ │ │ │ │ -

Definition in file cxxabi_forced.h.

│ │ │ -
│ │ │ +

Definition in file boost_concept_check.h.

│ │ │ +

Macro Definition Documentation

│ │ │ + │ │ │ +

◆ _GLIBCXX_CLASS_REQUIRES

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

Definition at line 89 of file boost_concept_check.h.

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

◆ _GLIBCXX_CLASS_REQUIRES2

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

Definition at line 97 of file boost_concept_check.h.

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

◆ _GLIBCXX_CLASS_REQUIRES3

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

Definition at line 105 of file boost_concept_check.h.

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

◆ _GLIBCXX_CLASS_REQUIRES4

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

Definition at line 113 of file boost_concept_check.h.

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

◆ _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT

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

Definition at line 301 of file boost_concept_check.h.

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

◆ _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT

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

Definition at line 290 of file boost_concept_check.h.

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

◆ _IsUnused

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define _IsUnused
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 70 of file boost_concept_check.h.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,12 +1,70 @@ │ │ │ │ libstdc++ │ │ │ │ -cxxabi_forced.h File Reference │ │ │ │ +boost_concept_check.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -CCllaasssseess │ │ │ │ -class   _____c_x_x_a_b_i_v_1_:_:_____f_o_r_c_e_d___u_n_w_i_n_d │ │ │ │ +NNaammeessppaacceess │ │ │ │ +namespace   _____g_n_u___c_x_x │ │ │ │ +namespace   _____g_n_u___d_e_b_u_g │ │ │ │ +namespace   _s_t_d │ │ │ │ +MMaaccrrooss │ │ │ │ +#define  ___G_L_I_B_C_X_X___C_L_A_S_S___R_E_Q_U_I_R_E_S(_type_var, _ns, _concept) │ │ │ │ +#define  ___G_L_I_B_C_X_X___C_L_A_S_S___R_E_Q_U_I_R_E_S_2(_type_var1, _type_var2, _ns, _concept) │ │ │ │ +#define  ___G_L_I_B_C_X_X___C_L_A_S_S___R_E_Q_U_I_R_E_S_3(_type_var1, _type_var2, _type_var3, _ns, │ │ │ │ + _concept) │ │ │ │ +#define  ___G_L_I_B_C_X_X___C_L_A_S_S___R_E_Q_U_I_R_E_S_4(_type_var1, _type_var2, _type_var3, │ │ │ │ + _type_var4, _ns, _concept) │ │ │ │ +#define  ___G_L_I_B_C_X_X___D_E_F_I_N_E___B_I_N_A_R_Y___O_P_E_R_A_T_O_R___C_O_N_S_T_R_A_I_N_T(_OP, _NAME) │ │ │ │ +#define  ___G_L_I_B_C_X_X___D_E_F_I_N_E___B_I_N_A_R_Y___P_R_E_D_I_C_A_T_E___O_P___C_O_N_S_T_R_A_I_N_T(_OP, _NAME) │ │ │ │ +#define  ___I_s_U_n_u_s_e_d │ │ │ │ +FFuunnccttiioonnss │ │ │ │ +template │ │ │ │ + void  _____g_n_u___c_x_x_:_:_____a_u_x___r_e_q_u_i_r_e___b_o_o_l_e_a_n___e_x_p_r (const _Tp &__t) │ │ │ │ + void  ____ggnnuu__ccxxxx::::____eerrrroorr__ttyyppee__mmuusstt__bbee__aa__ssiiggnneedd__iinntteeggeerr__ttyyppee () │ │ │ │ + void  ____ggnnuu__ccxxxx::::____eerrrroorr__ttyyppee__mmuusstt__bbee__aann__iinntteeggeerr__ttyyppee () │ │ │ │ + void  ____ggnnuu__ccxxxx::::____eerrrroorr__ttyyppee__mmuusstt__bbee__aann__uunnssiiggnneedd__iinntteeggeerr__ttyyppee () │ │ │ │ +template │ │ │ │ +constexpr void  _____g_n_u___c_x_x_:_:_____f_u_n_c_t_i_o_n___r_e_q_u_i_r_e_s () │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _c_x_x_a_b_i___f_o_r_c_e_d_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h. │ │ │ │ +********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__CCLLAASSSS__RREEQQUUIIRREESS ********** │ │ │ │ +#define _GLIBCXX_CLASS_REQUIRES ( __ttyyppee__vvaarr, │ │ │ │ + __nnss, │ │ │ │ + __ccoonncceepptt ) │ │ │ │ +Definition at line _8_9 of file _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__CCLLAASSSS__RREEQQUUIIRREESS22 ********** │ │ │ │ +#define _GLIBCXX_CLASS_REQUIRES2 ( __ttyyppee__vvaarr11, │ │ │ │ + __ttyyppee__vvaarr22, │ │ │ │ + __nnss, │ │ │ │ + __ccoonncceepptt ) │ │ │ │ +Definition at line _9_7 of file _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__CCLLAASSSS__RREEQQUUIIRREESS33 ********** │ │ │ │ +#define _GLIBCXX_CLASS_REQUIRES3 ( __ttyyppee__vvaarr11, │ │ │ │ + __ttyyppee__vvaarr22, │ │ │ │ + __ttyyppee__vvaarr33, │ │ │ │ + __nnss, │ │ │ │ + __ccoonncceepptt ) │ │ │ │ +Definition at line _1_0_5 of file _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__CCLLAASSSS__RREEQQUUIIRREESS44 ********** │ │ │ │ +#define _GLIBCXX_CLASS_REQUIRES4 ( __ttyyppee__vvaarr11, │ │ │ │ + __ttyyppee__vvaarr22, │ │ │ │ + __ttyyppee__vvaarr33, │ │ │ │ + __ttyyppee__vvaarr44, │ │ │ │ + __nnss, │ │ │ │ + __ccoonncceepptt ) │ │ │ │ +Definition at line _1_1_3 of file _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__DDEEFFIINNEE__BBIINNAARRYY__OOPPEERRAATTOORR__CCOONNSSTTRRAAIINNTT ********** │ │ │ │ +#define _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT ( __OOPP, │ │ │ │ + __NNAAMMEE ) │ │ │ │ +Definition at line _3_0_1 of file _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h. │ │ │ │ +********** _?◆_? __GGLLIIBBCCXXXX__DDEEFFIINNEE__BBIINNAARRYY__PPRREEDDIICCAATTEE__OOPP__CCOONNSSTTRRAAIINNTT ********** │ │ │ │ +#define _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT ( __OOPP, │ │ │ │ + __NNAAMMEE ) │ │ │ │ +Definition at line _2_9_0 of file _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h. │ │ │ │ +********** _?◆_? __IIssUUnnuusseedd ********** │ │ │ │ +#define _IsUnused │ │ │ │ +Definition at line _7_0 of file _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h. │ │ │ │ * bbiittss │ │ │ │ - * _c_x_x_a_b_i___f_o_r_c_e_d_._h │ │ │ │ + * _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00359_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: cxxabi_forced.h Source File │ │ │ +libstdc++: boost_concept_check.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,85 +48,913 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
cxxabi_forced.h
│ │ │ +
boost_concept_check.h
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// cxxabi.h subset for cancellation -*- C++ -*-
│ │ │ -
2
│ │ │ -
3// Copyright (C) 2007-2024 Free Software Foundation, Inc.
│ │ │ +Go to the documentation of this file.
1// -*- C++ -*-
│ │ │ +
2
│ │ │ +
3// Copyright (C) 2004-2024 Free Software Foundation, Inc.
│ │ │
4//
│ │ │ -
5// This file is part of GCC.
│ │ │ -
6//
│ │ │ -
7// GCC is free software; you can redistribute it and/or modify
│ │ │ -
8// it under the terms of the GNU General Public License as published by
│ │ │ -
9// the Free Software Foundation; either version 3, or (at your option)
│ │ │ -
10// any later version.
│ │ │ -
11//
│ │ │ -
12// GCC is distributed in the hope that it will be useful,
│ │ │ -
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
│ │ │ -
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
│ │ │ -
15// GNU General Public License for more details.
│ │ │ -
16//
│ │ │ -
17// Under Section 7 of GPL version 3, you are granted additional
│ │ │ -
18// permissions described in the GCC Runtime Library Exception, version
│ │ │ -
19// 3.1, as published by the Free Software Foundation.
│ │ │ -
20
│ │ │ -
21// You should have received a copy of the GNU General Public License and
│ │ │ -
22// a copy of the GCC Runtime Library Exception along with this program;
│ │ │ -
23// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │ -
24// <http://www.gnu.org/licenses/>.
│ │ │ -
25
│ │ │ -
26/** @file bits/cxxabi_forced.h
│ │ │ -
27 * This is an internal header file, included by other library headers.
│ │ │ -
28 * Do not attempt to use it directly. @headername{cxxabi.h}
│ │ │ -
29 */
│ │ │ -
30
│ │ │ -
31#ifndef _CXXABI_FORCED_H
│ │ │ -
32#define _CXXABI_FORCED_H 1
│ │ │ -
33
│ │ │ -
34#pragma GCC system_header
│ │ │ -
35
│ │ │ -
36#pragma GCC visibility push(default)
│ │ │ -
37
│ │ │ -
38#ifdef __cplusplus
│ │ │ -
39namespace __cxxabiv1
│ │ │ -
40{
│ │ │ -
41 /**
│ │ │ -
42 * @brief Thrown as part of forced unwinding.
│ │ │ -
43 * @ingroup exceptions
│ │ │ -
44 *
│ │ │ -
45 * A magic placeholder class that can be caught by reference to
│ │ │ -
46 * recognize forced unwinding.
│ │ │ -
47 */
│ │ │ -
│ │ │ - │ │ │ -
49 {
│ │ │ -
50 virtual ~__forced_unwind() throw();
│ │ │ -
51
│ │ │ -
52 // Prevent catch by value.
│ │ │ -
53 virtual void __pure_dummy() = 0;
│ │ │ -
54 };
│ │ │ -
│ │ │ +
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// (C) Copyright Jeremy Siek 2000. Permission to copy, use, modify,
│ │ │ +
26// sell and distribute this software is granted provided this
│ │ │ +
27// copyright notice appears in all copies. This software is provided
│ │ │ +
28// "as is" without express or implied warranty, and with no claim as
│ │ │ +
29// to its suitability for any purpose.
│ │ │ +
30//
│ │ │ +
31
│ │ │ +
32/** @file bits/boost_concept_check.h
│ │ │ +
33 * This is an internal header file, included by other library headers.
│ │ │ +
34 * Do not attempt to use it directly. @headername{iterator}
│ │ │ +
35 */
│ │ │ +
36
│ │ │ +
37// GCC Note: based on version 1.12.0 of the Boost library.
│ │ │ +
38
│ │ │ +
39#ifndef _BOOST_CONCEPT_CHECK_H
│ │ │ +
40#define _BOOST_CONCEPT_CHECK_H 1
│ │ │ +
41
│ │ │ +
42#pragma GCC system_header
│ │ │ +
43
│ │ │ +
44#include <bits/c++config.h>
│ │ │ +
45#include <bits/stl_iterator_base_types.h> // for traits and tags
│ │ │ +
46
│ │ │ +
47namespace std _GLIBCXX_VISIBILITY(default)
│ │ │ +
48{
│ │ │ +
49_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
50_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
│ │ │ +
51 struct _Bit_iterator;
│ │ │ +
52 struct _Bit_const_iterator;
│ │ │ +
53_GLIBCXX_END_NAMESPACE_CONTAINER
│ │ │ +
54_GLIBCXX_END_NAMESPACE_VERSION
│ │ │
55}
│ │ │ -
56#endif // __cplusplus
│ │ │ -
57
│ │ │ -
58#pragma GCC visibility pop
│ │ │ -
59
│ │ │ -
60#endif // __CXXABI_FORCED_H
│ │ │ -
Thrown as part of forced unwinding.
│ │ │ +
56
│ │ │ +
│ │ │ +
57namespace __gnu_debug
│ │ │ +
58{
│ │ │ +
59 template<typename _Iterator, typename _Sequence, typename _Category>
│ │ │ +
60 class _Safe_iterator;
│ │ │ +
61}
│ │ │ +
│ │ │ +
62
│ │ │ +
63namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
│ │ │ +
64{
│ │ │ +
65_GLIBCXX_BEGIN_NAMESPACE_VERSION
│ │ │ +
66
│ │ │ +
67#pragma GCC diagnostic push
│ │ │ +
68#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
│ │ │ +
69
│ │ │ +
70#define _IsUnused __attribute__ ((__unused__))
│ │ │ +
71
│ │ │ +
72// When the C-C code is in use, we would like this function to do as little
│ │ │ +
73// as possible at runtime, use as few resources as possible, and hopefully
│ │ │ +
74// be elided out of existence... hmmm.
│ │ │ +
75template <class _Concept>
│ │ │ +
76_GLIBCXX14_CONSTEXPR inline void __function_requires()
│ │ │ +
77{
│ │ │ +
78 void (_Concept::*__x)() _IsUnused = &_Concept::__constraints;
│ │ │ +
79}
│ │ │ +
80
│ │ │ +
81// No definition: if this is referenced, there's a problem with
│ │ │ +
82// the instantiating type not being one of the required integer types.
│ │ │ +
83// Unfortunately, this results in a link-time error, not a compile-time error.
│ │ │ +
84void __error_type_must_be_an_integer_type();
│ │ │ +
85void __error_type_must_be_an_unsigned_integer_type();
│ │ │ +
86void __error_type_must_be_a_signed_integer_type();
│ │ │ +
87
│ │ │ +
88// ??? Should the "concept_checking*" structs begin with more than _ ?
│ │ │ +
89#define _GLIBCXX_CLASS_REQUIRES(_type_var, _ns, _concept) \
│ │ │ +
90 typedef void (_ns::_concept <_type_var>::* _func##_type_var##_concept)(); \
│ │ │ +
91 template <_func##_type_var##_concept _Tp1> \
│ │ │ +
92 struct _concept_checking##_type_var##_concept { }; \
│ │ │ +
93 typedef _concept_checking##_type_var##_concept< \
│ │ │ +
94 &_ns::_concept <_type_var>::__constraints> \
│ │ │ +
95 _concept_checking_typedef##_type_var##_concept
│ │ │ +
96
│ │ │ +
97#define _GLIBCXX_CLASS_REQUIRES2(_type_var1, _type_var2, _ns, _concept) \
│ │ │ +
98 typedef void (_ns::_concept <_type_var1,_type_var2>::* _func##_type_var1##_type_var2##_concept)(); \
│ │ │ +
99 template <_func##_type_var1##_type_var2##_concept _Tp1> \
│ │ │ +
100 struct _concept_checking##_type_var1##_type_var2##_concept { }; \
│ │ │ +
101 typedef _concept_checking##_type_var1##_type_var2##_concept< \
│ │ │ +
102 &_ns::_concept <_type_var1,_type_var2>::__constraints> \
│ │ │ +
103 _concept_checking_typedef##_type_var1##_type_var2##_concept
│ │ │ +
104
│ │ │ +
105#define _GLIBCXX_CLASS_REQUIRES3(_type_var1, _type_var2, _type_var3, _ns, _concept) \
│ │ │ +
106 typedef void (_ns::_concept <_type_var1,_type_var2,_type_var3>::* _func##_type_var1##_type_var2##_type_var3##_concept)(); \
│ │ │ +
107 template <_func##_type_var1##_type_var2##_type_var3##_concept _Tp1> \
│ │ │ +
108 struct _concept_checking##_type_var1##_type_var2##_type_var3##_concept { }; \
│ │ │ +
109 typedef _concept_checking##_type_var1##_type_var2##_type_var3##_concept< \
│ │ │ +
110 &_ns::_concept <_type_var1,_type_var2,_type_var3>::__constraints> \
│ │ │ +
111 _concept_checking_typedef##_type_var1##_type_var2##_type_var3##_concept
│ │ │ +
112
│ │ │ +
113#define _GLIBCXX_CLASS_REQUIRES4(_type_var1, _type_var2, _type_var3, _type_var4, _ns, _concept) \
│ │ │ +
114 typedef void (_ns::_concept <_type_var1,_type_var2,_type_var3,_type_var4>::* _func##_type_var1##_type_var2##_type_var3##_type_var4##_concept)(); \
│ │ │ +
115 template <_func##_type_var1##_type_var2##_type_var3##_type_var4##_concept _Tp1> \
│ │ │ +
116 struct _concept_checking##_type_var1##_type_var2##_type_var3##_type_var4##_concept { }; \
│ │ │ +
117 typedef _concept_checking##_type_var1##_type_var2##_type_var3##_type_var4##_concept< \
│ │ │ +
118 &_ns::_concept <_type_var1,_type_var2,_type_var3,_type_var4>::__constraints> \
│ │ │ +
119 _concept_checking_typedef##_type_var1##_type_var2##_type_var3##_type_var4##_concept
│ │ │ +
120
│ │ │ +
121
│ │ │ +
122template <class _Tp1, class _Tp2>
│ │ │ +
123struct _Aux_require_same { };
│ │ │ +
124
│ │ │ +
125template <class _Tp>
│ │ │ +
126struct _Aux_require_same<_Tp,_Tp> { typedef _Tp _Type; };
│ │ │ +
127
│ │ │ +
128 template <class _Tp1, class _Tp2>
│ │ │ +
129 struct _SameTypeConcept
│ │ │ +
130 {
│ │ │ +
131 void __constraints() {
│ │ │ +
132 typedef typename _Aux_require_same<_Tp1, _Tp2>::_Type _Required;
│ │ │ +
133 }
│ │ │ +
134 };
│ │ │ +
135
│ │ │ +
136 template <class _Tp>
│ │ │ +
137 struct _IntegerConcept {
│ │ │ +
138 void __constraints() {
│ │ │ +
139 __error_type_must_be_an_integer_type();
│ │ │ +
140 }
│ │ │ +
141 };
│ │ │ +
142 template <> struct _IntegerConcept<short> { void __constraints() {} };
│ │ │ +
143 template <> struct _IntegerConcept<unsigned short> { void __constraints(){} };
│ │ │ +
144 template <> struct _IntegerConcept<int> { void __constraints() {} };
│ │ │ +
145 template <> struct _IntegerConcept<unsigned int> { void __constraints() {} };
│ │ │ +
146 template <> struct _IntegerConcept<long> { void __constraints() {} };
│ │ │ +
147 template <> struct _IntegerConcept<unsigned long> { void __constraints() {} };
│ │ │ +
148 template <> struct _IntegerConcept<long long> { void __constraints() {} };
│ │ │ +
149 template <> struct _IntegerConcept<unsigned long long>
│ │ │ +
150 { void __constraints() {} };
│ │ │ +
151
│ │ │ +
152 template <class _Tp>
│ │ │ +
153 struct _SignedIntegerConcept {
│ │ │ +
154 void __constraints() {
│ │ │ +
155 __error_type_must_be_a_signed_integer_type();
│ │ │ +
156 }
│ │ │ +
157 };
│ │ │ +
158 template <> struct _SignedIntegerConcept<short> { void __constraints() {} };
│ │ │ +
159 template <> struct _SignedIntegerConcept<int> { void __constraints() {} };
│ │ │ +
160 template <> struct _SignedIntegerConcept<long> { void __constraints() {} };
│ │ │ +
161 template <> struct _SignedIntegerConcept<long long> { void __constraints(){}};
│ │ │ +
162
│ │ │ +
163 template <class _Tp>
│ │ │ +
164 struct _UnsignedIntegerConcept {
│ │ │ +
165 void __constraints() {
│ │ │ +
166 __error_type_must_be_an_unsigned_integer_type();
│ │ │ +
167 }
│ │ │ +
168 };
│ │ │ +
169 template <> struct _UnsignedIntegerConcept<unsigned short>
│ │ │ +
170 { void __constraints() {} };
│ │ │ +
171 template <> struct _UnsignedIntegerConcept<unsigned int>
│ │ │ +
172 { void __constraints() {} };
│ │ │ +
173 template <> struct _UnsignedIntegerConcept<unsigned long>
│ │ │ +
174 { void __constraints() {} };
│ │ │ +
175 template <> struct _UnsignedIntegerConcept<unsigned long long>
│ │ │ +
176 { void __constraints() {} };
│ │ │ +
177
│ │ │ +
178 //===========================================================================
│ │ │ +
179 // Basic Concepts
│ │ │ +
180
│ │ │ +
181 template <class _Tp>
│ │ │ +
182 struct _DefaultConstructibleConcept
│ │ │ +
183 {
│ │ │ +
184 void __constraints() {
│ │ │ +
185 _Tp __a _IsUnused; // require default constructor
│ │ │ +
186 }
│ │ │ +
187 };
│ │ │ +
188
│ │ │ +
189 template <class _Tp>
│ │ │ +
190 struct _AssignableConcept
│ │ │ +
191 {
│ │ │ +
192 void __constraints() {
│ │ │ +
193 __a = __a; // require assignment operator
│ │ │ +
194 __const_constraints(__a);
│ │ │ +
195 }
│ │ │ +
196 void __const_constraints(const _Tp& __b) {
│ │ │ +
197 __a = __b; // const required for argument to assignment
│ │ │ +
198 }
│ │ │ +
199 _Tp __a;
│ │ │ +
200 // possibly should be "Tp* a;" and then dereference "a" in constraint
│ │ │ +
201 // functions? present way would require a default ctor, i think...
│ │ │ +
202 };
│ │ │ +
203
│ │ │ +
204 template <class _Tp>
│ │ │ +
205 struct _CopyConstructibleConcept
│ │ │ +
206 {
│ │ │ +
207 void __constraints() {
│ │ │ +
208 _Tp __a(__b); // require copy constructor
│ │ │ +
209 _Tp* __ptr _IsUnused = &__a; // require address of operator
│ │ │ +
210 __const_constraints(__a);
│ │ │ +
211 }
│ │ │ +
212 void __const_constraints(const _Tp& __a) {
│ │ │ +
213 _Tp __c _IsUnused(__a); // require const copy constructor
│ │ │ +
214 const _Tp* __ptr _IsUnused = &__a; // require const address of operator
│ │ │ +
215 }
│ │ │ +
216 _Tp __b;
│ │ │ +
217 };
│ │ │ +
218
│ │ │ +
219 // The SGI STL version of Assignable requires copy constructor and operator=
│ │ │ +
220 template <class _Tp>
│ │ │ +
221 struct _SGIAssignableConcept
│ │ │ +
222 {
│ │ │ +
223 void __constraints() {
│ │ │ +
224 _Tp __b _IsUnused(__a);
│ │ │ +
225 __a = __a; // require assignment operator
│ │ │ +
226 __const_constraints(__a);
│ │ │ +
227 }
│ │ │ +
228 void __const_constraints(const _Tp& __b) {
│ │ │ +
229 _Tp __c _IsUnused(__b);
│ │ │ +
230 __a = __b; // const required for argument to assignment
│ │ │ +
231 }
│ │ │ +
232 _Tp __a;
│ │ │ +
233 };
│ │ │ +
234
│ │ │ +
235 template <class _From, class _To>
│ │ │ +
236 struct _ConvertibleConcept
│ │ │ +
237 {
│ │ │ +
238 void __constraints() {
│ │ │ +
239 _To __y _IsUnused = __x;
│ │ │ +
240 }
│ │ │ +
241 _From __x;
│ │ │ +
242 };
│ │ │ +
243
│ │ │ +
244 // The C++ standard requirements for many concepts talk about return
│ │ │ +
245 // types that must be "convertible to bool". The problem with this
│ │ │ +
246 // requirement is that it leaves the door open for evil proxies that
│ │ │ +
247 // define things like operator|| with strange return types. Two
│ │ │ +
248 // possible solutions are:
│ │ │ +
249 // 1) require the return type to be exactly bool
│ │ │ +
250 // 2) stay with convertible to bool, and also
│ │ │ +
251 // specify stuff about all the logical operators.
│ │ │ +
252 // For now we just test for convertible to bool.
│ │ │ +
253 template <class _Tp>
│ │ │ +
254 void __aux_require_boolean_expr(const _Tp& __t) {
│ │ │ +
255 bool __x _IsUnused = __t;
│ │ │ +
256 }
│ │ │ +
257
│ │ │ +
258// FIXME
│ │ │ +
259 template <class _Tp>
│ │ │ +
260 struct _EqualityComparableConcept
│ │ │ +
261 {
│ │ │ +
262 void __constraints() {
│ │ │ +
263 __aux_require_boolean_expr(__a == __b);
│ │ │ +
264 }
│ │ │ +
265 _Tp __a, __b;
│ │ │ +
266 };
│ │ │ +
267
│ │ │ +
268 template <class _Tp>
│ │ │ +
269 struct _LessThanComparableConcept
│ │ │ +
270 {
│ │ │ +
271 void __constraints() {
│ │ │ +
272 __aux_require_boolean_expr(__a < __b);
│ │ │ +
273 }
│ │ │ +
274 _Tp __a, __b;
│ │ │ +
275 };
│ │ │ +
276
│ │ │ +
277 // This is equivalent to SGI STL's LessThanComparable.
│ │ │ +
278 template <class _Tp>
│ │ │ +
279 struct _ComparableConcept
│ │ │ +
280 {
│ │ │ +
281 void __constraints() {
│ │ │ +
282 __aux_require_boolean_expr(__a < __b);
│ │ │ +
283 __aux_require_boolean_expr(__a > __b);
│ │ │ +
284 __aux_require_boolean_expr(__a <= __b);
│ │ │ +
285 __aux_require_boolean_expr(__a >= __b);
│ │ │ +
286 }
│ │ │ +
287 _Tp __a, __b;
│ │ │ +
288 };
│ │ │ +
289
│ │ │ +
290#define _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(_OP,_NAME) \
│ │ │ +
291 template <class _First, class _Second> \
│ │ │ +
292 struct _NAME { \
│ │ │ +
293 void __constraints() { (void)__constraints_(); } \
│ │ │ +
294 bool __constraints_() { \
│ │ │ +
295 return __a _OP __b; \
│ │ │ +
296 } \
│ │ │ +
297 _First __a; \
│ │ │ +
298 _Second __b; \
│ │ │ +
299 }
│ │ │ +
300
│ │ │ +
301#define _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(_OP,_NAME) \
│ │ │ +
302 template <class _Ret, class _First, class _Second> \
│ │ │ +
303 struct _NAME { \
│ │ │ +
304 void __constraints() { (void)__constraints_(); } \
│ │ │ +
305 _Ret __constraints_() { \
│ │ │ +
306 return __a _OP __b; \
│ │ │ +
307 } \
│ │ │ +
308 _First __a; \
│ │ │ +
309 _Second __b; \
│ │ │ +
310 }
│ │ │ +
311
│ │ │ +
312 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(==, _EqualOpConcept);
│ │ │ +
313 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(!=, _NotEqualOpConcept);
│ │ │ +
314 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(<, _LessThanOpConcept);
│ │ │ +
315 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(<=, _LessEqualOpConcept);
│ │ │ +
316 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(>, _GreaterThanOpConcept);
│ │ │ +
317 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(>=, _GreaterEqualOpConcept);
│ │ │ +
318
│ │ │ +
319 _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(+, _PlusOpConcept);
│ │ │ +
320 _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(*, _TimesOpConcept);
│ │ │ +
321 _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(/, _DivideOpConcept);
│ │ │ +
322 _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(-, _SubtractOpConcept);
│ │ │ +
323 _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(%, _ModOpConcept);
│ │ │ +
324
│ │ │ +
325#undef _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT
│ │ │ +
326#undef _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT
│ │ │ +
327
│ │ │ +
328 //===========================================================================
│ │ │ +
329 // Function Object Concepts
│ │ │ +
330
│ │ │ +
331 template <class _Func, class _Return>
│ │ │ +
332 struct _GeneratorConcept
│ │ │ +
333 {
│ │ │ +
334 void __constraints() {
│ │ │ +
335 const _Return& __r _IsUnused = __f();// require operator() member function
│ │ │ +
336 }
│ │ │ +
337 _Func __f;
│ │ │ +
338 };
│ │ │ +
339
│ │ │ +
340
│ │ │ +
341 template <class _Func>
│ │ │ +
342 struct _GeneratorConcept<_Func,void>
│ │ │ +
343 {
│ │ │ +
344 void __constraints() {
│ │ │ +
345 __f(); // require operator() member function
│ │ │ +
346 }
│ │ │ +
347 _Func __f;
│ │ │ +
348 };
│ │ │ +
349
│ │ │ +
350 template <class _Func, class _Return, class _Arg>
│ │ │ +
351 struct _UnaryFunctionConcept
│ │ │ +
352 {
│ │ │ +
353 void __constraints() {
│ │ │ +
354 __r = __f(__arg); // require operator()
│ │ │ +
355 }
│ │ │ +
356 _Func __f;
│ │ │ +
357 _Arg __arg;
│ │ │ +
358 _Return __r;
│ │ │ +
359 };
│ │ │ +
360
│ │ │ +
361 template <class _Func, class _Arg>
│ │ │ +
362 struct _UnaryFunctionConcept<_Func, void, _Arg> {
│ │ │ +
363 void __constraints() {
│ │ │ +
364 __f(__arg); // require operator()
│ │ │ +
365 }
│ │ │ +
366 _Func __f;
│ │ │ +
367 _Arg __arg;
│ │ │ +
368 };
│ │ │ +
369
│ │ │ +
370 template <class _Func, class _Return, class _First, class _Second>
│ │ │ +
371 struct _BinaryFunctionConcept
│ │ │ +
372 {
│ │ │ +
373 void __constraints() {
│ │ │ +
374 __r = __f(__first, __second); // require operator()
│ │ │ +
375 }
│ │ │ +
376 _Func __f;
│ │ │ +
377 _First __first;
│ │ │ +
378 _Second __second;
│ │ │ +
379 _Return __r;
│ │ │ +
380 };
│ │ │ +
381
│ │ │ +
382 template <class _Func, class _First, class _Second>
│ │ │ +
383 struct _BinaryFunctionConcept<_Func, void, _First, _Second>
│ │ │ +
384 {
│ │ │ +
385 void __constraints() {
│ │ │ +
386 __f(__first, __second); // require operator()
│ │ │ +
387 }
│ │ │ +
388 _Func __f;
│ │ │ +
389 _First __first;
│ │ │ +
390 _Second __second;
│ │ │ +
391 };
│ │ │ +
392
│ │ │ +
393 template <class _Func, class _Arg>
│ │ │ +
394 struct _UnaryPredicateConcept
│ │ │ +
395 {
│ │ │ +
396 void __constraints() {
│ │ │ +
397 __aux_require_boolean_expr(__f(__arg)); // require op() returning bool
│ │ │ +
398 }
│ │ │ +
399 _Func __f;
│ │ │ +
400 _Arg __arg;
│ │ │ +
401 };
│ │ │ +
402
│ │ │ +
403 template <class _Func, class _First, class _Second>
│ │ │ +
404 struct _BinaryPredicateConcept
│ │ │ +
405 {
│ │ │ +
406 void __constraints() {
│ │ │ +
407 __aux_require_boolean_expr(__f(__a, __b)); // require op() returning bool
│ │ │ +
408 }
│ │ │ +
409 _Func __f;
│ │ │ +
410 _First __a;
│ │ │ +
411 _Second __b;
│ │ │ +
412 };
│ │ │ +
413
│ │ │ +
414 // use this when functor is used inside a container class like std::set
│ │ │ +
415 template <class _Func, class _First, class _Second>
│ │ │ +
416 struct _Const_BinaryPredicateConcept {
│ │ │ +
417 void __constraints() {
│ │ │ +
418 __const_constraints(__f);
│ │ │ +
419 }
│ │ │ +
420 void __const_constraints(const _Func& __fun) {
│ │ │ +
421 __function_requires<_BinaryPredicateConcept<_Func, _First, _Second> >();
│ │ │ +
422 // operator() must be a const member function
│ │ │ +
423 __aux_require_boolean_expr(__fun(__a, __b));
│ │ │ +
424 }
│ │ │ +
425 _Func __f;
│ │ │ +
426 _First __a;
│ │ │ +
427 _Second __b;
│ │ │ +
428 };
│ │ │ +
429
│ │ │ +
430 //===========================================================================
│ │ │ +
431 // Iterator Concepts
│ │ │ +
432
│ │ │ +
433 template <class _Tp>
│ │ │ +
434 struct _TrivialIteratorConcept
│ │ │ +
435 {
│ │ │ +
436 void __constraints() {
│ │ │ +
437// __function_requires< _DefaultConstructibleConcept<_Tp> >();
│ │ │ +
438 __function_requires< _AssignableConcept<_Tp> >();
│ │ │ +
439 __function_requires< _EqualityComparableConcept<_Tp> >();
│ │ │ +
440// typedef typename std::iterator_traits<_Tp>::value_type _V;
│ │ │ +
441 (void)*__i; // require dereference operator
│ │ │ +
442 }
│ │ │ +
443 _Tp __i;
│ │ │ +
444 };
│ │ │ +
445
│ │ │ +
446 template <class _Tp>
│ │ │ +
447 struct _Mutable_TrivialIteratorConcept
│ │ │ +
448 {
│ │ │ +
449 void __constraints() {
│ │ │ +
450 __function_requires< _TrivialIteratorConcept<_Tp> >();
│ │ │ +
451 *__i = *__j; // require dereference and assignment
│ │ │ +
452 }
│ │ │ +
453 _Tp __i, __j;
│ │ │ +
454 };
│ │ │ +
455
│ │ │ +
456 template <class _Tp>
│ │ │ +
457 struct _InputIteratorConcept
│ │ │ +
458 {
│ │ │ +
459 void __constraints() {
│ │ │ +
460 __function_requires< _TrivialIteratorConcept<_Tp> >();
│ │ │ +
461 // require iterator_traits typedef's
│ │ │ +
462 typedef typename std::iterator_traits<_Tp>::difference_type _Diff;
│ │ │ +
463// __function_requires< _SignedIntegerConcept<_Diff> >();
│ │ │ +
464 typedef typename std::iterator_traits<_Tp>::reference _Ref;
│ │ │ +
465 typedef typename std::iterator_traits<_Tp>::pointer _Pt;
│ │ │ +
466 typedef typename std::iterator_traits<_Tp>::iterator_category _Cat;
│ │ │ +
467 __function_requires< _ConvertibleConcept<
│ │ │ +
468 typename std::iterator_traits<_Tp>::iterator_category,
│ │ │ +
469 std::input_iterator_tag> >();
│ │ │ +
470 ++__i; // require preincrement operator
│ │ │ +
471 __i++; // require postincrement operator
│ │ │ +
472 }
│ │ │ +
473 _Tp __i;
│ │ │ +
474 };
│ │ │ +
475
│ │ │ +
476 template <class _Tp, class _ValueT>
│ │ │ +
477 struct _OutputIteratorConcept
│ │ │ +
478 {
│ │ │ +
479 void __constraints() {
│ │ │ +
480 __function_requires< _AssignableConcept<_Tp> >();
│ │ │ +
481 ++__i; // require preincrement operator
│ │ │ +
482 __i++; // require postincrement operator
│ │ │ +
483 *__i++ = __val(); // require postincrement and assignment
│ │ │ +
484 }
│ │ │ +
485 _Tp __i;
│ │ │ +
486 // Use a function pointer here so no definition of the function needed.
│ │ │ +
487 // Just need something that returns a _ValueT (which might be a reference).
│ │ │ +
488 _ValueT (*__val)();
│ │ │ +
489 };
│ │ │ +
490
│ │ │ +
491 template<typename _Tp>
│ │ │ +
492 struct _Is_vector_bool_iterator
│ │ │ +
493 { static const bool __value = false; };
│ │ │ +
494
│ │ │ +
495#ifdef _GLIBCXX_DEBUG
│ │ │ +
496 namespace __cont = ::std::_GLIBCXX_STD_C;
│ │ │ +
497#else
│ │ │ +
498 namespace __cont = ::std;
│ │ │ +
499#endif
│ │ │ +
500
│ │ │ +
501 // Trait to identify vector<bool>::iterator
│ │ │ +
502 template <>
│ │ │ +
503 struct _Is_vector_bool_iterator<__cont::_Bit_iterator>
│ │ │ +
504 { static const bool __value = true; };
│ │ │ +
505
│ │ │ +
506 // And for vector<bool>::const_iterator.
│ │ │ +
507 template <>
│ │ │ +
508 struct _Is_vector_bool_iterator<__cont::_Bit_const_iterator>
│ │ │ +
509 { static const bool __value = true; };
│ │ │ +
510
│ │ │ +
511 // And for __gnu_debug::vector<bool> iterators too.
│ │ │ +
512 template <typename _It, typename _Seq, typename _Tag>
│ │ │ +
513 struct _Is_vector_bool_iterator<__gnu_debug::_Safe_iterator<_It, _Seq, _Tag> >
│ │ │ +
514 : _Is_vector_bool_iterator<_It> { };
│ │ │ +
515
│ │ │ +
516 template <class _Tp, bool = _Is_vector_bool_iterator<_Tp>::__value>
│ │ │ +
517 struct _ForwardIteratorReferenceConcept
│ │ │ +
518 {
│ │ │ +
519 void __constraints() {
│ │ │ +
520#if __cplusplus >= 201103L
│ │ │ +
521 typedef typename std::iterator_traits<_Tp>::reference _Ref;
│ │ │ +
522 static_assert(std::is_reference<_Ref>::value,
│ │ │ +
523 "reference type of a forward iterator must be a real reference");
│ │ │ +
524#endif
│ │ │ +
525 }
│ │ │ +
526 };
│ │ │ +
527
│ │ │ +
528 template <class _Tp, bool = _Is_vector_bool_iterator<_Tp>::__value>
│ │ │ +
529 struct _Mutable_ForwardIteratorReferenceConcept
│ │ │ +
530 {
│ │ │ +
531 void __constraints() {
│ │ │ +
532 typedef typename std::iterator_traits<_Tp>::reference _Ref;
│ │ │ +
533 typedef typename std::iterator_traits<_Tp>::value_type _Val;
│ │ │ +
534 __function_requires< _SameTypeConcept<_Ref, _Val&> >();
│ │ │ +
535 }
│ │ │ +
536 };
│ │ │ +
537
│ │ │ +
538 // vector<bool> iterators are not real forward iterators, but we ignore that.
│ │ │ +
539 template <class _Tp>
│ │ │ +
540 struct _ForwardIteratorReferenceConcept<_Tp, true>
│ │ │ +
541 {
│ │ │ +
542 void __constraints() { }
│ │ │ +
543 };
│ │ │ +
544
│ │ │ +
545 // vector<bool> iterators are not real forward iterators, but we ignore that.
│ │ │ +
546 template <class _Tp>
│ │ │ +
547 struct _Mutable_ForwardIteratorReferenceConcept<_Tp, true>
│ │ │ +
548 {
│ │ │ +
549 void __constraints() { }
│ │ │ +
550 };
│ │ │ +
551
│ │ │ +
552#pragma GCC diagnostic push
│ │ │ +
553#pragma GCC diagnostic ignored "-Wunused-variable"
│ │ │ +
554
│ │ │ +
555 template <class _Tp>
│ │ │ +
556 struct _ForwardIteratorConcept
│ │ │ +
557 {
│ │ │ +
558 void __constraints() {
│ │ │ +
559 __function_requires< _InputIteratorConcept<_Tp> >();
│ │ │ +
560 __function_requires< _DefaultConstructibleConcept<_Tp> >();
│ │ │ +
561 __function_requires< _ConvertibleConcept<
│ │ │ +
562 typename std::iterator_traits<_Tp>::iterator_category,
│ │ │ +
563 std::forward_iterator_tag> >();
│ │ │ +
564 __function_requires< _ForwardIteratorReferenceConcept<_Tp> >();
│ │ │ +
565 _Tp& __j = ++__i;
│ │ │ +
566 const _Tp& __k = __i++;
│ │ │ +
567 typedef typename std::iterator_traits<_Tp>::reference _Ref;
│ │ │ +
568 _Ref __r = *__k;
│ │ │ +
569 _Ref __r2 = *__i++;
│ │ │ +
570 }
│ │ │ +
571 _Tp __i;
│ │ │ +
572 };
│ │ │ +
573
│ │ │ +
574 template <class _Tp>
│ │ │ +
575 struct _Mutable_ForwardIteratorConcept
│ │ │ +
576 {
│ │ │ +
577 void __constraints() {
│ │ │ +
578 __function_requires< _ForwardIteratorConcept<_Tp> >();
│ │ │ +
579 typedef typename std::iterator_traits<_Tp>::reference _Ref;
│ │ │ +
580 typedef typename std::iterator_traits<_Tp>::value_type _Val;
│ │ │ +
581 __function_requires< _Mutable_ForwardIteratorReferenceConcept<_Tp> >();
│ │ │ +
582 }
│ │ │ +
583 _Tp __i;
│ │ │ +
584 };
│ │ │ +
585
│ │ │ +
586 template <class _Tp>
│ │ │ +
587 struct _BidirectionalIteratorConcept
│ │ │ +
588 {
│ │ │ +
589 void __constraints() {
│ │ │ +
590 __function_requires< _ForwardIteratorConcept<_Tp> >();
│ │ │ +
591 __function_requires< _ConvertibleConcept<
│ │ │ +
592 typename std::iterator_traits<_Tp>::iterator_category,
│ │ │ +
593 std::bidirectional_iterator_tag> >();
│ │ │ +
594 _Tp& __j = --__i; // require predecrement operator
│ │ │ +
595 const _Tp& __k = __i--; // require postdecrement operator
│ │ │ +
596 typedef typename std::iterator_traits<_Tp>::reference _Ref;
│ │ │ +
597 _Ref __r = *__j--;
│ │ │ +
598 }
│ │ │ +
599 _Tp __i;
│ │ │ +
600 };
│ │ │ +
601
│ │ │ +
602 template <class _Tp>
│ │ │ +
603 struct _Mutable_BidirectionalIteratorConcept
│ │ │ +
604 {
│ │ │ +
605 void __constraints() {
│ │ │ +
606 __function_requires< _BidirectionalIteratorConcept<_Tp> >();
│ │ │ +
607 __function_requires< _Mutable_ForwardIteratorConcept<_Tp> >();
│ │ │ +
608 }
│ │ │ +
609 _Tp __i;
│ │ │ +
610 };
│ │ │ +
611
│ │ │ +
612
│ │ │ +
613 template <class _Tp>
│ │ │ +
614 struct _RandomAccessIteratorConcept
│ │ │ +
615 {
│ │ │ +
616 void __constraints() {
│ │ │ +
617 __function_requires< _BidirectionalIteratorConcept<_Tp> >();
│ │ │ +
618 __function_requires< _ComparableConcept<_Tp> >();
│ │ │ +
619 __function_requires< _ConvertibleConcept<
│ │ │ +
620 typename std::iterator_traits<_Tp>::iterator_category,
│ │ │ +
621 std::random_access_iterator_tag> >();
│ │ │ +
622 typedef typename std::iterator_traits<_Tp>::reference _Ref;
│ │ │ +
623
│ │ │ +
624 _Tp& __j = __i += __n; // require assignment addition operator
│ │ │ +
625 __i = __i + __n; __i = __n + __i; // require addition with difference type
│ │ │ +
626 _Tp& __k = __i -= __n; // require assignment subtraction op
│ │ │ +
627 __i = __i - __n; // require subtraction with
│ │ │ +
628 // difference type
│ │ │ +
629 __n = __i - __j; // require difference operator
│ │ │ +
630 _Ref __r = __i[__n]; // require element access operator
│ │ │ +
631 }
│ │ │ +
632 _Tp __a, __b;
│ │ │ +
633 _Tp __i, __j;
│ │ │ +
634 typename std::iterator_traits<_Tp>::difference_type __n;
│ │ │ +
635 };
│ │ │ +
636
│ │ │ +
637 template <class _Tp>
│ │ │ +
638 struct _Mutable_RandomAccessIteratorConcept
│ │ │ +
639 {
│ │ │ +
640 void __constraints() {
│ │ │ +
641 __function_requires< _RandomAccessIteratorConcept<_Tp> >();
│ │ │ +
642 __function_requires< _Mutable_BidirectionalIteratorConcept<_Tp> >();
│ │ │ +
643 }
│ │ │ +
644 _Tp __i;
│ │ │ +
645 typename std::iterator_traits<_Tp>::difference_type __n;
│ │ │ +
646 };
│ │ │ +
647
│ │ │ +
648#pragma GCC diagnostic pop
│ │ │ +
649
│ │ │ +
650 //===========================================================================
│ │ │ +
651 // Container Concepts
│ │ │ +
652
│ │ │ +
653 template <class _Container>
│ │ │ +
654 struct _ContainerConcept
│ │ │ +
655 {
│ │ │ +
656 typedef typename _Container::value_type _Value_type;
│ │ │ +
657 typedef typename _Container::difference_type _Difference_type;
│ │ │ +
658 typedef typename _Container::size_type _Size_type;
│ │ │ +
659 typedef typename _Container::const_reference _Const_reference;
│ │ │ +
660 typedef typename _Container::const_pointer _Const_pointer;
│ │ │ +
661 typedef typename _Container::const_iterator _Const_iterator;
│ │ │ +
662
│ │ │ +
663 void __constraints() {
│ │ │ +
664 __function_requires< _InputIteratorConcept<_Const_iterator> >();
│ │ │ +
665 __function_requires< _AssignableConcept<_Container> >();
│ │ │ +
666 const _Container __c;
│ │ │ +
667 __i = __c.begin();
│ │ │ +
668 __i = __c.end();
│ │ │ +
669 __n = __c.size();
│ │ │ +
670 __n = __c.max_size();
│ │ │ +
671 __b = __c.empty();
│ │ │ +
672 }
│ │ │ +
673 bool __b;
│ │ │ +
674 _Const_iterator __i;
│ │ │ +
675 _Size_type __n;
│ │ │ +
676 };
│ │ │ +
677
│ │ │ +
678 template <class _Container>
│ │ │ +
679 struct _Mutable_ContainerConcept
│ │ │ +
680 {
│ │ │ +
681 typedef typename _Container::value_type _Value_type;
│ │ │ +
682 typedef typename _Container::reference _Reference;
│ │ │ +
683 typedef typename _Container::iterator _Iterator;
│ │ │ +
684 typedef typename _Container::pointer _Pointer;
│ │ │ +
685
│ │ │ +
686 void __constraints() {
│ │ │ +
687 __function_requires< _ContainerConcept<_Container> >();
│ │ │ +
688 __function_requires< _AssignableConcept<_Value_type> >();
│ │ │ +
689 __function_requires< _InputIteratorConcept<_Iterator> >();
│ │ │ +
690
│ │ │ +
691 __i = __c.begin();
│ │ │ +
692 __i = __c.end();
│ │ │ +
693 __c.swap(__c2);
│ │ │ +
694 }
│ │ │ +
695 _Iterator __i;
│ │ │ +
696 _Container __c, __c2;
│ │ │ +
697 };
│ │ │ +
698
│ │ │ +
699 template <class _ForwardContainer>
│ │ │ +
700 struct _ForwardContainerConcept
│ │ │ +
701 {
│ │ │ +
702 void __constraints() {
│ │ │ +
703 __function_requires< _ContainerConcept<_ForwardContainer> >();
│ │ │ +
704 typedef typename _ForwardContainer::const_iterator _Const_iterator;
│ │ │ +
705 __function_requires< _ForwardIteratorConcept<_Const_iterator> >();
│ │ │ +
706 }
│ │ │ +
707 };
│ │ │ +
708
│ │ │ +
709 template <class _ForwardContainer>
│ │ │ +
710 struct _Mutable_ForwardContainerConcept
│ │ │ +
711 {
│ │ │ +
712 void __constraints() {
│ │ │ +
713 __function_requires< _ForwardContainerConcept<_ForwardContainer> >();
│ │ │ +
714 __function_requires< _Mutable_ContainerConcept<_ForwardContainer> >();
│ │ │ +
715 typedef typename _ForwardContainer::iterator _Iterator;
│ │ │ +
716 __function_requires< _Mutable_ForwardIteratorConcept<_Iterator> >();
│ │ │ +
717 }
│ │ │ +
718 };
│ │ │ +
719
│ │ │ +
720 template <class _ReversibleContainer>
│ │ │ +
721 struct _ReversibleContainerConcept
│ │ │ +
722 {
│ │ │ +
723 typedef typename _ReversibleContainer::const_iterator _Const_iterator;
│ │ │ +
724 typedef typename _ReversibleContainer::const_reverse_iterator
│ │ │ +
725 _Const_reverse_iterator;
│ │ │ +
726
│ │ │ +
727 void __constraints() {
│ │ │ +
728 __function_requires< _ForwardContainerConcept<_ReversibleContainer> >();
│ │ │ +
729 __function_requires< _BidirectionalIteratorConcept<_Const_iterator> >();
│ │ │ +
730 __function_requires<
│ │ │ +
731 _BidirectionalIteratorConcept<_Const_reverse_iterator> >();
│ │ │ +
732
│ │ │ +
733 const _ReversibleContainer __c;
│ │ │ +
734 _Const_reverse_iterator __i = __c.rbegin();
│ │ │ +
735 __i = __c.rend();
│ │ │ +
736 }
│ │ │ +
737 };
│ │ │ +
738
│ │ │ +
739 template <class _ReversibleContainer>
│ │ │ +
740 struct _Mutable_ReversibleContainerConcept
│ │ │ +
741 {
│ │ │ +
742 typedef typename _ReversibleContainer::iterator _Iterator;
│ │ │ +
743 typedef typename _ReversibleContainer::reverse_iterator _Reverse_iterator;
│ │ │ +
744
│ │ │ +
745 void __constraints() {
│ │ │ +
746 __function_requires<_ReversibleContainerConcept<_ReversibleContainer> >();
│ │ │ +
747 __function_requires<
│ │ │ +
748 _Mutable_ForwardContainerConcept<_ReversibleContainer> >();
│ │ │ +
749 __function_requires<_Mutable_BidirectionalIteratorConcept<_Iterator> >();
│ │ │ +
750 __function_requires<
│ │ │ +
751 _Mutable_BidirectionalIteratorConcept<_Reverse_iterator> >();
│ │ │ +
752
│ │ │ +
753 _Reverse_iterator __i = __c.rbegin();
│ │ │ +
754 __i = __c.rend();
│ │ │ +
755 }
│ │ │ +
756 _ReversibleContainer __c;
│ │ │ +
757 };
│ │ │ +
758
│ │ │ +
759 template <class _RandomAccessContainer>
│ │ │ +
760 struct _RandomAccessContainerConcept
│ │ │ +
761 {
│ │ │ +
762 typedef typename _RandomAccessContainer::size_type _Size_type;
│ │ │ +
763 typedef typename _RandomAccessContainer::const_reference _Const_reference;
│ │ │ +
764 typedef typename _RandomAccessContainer::const_iterator _Const_iterator;
│ │ │ +
765 typedef typename _RandomAccessContainer::const_reverse_iterator
│ │ │ +
766 _Const_reverse_iterator;
│ │ │ +
767
│ │ │ +
768 void __constraints() {
│ │ │ +
769 __function_requires<
│ │ │ +
770 _ReversibleContainerConcept<_RandomAccessContainer> >();
│ │ │ +
771 __function_requires< _RandomAccessIteratorConcept<_Const_iterator> >();
│ │ │ +
772 __function_requires<
│ │ │ +
773 _RandomAccessIteratorConcept<_Const_reverse_iterator> >();
│ │ │ +
774
│ │ │ +
775 const _RandomAccessContainer __c;
│ │ │ +
776 _Const_reference __r _IsUnused = __c[__n];
│ │ │ +
777 }
│ │ │ +
778 _Size_type __n;
│ │ │ +
779 };
│ │ │ +
780
│ │ │ +
781 template <class _RandomAccessContainer>
│ │ │ +
782 struct _Mutable_RandomAccessContainerConcept
│ │ │ +
783 {
│ │ │ +
784 typedef typename _RandomAccessContainer::size_type _Size_type;
│ │ │ +
785 typedef typename _RandomAccessContainer::reference _Reference;
│ │ │ +
786 typedef typename _RandomAccessContainer::iterator _Iterator;
│ │ │ +
787 typedef typename _RandomAccessContainer::reverse_iterator _Reverse_iterator;
│ │ │ +
788
│ │ │ +
789 void __constraints() {
│ │ │ +
790 __function_requires<
│ │ │ +
791 _RandomAccessContainerConcept<_RandomAccessContainer> >();
│ │ │ +
792 __function_requires<
│ │ │ +
793 _Mutable_ReversibleContainerConcept<_RandomAccessContainer> >();
│ │ │ +
794 __function_requires< _Mutable_RandomAccessIteratorConcept<_Iterator> >();
│ │ │ +
795 __function_requires<
│ │ │ +
796 _Mutable_RandomAccessIteratorConcept<_Reverse_iterator> >();
│ │ │ +
797
│ │ │ +
798 _Reference __r _IsUnused = __c[__i];
│ │ │ +
799 }
│ │ │ +
800 _Size_type __i;
│ │ │ +
801 _RandomAccessContainer __c;
│ │ │ +
802 };
│ │ │ +
803
│ │ │ +
804 // A Sequence is inherently mutable
│ │ │ +
805 template <class _Sequence>
│ │ │ +
806 struct _SequenceConcept
│ │ │ +
807 {
│ │ │ +
808 typedef typename _Sequence::reference _Reference;
│ │ │ +
809 typedef typename _Sequence::const_reference _Const_reference;
│ │ │ +
810
│ │ │ +
811 void __constraints() {
│ │ │ +
812 // Matt Austern's book puts DefaultConstructible here, the C++
│ │ │ +
813 // standard places it in Container
│ │ │ +
814 // function_requires< DefaultConstructible<Sequence> >();
│ │ │ +
815 __function_requires< _Mutable_ForwardContainerConcept<_Sequence> >();
│ │ │ +
816 __function_requires< _DefaultConstructibleConcept<_Sequence> >();
│ │ │ +
817
│ │ │ +
818 _Sequence
│ │ │ +
819 __c _IsUnused(__n, __t),
│ │ │ +
820 __c2 _IsUnused(__first, __last);
│ │ │ +
821
│ │ │ +
822 __c.insert(__p, __t);
│ │ │ +
823 __c.insert(__p, __n, __t);
│ │ │ +
824 __c.insert(__p, __first, __last);
│ │ │ +
825
│ │ │ +
826 __c.erase(__p);
│ │ │ +
827 __c.erase(__p, __q);
│ │ │ +
828
│ │ │ +
829 _Reference __r _IsUnused = __c.front();
│ │ │ +
830
│ │ │ +
831 __const_constraints(__c);
│ │ │ +
832 }
│ │ │ +
833 void __const_constraints(const _Sequence& __c) {
│ │ │ +
834 _Const_reference __r _IsUnused = __c.front();
│ │ │ +
835 }
│ │ │ +
836 typename _Sequence::value_type __t;
│ │ │ +
837 typename _Sequence::size_type __n;
│ │ │ +
838 typename _Sequence::value_type *__first, *__last;
│ │ │ +
839 typename _Sequence::iterator __p, __q;
│ │ │ +
840 };
│ │ │ +
841
│ │ │ +
842 template <class _FrontInsertionSequence>
│ │ │ +
843 struct _FrontInsertionSequenceConcept
│ │ │ +
844 {
│ │ │ +
845 void __constraints() {
│ │ │ +
846 __function_requires< _SequenceConcept<_FrontInsertionSequence> >();
│ │ │ +
847
│ │ │ +
848 __c.push_front(__t);
│ │ │ +
849 __c.pop_front();
│ │ │ +
850 }
│ │ │ +
851 _FrontInsertionSequence __c;
│ │ │ +
852 typename _FrontInsertionSequence::value_type __t;
│ │ │ +
853 };
│ │ │ +
854
│ │ │ +
855 template <class _BackInsertionSequence>
│ │ │ +
856 struct _BackInsertionSequenceConcept
│ │ │ +
857 {
│ │ │ +
858 typedef typename _BackInsertionSequence::reference _Reference;
│ │ │ +
859 typedef typename _BackInsertionSequence::const_reference _Const_reference;
│ │ │ +
860
│ │ │ +
861 void __constraints() {
│ │ │ +
862 __function_requires< _SequenceConcept<_BackInsertionSequence> >();
│ │ │ +
863
│ │ │ +
864 __c.push_back(__t);
│ │ │ +
865 __c.pop_back();
│ │ │ +
866 _Reference __r _IsUnused = __c.back();
│ │ │ +
867 }
│ │ │ +
868 void __const_constraints(const _BackInsertionSequence& __c) {
│ │ │ +
869 _Const_reference __r _IsUnused = __c.back();
│ │ │ +
870 };
│ │ │ +
871 _BackInsertionSequence __c;
│ │ │ +
872 typename _BackInsertionSequence::value_type __t;
│ │ │ +
873 };
│ │ │ +
874
│ │ │ +
875_GLIBCXX_END_NAMESPACE_VERSION
│ │ │ +
876} // namespace
│ │ │ +
877
│ │ │ +
878#pragma GCC diagnostic pop
│ │ │ +
879#undef _IsUnused
│ │ │ +
880
│ │ │ +
881#endif // _GLIBCXX_BOOST_CONCEPT_CHECK
│ │ │ +
882
│ │ │ +
883
│ │ │ + │ │ │ + │ │ │ +
ISO C++ entities toplevel namespace is std.
│ │ │ +
GNU extensions for public use.
│ │ │ +
GNU debug classes for public use.
│ │ │ +
Safe iterator wrapper.
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,69 +1,928 @@ │ │ │ │ libstdc++ │ │ │ │ -cxxabi_forced.h │ │ │ │ +boost_concept_check.h │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// cxxabi.h subset for cancellation -*- C++ -*- │ │ │ │ +1// -*- C++ -*- │ │ │ │ 2 │ │ │ │ -3// Copyright (C) 2007-2024 Free Software Foundation, Inc. │ │ │ │ +3// Copyright (C) 2004-2024 Free Software Foundation, Inc. │ │ │ │ 4// │ │ │ │ -5// This file is part of GCC. │ │ │ │ -6// │ │ │ │ -7// GCC is free software; you can redistribute it and/or modify │ │ │ │ -8// it under the terms of the GNU General Public License as published by │ │ │ │ -9// the Free Software Foundation; either version 3, or (at your option) │ │ │ │ -10// any later version. │ │ │ │ -11// │ │ │ │ -12// GCC is distributed in the hope that it will be useful, │ │ │ │ -13// but WITHOUT ANY WARRANTY; without even the implied warranty of │ │ │ │ -14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the │ │ │ │ -15// GNU General Public License for more details. │ │ │ │ -16// │ │ │ │ -17// Under Section 7 of GPL version 3, you are granted additional │ │ │ │ -18// permissions described in the GCC Runtime Library Exception, version │ │ │ │ -19// 3.1, as published by the Free Software Foundation. │ │ │ │ -20 │ │ │ │ -21// You should have received a copy of the GNU General Public License and │ │ │ │ -22// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ -23// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ -24// . │ │ │ │ -25 │ │ │ │ -26/** @file bits/cxxabi_forced.h │ │ │ │ -27 * This is an internal header file, included by other library headers. │ │ │ │ -28 * Do not attempt to use it directly. @headername{cxxabi.h} │ │ │ │ -29 */ │ │ │ │ -30 │ │ │ │ -31#ifndef _CXXABI_FORCED_H │ │ │ │ -32#define _CXXABI_FORCED_H 1 │ │ │ │ -33 │ │ │ │ -34#pragma GCC system_header │ │ │ │ -35 │ │ │ │ -36#pragma GCC visibility push(default) │ │ │ │ -37 │ │ │ │ -38#ifdef __cplusplus │ │ │ │ -39namespace __cxxabiv1 │ │ │ │ -40{ │ │ │ │ -41 /** │ │ │ │ -42 * @brief Thrown as part of forced unwinding. │ │ │ │ -43 * @ingroup exceptions │ │ │ │ -44 * │ │ │ │ -45 * A magic placeholder class that can be caught by reference to │ │ │ │ -46 * recognize forced unwinding. │ │ │ │ -47 */ │ │ │ │ -_4_8 class _____f_o_r_c_e_d___u_n_w_i_n_d │ │ │ │ -49 { │ │ │ │ -50 virtual _~_____f_o_r_c_e_d___u_n_w_i_n_d() throw(); │ │ │ │ -51 │ │ │ │ -52 // Prevent catch by value. │ │ │ │ -53 virtual void __pure_dummy() = 0; │ │ │ │ -54 }; │ │ │ │ +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// (C) Copyright Jeremy Siek 2000. Permission to copy, use, modify, │ │ │ │ +26// sell and distribute this software is granted provided this │ │ │ │ +27// copyright notice appears in all copies. This software is provided │ │ │ │ +28// "as is" without express or implied warranty, and with no claim as │ │ │ │ +29// to its suitability for any purpose. │ │ │ │ +30// │ │ │ │ +31 │ │ │ │ +32/** @file bits/boost_concept_check.h │ │ │ │ +33 * This is an internal header file, included by other library headers. │ │ │ │ +34 * Do not attempt to use it directly. @headername{iterator} │ │ │ │ +35 */ │ │ │ │ +36 │ │ │ │ +37// GCC Note: based on version 1.12.0 of the Boost library. │ │ │ │ +38 │ │ │ │ +39#ifndef _BOOST_CONCEPT_CHECK_H │ │ │ │ +40#define _BOOST_CONCEPT_CHECK_H 1 │ │ │ │ +41 │ │ │ │ +42#pragma GCC system_header │ │ │ │ +43 │ │ │ │ +44#include <_b_i_t_s_/_c_+_+_c_o_n_f_i_g_._h> │ │ │ │ +45#include <_b_i_t_s_/_s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h> // for traits and tags │ │ │ │ +46 │ │ │ │ +47namespace _s_t_d _GLIBCXX_VISIBILITY(default) │ │ │ │ +48{ │ │ │ │ +49_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +50_GLIBCXX_BEGIN_NAMESPACE_CONTAINER │ │ │ │ +51 struct _Bit_iterator; │ │ │ │ +52 struct _Bit_const_iterator; │ │ │ │ +53_GLIBCXX_END_NAMESPACE_CONTAINER │ │ │ │ +54_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ 55} │ │ │ │ -56#endif // __cplusplus │ │ │ │ -57 │ │ │ │ -58#pragma GCC visibility pop │ │ │ │ -59 │ │ │ │ -60#endif // __CXXABI_FORCED_H │ │ │ │ -_____c_x_x_a_b_i_v_1_:_:_____f_o_r_c_e_d___u_n_w_i_n_d │ │ │ │ -Thrown as part of forced unwinding. │ │ │ │ -DDeeffiinniittiioonn _c_x_x_a_b_i___f_o_r_c_e_d_._h_:_4_9 │ │ │ │ +56 │ │ │ │ +_5_7namespace _____g_n_u___d_e_b_u_g │ │ │ │ +58{ │ │ │ │ +59 template │ │ │ │ +60 class ___S_a_f_e___i_t_e_r_a_t_o_r; │ │ │ │ +61} │ │ │ │ +62 │ │ │ │ +63namespace _____g_n_u___c_x_x _GLIBCXX_VISIBILITY(default) │ │ │ │ +64{ │ │ │ │ +65_GLIBCXX_BEGIN_NAMESPACE_VERSION │ │ │ │ +66 │ │ │ │ +67#pragma GCC diagnostic push │ │ │ │ +68#pragma GCC diagnostic ignored "-Wunused-local-typedefs" │ │ │ │ +69 │ │ │ │ +70#define _IsUnused __attribute__ ((__unused__)) │ │ │ │ +71 │ │ │ │ +72// When the C-C code is in use, we would like this function to do as little │ │ │ │ +73// as possible at runtime, use as few resources as possible, and hopefully │ │ │ │ +74// be elided out of existence... hmmm. │ │ │ │ +75template │ │ │ │ +76_GLIBCXX14_CONSTEXPR inline void __function_requires() │ │ │ │ +77{ │ │ │ │ +78 void (_Concept::*__x)() _IsUnused = &_Concept::__constraints; │ │ │ │ +79} │ │ │ │ +80 │ │ │ │ +81// No definition: if this is referenced, there's a problem with │ │ │ │ +82// the instantiating type not being one of the required integer types. │ │ │ │ +83// Unfortunately, this results in a link-time error, not a compile-time │ │ │ │ +error. │ │ │ │ +84void __error_type_must_be_an_integer_type(); │ │ │ │ +85void __error_type_must_be_an_unsigned_integer_type(); │ │ │ │ +86void __error_type_must_be_a_signed_integer_type(); │ │ │ │ +87 │ │ │ │ +88// ??? Should the "concept_checking*" structs begin with more than _ ? │ │ │ │ +89#define _GLIBCXX_CLASS_REQUIRES(_type_var, _ns, _concept) \ │ │ │ │ +90 typedef void (_ns::_concept <_type_var>::* _func##_type_var##_concept)(); \ │ │ │ │ +91 template <_func##_type_var##_concept _Tp1> \ │ │ │ │ +92 struct _concept_checking##_type_var##_concept { }; \ │ │ │ │ +93 typedef _concept_checking##_type_var##_concept< \ │ │ │ │ +94 &_ns::_concept <_type_var>::__constraints> \ │ │ │ │ +95 _concept_checking_typedef##_type_var##_concept │ │ │ │ +96 │ │ │ │ +97#define _GLIBCXX_CLASS_REQUIRES2(_type_var1, _type_var2, _ns, _concept) \ │ │ │ │ +98 typedef void (_ns::_concept <_type_var1,_type_var2>:: │ │ │ │ +* _func##_type_var1##_type_var2##_concept)(); \ │ │ │ │ +99 template <_func##_type_var1##_type_var2##_concept _Tp1> \ │ │ │ │ +100 struct _concept_checking##_type_var1##_type_var2##_concept { }; \ │ │ │ │ +101 typedef _concept_checking##_type_var1##_type_var2##_concept< \ │ │ │ │ +102 &_ns::_concept <_type_var1,_type_var2>::__constraints> \ │ │ │ │ +103 _concept_checking_typedef##_type_var1##_type_var2##_concept │ │ │ │ +104 │ │ │ │ +105#define _GLIBCXX_CLASS_REQUIRES3(_type_var1, _type_var2, _type_var3, _ns, │ │ │ │ +_concept) \ │ │ │ │ +106 typedef void (_ns::_concept <_type_var1,_type_var2,_type_var3>:: │ │ │ │ +* _func##_type_var1##_type_var2##_type_var3##_concept)(); \ │ │ │ │ +107 template <_func##_type_var1##_type_var2##_type_var3##_concept _Tp1> \ │ │ │ │ +108 struct _concept_checking##_type_var1##_type_var2##_type_var3##_concept { }; │ │ │ │ +\ │ │ │ │ +109 typedef _concept_checking##_type_var1##_type_var2##_type_var3##_concept< \ │ │ │ │ +110 &_ns::_concept <_type_var1,_type_var2,_type_var3>::__constraints> \ │ │ │ │ +111 _concept_checking_typedef##_type_var1##_type_var2##_type_var3##_concept │ │ │ │ +112 │ │ │ │ +113#define _GLIBCXX_CLASS_REQUIRES4(_type_var1, _type_var2, _type_var3, │ │ │ │ +_type_var4, _ns, _concept) \ │ │ │ │ +114 typedef void (_ns::_concept <_type_var1,_type_var2,_type_var3,_type_var4>:: │ │ │ │ +* _func##_type_var1##_type_var2##_type_var3##_type_var4##_concept)(); \ │ │ │ │ +115 template <_func##_type_var1##_type_var2##_type_var3##_type_var4##_concept │ │ │ │ +_Tp1> \ │ │ │ │ +116 struct │ │ │ │ +_concept_checking##_type_var1##_type_var2##_type_var3##_type_var4##_concept │ │ │ │ +{ }; \ │ │ │ │ +117 typedef │ │ │ │ +_concept_checking##_type_var1##_type_var2##_type_var3##_type_var4##_concept< \ │ │ │ │ +118 &_ns::_concept <_type_var1,_type_var2,_type_var3,_type_var4>:: │ │ │ │ +__constraints> \ │ │ │ │ +119 │ │ │ │ +_concept_checking_typedef##_type_var1##_type_var2##_type_var3##_type_var4##_concept │ │ │ │ +120 │ │ │ │ +121 │ │ │ │ +122template │ │ │ │ +123struct _Aux_require_same { }; │ │ │ │ +124 │ │ │ │ +125template │ │ │ │ +126struct _Aux_require_same<_Tp,_Tp> { typedef _Tp _Type; }; │ │ │ │ +127 │ │ │ │ +128 template │ │ │ │ +129 struct _SameTypeConcept │ │ │ │ +130 { │ │ │ │ +131 void __constraints() { │ │ │ │ +132 typedef typename _Aux_require_same<_Tp1, _Tp2>::_Type _Required; │ │ │ │ +133 } │ │ │ │ +134 }; │ │ │ │ +135 │ │ │ │ +136 template │ │ │ │ +137 struct _IntegerConcept { │ │ │ │ +138 void __constraints() { │ │ │ │ +139 __error_type_must_be_an_integer_type(); │ │ │ │ +140 } │ │ │ │ +141 }; │ │ │ │ +142 template <> struct _IntegerConcept { void __constraints() {} }; │ │ │ │ +143 template <> struct _IntegerConcept { void __constraints(){} │ │ │ │ +}; │ │ │ │ +144 template <> struct _IntegerConcept { void __constraints() {} }; │ │ │ │ +145 template <> struct _IntegerConcept { void __constraints() {} │ │ │ │ +}; │ │ │ │ +146 template <> struct _IntegerConcept { void __constraints() {} }; │ │ │ │ +147 template <> struct _IntegerConcept { void __constraints() {} │ │ │ │ +}; │ │ │ │ +148 template <> struct _IntegerConcept { void __constraints() {} }; │ │ │ │ +149 template <> struct _IntegerConcept │ │ │ │ +150 { void __constraints() {} }; │ │ │ │ +151 │ │ │ │ +152 template │ │ │ │ +153 struct _SignedIntegerConcept { │ │ │ │ +154 void __constraints() { │ │ │ │ +155 __error_type_must_be_a_signed_integer_type(); │ │ │ │ +156 } │ │ │ │ +157 }; │ │ │ │ +158 template <> struct _SignedIntegerConcept { void __constraints() {} │ │ │ │ +}; │ │ │ │ +159 template <> struct _SignedIntegerConcept { void __constraints() {} }; │ │ │ │ +160 template <> struct _SignedIntegerConcept { void __constraints() {} }; │ │ │ │ +161 template <> struct _SignedIntegerConcept { void __constraints() │ │ │ │ +{}}; │ │ │ │ +162 │ │ │ │ +163 template │ │ │ │ +164 struct _UnsignedIntegerConcept { │ │ │ │ +165 void __constraints() { │ │ │ │ +166 __error_type_must_be_an_unsigned_integer_type(); │ │ │ │ +167 } │ │ │ │ +168 }; │ │ │ │ +169 template <> struct _UnsignedIntegerConcept │ │ │ │ +170 { void __constraints() {} }; │ │ │ │ +171 template <> struct _UnsignedIntegerConcept │ │ │ │ +172 { void __constraints() {} }; │ │ │ │ +173 template <> struct _UnsignedIntegerConcept │ │ │ │ +174 { void __constraints() {} }; │ │ │ │ +175 template <> struct _UnsignedIntegerConcept │ │ │ │ +176 { void __constraints() {} }; │ │ │ │ +177 │ │ │ │ +178 // │ │ │ │ +=========================================================================== │ │ │ │ +179 // Basic Concepts │ │ │ │ +180 │ │ │ │ +181 template │ │ │ │ +182 struct _DefaultConstructibleConcept │ │ │ │ +183 { │ │ │ │ +184 void __constraints() { │ │ │ │ +185 _Tp __a _IsUnused; // require default constructor │ │ │ │ +186 } │ │ │ │ +187 }; │ │ │ │ +188 │ │ │ │ +189 template │ │ │ │ +190 struct _AssignableConcept │ │ │ │ +191 { │ │ │ │ +192 void __constraints() { │ │ │ │ +193 __a = __a; // require assignment operator │ │ │ │ +194 __const_constraints(__a); │ │ │ │ +195 } │ │ │ │ +196 void __const_constraints(const _Tp& __b) { │ │ │ │ +197 __a = __b; // const required for argument to assignment │ │ │ │ +198 } │ │ │ │ +199 _Tp __a; │ │ │ │ +200 // possibly should be "Tp* a;" and then dereference "a" in constraint │ │ │ │ +201 // functions? present way would require a default ctor, i think... │ │ │ │ +202 }; │ │ │ │ +203 │ │ │ │ +204 template │ │ │ │ +205 struct _CopyConstructibleConcept │ │ │ │ +206 { │ │ │ │ +207 void __constraints() { │ │ │ │ +208 _Tp __a(__b); // require copy constructor │ │ │ │ +209 _Tp* __ptr _IsUnused = &__a; // require address of operator │ │ │ │ +210 __const_constraints(__a); │ │ │ │ +211 } │ │ │ │ +212 void __const_constraints(const _Tp& __a) { │ │ │ │ +213 _Tp __c _IsUnused(__a); // require const copy constructor │ │ │ │ +214 const _Tp* __ptr _IsUnused = &__a; // require const address of operator │ │ │ │ +215 } │ │ │ │ +216 _Tp __b; │ │ │ │ +217 }; │ │ │ │ +218 │ │ │ │ +219 // The SGI STL version of Assignable requires copy constructor and │ │ │ │ +operator= │ │ │ │ +220 template │ │ │ │ +221 struct _SGIAssignableConcept │ │ │ │ +222 { │ │ │ │ +223 void __constraints() { │ │ │ │ +224 _Tp __b _IsUnused(__a); │ │ │ │ +225 __a = __a; // require assignment operator │ │ │ │ +226 __const_constraints(__a); │ │ │ │ +227 } │ │ │ │ +228 void __const_constraints(const _Tp& __b) { │ │ │ │ +229 _Tp __c _IsUnused(__b); │ │ │ │ +230 __a = __b; // const required for argument to assignment │ │ │ │ +231 } │ │ │ │ +232 _Tp __a; │ │ │ │ +233 }; │ │ │ │ +234 │ │ │ │ +235 template │ │ │ │ +236 struct _ConvertibleConcept │ │ │ │ +237 { │ │ │ │ +238 void __constraints() { │ │ │ │ +239 _To __y _IsUnused = __x; │ │ │ │ +240 } │ │ │ │ +241 _From __x; │ │ │ │ +242 }; │ │ │ │ +243 │ │ │ │ +244 // The C++ standard requirements for many concepts talk about return │ │ │ │ +245 // types that must be "convertible to bool". The problem with this │ │ │ │ +246 // requirement is that it leaves the door open for evil proxies that │ │ │ │ +247 // define things like operator|| with strange return types. Two │ │ │ │ +248 // possible solutions are: │ │ │ │ +249 // 1) require the return type to be exactly bool │ │ │ │ +250 // 2) stay with convertible to bool, and also │ │ │ │ +251 // specify stuff about all the logical operators. │ │ │ │ +252 // For now we just test for convertible to bool. │ │ │ │ +253 template │ │ │ │ +254 void __aux_require_boolean_expr(const _Tp& __t) { │ │ │ │ +255 bool __x _IsUnused = __t; │ │ │ │ +256 } │ │ │ │ +257 │ │ │ │ +258// FIXME │ │ │ │ +259 template │ │ │ │ +260 struct _EqualityComparableConcept │ │ │ │ +261 { │ │ │ │ +262 void __constraints() { │ │ │ │ +263 __aux_require_boolean_expr(__a == __b); │ │ │ │ +264 } │ │ │ │ +265 _Tp __a, __b; │ │ │ │ +266 }; │ │ │ │ +267 │ │ │ │ +268 template │ │ │ │ +269 struct _LessThanComparableConcept │ │ │ │ +270 { │ │ │ │ +271 void __constraints() { │ │ │ │ +272 __aux_require_boolean_expr(__a < __b); │ │ │ │ +273 } │ │ │ │ +274 _Tp __a, __b; │ │ │ │ +275 }; │ │ │ │ +276 │ │ │ │ +277 // This is equivalent to SGI STL's LessThanComparable. │ │ │ │ +278 template │ │ │ │ +279 struct _ComparableConcept │ │ │ │ +280 { │ │ │ │ +281 void __constraints() { │ │ │ │ +282 __aux_require_boolean_expr(__a < __b); │ │ │ │ +283 __aux_require_boolean_expr(__a > __b); │ │ │ │ +284 __aux_require_boolean_expr(__a <= __b); │ │ │ │ +285 __aux_require_boolean_expr(__a >= __b); │ │ │ │ +286 } │ │ │ │ +287 _Tp __a, __b; │ │ │ │ +288 }; │ │ │ │ +289 │ │ │ │ +290#define _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(_OP,_NAME) \ │ │ │ │ +291 template \ │ │ │ │ +292 struct _NAME { \ │ │ │ │ +293 void __constraints() { (void)__constraints_(); } \ │ │ │ │ +294 bool __constraints_() { \ │ │ │ │ +295 return __a _OP __b; \ │ │ │ │ +296 } \ │ │ │ │ +297 _First __a; \ │ │ │ │ +298 _Second __b; \ │ │ │ │ +299 } │ │ │ │ +300 │ │ │ │ +301#define _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(_OP,_NAME) \ │ │ │ │ +302 template \ │ │ │ │ +303 struct _NAME { \ │ │ │ │ +304 void __constraints() { (void)__constraints_(); } \ │ │ │ │ +305 _Ret __constraints_() { \ │ │ │ │ +306 return __a _OP __b; \ │ │ │ │ +307 } \ │ │ │ │ +308 _First __a; \ │ │ │ │ +309 _Second __b; \ │ │ │ │ +310 } │ │ │ │ +311 │ │ │ │ +312 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(==, _EqualOpConcept); │ │ │ │ +313 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(!=, _NotEqualOpConcept); │ │ │ │ +314 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(<, _LessThanOpConcept); │ │ │ │ +315 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(<=, _LessEqualOpConcept); │ │ │ │ +316 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(>, _GreaterThanOpConcept); │ │ │ │ +317 _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(>=, _GreaterEqualOpConcept); │ │ │ │ +318 │ │ │ │ +319 _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(+, _PlusOpConcept); │ │ │ │ +320 _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(*, _TimesOpConcept); │ │ │ │ +321 _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(/, _DivideOpConcept); │ │ │ │ +322 _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(-, _SubtractOpConcept); │ │ │ │ +323 _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT(%, _ModOpConcept); │ │ │ │ +324 │ │ │ │ +325#undef _GLIBCXX_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT │ │ │ │ +326#undef _GLIBCXX_DEFINE_BINARY_OPERATOR_CONSTRAINT │ │ │ │ +327 │ │ │ │ +328 // │ │ │ │ +=========================================================================== │ │ │ │ +329 // Function Object Concepts │ │ │ │ +330 │ │ │ │ +331 template │ │ │ │ +332 struct _GeneratorConcept │ │ │ │ +333 { │ │ │ │ +334 void __constraints() { │ │ │ │ +335 const _Return& __r _IsUnused = __f();// require operator() member function │ │ │ │ +336 } │ │ │ │ +337 _Func __f; │ │ │ │ +338 }; │ │ │ │ +339 │ │ │ │ +340 │ │ │ │ +341 template │ │ │ │ +342 struct _GeneratorConcept<_Func,void> │ │ │ │ +343 { │ │ │ │ +344 void __constraints() { │ │ │ │ +345 __f(); // require operator() member function │ │ │ │ +346 } │ │ │ │ +347 _Func __f; │ │ │ │ +348 }; │ │ │ │ +349 │ │ │ │ +350 template │ │ │ │ +351 struct _UnaryFunctionConcept │ │ │ │ +352 { │ │ │ │ +353 void __constraints() { │ │ │ │ +354 __r = __f(__arg); // require operator() │ │ │ │ +355 } │ │ │ │ +356 _Func __f; │ │ │ │ +357 _Arg __arg; │ │ │ │ +358 _Return __r; │ │ │ │ +359 }; │ │ │ │ +360 │ │ │ │ +361 template │ │ │ │ +362 struct _UnaryFunctionConcept<_Func, void, _Arg> { │ │ │ │ +363 void __constraints() { │ │ │ │ +364 __f(__arg); // require operator() │ │ │ │ +365 } │ │ │ │ +366 _Func __f; │ │ │ │ +367 _Arg __arg; │ │ │ │ +368 }; │ │ │ │ +369 │ │ │ │ +370 template │ │ │ │ +371 struct _BinaryFunctionConcept │ │ │ │ +372 { │ │ │ │ +373 void __constraints() { │ │ │ │ +374 __r = __f(__first, __second); // require operator() │ │ │ │ +375 } │ │ │ │ +376 _Func __f; │ │ │ │ +377 _First __first; │ │ │ │ +378 _Second __second; │ │ │ │ +379 _Return __r; │ │ │ │ +380 }; │ │ │ │ +381 │ │ │ │ +382 template │ │ │ │ +383 struct _BinaryFunctionConcept<_Func, void, _First, _Second> │ │ │ │ +384 { │ │ │ │ +385 void __constraints() { │ │ │ │ +386 __f(__first, __second); // require operator() │ │ │ │ +387 } │ │ │ │ +388 _Func __f; │ │ │ │ +389 _First __first; │ │ │ │ +390 _Second __second; │ │ │ │ +391 }; │ │ │ │ +392 │ │ │ │ +393 template │ │ │ │ +394 struct _UnaryPredicateConcept │ │ │ │ +395 { │ │ │ │ +396 void __constraints() { │ │ │ │ +397 __aux_require_boolean_expr(__f(__arg)); // require op() returning bool │ │ │ │ +398 } │ │ │ │ +399 _Func __f; │ │ │ │ +400 _Arg __arg; │ │ │ │ +401 }; │ │ │ │ +402 │ │ │ │ +403 template │ │ │ │ +404 struct _BinaryPredicateConcept │ │ │ │ +405 { │ │ │ │ +406 void __constraints() { │ │ │ │ +407 __aux_require_boolean_expr(__f(__a, __b)); // require op() returning bool │ │ │ │ +408 } │ │ │ │ +409 _Func __f; │ │ │ │ +410 _First __a; │ │ │ │ +411 _Second __b; │ │ │ │ +412 }; │ │ │ │ +413 │ │ │ │ +414 // use this when functor is used inside a container class like std::set │ │ │ │ +415 template │ │ │ │ +416 struct _Const_BinaryPredicateConcept { │ │ │ │ +417 void __constraints() { │ │ │ │ +418 __const_constraints(__f); │ │ │ │ +419 } │ │ │ │ +420 void __const_constraints(const _Func& __fun) { │ │ │ │ +421 __function_requires<_BinaryPredicateConcept<_Func, _First, _Second> >(); │ │ │ │ +422 // operator() must be a const member function │ │ │ │ +423 __aux_require_boolean_expr(__fun(__a, __b)); │ │ │ │ +424 } │ │ │ │ +425 _Func __f; │ │ │ │ +426 _First __a; │ │ │ │ +427 _Second __b; │ │ │ │ +428 }; │ │ │ │ +429 │ │ │ │ +430 // │ │ │ │ +=========================================================================== │ │ │ │ +431 // Iterator Concepts │ │ │ │ +432 │ │ │ │ +433 template │ │ │ │ +434 struct _TrivialIteratorConcept │ │ │ │ +435 { │ │ │ │ +436 void __constraints() { │ │ │ │ +437// __function_requires< _DefaultConstructibleConcept<_Tp> >(); │ │ │ │ +438 __function_requires< _AssignableConcept<_Tp> >(); │ │ │ │ +439 __function_requires< _EqualityComparableConcept<_Tp> >(); │ │ │ │ +440// typedef typename std::iterator_traits<_Tp>::value_type _V; │ │ │ │ +441 (void)*__i; // require dereference operator │ │ │ │ +442 } │ │ │ │ +443 _Tp __i; │ │ │ │ +444 }; │ │ │ │ +445 │ │ │ │ +446 template │ │ │ │ +447 struct _Mutable_TrivialIteratorConcept │ │ │ │ +448 { │ │ │ │ +449 void __constraints() { │ │ │ │ +450 __function_requires< _TrivialIteratorConcept<_Tp> >(); │ │ │ │ +451 *__i = *__j; // require dereference and assignment │ │ │ │ +452 } │ │ │ │ +453 _Tp __i, __j; │ │ │ │ +454 }; │ │ │ │ +455 │ │ │ │ +456 template │ │ │ │ +457 struct _InputIteratorConcept │ │ │ │ +458 { │ │ │ │ +459 void __constraints() { │ │ │ │ +460 __function_requires< _TrivialIteratorConcept<_Tp> >(); │ │ │ │ +461 // require iterator_traits typedef's │ │ │ │ +462 typedef typename std::iterator_traits<_Tp>::difference_type _Diff; │ │ │ │ +463// __function_requires< _SignedIntegerConcept<_Diff> >(); │ │ │ │ +464 typedef typename std::iterator_traits<_Tp>::reference _Ref; │ │ │ │ +465 typedef typename std::iterator_traits<_Tp>::pointer _Pt; │ │ │ │ +466 typedef typename std::iterator_traits<_Tp>::iterator_category _Cat; │ │ │ │ +467 __function_requires< _ConvertibleConcept< │ │ │ │ +468 typename std::iterator_traits<_Tp>::iterator_category, │ │ │ │ +469 std::input_iterator_tag> >(); │ │ │ │ +470 ++__i; // require preincrement operator │ │ │ │ +471 __i++; // require postincrement operator │ │ │ │ +472 } │ │ │ │ +473 _Tp __i; │ │ │ │ +474 }; │ │ │ │ +475 │ │ │ │ +476 template │ │ │ │ +477 struct _OutputIteratorConcept │ │ │ │ +478 { │ │ │ │ +479 void __constraints() { │ │ │ │ +480 __function_requires< _AssignableConcept<_Tp> >(); │ │ │ │ +481 ++__i; // require preincrement operator │ │ │ │ +482 __i++; // require postincrement operator │ │ │ │ +483 *__i++ = __val(); // require postincrement and assignment │ │ │ │ +484 } │ │ │ │ +485 _Tp __i; │ │ │ │ +486 // Use a function pointer here so no definition of the function needed. │ │ │ │ +487 // Just need something that returns a _ValueT (which might be a reference). │ │ │ │ +488 _ValueT (*__val)(); │ │ │ │ +489 }; │ │ │ │ +490 │ │ │ │ +491 template │ │ │ │ +492 struct _Is_vector_bool_iterator │ │ │ │ +493 { static const bool __value = false; }; │ │ │ │ +494 │ │ │ │ +495#ifdef _GLIBCXX_DEBUG │ │ │ │ +496 namespace _____c_o_n_t = ::std::_GLIBCXX_STD_C; │ │ │ │ +497#else │ │ │ │ +498 namespace _____c_o_n_t = ::std; │ │ │ │ +499#endif │ │ │ │ +500 │ │ │ │ +501 // Trait to identify vector::iterator │ │ │ │ +502 template <> │ │ │ │ +503 struct _Is_vector_bool_iterator<_____c_o_n_t::_Bit_iterator> │ │ │ │ +504 { static const bool __value = true; }; │ │ │ │ +505 │ │ │ │ +506 // And for vector::const_iterator. │ │ │ │ +507 template <> │ │ │ │ +508 struct _Is_vector_bool_iterator<_____c_o_n_t::_Bit_const_iterator> │ │ │ │ +509 { static const bool __value = true; }; │ │ │ │ +510 │ │ │ │ +511 // And for __gnu_debug::vector iterators too. │ │ │ │ +512 template │ │ │ │ +513 struct _Is_vector_bool_iterator<__gnu_debug::_Safe_iterator<_It, _Seq, │ │ │ │ +_Tag> > │ │ │ │ +514 : _Is_vector_bool_iterator<_It> { }; │ │ │ │ +515 │ │ │ │ +516 template ::__value> │ │ │ │ +517 struct _ForwardIteratorReferenceConcept │ │ │ │ +518 { │ │ │ │ +519 void __constraints() { │ │ │ │ +520#if __cplusplus >= 201103L │ │ │ │ +521 typedef typename std::iterator_traits<_Tp>::reference _Ref; │ │ │ │ +522 static_assert(std::is_reference<_Ref>::value, │ │ │ │ +523 "reference type of a forward iterator must be a real reference"); │ │ │ │ +524#endif │ │ │ │ +525 } │ │ │ │ +526 }; │ │ │ │ +527 │ │ │ │ +528 template ::__value> │ │ │ │ +529 struct _Mutable_ForwardIteratorReferenceConcept │ │ │ │ +530 { │ │ │ │ +531 void __constraints() { │ │ │ │ +532 typedef typename std::iterator_traits<_Tp>::reference _Ref; │ │ │ │ +533 typedef typename std::iterator_traits<_Tp>::value_type _Val; │ │ │ │ +534 __function_requires< _SameTypeConcept<_Ref, _Val&> >(); │ │ │ │ +535 } │ │ │ │ +536 }; │ │ │ │ +537 │ │ │ │ +538 // vector iterators are not real forward iterators, but we ignore │ │ │ │ +that. │ │ │ │ +539 template │ │ │ │ +540 struct _ForwardIteratorReferenceConcept<_Tp, true> │ │ │ │ +541 { │ │ │ │ +542 void __constraints() { } │ │ │ │ +543 }; │ │ │ │ +544 │ │ │ │ +545 // vector iterators are not real forward iterators, but we ignore │ │ │ │ +that. │ │ │ │ +546 template │ │ │ │ +547 struct _Mutable_ForwardIteratorReferenceConcept<_Tp, true> │ │ │ │ +548 { │ │ │ │ +549 void __constraints() { } │ │ │ │ +550 }; │ │ │ │ +551 │ │ │ │ +552#pragma GCC diagnostic push │ │ │ │ +553#pragma GCC diagnostic ignored "-Wunused-variable" │ │ │ │ +554 │ │ │ │ +555 template │ │ │ │ +556 struct _ForwardIteratorConcept │ │ │ │ +557 { │ │ │ │ +558 void __constraints() { │ │ │ │ +559 __function_requires< _InputIteratorConcept<_Tp> >(); │ │ │ │ +560 __function_requires< _DefaultConstructibleConcept<_Tp> >(); │ │ │ │ +561 __function_requires< _ConvertibleConcept< │ │ │ │ +562 typename std::iterator_traits<_Tp>::iterator_category, │ │ │ │ +563 std::forward_iterator_tag> >(); │ │ │ │ +564 __function_requires< _ForwardIteratorReferenceConcept<_Tp> >(); │ │ │ │ +565 _Tp& __j = ++__i; │ │ │ │ +566 const _Tp& __k = __i++; │ │ │ │ +567 typedef typename std::iterator_traits<_Tp>::reference _Ref; │ │ │ │ +568 _Ref __r = *__k; │ │ │ │ +569 _Ref __r2 = *__i++; │ │ │ │ +570 } │ │ │ │ +571 _Tp __i; │ │ │ │ +572 }; │ │ │ │ +573 │ │ │ │ +574 template │ │ │ │ +575 struct _Mutable_ForwardIteratorConcept │ │ │ │ +576 { │ │ │ │ +577 void __constraints() { │ │ │ │ +578 __function_requires< _ForwardIteratorConcept<_Tp> >(); │ │ │ │ +579 typedef typename std::iterator_traits<_Tp>::reference _Ref; │ │ │ │ +580 typedef typename std::iterator_traits<_Tp>::value_type _Val; │ │ │ │ +581 __function_requires< _Mutable_ForwardIteratorReferenceConcept<_Tp> >(); │ │ │ │ +582 } │ │ │ │ +583 _Tp __i; │ │ │ │ +584 }; │ │ │ │ +585 │ │ │ │ +586 template │ │ │ │ +587 struct _BidirectionalIteratorConcept │ │ │ │ +588 { │ │ │ │ +589 void __constraints() { │ │ │ │ +590 __function_requires< _ForwardIteratorConcept<_Tp> >(); │ │ │ │ +591 __function_requires< _ConvertibleConcept< │ │ │ │ +592 typename std::iterator_traits<_Tp>::iterator_category, │ │ │ │ +593 std::bidirectional_iterator_tag> >(); │ │ │ │ +594 _Tp& __j = --__i; // require predecrement operator │ │ │ │ +595 const _Tp& __k = __i--; // require postdecrement operator │ │ │ │ +596 typedef typename std::iterator_traits<_Tp>::reference _Ref; │ │ │ │ +597 _Ref __r = *__j--; │ │ │ │ +598 } │ │ │ │ +599 _Tp __i; │ │ │ │ +600 }; │ │ │ │ +601 │ │ │ │ +602 template │ │ │ │ +603 struct _Mutable_BidirectionalIteratorConcept │ │ │ │ +604 { │ │ │ │ +605 void __constraints() { │ │ │ │ +606 __function_requires< _BidirectionalIteratorConcept<_Tp> >(); │ │ │ │ +607 __function_requires< _Mutable_ForwardIteratorConcept<_Tp> >(); │ │ │ │ +608 } │ │ │ │ +609 _Tp __i; │ │ │ │ +610 }; │ │ │ │ +611 │ │ │ │ +612 │ │ │ │ +613 template │ │ │ │ +614 struct _RandomAccessIteratorConcept │ │ │ │ +615 { │ │ │ │ +616 void __constraints() { │ │ │ │ +617 __function_requires< _BidirectionalIteratorConcept<_Tp> >(); │ │ │ │ +618 __function_requires< _ComparableConcept<_Tp> >(); │ │ │ │ +619 __function_requires< _ConvertibleConcept< │ │ │ │ +620 typename std::iterator_traits<_Tp>::iterator_category, │ │ │ │ +621 std::random_access_iterator_tag> >(); │ │ │ │ +622 typedef typename std::iterator_traits<_Tp>::reference _Ref; │ │ │ │ +623 │ │ │ │ +624 _Tp& __j = __i += __n; // require assignment addition operator │ │ │ │ +625 __i = __i + __n; __i = __n + __i; // require addition with difference type │ │ │ │ +626 _Tp& __k = __i -= __n; // require assignment subtraction op │ │ │ │ +627 __i = __i - __n; // require subtraction with │ │ │ │ +628 // difference type │ │ │ │ +629 __n = __i - __j; // require difference operator │ │ │ │ +630 _Ref __r = __i[__n]; // require element access operator │ │ │ │ +631 } │ │ │ │ +632 _Tp __a, __b; │ │ │ │ +633 _Tp __i, __j; │ │ │ │ +634 typename std::iterator_traits<_Tp>::difference_type __n; │ │ │ │ +635 }; │ │ │ │ +636 │ │ │ │ +637 template │ │ │ │ +638 struct _Mutable_RandomAccessIteratorConcept │ │ │ │ +639 { │ │ │ │ +640 void __constraints() { │ │ │ │ +641 __function_requires< _RandomAccessIteratorConcept<_Tp> >(); │ │ │ │ +642 __function_requires< _Mutable_BidirectionalIteratorConcept<_Tp> >(); │ │ │ │ +643 } │ │ │ │ +644 _Tp __i; │ │ │ │ +645 typename std::iterator_traits<_Tp>::difference_type __n; │ │ │ │ +646 }; │ │ │ │ +647 │ │ │ │ +648#pragma GCC diagnostic pop │ │ │ │ +649 │ │ │ │ +650 // │ │ │ │ +=========================================================================== │ │ │ │ +651 // Container Concepts │ │ │ │ +652 │ │ │ │ +653 template │ │ │ │ +654 struct _ContainerConcept │ │ │ │ +655 { │ │ │ │ +656 typedef typename _Container::value_type _Value_type; │ │ │ │ +657 typedef typename _Container::difference_type _Difference_type; │ │ │ │ +658 typedef typename _Container::size_type _Size_type; │ │ │ │ +659 typedef typename _Container::const_reference _Const_reference; │ │ │ │ +660 typedef typename _Container::const_pointer _Const_pointer; │ │ │ │ +661 typedef typename _Container::const_iterator _Const_iterator; │ │ │ │ +662 │ │ │ │ +663 void __constraints() { │ │ │ │ +664 __function_requires< _InputIteratorConcept<_Const_iterator> >(); │ │ │ │ +665 __function_requires< _AssignableConcept<_Container> >(); │ │ │ │ +666 const _Container __c; │ │ │ │ +667 __i = __c.begin(); │ │ │ │ +668 __i = __c.end(); │ │ │ │ +669 __n = __c.size(); │ │ │ │ +670 __n = __c.max_size(); │ │ │ │ +671 __b = __c.empty(); │ │ │ │ +672 } │ │ │ │ +673 bool __b; │ │ │ │ +674 _Const_iterator __i; │ │ │ │ +675 _Size_type __n; │ │ │ │ +676 }; │ │ │ │ +677 │ │ │ │ +678 template │ │ │ │ +679 struct _Mutable_ContainerConcept │ │ │ │ +680 { │ │ │ │ +681 typedef typename _Container::value_type _Value_type; │ │ │ │ +682 typedef typename _Container::reference _Reference; │ │ │ │ +683 typedef typename _Container::iterator _Iterator; │ │ │ │ +684 typedef typename _Container::pointer _Pointer; │ │ │ │ +685 │ │ │ │ +686 void __constraints() { │ │ │ │ +687 __function_requires< _ContainerConcept<_Container> >(); │ │ │ │ +688 __function_requires< _AssignableConcept<_Value_type> >(); │ │ │ │ +689 __function_requires< _InputIteratorConcept<_Iterator> >(); │ │ │ │ +690 │ │ │ │ +691 __i = __c.begin(); │ │ │ │ +692 __i = __c.end(); │ │ │ │ +693 __c.swap(__c2); │ │ │ │ +694 } │ │ │ │ +695 _Iterator __i; │ │ │ │ +696 _Container __c, __c2; │ │ │ │ +697 }; │ │ │ │ +698 │ │ │ │ +699 template │ │ │ │ +700 struct _ForwardContainerConcept │ │ │ │ +701 { │ │ │ │ +702 void __constraints() { │ │ │ │ +703 __function_requires< _ContainerConcept<_ForwardContainer> >(); │ │ │ │ +704 typedef typename _ForwardContainer::const_iterator _Const_iterator; │ │ │ │ +705 __function_requires< _ForwardIteratorConcept<_Const_iterator> >(); │ │ │ │ +706 } │ │ │ │ +707 }; │ │ │ │ +708 │ │ │ │ +709 template │ │ │ │ +710 struct _Mutable_ForwardContainerConcept │ │ │ │ +711 { │ │ │ │ +712 void __constraints() { │ │ │ │ +713 __function_requires< _ForwardContainerConcept<_ForwardContainer> >(); │ │ │ │ +714 __function_requires< _Mutable_ContainerConcept<_ForwardContainer> >(); │ │ │ │ +715 typedef typename _ForwardContainer::iterator _Iterator; │ │ │ │ +716 __function_requires< _Mutable_ForwardIteratorConcept<_Iterator> >(); │ │ │ │ +717 } │ │ │ │ +718 }; │ │ │ │ +719 │ │ │ │ +720 template │ │ │ │ +721 struct _ReversibleContainerConcept │ │ │ │ +722 { │ │ │ │ +723 typedef typename _ReversibleContainer::const_iterator _Const_iterator; │ │ │ │ +724 typedef typename _ReversibleContainer::const_reverse_iterator │ │ │ │ +725 _Const_reverse_iterator; │ │ │ │ +726 │ │ │ │ +727 void __constraints() { │ │ │ │ +728 __function_requires< _ForwardContainerConcept<_ReversibleContainer> >(); │ │ │ │ +729 __function_requires< _BidirectionalIteratorConcept<_Const_iterator> >(); │ │ │ │ +730 __function_requires< │ │ │ │ +731 _BidirectionalIteratorConcept<_Const_reverse_iterator> >(); │ │ │ │ +732 │ │ │ │ +733 const _ReversibleContainer __c; │ │ │ │ +734 _Const_reverse_iterator __i = __c.rbegin(); │ │ │ │ +735 __i = __c.rend(); │ │ │ │ +736 } │ │ │ │ +737 }; │ │ │ │ +738 │ │ │ │ +739 template │ │ │ │ +740 struct _Mutable_ReversibleContainerConcept │ │ │ │ +741 { │ │ │ │ +742 typedef typename _ReversibleContainer::iterator _Iterator; │ │ │ │ +743 typedef typename _ReversibleContainer::reverse_iterator _Reverse_iterator; │ │ │ │ +744 │ │ │ │ +745 void __constraints() { │ │ │ │ +746 __function_requires<_ReversibleContainerConcept<_ReversibleContainer> >(); │ │ │ │ +747 __function_requires< │ │ │ │ +748 _Mutable_ForwardContainerConcept<_ReversibleContainer> >(); │ │ │ │ +749 __function_requires<_Mutable_BidirectionalIteratorConcept<_Iterator> >(); │ │ │ │ +750 __function_requires< │ │ │ │ +751 _Mutable_BidirectionalIteratorConcept<_Reverse_iterator> >(); │ │ │ │ +752 │ │ │ │ +753 _Reverse_iterator __i = __c.rbegin(); │ │ │ │ +754 __i = __c.rend(); │ │ │ │ +755 } │ │ │ │ +756 _ReversibleContainer __c; │ │ │ │ +757 }; │ │ │ │ +758 │ │ │ │ +759 template │ │ │ │ +760 struct _RandomAccessContainerConcept │ │ │ │ +761 { │ │ │ │ +762 typedef typename _RandomAccessContainer::size_type _Size_type; │ │ │ │ +763 typedef typename _RandomAccessContainer::const_reference _Const_reference; │ │ │ │ +764 typedef typename _RandomAccessContainer::const_iterator _Const_iterator; │ │ │ │ +765 typedef typename _RandomAccessContainer::const_reverse_iterator │ │ │ │ +766 _Const_reverse_iterator; │ │ │ │ +767 │ │ │ │ +768 void __constraints() { │ │ │ │ +769 __function_requires< │ │ │ │ +770 _ReversibleContainerConcept<_RandomAccessContainer> >(); │ │ │ │ +771 __function_requires< _RandomAccessIteratorConcept<_Const_iterator> >(); │ │ │ │ +772 __function_requires< │ │ │ │ +773 _RandomAccessIteratorConcept<_Const_reverse_iterator> >(); │ │ │ │ +774 │ │ │ │ +775 const _RandomAccessContainer __c; │ │ │ │ +776 _Const_reference __r _IsUnused = __c[__n]; │ │ │ │ +777 } │ │ │ │ +778 _Size_type __n; │ │ │ │ +779 }; │ │ │ │ +780 │ │ │ │ +781 template │ │ │ │ +782 struct _Mutable_RandomAccessContainerConcept │ │ │ │ +783 { │ │ │ │ +784 typedef typename _RandomAccessContainer::size_type _Size_type; │ │ │ │ +785 typedef typename _RandomAccessContainer::reference _Reference; │ │ │ │ +786 typedef typename _RandomAccessContainer::iterator _Iterator; │ │ │ │ +787 typedef typename _RandomAccessContainer::reverse_iterator │ │ │ │ +_Reverse_iterator; │ │ │ │ +788 │ │ │ │ +789 void __constraints() { │ │ │ │ +790 __function_requires< │ │ │ │ +791 _RandomAccessContainerConcept<_RandomAccessContainer> >(); │ │ │ │ +792 __function_requires< │ │ │ │ +793 _Mutable_ReversibleContainerConcept<_RandomAccessContainer> >(); │ │ │ │ +794 __function_requires< _Mutable_RandomAccessIteratorConcept<_Iterator> >(); │ │ │ │ +795 __function_requires< │ │ │ │ +796 _Mutable_RandomAccessIteratorConcept<_Reverse_iterator> >(); │ │ │ │ +797 │ │ │ │ +798 _Reference __r _IsUnused = __c[__i]; │ │ │ │ +799 } │ │ │ │ +800 _Size_type __i; │ │ │ │ +801 _RandomAccessContainer __c; │ │ │ │ +802 }; │ │ │ │ +803 │ │ │ │ +804 // A Sequence is inherently mutable │ │ │ │ +805 template │ │ │ │ +806 struct _SequenceConcept │ │ │ │ +807 { │ │ │ │ +808 typedef typename _Sequence::reference _Reference; │ │ │ │ +809 typedef typename _Sequence::const_reference _Const_reference; │ │ │ │ +810 │ │ │ │ +811 void __constraints() { │ │ │ │ +812 // Matt Austern's book puts DefaultConstructible here, the C++ │ │ │ │ +813 // standard places it in Container │ │ │ │ +814 // function_requires< DefaultConstructible >(); │ │ │ │ +815 __function_requires< _Mutable_ForwardContainerConcept<_Sequence> >(); │ │ │ │ +816 __function_requires< _DefaultConstructibleConcept<_Sequence> >(); │ │ │ │ +817 │ │ │ │ +818 _Sequence │ │ │ │ +819 __c _IsUnused(__n, __t), │ │ │ │ +820 __c2 _IsUnused(__first, __last); │ │ │ │ +821 │ │ │ │ +822 __c.insert(__p, __t); │ │ │ │ +823 __c.insert(__p, __n, __t); │ │ │ │ +824 __c.insert(__p, __first, __last); │ │ │ │ +825 │ │ │ │ +826 __c.erase(__p); │ │ │ │ +827 __c.erase(__p, __q); │ │ │ │ +828 │ │ │ │ +829 _Reference __r _IsUnused = __c.front(); │ │ │ │ +830 │ │ │ │ +831 __const_constraints(__c); │ │ │ │ +832 } │ │ │ │ +833 void __const_constraints(const _Sequence& __c) { │ │ │ │ +834 _Const_reference __r _IsUnused = __c.front(); │ │ │ │ +835 } │ │ │ │ +836 typename _Sequence::value_type __t; │ │ │ │ +837 typename _Sequence::size_type __n; │ │ │ │ +838 typename _Sequence::value_type *__first, *__last; │ │ │ │ +839 typename _Sequence::iterator __p, __q; │ │ │ │ +840 }; │ │ │ │ +841 │ │ │ │ +842 template │ │ │ │ +843 struct _FrontInsertionSequenceConcept │ │ │ │ +844 { │ │ │ │ +845 void __constraints() { │ │ │ │ +846 __function_requires< _SequenceConcept<_FrontInsertionSequence> >(); │ │ │ │ +847 │ │ │ │ +848 __c.push_front(__t); │ │ │ │ +849 __c.pop_front(); │ │ │ │ +850 } │ │ │ │ +851 _FrontInsertionSequence __c; │ │ │ │ +852 typename _FrontInsertionSequence::value_type __t; │ │ │ │ +853 }; │ │ │ │ +854 │ │ │ │ +855 template │ │ │ │ +856 struct _BackInsertionSequenceConcept │ │ │ │ +857 { │ │ │ │ +858 typedef typename _BackInsertionSequence::reference _Reference; │ │ │ │ +859 typedef typename _BackInsertionSequence::const_reference _Const_reference; │ │ │ │ +860 │ │ │ │ +861 void __constraints() { │ │ │ │ +862 __function_requires< _SequenceConcept<_BackInsertionSequence> >(); │ │ │ │ +863 │ │ │ │ +864 __c.push_back(__t); │ │ │ │ +865 __c.pop_back(); │ │ │ │ +866 _Reference __r _IsUnused = __c.back(); │ │ │ │ +867 } │ │ │ │ +868 void __const_constraints(const _BackInsertionSequence& __c) { │ │ │ │ +869 _Const_reference __r _IsUnused = __c.back(); │ │ │ │ +870 }; │ │ │ │ +871 _BackInsertionSequence __c; │ │ │ │ +872 typename _BackInsertionSequence::value_type __t; │ │ │ │ +873 }; │ │ │ │ +874 │ │ │ │ +875_GLIBCXX_END_NAMESPACE_VERSION │ │ │ │ +876} // namespace │ │ │ │ +877 │ │ │ │ +878#pragma GCC diagnostic pop │ │ │ │ +879#undef _IsUnused │ │ │ │ +880 │ │ │ │ +881#endif // _GLIBCXX_BOOST_CONCEPT_CHECK │ │ │ │ +882 │ │ │ │ +883 │ │ │ │ +_s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h │ │ │ │ +_c_+_+_c_o_n_f_i_g_._h │ │ │ │ +_s_t_d │ │ │ │ +ISO C++ entities toplevel namespace is std. │ │ │ │ +_____g_n_u___c_x_x │ │ │ │ +GNU extensions for public use. │ │ │ │ +_____g_n_u___d_e_b_u_g │ │ │ │ +GNU debug classes for public use. │ │ │ │ +DDeeffiinniittiioonn _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h_:_5_8 │ │ │ │ +_____g_n_u___d_e_b_u_g_:_:___S_a_f_e___i_t_e_r_a_t_o_r │ │ │ │ +Safe iterator wrapper. │ │ │ │ +DDeeffiinniittiioonn _s_a_f_e___i_t_e_r_a_t_o_r_._h_:_1_3_3 │ │ │ │ * bbiittss │ │ │ │ - * _c_x_x_a_b_i___f_o_r_c_e_d_._h │ │ │ │ + * _b_o_o_s_t___c_o_n_c_e_p_t___c_h_e_c_k_._h │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00362.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: atomic_lockfree_defines.h File Reference │ │ │ +libstdc++: valarray_array.tcc File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,49 +48,86 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
atomic_lockfree_defines.h File Reference
│ │ │ +
valarray_array.tcc File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ +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
#define _VALARRAY_ARRAY_TCC
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ +Functions

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

Detailed Description

│ │ │ -

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

│ │ │ +

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

│ │ │ │ │ │ -

Definition in file atomic_lockfree_defines.h.

│ │ │ -
│ │ │ +

Definition in file valarray_array.tcc.

│ │ │ +

Macro Definition Documentation

│ │ │ + │ │ │ +

◆ _VALARRAY_ARRAY_TCC

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
#define _VALARRAY_ARRAY_TCC
│ │ │ +
│ │ │ + │ │ │ +

Definition at line 33 of file valarray_array.tcc.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,21 +1,52 @@ │ │ │ │ libstdc++ │ │ │ │ -atomic_lockfree_defines.h File Reference │ │ │ │ +valarray_array.tcc File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ +NNaammeessppaacceess │ │ │ │ +namespace   _s_t_d │ │ │ │ MMaaccrrooss │ │ │ │ -#define  _A_T_O_M_I_C___B_O_O_L___L_O_C_K___F_R_E_E │ │ │ │ -#define  _A_T_O_M_I_C___C_H_A_R_1_6___T___L_O_C_K___F_R_E_E │ │ │ │ -#define  _A_T_O_M_I_C___C_H_A_R_3_2___T___L_O_C_K___F_R_E_E │ │ │ │ -#define  _A_T_O_M_I_C___C_H_A_R___L_O_C_K___F_R_E_E │ │ │ │ -#define  _A_T_O_M_I_C___I_N_T___L_O_C_K___F_R_E_E │ │ │ │ -#define  _A_T_O_M_I_C___L_L_O_N_G___L_O_C_K___F_R_E_E │ │ │ │ -#define  _A_T_O_M_I_C___L_O_N_G___L_O_C_K___F_R_E_E │ │ │ │ -#define  _A_T_O_M_I_C___P_O_I_N_T_E_R___L_O_C_K___F_R_E_E │ │ │ │ -#define  _A_T_O_M_I_C___S_H_O_R_T___L_O_C_K___F_R_E_E │ │ │ │ -#define  _A_T_O_M_I_C___W_C_H_A_R___T___L_O_C_K___F_R_E_E │ │ │ │ +#define  ___V_A_L_A_R_R_A_Y___A_R_R_A_Y___T_C_C │ │ │ │ +FFuunnccttiioonnss │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, _Array< bool > __m, _Array< _Tp │ │ │ │ + > __b, size_t __n) │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, _Array< bool > __m, size_t __n, │ │ │ │ + _Array< _Tp > __b, _Array< bool > __k) │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, │ │ │ │ + _Array< bool > __m) │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __e, _Array< size_t > __f, size_t │ │ │ │ + __n, _Array< _Tp > __a, _Array< size_t > __i) │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< │ │ │ │ + _Tp > __a) │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< │ │ │ │ + _Tp > __a, _Array< bool > __m) │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< │ │ │ │ + _Tp > __a, _Array< size_t > __i) │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< │ │ │ │ + _Tp > __a, size_t __s) │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (_Array< _Tp > __a, _Array< bool > __m, │ │ │ │ + _Array< _Tp > __b, size_t __n) │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (const _Expr< _Dom, _Tp > &__e, size_t │ │ │ │ + __n, _Array< _Tp > __a) │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Array< _Tp > __a, size_t __n, _Array< bool > __m, │ │ │ │ + const _Tp &__t) │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _a_t_o_m_i_c___l_o_c_k_f_r_e_e___d_e_f_i_n_e_s_._h. │ │ │ │ +attempt to use it directly. Instead, include . │ │ │ │ +Definition in file _v_a_l_a_r_r_a_y___a_r_r_a_y_._t_c_c. │ │ │ │ +********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ +********** _?◆_? __VVAALLAARRRRAAYY__AARRRRAAYY__TTCCCC ********** │ │ │ │ +#define _VALARRAY_ARRAY_TCC │ │ │ │ +Definition at line _3_3 of file _v_a_l_a_r_r_a_y___a_r_r_a_y_._t_c_c. │ │ │ │ * bbiittss │ │ │ │ - * _a_t_o_m_i_c___l_o_c_k_f_r_e_e___d_e_f_i_n_e_s_._h │ │ │ │ + * _v_a_l_a_r_r_a_y___a_r_r_a_y_._t_c_c │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00362_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: atomic_lockfree_defines.h Source File │ │ │ +libstdc++: valarray_array.tcc Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,20 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
atomic_lockfree_defines.h
│ │ │ +
valarray_array.tcc
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// -*- C++ -*- header.
│ │ │ +Go to the documentation of this file.
1// The template and inlines for the -*- C++ -*- internal _Array helper 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
│ │ │ @@ -75,61 +75,240 @@ │ │ │
18// 3.1, as published by the Free Software Foundation.
│ │ │
19
│ │ │
20// You should have received a copy of the GNU General Public License and
│ │ │
21// a copy of the GCC Runtime Library Exception along with this program;
│ │ │
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
│ │ │
23// <http://www.gnu.org/licenses/>.
│ │ │
24
│ │ │ -
25/** @file bits/atomic_lockfree_defines.h
│ │ │ +
25/** @file bits/valarray_array.tcc
│ │ │
26 * This is an internal header file, included by other library headers.
│ │ │ -
27 * Do not attempt to use it directly. @headername{atomic}
│ │ │ +
27 * Do not attempt to use it directly. @headername{valarray}
│ │ │
28 */
│ │ │
29
│ │ │ -
30#ifndef _GLIBCXX_ATOMIC_LOCK_FREE_H
│ │ │ -
31#define _GLIBCXX_ATOMIC_LOCK_FREE_H 1
│ │ │ -
32
│ │ │ -
33#pragma GCC system_header
│ │ │ -
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
│ │ │ +
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 */
│ │ │ +
ISO C++ entities toplevel namespace is std.
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ libstdc++ │ │ │ │ -atomic_lockfree_defines.h │ │ │ │ +valarray_array.tcc │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// -*- C++ -*- header. │ │ │ │ +1// The template and inlines for the -*- C++ -*- internal _Array helper 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,52 +21,232 @@ │ │ │ │ 18// 3.1, as published by the Free Software Foundation. │ │ │ │ 19 │ │ │ │ 20// You should have received a copy of the GNU General Public License and │ │ │ │ 21// a copy of the GCC Runtime Library Exception along with this program; │ │ │ │ 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see │ │ │ │ 23// . │ │ │ │ 24 │ │ │ │ -25/** @file bits/atomic_lockfree_defines.h │ │ │ │ +25/** @file bits/valarray_array.tcc │ │ │ │ 26 * This is an internal header file, included by other library headers. │ │ │ │ -27 * Do not attempt to use it directly. @headername{atomic} │ │ │ │ +27 * Do not attempt to use it directly. @headername{valarray} │ │ │ │ 28 */ │ │ │ │ 29 │ │ │ │ -30#ifndef _GLIBCXX_ATOMIC_LOCK_FREE_H │ │ │ │ -31#define _GLIBCXX_ATOMIC_LOCK_FREE_H 1 │ │ │ │ -32 │ │ │ │ -33#pragma GCC system_header │ │ │ │ +30// Written by Gabriel Dos Reis │ │ │ │ +31 │ │ │ │ +32#ifndef _VALARRAY_ARRAY_TCC │ │ │ │ +33#define _VALARRAY_ARRAY_TCC 1 │ │ │ │ 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 │ │ │ │ -_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/// @} group atomics │ │ │ │ -65 │ │ │ │ -66#endif │ │ │ │ +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 */ │ │ │ │ +_s_t_d │ │ │ │ +ISO C++ entities toplevel namespace is std. │ │ │ │ * bbiittss │ │ │ │ - * _a_t_o_m_i_c___l_o_c_k_f_r_e_e___d_e_f_i_n_e_s_._h │ │ │ │ + * _v_a_l_a_r_r_a_y___a_r_r_a_y_._t_c_c │ │ │ │ * Generated by _[_d_o_x_y_g_e_n_]1.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00368.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: valarray_after.h File Reference │ │ │ +libstdc++: unique_lock.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,412 +48,44 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
valarray_after.h File Reference
│ │ │ +
unique_lock.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ +Classes

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

│ │ │ Namespaces

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

│ │ │ -Macros

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

│ │ │ -Functions

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

Detailed Description

│ │ │ -

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

│ │ │ - │ │ │ -

Definition in file valarray_after.h.

│ │ │ -

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ _DEFINE_EXPR_BINARY_FUNCTION

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

Definition at line 462 of file valarray_after.h.

│ │ │ +

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

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

◆ _DEFINE_EXPR_BINARY_OPERATOR

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

Definition at line 340 of file valarray_after.h.

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

◆ _DEFINE_EXPR_UNARY_FUNCTION

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

Definition at line 426 of file valarray_after.h.

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

◆ _DEFINE_EXPR_UNARY_OPERATOR

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

Definition at line 325 of file valarray_after.h.

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

Definition in file unique_lock.h.

│ │ │ +
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,786 +1,14 @@ │ │ │ │ libstdc++ │ │ │ │ -valarray_after.h File Reference │ │ │ │ +unique_lock.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ +CCllaasssseess │ │ │ │ +class   _s_t_d_:_:_u_n_i_q_u_e___l_o_c_k_<_ ___M_u_t_e_x_ _> │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ -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 │ │ │ │ - _Expr< _UnClos< struct std::_Abs, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_a_b_s (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Abs, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_a_b_s (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Acos, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_a_c_o_s (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Acos, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_a_c_o_s (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Asin, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_a_s_i_n (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Asin, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_a_s_i_n (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Atan, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_a_t_a_n (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Atan, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_a_t_a_n (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Atan2, │ │ │ │ -_Expr, _Constant, _Dom, typename _Dom:: _s_t_d_:_:_a_t_a_n_2 (const _Expr< _Dom, typename │ │ │ │ -value_type >, typename _Dom::value_type _Dom::value_type > &__e, const typename │ │ │ │ - >  _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Atan2, _s_t_d_:_:_a_t_a_n_2 (const _Expr< _Dom, typename │ │ │ │ -_Expr, _ValArray, _Dom, typename _Dom:: _Dom::value_type > &__e, const │ │ │ │ -value_type >, typename _Dom::value_type _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Atan2, _s_t_d_:_:_a_t_a_n_2 (const _Expr< _Dom1, │ │ │ │ - _Expr, _Expr, _Dom1, _Dom2 >, typename typename _Dom1::value_type > &__e1, │ │ │ │ - _Dom1::value_type >  const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type > &__e2) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Atan2, │ │ │ │ - _Constant, _Expr, typename _Dom:: _s_t_d_:_:_a_t_a_n_2 (const typename _Dom:: │ │ │ │ - value_type, _Dom >, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >  typename _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Atan2, _s_t_d_:_:_a_t_a_n_2 (const typename _v_a_l_a_r_r_a_y< │ │ │ │ - _Constant, _ValArray, _Tp, _Tp >, _Tp _Tp >_:_:_v_a_l_u_e___t_y_p_e &__t, const _v_a_l_a_r_r_a_y< │ │ │ │ - >  _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Atan2, _s_t_d_:_:_a_t_a_n_2 (const _v_a_l_a_r_r_a_y< _Tp > &__v, │ │ │ │ - _ValArray, _Constant, _Tp, _Tp >, _Tp const typename _v_a_l_a_r_r_a_y< _Tp >_:_: │ │ │ │ - >  _v_a_l_u_e___t_y_p_e &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Atan2, │ │ │ │ - _ValArray, _ValArray, _Tp, _Tp >, _Tp _s_t_d_:_:_a_t_a_n_2 (const _v_a_l_a_r_r_a_y< _Tp > &__v, │ │ │ │ - >  const _v_a_l_a_r_r_a_y< _Tp > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Atan2, │ │ │ │ - _ValArray, _Expr, typename _Dom:: _s_t_d_:_:_a_t_a_n_2 (const _v_a_l_a_r_r_a_y< typename │ │ │ │ - value_type, _Dom >, typename _Dom:: _Dom::valarray > &__v, const _Expr< │ │ │ │ - value_type >  _Dom, typename _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Cos, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_c_o_s (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Cos, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_c_o_s (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Cosh, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_c_o_s_h (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Cosh, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_c_o_s_h (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Exp, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_e_x_p (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Exp, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_e_x_p (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Log, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_l_o_g (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Log, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_l_o_g (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Log10, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_l_o_g_1_0 (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Log10, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_l_o_g_1_0 (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ -__not_equal_to, _Expr, _ValArray, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_!_= (const _Expr< _Dom, │ │ │ │ - __fun< struct std::__not_equal_to, typename _Dom::value_type > &__e, const │ │ │ │ - typename _Dom::value_type >:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ -__not_equal_to, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename │ │ │ │ - __fun< struct std::__not_equal_to, _s_t_d_:_:_o_p_e_r_a_t_o_r_!_= (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >:: typename _Dom::value_type > &__v, const │ │ │ │ - result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __not_equal_to, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_!_= (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __not_equal_to, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __not_equal_to, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_!_= (const typename _Dom:: │ │ │ │ - __not_equal_to, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __not_equal_to, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_!_= (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ - __not_equal_to, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__modulus, │ │ │ │ -_Expr, _ValArray, _Dom, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_% (const _Expr< _Dom, │ │ │ │ - value_type >, typename __fun< struct typename _Dom::value_type > &__e, const │ │ │ │ - std::__modulus, typename _Dom:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - value_type >::result_type >  &__v) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__modulus, │ │ │ │ -_Expr, _Constant, _Dom, typename _Dom:: │ │ │ │ - value_type >, typename __fun< struct _s_t_d_:_:_o_p_e_r_a_t_o_r_% (const _Expr< _Dom, │ │ │ │ - std::__modulus, typename _Dom:: typename _Dom::value_type > &__v, const │ │ │ │ - value_type >::result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__modulus, _s_t_d_:_:_o_p_e_r_a_t_o_r_% (const _Expr< _Dom1, │ │ │ │ - _Expr, _Expr, _Dom1, _Dom2 >, typename typename _Dom1::value_type > &__v, │ │ │ │ - __fun< struct std::__modulus, typename const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - _Dom1::value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__modulus, │ │ │ │ - _Constant, _Expr, typename _Dom:: │ │ │ │ - value_type, _Dom >, typename __fun< _s_t_d_:_:_o_p_e_r_a_t_o_r_% (const typename _Dom:: │ │ │ │ - struct std::__modulus, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__modulus, │ │ │ │ - _ValArray, _Expr, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_% (const _v_a_l_a_r_r_a_y< │ │ │ │ - value_type, _Dom >, typename __fun< typename _Dom::value_type > &__v, const │ │ │ │ - struct std::__modulus, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_and, _Expr, _ValArray, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_& (const _Expr< _Dom, │ │ │ │ - __fun< struct std::__bitwise_and, typename _Dom::value_type > &__e, const │ │ │ │ - typename _Dom::value_type >:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_and, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename │ │ │ │ - __fun< struct std::__bitwise_and, _s_t_d_:_:_o_p_e_r_a_t_o_r_& (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >:: typename _Dom::value_type > &__v, const │ │ │ │ - result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_and, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_& (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __bitwise_and, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_and, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_& (const typename _Dom:: │ │ │ │ - __bitwise_and, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_and, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_& (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ - __bitwise_and, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __logical_and, _Expr, _ValArray, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_&_& (const _Expr< _Dom, │ │ │ │ - __fun< struct std::__logical_and, typename _Dom::value_type > &__e, const │ │ │ │ - typename _Dom::value_type >:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __logical_and, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename │ │ │ │ - __fun< struct std::__logical_and, _s_t_d_:_:_o_p_e_r_a_t_o_r_&_& (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >:: typename _Dom::value_type > &__v, const │ │ │ │ - result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __logical_and, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_&_& (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __logical_and, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __logical_and, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_&_& (const typename _Dom:: │ │ │ │ - __logical_and, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __logical_and, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_&_& (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ - __logical_and, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __multiplies, _Expr, _ValArray, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_* (const _Expr< _Dom, │ │ │ │ - __fun< struct std::__multiplies, typename _Dom::value_type > &__e, const │ │ │ │ - typename _Dom::value_type >:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __multiplies, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename │ │ │ │ - __fun< struct std::__multiplies, _s_t_d_:_:_o_p_e_r_a_t_o_r_* (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >:: typename _Dom::value_type > &__v, const │ │ │ │ - result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __multiplies, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_* (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __multiplies, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __multiplies, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_* (const typename _Dom:: │ │ │ │ -__multiplies, typename _Dom::value_type value_type &__t, const _Expr< _Dom, │ │ │ │ - >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __multiplies, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_* (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ -__multiplies, typename _Dom::value_type _Expr< _Dom, typename _Dom::value_type │ │ │ │ - >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__plus, │ │ │ │ -_Expr, _ValArray, _Dom, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_+ (const _Expr< _Dom, │ │ │ │ - value_type >, typename __fun< struct typename _Dom::value_type > &__e, const │ │ │ │ - std::__plus, typename _Dom::value_type _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - >::result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__plus, │ │ │ │ -_Expr, _Constant, _Dom, typename _Dom:: │ │ │ │ - value_type >, typename __fun< struct _s_t_d_:_:_o_p_e_r_a_t_o_r_+ (const _Expr< _Dom, │ │ │ │ - std::__plus, typename _Dom::value_type typename _Dom::value_type > &__v, const │ │ │ │ - >::result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__plus, _s_t_d_:_:_o_p_e_r_a_t_o_r_+ (const _Expr< _Dom1, │ │ │ │ - _Expr, _Expr, _Dom1, _Dom2 >, typename typename _Dom1::value_type > &__v, │ │ │ │ - __fun< struct std::__plus, typename const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - _Dom1::value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__plus, │ │ │ │ - _Constant, _Expr, typename _Dom:: │ │ │ │ - value_type, _Dom >, typename __fun< _s_t_d_:_:_o_p_e_r_a_t_o_r_+ (const typename _Dom:: │ │ │ │ - struct std::__plus, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__plus, │ │ │ │ - _ValArray, _Expr, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_+ (const _v_a_l_a_r_r_a_y< │ │ │ │ - value_type, _Dom >, typename __fun< typename _Dom::value_type > &__v, const │ │ │ │ - struct std::__plus, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__minus, │ │ │ │ -_Expr, _ValArray, _Dom, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_- (const _Expr< _Dom, │ │ │ │ - value_type >, typename __fun< struct typename _Dom::value_type > &__e, const │ │ │ │ -std::__minus, typename _Dom::value_type _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - >::result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__minus, │ │ │ │ -_Expr, _Constant, _Dom, typename _Dom:: │ │ │ │ - value_type >, typename __fun< struct _s_t_d_:_:_o_p_e_r_a_t_o_r_- (const _Expr< _Dom, │ │ │ │ -std::__minus, typename _Dom::value_type typename _Dom::value_type > &__v, const │ │ │ │ - >::result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__minus, _s_t_d_:_:_o_p_e_r_a_t_o_r_- (const _Expr< _Dom1, │ │ │ │ - _Expr, _Expr, _Dom1, _Dom2 >, typename typename _Dom1::value_type > &__v, │ │ │ │ - __fun< struct std::__minus, typename const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - _Dom1::value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__minus, │ │ │ │ - _Constant, _Expr, typename _Dom:: │ │ │ │ - value_type, _Dom >, typename __fun< _s_t_d_:_:_o_p_e_r_a_t_o_r_- (const typename _Dom:: │ │ │ │ - struct std::__minus, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__minus, │ │ │ │ - _ValArray, _Expr, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_- (const _v_a_l_a_r_r_a_y< │ │ │ │ - value_type, _Dom >, typename __fun< typename _Dom::value_type > &__v, const │ │ │ │ - struct std::__minus, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__divides, │ │ │ │ -_Expr, _ValArray, _Dom, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_/ (const _Expr< _Dom, │ │ │ │ - value_type >, typename __fun< struct typename _Dom::value_type > &__e, const │ │ │ │ - std::__divides, typename _Dom:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - value_type >::result_type >  &__v) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__divides, │ │ │ │ -_Expr, _Constant, _Dom, typename _Dom:: │ │ │ │ - value_type >, typename __fun< struct _s_t_d_:_:_o_p_e_r_a_t_o_r_/ (const _Expr< _Dom, │ │ │ │ - std::__divides, typename _Dom:: typename _Dom::value_type > &__v, const │ │ │ │ - value_type >::result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__divides, _s_t_d_:_:_o_p_e_r_a_t_o_r_/ (const _Expr< _Dom1, │ │ │ │ - _Expr, _Expr, _Dom1, _Dom2 >, typename typename _Dom1::value_type > &__v, │ │ │ │ - __fun< struct std::__divides, typename const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - _Dom1::value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__divides, │ │ │ │ - _Constant, _Expr, typename _Dom:: │ │ │ │ - value_type, _Dom >, typename __fun< _s_t_d_:_:_o_p_e_r_a_t_o_r_/ (const typename _Dom:: │ │ │ │ - struct std::__divides, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__divides, │ │ │ │ - _ValArray, _Expr, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_/ (const _v_a_l_a_r_r_a_y< │ │ │ │ - value_type, _Dom >, typename __fun< typename _Dom::value_type > &__v, const │ │ │ │ - struct std::__divides, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__less, │ │ │ │ -_Expr, _ValArray, _Dom, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_< (const _Expr< _Dom, │ │ │ │ - value_type >, typename __fun< struct typename _Dom::value_type > &__e, const │ │ │ │ - std::__less, typename _Dom::value_type _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - >::result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__less, │ │ │ │ -_Expr, _Constant, _Dom, typename _Dom:: │ │ │ │ - value_type >, typename __fun< struct _s_t_d_:_:_o_p_e_r_a_t_o_r_< (const _Expr< _Dom, │ │ │ │ - std::__less, typename _Dom::value_type typename _Dom::value_type > &__v, const │ │ │ │ - >::result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__less, _s_t_d_:_:_o_p_e_r_a_t_o_r_< (const _Expr< _Dom1, │ │ │ │ - _Expr, _Expr, _Dom1, _Dom2 >, typename typename _Dom1::value_type > &__v, │ │ │ │ - __fun< struct std::__less, typename const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - _Dom1::value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__less, │ │ │ │ - _Constant, _Expr, typename _Dom:: │ │ │ │ - value_type, _Dom >, typename __fun< _s_t_d_:_:_o_p_e_r_a_t_o_r_< (const typename _Dom:: │ │ │ │ - struct std::__less, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::__less, │ │ │ │ - _ValArray, _Expr, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_< (const _v_a_l_a_r_r_a_y< │ │ │ │ - value_type, _Dom >, typename __fun< typename _Dom::value_type > &__v, const │ │ │ │ - struct std::__less, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __shift_left, _Expr, _ValArray, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_<_< (const _Expr< _Dom, │ │ │ │ - __fun< struct std::__shift_left, typename _Dom::value_type > &__e, const │ │ │ │ - typename _Dom::value_type >:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __shift_left, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename │ │ │ │ - __fun< struct std::__shift_left, _s_t_d_:_:_o_p_e_r_a_t_o_r_<_< (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >:: typename _Dom::value_type > &__v, const │ │ │ │ - result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __shift_left, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_<_< (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __shift_left, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __shift_left, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_<_< (const typename _Dom:: │ │ │ │ -__shift_left, typename _Dom::value_type value_type &__t, const _Expr< _Dom, │ │ │ │ - >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __shift_left, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_<_< (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ -__shift_left, typename _Dom::value_type _Expr< _Dom, typename _Dom::value_type │ │ │ │ - >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __less_equal, _Expr, _ValArray, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_<_= (const _Expr< _Dom, │ │ │ │ - __fun< struct std::__less_equal, typename _Dom::value_type > &__e, const │ │ │ │ - typename _Dom::value_type >:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __less_equal, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename │ │ │ │ - __fun< struct std::__less_equal, _s_t_d_:_:_o_p_e_r_a_t_o_r_<_= (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >:: typename _Dom::value_type > &__v, const │ │ │ │ - result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __less_equal, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_<_= (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __less_equal, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __less_equal, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_<_= (const typename _Dom:: │ │ │ │ -__less_equal, typename _Dom::value_type value_type &__t, const _Expr< _Dom, │ │ │ │ - >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __less_equal, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_<_= (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ -__less_equal, typename _Dom::value_type _Expr< _Dom, typename _Dom::value_type │ │ │ │ - >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __equal_to, _Expr, _ValArray, _Dom, _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >, typename typename _Dom::value_type > &__e, const │ │ │ │ -__fun< struct std::__equal_to, typename _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - _Dom::value_type >::result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __equal_to, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const _Expr< _Dom, │ │ │ │ -__fun< struct std::__equal_to, typename typename _Dom::value_type > &__v, const │ │ │ │ - _Dom::value_type >::result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __equal_to, _Expr, _Expr, _Dom1, _Dom2 _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const _Expr< _Dom1, │ │ │ │ - >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __equal_to, typename _Dom1::value_type const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __equal_to, _Constant, _Expr, typename │ │ │ │ - _Dom::value_type, _Dom >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const typename _Dom:: │ │ │ │ -__fun< struct std::__equal_to, typename value_type &__t, const _Expr< _Dom, │ │ │ │ - _Dom::value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __equal_to, _ValArray, _Expr, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const _v_a_l_a_r_r_a_y< │ │ │ │ - _Dom::value_type, _Dom >, typename typename _Dom::value_type > &__v, const │ │ │ │ -__fun< struct std::__equal_to, typename _Expr< _Dom, typename _Dom::value_type │ │ │ │ - _Dom::value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__greater, │ │ │ │ -_Expr, _ValArray, _Dom, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_> (const _Expr< _Dom, │ │ │ │ - value_type >, typename __fun< struct typename _Dom::value_type > &__e, const │ │ │ │ - std::__greater, typename _Dom:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - value_type >::result_type >  &__v) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__greater, │ │ │ │ -_Expr, _Constant, _Dom, typename _Dom:: │ │ │ │ - value_type >, typename __fun< struct _s_t_d_:_:_o_p_e_r_a_t_o_r_> (const _Expr< _Dom, │ │ │ │ - std::__greater, typename _Dom:: typename _Dom::value_type > &__v, const │ │ │ │ - value_type >::result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__greater, _s_t_d_:_:_o_p_e_r_a_t_o_r_> (const _Expr< _Dom1, │ │ │ │ - _Expr, _Expr, _Dom1, _Dom2 >, typename typename _Dom1::value_type > &__v, │ │ │ │ - __fun< struct std::__greater, typename const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - _Dom1::value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__greater, │ │ │ │ - _Constant, _Expr, typename _Dom:: │ │ │ │ - value_type, _Dom >, typename __fun< _s_t_d_:_:_o_p_e_r_a_t_o_r_> (const typename _Dom:: │ │ │ │ - struct std::__greater, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ -_Expr< _BinClos< struct std::__greater, │ │ │ │ - _ValArray, _Expr, typename _Dom:: _s_t_d_:_:_o_p_e_r_a_t_o_r_> (const _v_a_l_a_r_r_a_y< │ │ │ │ - value_type, _Dom >, typename __fun< typename _Dom::value_type > &__v, const │ │ │ │ - struct std::__greater, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __greater_equal, _Expr, _ValArray, │ │ │ │ - _Dom, typename _Dom::value_type >, _s_t_d_:_:_o_p_e_r_a_t_o_r_>_= (const _Expr< _Dom, │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__e, const │ │ │ │ - __greater_equal, typename _Dom:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - value_type >::result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __greater_equal, _Expr, _Constant, │ │ │ │ - _Dom, typename _Dom::value_type >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_>_= (const _Expr< _Dom, │ │ │ │ - __greater_equal, typename _Dom:: typename _Dom::value_type > &__v, const │ │ │ │ - value_type >::result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __greater_equal, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_>_= (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __greater_equal, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __greater_equal, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_>_= (const typename _Dom:: │ │ │ │ - __greater_equal, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __greater_equal, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_>_= (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ - __greater_equal, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __shift_right, _Expr, _ValArray, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_>_> (const _Expr< _Dom, │ │ │ │ - __fun< struct std::__shift_right, typename _Dom::value_type > &__e, const │ │ │ │ - typename _Dom::value_type >:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __shift_right, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename │ │ │ │ - __fun< struct std::__shift_right, _s_t_d_:_:_o_p_e_r_a_t_o_r_>_> (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >:: typename _Dom::value_type > &__v, const │ │ │ │ - result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __shift_right, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_>_> (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __shift_right, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __shift_right, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_>_> (const typename _Dom:: │ │ │ │ - __shift_right, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __shift_right, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_>_> (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ - __shift_right, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_xor, _Expr, _ValArray, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_^ (const _Expr< _Dom, │ │ │ │ - __fun< struct std::__bitwise_xor, typename _Dom::value_type > &__e, const │ │ │ │ - typename _Dom::value_type >:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_xor, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename │ │ │ │ - __fun< struct std::__bitwise_xor, _s_t_d_:_:_o_p_e_r_a_t_o_r_^ (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >:: typename _Dom::value_type > &__v, const │ │ │ │ - result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_xor, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_^ (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __bitwise_xor, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_xor, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_^ (const typename _Dom:: │ │ │ │ - __bitwise_xor, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_xor, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_^ (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ - __bitwise_xor, typename _Dom:: _Expr< _Dom, typename _Dom::value_type │ │ │ │ - value_type >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_or, _Expr, _ValArray, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_| (const _Expr< _Dom, │ │ │ │ - __fun< struct std::__bitwise_or, typename _Dom::value_type > &__e, const │ │ │ │ - typename _Dom::value_type >:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_or, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename │ │ │ │ - __fun< struct std::__bitwise_or, _s_t_d_:_:_o_p_e_r_a_t_o_r_| (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >:: typename _Dom::value_type > &__v, const │ │ │ │ - result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_or, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_| (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __bitwise_or, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_or, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_| (const typename _Dom:: │ │ │ │ -__bitwise_or, typename _Dom::value_type value_type &__t, const _Expr< _Dom, │ │ │ │ - >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __bitwise_or, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_| (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ -__bitwise_or, typename _Dom::value_type _Expr< _Dom, typename _Dom::value_type │ │ │ │ - >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __logical_or, _Expr, _ValArray, _Dom, │ │ │ │ - typename _Dom::value_type >, typename _s_t_d_:_:_o_p_e_r_a_t_o_r_|_| (const _Expr< _Dom, │ │ │ │ - __fun< struct std::__logical_or, typename _Dom::value_type > &__e, const │ │ │ │ - typename _Dom::value_type >:: _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - result_type >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __logical_or, _Expr, _Constant, _Dom, │ │ │ │ - typename _Dom::value_type >, typename │ │ │ │ - __fun< struct std::__logical_or, _s_t_d_:_:_o_p_e_r_a_t_o_r_|_| (const _Expr< _Dom, │ │ │ │ - typename _Dom::value_type >:: typename _Dom::value_type > &__v, const │ │ │ │ - result_type >  typename _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __logical_or, _Expr, _Expr, _Dom1, _s_t_d_:_:_o_p_e_r_a_t_o_r_|_| (const _Expr< _Dom1, │ │ │ │ - _Dom2 >, typename __fun< struct std:: typename _Dom1::value_type > &__v, │ │ │ │ - __logical_or, typename _Dom1:: const _Expr< _Dom2, typename _Dom2:: │ │ │ │ - value_type >::result_type >  value_type > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __logical_or, _Constant, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, │ │ │ │ - typename __fun< struct std:: _s_t_d_:_:_o_p_e_r_a_t_o_r_|_| (const typename _Dom:: │ │ │ │ -__logical_or, typename _Dom::value_type value_type &__t, const _Expr< _Dom, │ │ │ │ - >::result_type >  typename _Dom::value_type > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std:: │ │ │ │ - __logical_or, _ValArray, _Expr, │ │ │ │ - typename _Dom::value_type, _Dom >, _s_t_d_:_:_o_p_e_r_a_t_o_r_|_| (const _v_a_l_a_r_r_a_y< │ │ │ │ - typename __fun< struct std:: typename _Dom::value_type > &__v, const │ │ │ │ -__logical_or, typename _Dom::value_type _Expr< _Dom, typename _Dom::value_type │ │ │ │ - >::result_type >  > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Pow, │ │ │ │ -_Expr, _Constant, _Dom, typename _Dom:: _s_t_d_:_:_p_o_w (const _Expr< _Dom, typename │ │ │ │ -value_type >, typename _Dom::value_type _Dom::value_type > &__e, const typename │ │ │ │ - >  _Dom::value_type &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Pow, _s_t_d_:_:_p_o_w (const _Expr< _Dom, typename │ │ │ │ -_Expr, _ValArray, _Dom, typename _Dom:: _Dom::value_type > &__e, const │ │ │ │ -value_type >, typename _Dom::value_type _v_a_l_a_r_r_a_y< typename _Dom::value_type > │ │ │ │ - >  &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Pow, _s_t_d_:_:_p_o_w (const _Expr< _Dom1, typename │ │ │ │ - _Expr, _Expr, _Dom1, _Dom2 >, typename _Dom1::value_type > &__e1, const _Expr< │ │ │ │ - _Dom1::value_type >  _Dom2, typename _Dom2::value_type > │ │ │ │ - &__e2) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Pow, │ │ │ │ - _Constant, _Expr, typename _Dom:: _s_t_d_:_:_p_o_w (const typename _Dom:: │ │ │ │ - value_type, _Dom >, typename _Dom:: value_type &__t, const _Expr< _Dom, │ │ │ │ - value_type >  typename _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Pow, _s_t_d_:_:_p_o_w (const typename _v_a_l_a_r_r_a_y< _Tp │ │ │ │ - _Constant, _ValArray, _Tp, _Tp >, _Tp >_:_:_v_a_l_u_e___t_y_p_e &__t, const _v_a_l_a_r_r_a_y< _Tp │ │ │ │ - >  > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Pow, _s_t_d_:_:_p_o_w (const _v_a_l_a_r_r_a_y< _Tp > &__v, │ │ │ │ - _ValArray, _Constant, _Tp, _Tp >, _Tp const typename _v_a_l_a_r_r_a_y< _Tp >_:_: │ │ │ │ - >  _v_a_l_u_e___t_y_p_e &__t) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Pow, │ │ │ │ - _ValArray, _ValArray, _Tp, _Tp >, _Tp _s_t_d_:_:_p_o_w (const _v_a_l_a_r_r_a_y< _Tp > &__v, │ │ │ │ - >  const _v_a_l_a_r_r_a_y< _Tp > &__w) │ │ │ │ -template │ │ │ │ - _Expr< _BinClos< struct std::_Pow, │ │ │ │ - _ValArray, _Expr, typename _Dom:: _s_t_d_:_:_p_o_w (const _v_a_l_a_r_r_a_y< typename │ │ │ │ - value_type, _Dom >, typename _Dom:: _Dom::valarray > &__v, const _Expr< │ │ │ │ - value_type >  _Dom, typename _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Sin, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_s_i_n (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Sin, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_s_i_n (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Sinh, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_s_i_n_h (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Sinh, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_s_i_n_h (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Sqrt, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_s_q_r_t (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Sqrt, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_s_q_r_t (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Tan, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_t_a_n (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Tan, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_t_a_n (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Tanh, │ │ │ │ - _Expr, _Dom >, typename _Dom:: _s_t_d_:_:_t_a_n_h (const _Expr< _Dom, typename │ │ │ │ - value_type >  _Dom::value_type > &__e) │ │ │ │ -template │ │ │ │ - _Expr< _UnClos< struct std::_Tanh, │ │ │ │ - _ValArray, _Tp >, _Tp >  _s_t_d_:_:_t_a_n_h (const _v_a_l_a_r_r_a_y< _Tp > &__v) │ │ │ │ ********** 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 ( __FFuunn, │ │ │ │ - __UUFFuunn ) │ │ │ │ -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 ( __OOpp, │ │ │ │ - __NNaammee ) │ │ │ │ -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 ( __NNaammee, │ │ │ │ - __UUNNaammee ) │ │ │ │ -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 ( __OOpp, │ │ │ │ - __NNaammee ) │ │ │ │ -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. │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00368_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: valarray_after.h Source File │ │ │ +libstdc++: unique_lock.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,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
│ │ │ @@ -75,553 +75,269 @@ │ │ │
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>
│ │ │ +
│ │ │ +
60 class unique_lock
│ │ │ +
61 {
│ │ │ +
62 public:
│ │ │ +
63 typedef _Mutex mutex_type;
│ │ │ +
64
│ │ │ +
65 unique_lock() noexcept
│ │ │ +
66 : _M_device(0), _M_owns(false)
│ │ │ +
67 { }
│ │ │ +
68
│ │ │ +
69 [[__nodiscard__]]
│ │ │ +
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
│ │ │ +
81 [[__nodiscard__]]
│ │ │ +
82 unique_lock(mutex_type& __m, try_to_lock_t)
│ │ │ +
83 : _M_device(std::__addressof(__m)), _M_owns(_M_device->try_lock())
│ │ │ +
84 { }
│ │ │ +
85
│ │ │ +
86 [[__nodiscard__]]
│ │ │ +
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>
│ │ │ +
94 [[__nodiscard__]]
│ │ │ +
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,
│ │ │ +
104 const chrono::duration<_Rep, _Period>& __rtime)
│ │ │ +
105 : _M_device(std::__addressof(__m)),
│ │ │ +
106 _M_owns(_M_device->try_lock_for(__rtime))
│ │ │ +
107 { }
│ │ │ +
108
│ │ │ +
109 ~unique_lock()
│ │ │ +
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
│ │ │ +
170 try_lock_until(const chrono::time_point<_Clock, _Duration>& __atime)
│ │ │ +
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 */
│ │ │ +
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
│ │ │ +
│ │ │ +
249 swap(unique_lock<_Mutex>& __x, unique_lock<_Mutex>& __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
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
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.
│ │ │ -
Implementation details not part of the namespace std interface.
│ │ │ +
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
│ │ │ +
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,546 +21,276 @@ │ │ │ │ 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 _____d_e_t_a_i_l │ │ │ │ -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 size () 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 unique_lock │ │ │ │ +61 { │ │ │ │ +62 public: │ │ │ │ +63 typedef _Mutex mutex_type; │ │ │ │ +64 │ │ │ │ +65 unique_lock() noexcept │ │ │ │ +66 : _M_device(0), _M_owns(false) │ │ │ │ +67 { } │ │ │ │ +68 │ │ │ │ +69 [[__nodiscard__]] │ │ │ │ +70 explicit unique_lock(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 unique_lock(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 size () 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 [[__nodiscard__]] │ │ │ │ +82 unique_lock(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 [[__nodiscard__]] │ │ │ │ +87 unique_lock(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 [[__nodiscard__]] │ │ │ │ +95 unique_lock(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_>& __atime) │ │ │ │ +97 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__m)), │ │ │ │ +98 _M_owns(_M_device->try_lock_until(__atime)) │ │ │ │ +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 size() const │ │ │ │ -130 { return _M_index.size(); } │ │ │ │ +101 template │ │ │ │ +102 [[__nodiscard__]] │ │ │ │ +103 unique_lock(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_>& __rtime) │ │ │ │ +105 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__m)), │ │ │ │ +106 _M_owns(_M_device->try_lock_for(__rtime)) │ │ │ │ +107 { } │ │ │ │ +108 │ │ │ │ +109 ~unique_lock() │ │ │ │ +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(_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 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 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_>& __atime) │ │ │ │ +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 │ │ │ │ +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_>& __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 │ │ │ │ -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(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 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 */ │ │ │ │ +245 /// Swap overload for unique_lock objects. │ │ │ │ +246 /// @relates unique_lock │ │ │ │ +247 template │ │ │ │ +248 inline void │ │ │ │ +_2_4_9 _s_w_a_p(unique_lock<_Mutex>& __x, unique_lock<_Mutex>& __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_:_:_____d_e_t_a_i_l │ │ │ │ -Implementation details not part of the namespace std interface. │ │ │ │ +_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_:_:_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_:_:_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 │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00371.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: valarray_before.h File Reference │ │ │ +libstdc++: specfun.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,41 +48,177 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
valarray_before.h File Reference
│ │ │ +
specfun.h File Reference
│ │ │
│ │ │
│ │ │ │ │ │

Go to the source code of this file.

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

│ │ │ Namespaces

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

│ │ │ +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 valarray_before.h.

│ │ │ -
│ │ │ +

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 at line 36 of file specfun.h.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,13 +1,176 @@ │ │ │ │ libstdc++ │ │ │ │ -valarray_before.h File Reference │ │ │ │ +specfun.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ NNaammeessppaacceess │ │ │ │ +namespace   _____g_n_u___c_x_x │ │ │ │ namespace   _s_t_d │ │ │ │ -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 │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e (unsigned int __n, │ │ │ │ + unsigned int __m, _Tp __x) │ │ │ │ + float  _s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_f (unsigned int __n, │ │ │ │ + unsigned int __m, float __x) │ │ │ │ + long double  _s_t_d_:_:_a_s_s_o_c___l_a_g_u_e_r_r_e_l (unsigned int __n, │ │ │ │ + unsigned int __m, long double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e (unsigned int __l, │ │ │ │ + unsigned int __m, _Tp __x) │ │ │ │ + float  _s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_f (unsigned int __l, │ │ │ │ + unsigned int __m, float __x) │ │ │ │ + long double  _s_t_d_:_:_a_s_s_o_c___l_e_g_e_n_d_r_e_l (unsigned int __l, │ │ │ │ + unsigned int __m, long double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote_2< _Tpa, _Tpb >:: │ │ │ │ + __type  _s_t_d_:_:_b_e_t_a (_Tpa __a, _Tpb __b) │ │ │ │ + float  _s_t_d_:_:_b_e_t_a_f (float __a, float __b) │ │ │ │ + long double  _s_t_d_:_:_b_e_t_a_l (long double __a, long │ │ │ │ + double __b) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1 (_Tp __k) │ │ │ │ + float  _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_f (float __k) │ │ │ │ + long double  _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_l (long double __k) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2 (_Tp __k) │ │ │ │ + float  _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_f (float __k) │ │ │ │ + long double  _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___2_l (long double __k) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote_2< _Tp, _Tpn >:: │ │ │ │ + __type  _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3 (_Tp __k, _Tpn __nu) │ │ │ │ + float  _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_f (float __k, float │ │ │ │ + __nu) │ │ │ │ + long double  _s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_l (long double __k, │ │ │ │ + long double __nu) │ │ │ │ +template │ │ │ │ +__gnu_cxx::__promote_3< _Tpa, _Tpc, _Tp _____g_n_u___c_x_x_:_:_c_o_n_f___h_y_p_e_r_g (_Tpa __a, _Tpc │ │ │ │ + >::__type  __c, _Tp __x) │ │ │ │ + float  _____g_n_u___c_x_x_:_:_c_o_n_f___h_y_p_e_r_g_f (float __a, │ │ │ │ + float __c, float __x) │ │ │ │ + long double  _____g_n_u___c_x_x_:_:_c_o_n_f___h_y_p_e_r_g_l (long double │ │ │ │ + __a, long double __c, long double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote_2< _Tpnu, _Tp >:: │ │ │ │ + __type  _s_t_d_:_:_c_y_l___b_e_s_s_e_l___i (_Tpnu __nu, _Tp __x) │ │ │ │ + float  _s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_f (float __nu, float │ │ │ │ + __x) │ │ │ │ + long double  _s_t_d_:_:_c_y_l___b_e_s_s_e_l___i_l (long double __nu, │ │ │ │ + long double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote_2< _Tpnu, _Tp >:: │ │ │ │ + __type  _s_t_d_:_:_c_y_l___b_e_s_s_e_l___j (_Tpnu __nu, _Tp __x) │ │ │ │ + float  _s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_f (float __nu, float │ │ │ │ + __x) │ │ │ │ + long double  _s_t_d_:_:_c_y_l___b_e_s_s_e_l___j_l (long double __nu, │ │ │ │ + long double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote_2< _Tpnu, _Tp >:: │ │ │ │ + __type  _s_t_d_:_:_c_y_l___b_e_s_s_e_l___k (_Tpnu __nu, _Tp __x) │ │ │ │ + float  _s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_f (float __nu, float │ │ │ │ + __x) │ │ │ │ + long double  _s_t_d_:_:_c_y_l___b_e_s_s_e_l___k_l (long double __nu, │ │ │ │ + long double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote_2< _Tpnu, _Tp >:: │ │ │ │ + __type  _s_t_d_:_:_c_y_l___n_e_u_m_a_n_n (_Tpnu __nu, _Tp __x) │ │ │ │ + float  _s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_f (float __nu, float │ │ │ │ + __x) │ │ │ │ + long double  _s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_l (long double __nu, │ │ │ │ + long double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote_2< _Tp, _Tpp >:: │ │ │ │ + __type  _s_t_d_:_:_e_l_l_i_n_t___1 (_Tp __k, _Tpp __phi) │ │ │ │ + float  _s_t_d_:_:_e_l_l_i_n_t___1_f (float __k, float __phi) │ │ │ │ + long double  _s_t_d_:_:_e_l_l_i_n_t___1_l (long double __k, long │ │ │ │ + double __phi) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote_2< _Tp, _Tpp >:: │ │ │ │ + __type  _s_t_d_:_:_e_l_l_i_n_t___2 (_Tp __k, _Tpp __phi) │ │ │ │ + float  _s_t_d_:_:_e_l_l_i_n_t___2_f (float __k, float __phi) │ │ │ │ + long double  _s_t_d_:_:_e_l_l_i_n_t___2_l (long double __k, long │ │ │ │ + double __phi) │ │ │ │ +template │ │ │ │ +__gnu_cxx::__promote_3< _Tp, _Tpn, _Tpp _s_t_d_:_:_e_l_l_i_n_t___3 (_Tp __k, _Tpn __nu, _Tpp │ │ │ │ + >::__type  __phi) │ │ │ │ + float  _s_t_d_:_:_e_l_l_i_n_t___3_f (float __k, float __nu, │ │ │ │ + float __phi) │ │ │ │ + long double  _s_t_d_:_:_e_l_l_i_n_t___3_l (long double __k, long │ │ │ │ + double __nu, long double __phi) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_e_x_p_i_n_t (_Tp __x) │ │ │ │ + float  _s_t_d_:_:_e_x_p_i_n_t_f (float __x) │ │ │ │ + long double  _s_t_d_:_:_e_x_p_i_n_t_l (long double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_h_e_r_m_i_t_e (unsigned int __n, _Tp │ │ │ │ + __x) │ │ │ │ + float  _s_t_d_:_:_h_e_r_m_i_t_e_f (unsigned int __n, float │ │ │ │ + __x) │ │ │ │ + long double  _s_t_d_:_:_h_e_r_m_i_t_e_l (unsigned int __n, long │ │ │ │ + double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote_4< _Tpa, _Tpb, _____g_n_u___c_x_x_:_:_h_y_p_e_r_g (_Tpa __a, _Tpb __b, │ │ │ │ + _Tpc, _Tp >::__type  _Tpc __c, _Tp __x) │ │ │ │ + float  _____g_n_u___c_x_x_:_:_h_y_p_e_r_g_f (float __a, float │ │ │ │ + __b, float __c, float __x) │ │ │ │ + long double  _____g_n_u___c_x_x_:_:_h_y_p_e_r_g_l (long double __a, │ │ │ │ + long double __b, long double __c, long │ │ │ │ + double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_l_a_g_u_e_r_r_e (unsigned int __n, _Tp │ │ │ │ + __x) │ │ │ │ + float  _s_t_d_:_:_l_a_g_u_e_r_r_e_f (unsigned int __n, float │ │ │ │ + __x) │ │ │ │ + long double  _s_t_d_:_:_l_a_g_u_e_r_r_e_l (unsigned int __n, long │ │ │ │ + double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_l_e_g_e_n_d_r_e (unsigned int __l, _Tp │ │ │ │ + __x) │ │ │ │ + float  _s_t_d_:_:_l_e_g_e_n_d_r_e_f (unsigned int __l, float │ │ │ │ + __x) │ │ │ │ + long double  _s_t_d_:_:_l_e_g_e_n_d_r_e_l (unsigned int __l, long │ │ │ │ + double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a (_Tp __s) │ │ │ │ + float  _s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_f (float __s) │ │ │ │ + long double  _s_t_d_:_:_r_i_e_m_a_n_n___z_e_t_a_l (long double __s) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_s_p_h___b_e_s_s_e_l (unsigned int __n, _Tp │ │ │ │ + __x) │ │ │ │ + float  _s_t_d_:_:_s_p_h___b_e_s_s_e_l_f (unsigned int __n, │ │ │ │ + float __x) │ │ │ │ + long double  _s_t_d_:_:_s_p_h___b_e_s_s_e_l_l (unsigned int __n, │ │ │ │ + long double __x) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e (unsigned int __l, │ │ │ │ + unsigned int __m, _Tp __theta) │ │ │ │ + float  _s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_f (unsigned int __l, │ │ │ │ + unsigned int __m, float __theta) │ │ │ │ + long double  _s_t_d_:_:_s_p_h___l_e_g_e_n_d_r_e_l (unsigned int __l, │ │ │ │ + unsigned int __m, long double __theta) │ │ │ │ +template │ │ │ │ + __gnu_cxx::__promote< _Tp >::__type  _s_t_d_:_:_s_p_h___n_e_u_m_a_n_n (unsigned int __n, _Tp │ │ │ │ + __x) │ │ │ │ + float  _s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_f (unsigned int __n, │ │ │ │ + float __x) │ │ │ │ + long double  _s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_l (unsigned int __n, │ │ │ │ + long double __x) │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _v_a_l_a_r_r_a_y___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. │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00371_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: valarray_before.h Source File │ │ │ +libstdc++: specfun.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,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
│ │ │ @@ -75,768 +75,1613 @@ │ │ │
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
│ │ │ +
│ │ │ +
356 comp_ellint_1f(float __k)
│ │ │ +
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
│ │ │ +
│ │ │ +
404 comp_ellint_2f(float __k)
│ │ │ +
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
│ │ │ +
│ │ │ +
487 comp_ellint_3(_Tp __k, _Tpn __nu)
│ │ │ +
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
│ │ │ +
│ │ │ +
533 cyl_bessel_i(_Tpnu __nu, _Tp __x)
│ │ │ +
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
│ │ │ +
│ │ │ +
579 cyl_bessel_j(_Tpnu __nu, _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>(__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
│ │ │ +
│ │ │ +
631 cyl_bessel_k(_Tpnu __nu, _Tp __x)
│ │ │ +
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
│ │ │ +
│ │ │ +
679 cyl_neumann(_Tpnu __nu, _Tp __x)
│ │ │ +
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:1121
│ │ │ -
complex< _Tp > log(const complex< _Tp > &)
Return complex natural logarithm of z.
Definition complex:1086
│ │ │ -
complex< _Tp > tan(const complex< _Tp > &)
Return complex tangent of z.
Definition complex:1222
│ │ │ -
_Tp abs(const complex< _Tp > &)
Return magnitude of z.
Definition complex:892
│ │ │ -
complex< _Tp > exp(const complex< _Tp > &)
Return complex base e exponential of z.
Definition complex:1059
│ │ │ -
complex< _Tp > cosh(const complex< _Tp > &)
Return complex hyperbolic cosine of z.
Definition complex:1033
│ │ │ -
complex< _Tp > tanh(const complex< _Tp > &)
Return complex hyperbolic tangent of z.
Definition complex:1250
│ │ │ -
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:1151
│ │ │ -
complex< _Tp > cos(const complex< _Tp > &)
Return complex cosine of z.
Definition complex:1003
│ │ │ -
complex< _Tp > sqrt(const complex< _Tp > &)
Return complex square root of z.
Definition complex:1195
│ │ │ +
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
│ │ │ +
│ │ │ +
1020 riemann_zetaf(float __s)
│ │ │ +
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
│ │ │ +
__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 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.
│ │ │ -
Implementation details not part of the namespace std interface.
│ │ │ +
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,798 +21,1652 @@ │ │ │ │ 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(_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 │ │ │ │ -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 _____d_e_t_a_i_l │ │ │ │ -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 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 │ │ │ │ -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 size() 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 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 │ │ │ │ -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 │ │ │ │ -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 __nu) │ │ │ │ +452 { return __detail::__comp_ellint_3(__k, __nu); } │ │ │ │ +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 __nu) │ │ │ │ +462 { return __detail::__comp_ellint_3(__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 │ │ │ │ +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, _Tpn __nu) │ │ │ │ +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 │ │ │ │ +_5_0_2 _c_y_l___b_e_s_s_e_l___i_f(float __nu, float __x) │ │ │ │ +503 { return __detail::__cyl_bessel_i(__nu, __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 __nu, long double __x) │ │ │ │ +513 { return __detail::__cyl_bessel_i(__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, __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(_Tpnu __nu, _Tp __x) │ │ │ │ +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 │ │ │ │ +_5_4_8 _c_y_l___b_e_s_s_e_l___j_f(float __nu, float __x) │ │ │ │ +549 { return __detail::__cyl_bessel_j(__nu, __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 __nu, long double __x) │ │ │ │ +559 { return __detail::__cyl_bessel_j(__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, __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(_Tpnu __nu, _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>(__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 │ │ │ │ -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 __nu, float __x) │ │ │ │ +595 { return __detail::__cyl_bessel_k(__nu, __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 __nu, long double __x) │ │ │ │ +605 { return __detail::__cyl_bessel_k(__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, __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(_Tpnu __nu, _Tp __x) │ │ │ │ +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 _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 __nu, float __x) │ │ │ │ +647 { return __detail::__cyl_neumann_n(__nu, __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 __nu, long double __x) │ │ │ │ +657 { return __detail::__cyl_neumann_n(__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, __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(_Tpnu __nu, _Tp __x) │ │ │ │ +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 │ │ │ │ -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 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 │ │ │ │ -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 │ │ │ │ -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, _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 │ │ │ │ +_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_1 │ │ │ │ -_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_8_6 │ │ │ │ -_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_2 │ │ │ │ -_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_2 │ │ │ │ -_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_5_9 │ │ │ │ -_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_3 │ │ │ │ -_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_0 │ │ │ │ -_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_1 │ │ │ │ -_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_3 │ │ │ │ -_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_5 │ │ │ │ +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, _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 │ │ │ │ +_7_9_0 _e_l_l_i_n_t___3_f(float __k, float __nu, float __phi) │ │ │ │ +791 { return __detail::__ellint_3(__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 │ │ │ │ +_8_0_0 _e_l_l_i_n_t___3_l(long double __k, long double __nu, long double __phi) │ │ │ │ +801 { return __detail::__ellint_3(__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, 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 _e_l_l_i_n_t___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 │ │ │ │ +_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 __theta) │ │ │ │ +1116 { return __detail::__sph_legendre(__l, __m, __theta); } │ │ │ │ +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 __theta) │ │ │ │ +1127 { return __detail::__sph_legendre(__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 __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 __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 │ │ │ │ +_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___3 │ │ │ │ +__gnu_cxx::__promote_3< _Tp, _Tpn, _Tpp >::__type ellint_3(_Tp __k, _Tpn __nu, │ │ │ │ +_Tpp __phi) │ │ │ │ +Return the incomplete elliptic integral of the third kind . │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_2_8 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___2_l │ │ │ │ +long double ellint_2l(long double __k, long double __phi) │ │ │ │ +Return the incomplete elliptic integral of the second kind . │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_5_2 │ │ │ │ +_s_t_d_:_:_c_y_l___n_e_u_m_a_n_n_f │ │ │ │ +float cyl_neumannf(float __nu, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_6_4_6 │ │ │ │ +_s_t_d_:_:_b_e_t_a │ │ │ │ +__gnu_cxx::__promote_2< _Tpa, _Tpb >::__type beta(_Tpa __a, _Tpb __b) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_4_1 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_l │ │ │ │ +long double comp_ellint_1l(long double __k) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_6_6 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___3_f │ │ │ │ +float comp_ellint_3f(float __k, float __nu) │ │ │ │ +Return the complete elliptic integral of the third kind for float modulus k. │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_4_5_1 │ │ │ │ +_s_t_d_:_:_s_p_h___n_e_u_m_a_n_n_f │ │ │ │ +float sph_neumannf(unsigned int __n, float __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_1_1_6_2 │ │ │ │ +_s_t_d_:_:_e_x_p_i_n_t │ │ │ │ +__gnu_cxx::__promote< _Tp >::__type expint(_Tp __x) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_8_6_8 │ │ │ │ +_s_t_d_:_:_e_l_l_i_n_t___1_l │ │ │ │ +long double ellint_1l(long double __k, long double __phi) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_7_0_4 │ │ │ │ +_s_t_d_:_:_c_o_m_p___e_l_l_i_n_t___1_f │ │ │ │ +float comp_ellint_1f(float __k) │ │ │ │ +DDeeffiinniittiioonn _s_p_e_c_f_u_n_._h_:_3_5_6 │ │ │ │ +_____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_:_:_____d_e_t_a_i_l │ │ │ │ -Implementation details not part of the namespace std interface. │ │ │ │ +_____g_n_u___c_x_x │ │ │ │ +GNU extensions for public use. │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00374.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: valarray_array.tcc File Reference │ │ │ +libstdc++: cxxabi_init_exception.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,71 +48,72 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
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,52 +1,30 @@ │ │ │ │ libstdc++ │ │ │ │ -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 │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, _Array< bool > __m, _Array< _Tp │ │ │ │ - > __b, size_t __n) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, _Array< bool > __m, size_t __n, │ │ │ │ - _Array< _Tp > __b, _Array< bool > __k) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, size_t __n, _Array< _Tp > __b, │ │ │ │ - _Array< bool > __m) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __e, _Array< size_t > __f, size_t │ │ │ │ - __n, _Array< _Tp > __a, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< │ │ │ │ - _Tp > __a) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< │ │ │ │ - _Tp > __a, _Array< bool > __m) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< │ │ │ │ - _Tp > __a, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Expr< _Dom, _Tp > &__e, size_t __n, _Array< │ │ │ │ - _Tp > __a, size_t __s) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (_Array< _Tp > __a, _Array< bool > __m, │ │ │ │ - _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (const _Expr< _Dom, _Tp > &__e, size_t │ │ │ │ - __n, _Array< _Tp > __a) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Array< _Tp > __a, size_t __n, _Array< bool > __m, │ │ │ │ - const _Tp &__t) │ │ │ │ + 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. │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00374_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: valarray_array.tcc Source File │ │ │ +libstdc++: cxxabi_init_exception.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,267 +48,106 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
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 _t_y_p_e___i_n_f_o; │ │ │ │ +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 │ │ │ │ +_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 │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00377.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: valarray_array.h File Reference │ │ │ +libstdc++: stl_queue.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,376 +48,81 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
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< _Seq > std::operator<=> (const queue< _Tp, _Seq > &__x, const queue< _Tp, _Seq > &__y)
template<typename _Tp, typename _Seq>
bool std::operator== (const queue< _Tp, _Seq > &__x, const queue< _Tp, _Seq > &__y)
template<typename _Tp, typename _Seq>
bool std::operator> (const queue< _Tp, _Seq > &__x, const queue< _Tp, _Seq > &__y)
template<typename _Tp, typename _Seq>
bool std::operator>= (const queue< _Tp, _Seq > &__x, const queue< _Tp, _Seq > &__y)
│ │ │ +template<typename _Compare, typename _Container, typename = _RequireNotAllocator<_Compare>, typename = _RequireNotAllocator<_Container>>
 std::priority_queue (_Compare, _Container) -> priority_queue< typename _Container::value_type, _Container, _Compare >
│ │ │ +template<typename _Compare, typename _Container, typename _Allocator, typename = _RequireNotAllocator<_Compare>, typename = _RequireNotAllocator<_Container>>
 std::priority_queue (_Compare, _Container, _Allocator) -> priority_queue< typename _Container::value_type, _Container, _Compare >
│ │ │ +template<typename _InputIterator, typename _ValT = typename iterator_traits<_InputIterator>::value_type, typename _Compare = less<_ValT>, typename _Container = vector<_ValT>, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocator<_Compare>, typename = _RequireNotAllocator<_Container>>
 std::priority_queue (_InputIterator, _InputIterator, _Compare=_Compare(), _Container=_Container()) -> priority_queue< _ValT, _Container, _Compare >
│ │ │ +template<typename _Container, typename = _RequireNotAllocator<_Container>>
 std::queue (_Container) -> queue< typename _Container::value_type, _Container >
│ │ │ +template<typename _Container, typename _Allocator, typename = _RequireNotAllocator<_Container>>
 std::queue (_Container, _Allocator) -> queue< typename _Container::value_type, _Container >
template<typename _Tp, typename _Sequence, typename _Compare>
enable_if< __and_< __is_swappable< _Sequence >, __is_swappable< _Compare > >::value >::type std::swap (priority_queue< _Tp, _Sequence, _Compare > &__x, priority_queue< _Tp, _Sequence, _Compare > &__y) noexcept(noexcept(__x.swap(__y)))
template<typename _Tp, typename _Seq>
enable_if< __is_swappable< _Seq >::value >::type std::swap (queue< _Tp, _Seq > &__x, queue< _Tp, _Seq > &__y) noexcept(noexcept(__x.swap(__y)))
│ │ │

Detailed Description

│ │ │ -

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

│ │ │ - │ │ │ -

Definition in file valarray_array.h.

│ │ │ -

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ _DEFINE_ARRAY_FUNCTION

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

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

│ │ │ │ │ │ -

Definition at line 511 of file valarray_array.h.

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

Definition in file stl_queue.h.

│ │ │ +
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,476 +1,79 @@ │ │ │ │ libstdc++ │ │ │ │ -valarray_array.h File Reference │ │ │ │ +stl_queue.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ +CCllaasssseess │ │ │ │ +class   _s_t_d_:_:_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 │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, _Array< _Tp > __b, │ │ │ │ - size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, _Array< size_t > __i, │ │ │ │ - _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, size_t __n, _Array< │ │ │ │ - _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, size_t __n, _Array< │ │ │ │ - _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, size_t __n, size_t │ │ │ │ - __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __a, size_t __n, size_t │ │ │ │ - __s1, _Array< _Tp > __b, size_t __s2) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (_Array< _Tp > __src, size_t __n, _Array< │ │ │ │ - size_t > __i, _Array< _Tp > __dst, _Array< size_t > __j) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Tp *__restrict__ __a, _Tp │ │ │ │ - *__restrict__ __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Tp *__restrict__ __a, const │ │ │ │ - size_t *__restrict__ __i, _Tp *__restrict__ __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Tp *__restrict__ __a, size_t __n, │ │ │ │ - _Tp *__restrict__ __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Tp *__restrict__ __a, size_t __n, │ │ │ │ - _Tp *__restrict__ __b, const size_t *__restrict__ __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Tp *__restrict__ __a, size_t __n, │ │ │ │ - size_t __s, _Tp *__restrict__ __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Tp *__restrict__ __src, size_t │ │ │ │ - __n, const size_t *__restrict__ __i, _Tp *__restrict__ __dst, │ │ │ │ - const size_t *__restrict__ __j) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y (const _Tp *__restrict__ __src, size_t │ │ │ │ - __n, size_t __s1, _Tp *__restrict__ __dst, size_t __s2) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (_Array< _Tp > __a, size_t __n, │ │ │ │ - size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (const _Tp *__b, const _Tp │ │ │ │ - *__e, _Tp *__restrict__ __o) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (const _Tp *__restrict__ __a, │ │ │ │ - const size_t *__restrict__ __i, _Tp *__restrict__ __o, size_t │ │ │ │ - __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___c_o_p_y___c_o_n_s_t_r_u_c_t (const _Tp *__restrict__ __a, │ │ │ │ - size_t __n, size_t __s, _Tp *__restrict__ __o) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___d_e_f_a_u_l_t___c_o_n_s_t_r_u_c_t (_Tp *__b, _Tp *__e) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___d_e_s_t_r_o_y___e_l_e_m_e_n_t_s (_Tp *__b, _Tp *__e) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Array< _Tp > __a, _Array< size_t > __i, │ │ │ │ - size_t __n, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Array< _Tp > __a, size_t __n, const _Tp │ │ │ │ - &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Array< _Tp > __a, size_t __n, size_t │ │ │ │ - __s, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Tp *__restrict__ __a, const size_t │ │ │ │ - *__restrict__ __i, size_t __n, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Tp *__restrict__ __a, size_t __n, const │ │ │ │ - _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l (_Tp *__restrict__ __a, size_t __n, │ │ │ │ - size_t __s, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___f_i_l_l___c_o_n_s_t_r_u_c_t (_Tp *__b, _Tp *__e, const _Tp │ │ │ │ - __t) │ │ │ │ -template │ │ │ │ - _Tp *  _s_t_d_:_:_____v_a_l_a_r_r_a_y___g_e_t___s_t_o_r_a_g_e (size_t) │ │ │ │ -template │ │ │ │ -_Ta::value_type  _s_t_d_:_:_____v_a_l_a_r_r_a_y___m_a_x (const _Ta &__a) │ │ │ │ -template │ │ │ │ -_Ta::value_type  _s_t_d_:_:_____v_a_l_a_r_r_a_y___m_i_n (const _Ta &__a) │ │ │ │ - void  _s_t_d_:_:_____v_a_l_a_r_r_a_y___r_e_l_e_a_s_e___m_e_m_o_r_y (void *__p) │ │ │ │ -template │ │ │ │ - _Tp  _s_t_d_:_:_____v_a_l_a_r_r_a_y___s_u_m (const _Tp *__f, const _Tp *__l) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, │ │ │ │ - _Array< _Tp > __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, │ │ │ │ - _Array< bool > __m, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, │ │ │ │ - _Array< bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, │ │ │ │ - _Array< size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, │ │ │ │ - _Array< size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t │ │ │ │ - __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, const │ │ │ │ - _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< bool > __m) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, size_t │ │ │ │ - __n, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, size_t │ │ │ │ - __n, size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___a_n_d (_Array< _Tp > __a, size_t │ │ │ │ - __s, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, _Array< │ │ │ │ - _Tp > __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, _Array< │ │ │ │ - bool > __m, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, _Array< │ │ │ │ - bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, const │ │ │ │ - _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< bool > __m) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, size_t │ │ │ │ - __n, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, size_t │ │ │ │ - __n, size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___o_r (_Array< _Tp > __a, size_t │ │ │ │ - __s, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, │ │ │ │ - _Array< _Tp > __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, │ │ │ │ - _Array< bool > __m, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, │ │ │ │ - _Array< bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, │ │ │ │ - _Array< size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, │ │ │ │ - _Array< size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t │ │ │ │ - __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, const │ │ │ │ - _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< bool > __m) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, size_t │ │ │ │ - __n, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, size_t │ │ │ │ - __n, size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______b_i_t_w_i_s_e___x_o_r (_Array< _Tp > __a, size_t │ │ │ │ - __s, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, _Array< │ │ │ │ - _Tp > __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, _Array< │ │ │ │ - bool > __m, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, _Array< │ │ │ │ - bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, const │ │ │ │ - _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< bool > __m) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______d_i_v_i_d_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __s, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, _Array< _Tp │ │ │ │ - > __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, _Array< bool │ │ │ │ - > __m, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, _Array< bool │ │ │ │ - > __m, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, const _Expr< │ │ │ │ - _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, size_t __n, │ │ │ │ - _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, size_t __n, │ │ │ │ - _Array< _Tp > __b, _Array< bool > __m) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, size_t __n, │ │ │ │ - _Array< _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, size_t __n, │ │ │ │ - const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, size_t __n, │ │ │ │ - size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_i_n_u_s (_Array< _Tp > __a, size_t __s, │ │ │ │ - const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, _Array< │ │ │ │ - _Tp > __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, _Array< │ │ │ │ - bool > __m, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, _Array< │ │ │ │ - bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, const │ │ │ │ - _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< bool > __m) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_o_d_u_l_u_s (_Array< _Tp > __a, size_t │ │ │ │ - __s, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, _Array< │ │ │ │ - _Tp > __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, _Array< │ │ │ │ - bool > __m, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, _Array< │ │ │ │ - bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, const │ │ │ │ - _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< bool > __m) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __n, size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______m_u_l_t_i_p_l_i_e_s (_Array< _Tp > __a, size_t │ │ │ │ - __s, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, _Array< _Tp > │ │ │ │ - __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, _Array< bool │ │ │ │ - > __m, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, _Array< bool │ │ │ │ - > __m, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, const _Expr< │ │ │ │ - _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, size_t __n, │ │ │ │ - _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, size_t __n, │ │ │ │ - _Array< _Tp > __b, _Array< bool > __m) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, size_t __n, │ │ │ │ - _Array< _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, size_t __n, │ │ │ │ - const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, size_t __n, │ │ │ │ - size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______p_l_u_s (_Array< _Tp > __a, size_t __s, │ │ │ │ - const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, _Array< │ │ │ │ - _Tp > __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, _Array< │ │ │ │ - bool > __m, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, _Array< │ │ │ │ - bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, _Array< │ │ │ │ - size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, const │ │ │ │ - _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< bool > __m) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, size_t │ │ │ │ - __n, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, size_t │ │ │ │ - __n, size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___l_e_f_t (_Array< _Tp > __a, size_t │ │ │ │ - __s, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, │ │ │ │ - _Array< _Tp > __b, size_t __n, size_t __s) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, │ │ │ │ - _Array< bool > __m, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, │ │ │ │ - _Array< bool > __m, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, │ │ │ │ - _Array< size_t > __i, _Array< _Tp > __b, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, │ │ │ │ - _Array< size_t > __i, const _Expr< _Dom, _Tp > &__e, size_t │ │ │ │ - __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, const │ │ │ │ - _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< bool > __m) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, size_t │ │ │ │ - __n, _Array< _Tp > __b, _Array< size_t > __i) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, size_t │ │ │ │ - __n, const _Tp &__t) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, size_t │ │ │ │ - __n, size_t __s, _Array< _Tp > __b) │ │ │ │ -template │ │ │ │ - void  _s_t_d_:_:___A_r_r_a_y___a_u_g_m_e_n_t_e_d_______s_h_i_f_t___r_i_g_h_t (_Array< _Tp > __a, size_t │ │ │ │ - __s, const _Expr< _Dom, _Tp > &__e, size_t __n) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_!_= (const _q_u_e_u_e< _Tp, _Seq │ │ │ │ + > &__x, const _q_u_e_u_e< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_< (const _q_u_e_u_e< _Tp, _Seq │ │ │ │ + > &__x, const _q_u_e_u_e< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_<_= (const _q_u_e_u_e< _Tp, _Seq │ │ │ │ + > &__x, const _q_u_e_u_e< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ + _c_o_m_p_a_r_e___t_h_r_e_e___w_a_y___r_e_s_u_l_t___t< _Seq >  _s_t_d_:_:_o_p_e_r_a_t_o_r_<_=_> (const _q_u_e_u_e< _Tp, │ │ │ │ + _Seq > &__x, const _q_u_e_u_e< _Tp, _Seq > │ │ │ │ + &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const _q_u_e_u_e< _Tp, _Seq │ │ │ │ + > &__x, const _q_u_e_u_e< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_> (const _q_u_e_u_e< _Tp, _Seq │ │ │ │ + > &__x, const _q_u_e_u_e< _Tp, _Seq > &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_>_= (const _q_u_e_u_e< _Tp, _Seq │ │ │ │ + > &__x, const _q_u_e_u_e< _Tp, _Seq > &__y) │ │ │ │ +template, typename = _RequireNotAllocator<_Container>> │ │ │ │ +   ssttdd::::pprriioorriittyy__qquueeuuee (_Compare, │ │ │ │ + _Container) -> priority_queue< typename │ │ │ │ + _Container::value_type, _Container, │ │ │ │ + _Compare > │ │ │ │ +template, typename = _RequireNotAllocator<_Container>> │ │ │ │ +   ssttdd::::pprriioorriittyy__qquueeuuee (_Compare, │ │ │ │ + _Container, _Allocator) - │ │ │ │ + > priority_queue< typename _Container:: │ │ │ │ + value_type, _Container, _Compare > │ │ │ │ +template::value_type, typename _Compare = less<_ValT>, │ │ │ │ +typename _Container = vector<_ValT>, typename = │ │ │ │ +_RequireInputIter<_InputIterator>, typename = _RequireNotAllocator<_Compare>, │ │ │ │ +typename = _RequireNotAllocator<_Container>> │ │ │ │ +   ssttdd::::pprriioorriittyy__qquueeuuee (_InputIterator, │ │ │ │ + _InputIterator, _Compare=_Compare(), │ │ │ │ + _Container=_Container()) - │ │ │ │ + > priority_queue< _ValT, _Container, │ │ │ │ + _Compare > │ │ │ │ +template> │ │ │ │ +   ssttdd::::qquueeuuee (_Container) -> queue< │ │ │ │ + typename _Container::value_type, │ │ │ │ + _Container > │ │ │ │ +template> │ │ │ │ +   ssttdd::::qquueeuuee (_Container, _Allocator) - │ │ │ │ + > queue< typename _Container:: │ │ │ │ + value_type, _Container > │ │ │ │ +template │ │ │ │ + _e_n_a_b_l_e___i_f< __and_< __is_swappable< _s_t_d_:_:_s_w_a_p (_p_r_i_o_r_i_t_y___q_u_e_u_e< _Tp, │ │ │ │ +_Sequence >, __is_swappable< _Compare > _Sequence, _Compare > &__x, │ │ │ │ + >::value >_:_:_t_y_p_e  _p_r_i_o_r_i_t_y___q_u_e_u_e< _Tp, _Sequence, │ │ │ │ + _Compare > &__y) noexcept(noexcept │ │ │ │ + (__x.swap(__y))) │ │ │ │ +template │ │ │ │ + _e_n_a_b_l_e___i_f< __is_swappable< _Seq >:: _s_t_d_:_:_s_w_a_p (_q_u_e_u_e< _Tp, _Seq > &__x, │ │ │ │ + value >_:_:_t_y_p_e  _q_u_e_u_e< _Tp, _Seq > &__y) noexcept │ │ │ │ + (noexcept(__x.swap(__y))) │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _v_a_l_a_r_r_a_y___a_r_r_a_y_._h. │ │ │ │ -********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? __DDEEFFIINNEE__AARRRRAAYY__FFUUNNCCTTIIOONN ********** │ │ │ │ -#define _DEFINE_ARRAY_FUNCTION ( __OOpp, │ │ │ │ - __NNaammee ) │ │ │ │ -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. │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00377_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: valarray_array.h Source File │ │ │ +libstdc++: stl_queue.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,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
│ │ │ @@ -74,679 +74,926 @@ │ │ │
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
│ │ │ + │ │ │ +
│ │ │ +
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
│ │ │ +
326 noexcept(__is_nothrow_swappable<_Sequence>::value)
│ │ │ +
327#else
│ │ │ +
328 noexcept(__is_nothrow_swappable<_Tp>::value)
│ │ │ +
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>>
│ │ │ + │ │ │ +
341
│ │ │ +
342 template<typename _Container, typename _Allocator,
│ │ │ +
343 typename = _RequireNotAllocator<_Container>>
│ │ │ +
344 queue(_Container, _Allocator)
│ │ │ + │ │ │ +
346
│ │ │ +
347#ifdef __glibcxx_adaptor_iterator_pair_constructor
│ │ │ +
348 template<typename _InputIterator,
│ │ │ +
349 typename _ValT
│ │ │ + │ │ │ +
351 typename = _RequireInputIter<_InputIterator>>
│ │ │ +
352 queue(_InputIterator, _InputIterator) -> queue<_ValT>;
│ │ │ +
353
│ │ │ +
354 template<typename _InputIterator, typename _Allocator,
│ │ │ +
355 typename _ValT
│ │ │ + │ │ │ +
357 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
358 typename = _RequireAllocator<_Allocator>>
│ │ │ +
359 queue(_InputIterator, _InputIterator, _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]]
│ │ │ + │ │ │ +
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
│ │ │ + │ │ │ +
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 */
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ +
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
│ │ │ + │ │ │ + │ │ │ +
│ │ │ + │ │ │ +
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,
│ │ │ +
628 typename = std::_RequireInputIter<_InputIterator>>
│ │ │ +
│ │ │ +
629 priority_queue(_InputIterator __first, _InputIterator __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<typename _InputIterator,
│ │ │ +
637 typename = std::_RequireInputIter<_InputIterator>>
│ │ │ +
638 priority_queue(_InputIterator __first, _InputIterator __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<typename _InputIterator,
│ │ │ +
648 typename = std::_RequireInputIter<_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,
│ │ │ +
661 typename = std::_RequireInputIter<_InputIterator>,
│ │ │ +
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,
│ │ │ +
669 typename = std::_RequireInputIter<_InputIterator>,
│ │ │ +
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,
│ │ │ +
677 typename = std::_RequireInputIter<_InputIterator>,
│ │ │ +
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
│ │ │ + │ │ │ +
│ │ │ +
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
│ │ │ +
783 __is_nothrow_swappable<_Sequence>,
│ │ │ +
784#else
│ │ │ +
785 __is_nothrow_swappable<_Tp>,
│ │ │ +
786#endif
│ │ │ +
787 __is_nothrow_swappable<_Compare>
│ │ │ +
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)
│ │ │ + │ │ │ +
803
│ │ │ +
804 template<typename _InputIterator, typename _ValT
│ │ │ + │ │ │ +
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())
│ │ │ + │ │ │ +
814
│ │ │ +
815 template<typename _Compare, typename _Container, typename _Allocator,
│ │ │ +
816 typename = _RequireNotAllocator<_Compare>,
│ │ │ +
817 typename = _RequireNotAllocator<_Container>>
│ │ │ +
818 priority_queue(_Compare, _Container, _Allocator)
│ │ │ + │ │ │ +
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
│ │ │ + │ │ │ +
830 __is_swappable<_Compare>>::value>::type
│ │ │ +
831#else
│ │ │ +
832 void
│ │ │ +
833#endif
│ │ │ + │ │ │ + │ │ │ +
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
│ │ │ +
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:71
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ +
typename __detail::__cmp3way_res_impl< _Tp, _Up >::type compare_three_way_result_t
[cmp.result], result of three-way comparison
Definition compare:518
│ │ │ +
Define a member typedef type only if a boolean constant is true.
Definition type_traits:129
│ │ │ + │ │ │ +
is_default_constructible
Definition type_traits:1125
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
Declare uses_allocator so it can be specialized in <queue> etc.
Definition memoryfwd.h:73
│ │ │ +
One of the comparison functors.
│ │ │ +
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
│ │ │ +
A standard container which offers fixed time access to individual elements in any order.
Definition stl_vector.h:432
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── 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,671 +21,940 @@ │ │ │ │ 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 _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 │ │ │ │ +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>_:_:_t_y_p_e; │ │ │ │ +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>_:_:_t_y_p_e> │ │ │ │ +_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(std::_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(std::_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 _s_i_z_e___t_y_p_e │ │ │ │ +_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* begin() const; │ │ │ │ -403 │ │ │ │ -404 _Tp* const __restrict__ _M_data; │ │ │ │ -405 }; │ │ │ │ +286#if __cplusplus >= 201103L │ │ │ │ +287 void │ │ │ │ +288 _p_u_s_h(_v_a_l_u_e___t_y_p_e&& __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(__is_nothrow_swappable<_Sequence>::value) │ │ │ │ +327#else │ │ │ │ +328 noexcept(__is_nothrow_swappable<_Tp>::value) │ │ │ │ +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 _q_u_e_u_e(_Container) -> _q_u_e_u_e_<_t_y_p_e_n_a_m_e_ ___C_o_n_t_a_i_n_e_r_:_:_v_a_l_u_e___t_y_p_e_,_ ___C_o_n_t_a_i_n_e_r_>; │ │ │ │ +341 │ │ │ │ +342 template> │ │ │ │ +344 _q_u_e_u_e(_Container, _Allocator) │ │ │ │ +345 -> _q_u_e_u_e_<_t_y_p_e_n_a_m_e_ ___C_o_n_t_a_i_n_e_r_:_:_v_a_l_u_e___t_y_p_e_,_ ___C_o_n_t_a_i_n_e_r_>; │ │ │ │ +346 │ │ │ │ +347#ifdef __glibcxx_adaptor_iterator_pair_constructor │ │ │ │ +348 template_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ +351 typename = _RequireInputIter<_InputIterator>> │ │ │ │ +352 _q_u_e_u_e(_InputIterator, _InputIterator) -> _q_u_e_u_e_<___V_a_l_T_>; │ │ │ │ +353 │ │ │ │ +354 template_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ +357 typename = _RequireInputIter<_InputIterator>, │ │ │ │ +358 typename = _RequireAllocator<_Allocator>> │ │ │ │ +359 _q_u_e_u_e(_InputIterator, _InputIterator, _Allocator) │ │ │ │ +360 -> _q_u_e_u_e_<___V_a_l_T_,_ _d_e_q_u_e_<___V_a_l_T_,_ ___A_l_l_o_c_a_t_o_r_>>; │ │ │ │ +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 _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_> │ │ │ │ +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 _e_n_a_b_l_e___i_f_<_____i_s___s_w_a_p_p_a_b_l_e_<___S_e_q_>_:_:_v_a_l_u_e>::type │ │ │ │ +442#else │ │ │ │ +443 void │ │ │ │ +444#endif │ │ │ │ +445 swap(_q_u_e_u_e_<___T_p_,_ ___S_e_q_>& __x, _q_u_e_u_e_<___T_p_,_ ___S_e_q_>& __y) │ │ │ │ +446 noexcept(noexcept(__x.swap(__y))) │ │ │ │ +447 { __x.swap(__y); } │ │ │ │ +448 │ │ │ │ +449 template │ │ │ │ +450 struct _u_s_e_s___a_l_l_o_c_a_t_o_r<_q_u_e_u_e<_Tp, _Seq>, _Alloc> │ │ │ │ +451 : public _u_s_e_s___a_l_l_o_c_a_t_o_r<_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 _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 \ │ │ │ │ -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 │ │ │ │ -_c_s_t_d_l_i_b │ │ │ │ -_v_a_l_a_r_r_a_y___a_r_r_a_y_._t_c_c │ │ │ │ -_c_p_p___t_y_p_e___t_r_a_i_t_s_._h │ │ │ │ -_c_+_+_c_o_n_f_i_g_._h │ │ │ │ +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>_:_:_t_y_p_e; │ │ │ │ +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>_:_:_t_y_p_e> │ │ │ │ +_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(std::_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(std::_m_o_v_e(__q.c), __a), comp(std::_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(_InputIterator __first, _InputIterator __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(_InputIterator __first, _InputIterator __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(std::_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 _s_i_z_e___t_y_p_e │ │ │ │ +_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(_v_a_l_u_e___t_y_p_e&& __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& __pq) │ │ │ │ +781 noexcept(__and_< │ │ │ │ +782#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 │ │ │ │ +783 __is_nothrow_swappable<_Sequence>, │ │ │ │ +784#else │ │ │ │ +785 __is_nothrow_swappable<_Tp>, │ │ │ │ +786#endif │ │ │ │ +787 __is_nothrow_swappable<_Compare> │ │ │ │ +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, │ │ │ │ +800 typename = _RequireNotAllocator<_Container>> │ │ │ │ +801 _p_r_i_o_r_i_t_y___q_u_e_u_e(_Compare, _Container) │ │ │ │ +802 -> _p_r_i_o_r_i_t_y___q_u_e_u_e_<_t_y_p_e_n_a_m_e_ ___C_o_n_t_a_i_n_e_r_:_:_v_a_l_u_e___t_y_p_e_,_ ___C_o_n_t_a_i_n_e_r_,_ ___C_o_m_p_a_r_e_>; │ │ │ │ +803 │ │ │ │ +804 template_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ +806 typename _Compare = _l_e_s_s_<___V_a_l_T_>, │ │ │ │ +807 typename _Container = _v_e_c_t_o_r_<___V_a_l_T_>, │ │ │ │ +808 typename = _RequireInputIter<_InputIterator>, │ │ │ │ +809 typename = _RequireNotAllocator<_Compare>, │ │ │ │ +810 typename = _RequireNotAllocator<_Container>> │ │ │ │ +811 _p_r_i_o_r_i_t_y___q_u_e_u_e(_InputIterator, _InputIterator, _Compare = _Compare(), │ │ │ │ +812 _Container = _Container()) │ │ │ │ +813 -> _p_r_i_o_r_i_t_y___q_u_e_u_e_<___V_a_l_T_,_ ___C_o_n_t_a_i_n_e_r_,_ ___C_o_m_p_a_r_e_>; │ │ │ │ +814 │ │ │ │ +815 template, │ │ │ │ +817 typename = _RequireNotAllocator<_Container>> │ │ │ │ +818 _p_r_i_o_r_i_t_y___q_u_e_u_e(_Compare, _Container, _Allocator) │ │ │ │ +819 -> _p_r_i_o_r_i_t_y___q_u_e_u_e_<_t_y_p_e_n_a_m_e_ ___C_o_n_t_a_i_n_e_r_:_:_v_a_l_u_e___t_y_p_e_,_ ___C_o_n_t_a_i_n_e_r_,_ ___C_o_m_p_a_r_e_>; │ │ │ │ +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 _e_n_a_b_l_e___i_f_<_____a_n_d___<_____i_s___s_w_a_p_p_a_b_l_e_<___S_e_q_u_e_n_c_e_>, │ │ │ │ +830 __is_swappable<_Compare>>::value>::type │ │ │ │ +831#else │ │ │ │ +832 void │ │ │ │ +833#endif │ │ │ │ +834 swap(_p_r_i_o_r_i_t_y___q_u_e_u_e_<___T_p_,_ ___S_e_q_u_e_n_c_e_,_ ___C_o_m_p_a_r_e_>& __x, │ │ │ │ +835 _p_r_i_o_r_i_t_y___q_u_e_u_e_<___T_p_,_ ___S_e_q_u_e_n_c_e_,_ ___C_o_m_p_a_r_e_>& __y) │ │ │ │ +836 noexcept(noexcept(__x.swap(__y))) │ │ │ │ +837 { __x.swap(__y); } │ │ │ │ +838 │ │ │ │ +839 template │ │ │ │ +841 struct _u_s_e_s___a_l_l_o_c_a_t_o_r<_p_r_i_o_r_i_t_y___q_u_e_u_e<_Tp, _Sequence, _Compare>, _Alloc> │ │ │ │ +842 : public _u_s_e_s___a_l_l_o_c_a_t_o_r<_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_:_:_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 │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ +_s_t_d_:_:_c_o_m_p_a_r_e___t_h_r_e_e___w_a_y___r_e_s_u_l_t___t │ │ │ │ +typename __detail::__cmp3way_res_impl< _Tp, _Up >::type │ │ │ │ +compare_three_way_result_t │ │ │ │ +[cmp.result], result of three-way comparison │ │ │ │ +DDeeffiinniittiioonn _c_o_m_p_a_r_e_:_5_1_8 │ │ │ │ +_s_t_d_:_:_e_n_a_b_l_e___i_f │ │ │ │ +Define a member typedef type only if a boolean constant is true. │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_2_9 │ │ │ │ +_s_t_d_:_:_i_s___s_a_m_e │ │ │ │ +is_same │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_4_7_6 │ │ │ │ +_s_t_d_:_:_i_s___d_e_f_a_u_l_t___c_o_n_s_t_r_u_c_t_i_b_l_e │ │ │ │ +is_default_constructible │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_1_2_5 │ │ │ │ +_s_t_d_:_:_t_y_p_e │ │ │ │ +_s_t_d_:_:_s_i_z_e___t_y_p_e │ │ │ │ +_s_t_d_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ +_s_t_d_:_:_u_s_e_s___a_l_l_o_c_a_t_o_r │ │ │ │ +Declare uses_allocator so it can be specialized in etc. │ │ │ │ +DDeeffiinniittiioonn _m_e_m_o_r_y_f_w_d_._h_:_7_3 │ │ │ │ +_s_t_d_:_:_l_e_s_s │ │ │ │ +One of the comparison functors. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___f_u_n_c_t_i_o_n_._h_:_4_0_1 │ │ │ │ +_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_:_:_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 │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00380.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: unordered_set.h File Reference │ │ │ +libstdc++: unordered_map.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,103 +48,115 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
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_set< _Value, _Hash, _Pred, _Alloc >
class  std::unordered_map< _Key, _Tp, _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
template<bool _Cache>
using std::__umset_traits
template<typename _Value, typename _Hash = hash<_Value>, typename _Pred = std::equal_to<_Value>, typename _Alloc = std::allocator<_Value>, typename _Tr = __uset_traits<__cache_default<_Value, _Hash>::value>>
using std::__uset_hashtable
template<bool _Cache>
using std::__uset_traits
template<typename _Key, typename _Tp, typename _Hash = hash<_Key>, typename _Pred = std::equal_to<_Key>, typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >, typename _Tr = __umap_traits<__cache_default<_Key, _Hash>::value>>
using std::__umap_hashtable
template<bool _Cache>
using std::__umap_traits
template<typename _Key, typename _Tp, typename _Hash = hash<_Key>, typename _Pred = std::equal_to<_Key>, typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >, typename _Tr = __ummap_traits<__cache_default<_Key, _Hash>::value>>
using std::__ummap_hashtable
template<bool _Cache>
using std::__ummap_traits
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ - │ │ │ - │ │ │ + │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ Functions

template<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,132 +1,161 @@ │ │ │ │ libstdc++ │ │ │ │ -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___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___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_ _> │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ TTyyppeeddeeffss │ │ │ │ -template, typename _Pred = │ │ │ │ -std::equal_to<_Value>, typename _Alloc = std::allocator<_Value>, typename _Tr │ │ │ │ -= __umset_traits<__cache_default<_Value, _Hash>::value>> │ │ │ │ -using  _s_t_d_:_:_____u_m_s_e_t___h_a_s_h_t_a_b_l_e │ │ │ │ +template, typename │ │ │ │ +_Pred = std::equal_to<_Key>, typename _Alloc = std::allocator >, typename _Tr = __umap_traits<__cache_default<_Key, _Hash>:: │ │ │ │ +value>> │ │ │ │ +using  _s_t_d_:_:_____u_m_a_p___h_a_s_h_t_a_b_l_e │ │ │ │ template │ │ │ │ -using  _s_t_d_:_:_____u_m_s_e_t___t_r_a_i_t_s │ │ │ │ -template, typename _Pred = │ │ │ │ -std::equal_to<_Value>, typename _Alloc = std::allocator<_Value>, typename _Tr │ │ │ │ -= __uset_traits<__cache_default<_Value, _Hash>::value>> │ │ │ │ -using  _s_t_d_:_:_____u_s_e_t___h_a_s_h_t_a_b_l_e │ │ │ │ +using  _s_t_d_:_:_____u_m_a_p___t_r_a_i_t_s │ │ │ │ +template, typename │ │ │ │ +_Pred = std::equal_to<_Key>, typename _Alloc = std::allocator >, typename _Tr = __ummap_traits<__cache_default<_Key, _Hash>:: │ │ │ │ +value>> │ │ │ │ +using  _s_t_d_:_:_____u_m_m_a_p___h_a_s_h_t_a_b_l_e │ │ │ │ template │ │ │ │ -using  _s_t_d_:_:_____u_s_e_t___t_r_a_i_t_s │ │ │ │ +using  _s_t_d_:_:_____u_m_m_a_p___t_r_a_i_t_s │ │ │ │ FFuunnccttiioonnss │ │ │ │ -template │ │ │ │ -bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const unordered_multiset< _Value, _Hash, _Pred, _Alloc > │ │ │ │ - &__x, const unordered_multiset< _Value, _Hash, _Pred, _Alloc > &__y) │ │ │ │ -template │ │ │ │ -bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const unordered_set< _Value, _Hash, _Pred, _Alloc > │ │ │ │ - &__x, const unordered_set< _Value, _Hash, _Pred, _Alloc > &__y) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_s_w_a_p (unordered_multiset< _Value, _Hash, _Pred, _Alloc > &__x, │ │ │ │ - unordered_multiset< _Value, _Hash, _Pred, _Alloc > &__y) noexcept │ │ │ │ - (noexcept(__x.swap(__y))) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_s_w_a_p (unordered_set< _Value, _Hash, _Pred, _Alloc > &__x, │ │ │ │ - unordered_set< _Value, _Hash, _Pred, _Alloc > &__y) noexcept(noexcept │ │ │ │ +template │ │ │ │ +bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > │ │ │ │ + &__x, const unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__y) │ │ │ │ +template │ │ │ │ +bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const unordered_multimap< _Key, _Tp, _Hash, _Pred, │ │ │ │ + _Alloc > &__x, const unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc │ │ │ │ + > &__y) │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_s_w_a_p (unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__x, │ │ │ │ + unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__y) noexcept(noexcept │ │ │ │ (__x.swap(__y))) │ │ │ │ +template │ │ │ │ +void  _s_t_d_:_:_s_w_a_p (unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc > &__x, │ │ │ │ + unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc > &__y) noexcept │ │ │ │ + (noexcept(__x.swap(__y))) │ │ │ │ +template, typename = _RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (_InputIterator, _InputIterator, _Allocator) - │ │ │ │ + > unordered_map< __iter_key_t< _InputIterator >, __iter_val_t< │ │ │ │ + _InputIterator >, _h_a_s_h< __iter_key_t< _InputIterator > >, _e_q_u_a_l___t_o< │ │ │ │ + __iter_key_t< _InputIterator > >, _Allocator > │ │ │ │ template, typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiisseett (_InputIterator, _InputIterator, │ │ │ │ - unordered_multiset< int >_:_:_s_i_z_e___t_y_p_e, _Allocator) -> unordered_multiset< │ │ │ │ - typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_:_v_a_l_u_e___t_y_p_e, _h_a_s_h< typename │ │ │ │ - _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_:_v_a_l_u_e___t_y_p_e >, _e_q_u_a_l___t_o< typename │ │ │ │ - _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_:_v_a_l_u_e___t_y_p_e >, _Allocator > │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (_InputIterator, _InputIterator, typename │ │ │ │ + unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e, _Allocator) -> unordered_map< │ │ │ │ + __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, _h_a_s_h< │ │ │ │ + __iter_key_t< _InputIterator > >, _e_q_u_a_l___t_o< __iter_key_t< _InputIterator │ │ │ │ + > >, _Allocator > │ │ │ │ template, typename = │ │ │ │ _RequireNotAllocatorOrIntegral<_Hash>, typename = │ │ │ │ _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiisseett (_InputIterator, _InputIterator, │ │ │ │ - unordered_multiset< int >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) - │ │ │ │ - > unordered_multiset< typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_: │ │ │ │ - _v_a_l_u_e___t_y_p_e, _Hash, _e_q_u_a_l___t_o< typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_: │ │ │ │ - _v_a_l_u_e___t_y_p_e >, _Allocator > │ │ │ │ -template::value_type>, typename _Pred = │ │ │ │ -equal_to::value_type>, typename │ │ │ │ -_Allocator = allocator::value_type>, │ │ │ │ -typename = _RequireInputIter<_InputIterator>, typename = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, │ │ │ │ -typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiisseett (_InputIterator, _InputIterator, │ │ │ │ - unordered_multiset< int >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred(), │ │ │ │ - _Allocator=_Allocator()) -> unordered_multiset< typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< │ │ │ │ - _InputIterator >_:_:_v_a_l_u_e___t_y_p_e, _Hash, _Pred, _Allocator > │ │ │ │ -template> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiisseett (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _Tp >, unordered_multiset< int │ │ │ │ - >_:_:_s_i_z_e___t_y_p_e, _Allocator) -> unordered_multiset< _Tp, _h_a_s_h< _Tp >, │ │ │ │ - _e_q_u_a_l___t_o< _Tp >, _Allocator > │ │ │ │ -template, typename = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiisseett (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _Tp >, unordered_multiset< int │ │ │ │ - >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) -> unordered_multiset< _Tp, _Hash, │ │ │ │ - _e_q_u_a_l___t_o< _Tp >, _Allocator > │ │ │ │ -template, typename _Pred = │ │ │ │ -equal_to<_Tp>, typename _Allocator = allocator<_Tp>, typename = │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (_InputIterator, _InputIterator, typename │ │ │ │ + unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) - │ │ │ │ + > unordered_map< __iter_key_t< _InputIterator >, __iter_val_t< │ │ │ │ + _InputIterator >, _Hash, _e_q_u_a_l___t_o< __iter_key_t< _InputIterator > >, │ │ │ │ + _Allocator > │ │ │ │ +template>, typename _Pred = │ │ │ │ +equal_to<__iter_key_t<_InputIterator>>, typename _Allocator = │ │ │ │ +allocator<__iter_to_alloc_t<_InputIterator>>, typename = │ │ │ │ +_RequireInputIter<_InputIterator>, typename = │ │ │ │ _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, │ │ │ │ typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiisseett (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _Tp >, unordered_multiset< int │ │ │ │ - >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) - │ │ │ │ - > unordered_multiset< _Tp, _Hash, _Pred, _Allocator > │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (_InputIterator, _InputIterator, typename │ │ │ │ + unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred(), │ │ │ │ + _Allocator=_Allocator()) -> unordered_map< __iter_key_t< _InputIterator │ │ │ │ + >, __iter_val_t< _InputIterator >, _Hash, _Pred, _Allocator > │ │ │ │ +template> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, _Allocator) - │ │ │ │ + > unordered_map< _Key, _Tp, _h_a_s_h< _Key >, _e_q_u_a_l___t_o< _Key >, _Allocator > │ │ │ │ +template> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, typename │ │ │ │ + unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e, _Allocator) -> unordered_map< _Key, │ │ │ │ + _Tp, _h_a_s_h< _Key >, _e_q_u_a_l___t_o< _Key >, _Allocator > │ │ │ │ +template, typename = │ │ │ │ +_RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, typename │ │ │ │ + unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) - │ │ │ │ + > unordered_map< _Key, _Tp, _Hash, _e_q_u_a_l___t_o< _Key >, _Allocator > │ │ │ │ +template, typename │ │ │ │ +_Pred = equal_to<_Key>, typename _Allocator = allocator>, │ │ │ │ +typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = │ │ │ │ +_RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, typename │ │ │ │ + unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred(), │ │ │ │ + _Allocator=_Allocator()) -> unordered_map< _Key, _Tp, _Hash, _Pred, │ │ │ │ + _Allocator > │ │ │ │ +template, typename = _RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_InputIterator, _InputIterator, _Allocator) - │ │ │ │ + > unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< │ │ │ │ + _InputIterator >, _h_a_s_h< __iter_key_t< _InputIterator > >, _e_q_u_a_l___t_o< │ │ │ │ + __iter_key_t< _InputIterator > >, _Allocator > │ │ │ │ template, typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__sseett (_InputIterator, _InputIterator, unordered_set< int │ │ │ │ - >_:_:_s_i_z_e___t_y_p_e, _Allocator) -> unordered_set< typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< │ │ │ │ - _InputIterator >_:_:_v_a_l_u_e___t_y_p_e, _h_a_s_h< typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< │ │ │ │ - _InputIterator >_:_:_v_a_l_u_e___t_y_p_e >, _e_q_u_a_l___t_o< typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< │ │ │ │ - _InputIterator >_:_:_v_a_l_u_e___t_y_p_e >, _Allocator > │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_InputIterator, _InputIterator, │ │ │ │ + unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e, _Allocator) - │ │ │ │ + > unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< │ │ │ │ + _InputIterator >, _h_a_s_h< __iter_key_t< _InputIterator > >, _e_q_u_a_l___t_o< │ │ │ │ + __iter_key_t< _InputIterator > >, _Allocator > │ │ │ │ template, typename = │ │ │ │ _RequireNotAllocatorOrIntegral<_Hash>, typename = │ │ │ │ _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__sseett (_InputIterator, _InputIterator, unordered_set< int │ │ │ │ - >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) -> unordered_set< typename │ │ │ │ - _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_:_v_a_l_u_e___t_y_p_e, _Hash, _e_q_u_a_l___t_o< typename │ │ │ │ - _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_:_v_a_l_u_e___t_y_p_e >, _Allocator > │ │ │ │ -template::value_type>, typename _Pred = │ │ │ │ -equal_to::value_type>, typename │ │ │ │ -_Allocator = allocator::value_type>, │ │ │ │ -typename = _RequireInputIter<_InputIterator>, typename = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, │ │ │ │ -typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__sseett (_InputIterator, _InputIterator, unordered_set< int │ │ │ │ - >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) - │ │ │ │ - > unordered_set< typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s< _InputIterator >_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ - _Hash, _Pred, _Allocator > │ │ │ │ -template> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__sseett (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _Tp >, unordered_set< int >_:_: │ │ │ │ - _s_i_z_e___t_y_p_e, _Allocator) -> unordered_set< _Tp, _h_a_s_h< _Tp >, _e_q_u_a_l___t_o< _Tp │ │ │ │ - >, _Allocator > │ │ │ │ -template, typename = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__sseett (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _Tp >, unordered_set< int >_:_: │ │ │ │ - _s_i_z_e___t_y_p_e, _Hash, _Allocator) -> unordered_set< _Tp, _Hash, _e_q_u_a_l___t_o< _Tp │ │ │ │ - >, _Allocator > │ │ │ │ -template, typename _Pred = │ │ │ │ -equal_to<_Tp>, typename _Allocator = allocator<_Tp>, typename = │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_InputIterator, _InputIterator, │ │ │ │ + unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) - │ │ │ │ + > unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< │ │ │ │ + _InputIterator >, _Hash, _e_q_u_a_l___t_o< __iter_key_t< _InputIterator > >, │ │ │ │ + _Allocator > │ │ │ │ +template>, typename _Pred = │ │ │ │ +equal_to<__iter_key_t<_InputIterator>>, typename _Allocator = │ │ │ │ +allocator<__iter_to_alloc_t<_InputIterator>>, typename = │ │ │ │ +_RequireInputIter<_InputIterator>, typename = │ │ │ │ _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, │ │ │ │ typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__sseett (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _Tp >, unordered_set< int >_:_: │ │ │ │ - _s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) - │ │ │ │ - > unordered_set< _Tp, _Hash, _Pred, _Allocator > │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_InputIterator, _InputIterator, │ │ │ │ + unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred │ │ │ │ + (), _Allocator=_Allocator()) -> unordered_multimap< __iter_key_t< │ │ │ │ + _InputIterator >, __iter_val_t< _InputIterator >, _Hash, _Pred, │ │ │ │ + _Allocator > │ │ │ │ +template> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, │ │ │ │ + _Allocator) -> unordered_multimap< _Key, _Tp, _h_a_s_h< _Key >, _e_q_u_a_l___t_o< │ │ │ │ + _Key >, _Allocator > │ │ │ │ +template> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, │ │ │ │ + unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e, _Allocator) - │ │ │ │ + > unordered_multimap< _Key, _Tp, _h_a_s_h< _Key >, _e_q_u_a_l___t_o< _Key >, │ │ │ │ + _Allocator > │ │ │ │ +template, typename = │ │ │ │ +_RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, │ │ │ │ + unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) - │ │ │ │ + > unordered_multimap< _Key, _Tp, _Hash, _e_q_u_a_l___t_o< _Key >, _Allocator > │ │ │ │ +template, typename │ │ │ │ +_Pred = equal_to<_Key>, typename _Allocator = allocator>, │ │ │ │ +typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = │ │ │ │ +_RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, │ │ │ │ + unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred │ │ │ │ + (), _Allocator=_Allocator()) -> unordered_multimap< _Key, _Tp, _Hash, │ │ │ │ + _Pred, _Allocator > │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _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. │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00380.js │ │ │ ├── js-beautify {} │ │ │ │ @@ -1,4 +1,4 @@ │ │ │ │ var a00380 = [ │ │ │ │ - ["std::__umset_traits", "a01700.html#a65dc9ea843498fde1476b968ca1160e5", null], │ │ │ │ - ["std::__uset_traits", "a01700.html#a92c803e6ba8e01cf538e551a7d3e0778", null] │ │ │ │ + ["std::__umap_traits", "a01700.html#a858e438953c4498106d3b52bf4504862", null], │ │ │ │ + ["std::__ummap_traits", "a01700.html#a2d36f5176cc8aa4fca78e79b3e6a8cb6", null] │ │ │ │ ]; │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00380_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: unordered_set.h Source File │ │ │ +libstdc++: unordered_map.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,18 +48,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)
│ │ │ @@ -75,2287 +75,2646 @@ │ │ │
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>,
│ │ │ -
49 typename _Pred = std::equal_to<_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>,
│ │ │ -
64 typename _Pred = std::equal_to<_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>,
│ │ │ + │ │ │ + │ │ │ +
53 using __umap_hashtable = _Hashtable<_Key, std::pair<const _Key, _Tp>,
│ │ │ +
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>,
│ │ │ + │ │ │ + │ │ │ +
70 using __ummap_hashtable = _Hashtable<_Key, std::pair<const _Key, _Tp>,
│ │ │ +
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 {
│ │ │ -
106 typedef __uset_hashtable<_Value, _Hash, _Pred, _Alloc> _Hashtable;
│ │ │ -
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>
│ │ │ -
│ │ │ -
173 unordered_set(_InputIterator __first, _InputIterator __last,
│ │ │ -
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 {
│ │ │ +
111 typedef __umap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable;
│ │ │ +
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>
│ │ │ +
│ │ │ +
179 unordered_map(_InputIterator __first, _InputIterator __last,
│ │ │ +
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 */
│ │ │ -
201 unordered_set(const unordered_set& __uset,
│ │ │ -
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 */
│ │ │ -
211 unordered_set(unordered_set&& __uset,
│ │ │ -
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 */
│ │ │ +
207 unordered_map(const unordered_map& __umap,
│ │ │ +
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 */
│ │ │ +
217 unordered_map(unordered_map&& __umap,
│ │ │ +
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.
│ │ │ -
298 allocator_type
│ │ │ -
│ │ │ -
299 get_allocator() const 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
│ │ │ -
│ │ │ -
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
│ │ │ -
330 const_iterator
│ │ │ -
│ │ │ -
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.
│ │ │ +
304 allocator_type
│ │ │ +
│ │ │ +
305 get_allocator() const 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
│ │ │ +
│ │ │ +
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
│ │ │
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 const_iterator
│ │ │
│ │ │ -
341 end() noexcept
│ │ │ -
342 { return _M_h.end(); }
│ │ │ +
341 begin() const noexcept
│ │ │ +
342 { return _M_h.begin(); }
│ │ │
│ │ │
343
│ │ │
344 const_iterator
│ │ │
│ │ │ -
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 */
│ │ │ -
353 const_iterator
│ │ │ + │ │ │
│ │ │ -
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 */
│ │ │ -
361 const_iterator
│ │ │ -
│ │ │ -
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>
│ │ │ - │ │ │ -
│ │ │ -
384 emplace(_Args&&... __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>
│ │ │ - │ │ │ -
│ │ │ -
410 emplace_hint(const_iterator __pos, _Args&&... __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
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
433 { return _M_h.insert(std::move(__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 */
│ │ │ - │ │ │ -
│ │ │ -
457 insert(const_iterator __hint, const value_type& __x)
│ │ │ -
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
│ │ │ -
│ │ │ -
476 insert(_InputIterator __first, _InputIterator __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<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
│ │ │ -
493 extract(const_iterator __pos)
│ │ │ -
494 {
│ │ │ -
495 __glibcxx_assert(__pos != end());
│ │ │ -
496 return _M_h.extract(__pos);
│ │ │ -
497 }
│ │ │ -
498
│ │ │ -
499 /// Extract a node.
│ │ │ -
500 node_type
│ │ │ -
501 extract(const key_type& __key)
│ │ │ -
502 { return _M_h.extract(__key); }
│ │ │ -
503
│ │ │ -
504 /// 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.
│ │ │ - │ │ │ -
511 insert(const_iterator, node_type&& __nh)
│ │ │ -
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.
│ │ │ - │ │ │ -
│ │ │ -
535 erase(iterator __position)
│ │ │ -
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;
│ │ │ +
357 ///@{
│ │ │ +
358 /**
│ │ │ +
359 * Returns a read-only (constant) iterator that points one past the last
│ │ │ +
360 * element in the %unordered_map.
│ │ │ +
361 */
│ │ │ +
362 const_iterator
│ │ │ +
│ │ │ +
363 end() const noexcept
│ │ │ +
364 { return _M_h.end(); }
│ │ │ +
│ │ │ +
365
│ │ │ +
366 const_iterator
│ │ │ +
│ │ │ +
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>
│ │ │ + │ │ │ +
│ │ │ +
395 emplace(_Args&&... __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>
│ │ │ + │ │ │ +
│ │ │ +
426 emplace_hint(const_iterator __pos, _Args&&... __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
│ │ │ +
432 extract(const_iterator __pos)
│ │ │ +
433 {
│ │ │ +
434 __glibcxx_assert(__pos != end());
│ │ │ +
435 return _M_h.extract(__pos);
│ │ │ +
436 }
│ │ │ +
437
│ │ │ +
438 /// Extract a node.
│ │ │ +
439 node_type
│ │ │ +
440 extract(const key_type& __key)
│ │ │ +
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.
│ │ │ + │ │ │ +
450 insert(const_iterator, node_type&& __nh)
│ │ │ +
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>
│ │ │ + │ │ │ +
479 try_emplace(const key_type& __k, _Args&&... __args)
│ │ │ +
480 {
│ │ │ +
481 return _M_h.try_emplace(cend(), __k, std::forward<_Args>(__args)...);
│ │ │ +
482 }
│ │ │ +
483
│ │ │ +
484 // move-capable overload
│ │ │ +
485 template <typename... _Args>
│ │ │ + │ │ │ +
487 try_emplace(key_type&& __k, _Args&&... __args)
│ │ │ +
488 {
│ │ │ +
489 return _M_h.try_emplace(cend(), std::move(__k),
│ │ │ +
490 std::forward<_Args>(__args)...);
│ │ │ +
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>
│ │ │ + │ │ │ +
523 try_emplace(const_iterator __hint, const key_type& __k,
│ │ │ +
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>
│ │ │ + │ │ │ +
533 try_emplace(const_iterator __hint, key_type&& __k, _Args&&... __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>
│ │ │ +
569 __enable_if_t<is_constructible<value_type, _Pair&&>::value,
│ │ │ + │ │ │ +
│ │ │ +
571 insert(_Pair&& __x)
│ │ │ +
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 */
│ │ │ + │ │ │ +
│ │ │ +
598 insert(const_iterator __hint, const value_type& __x)
│ │ │ +
599 { return _M_h.insert(__hint, __x); }
│ │ │ +
│ │ │
600
│ │ │ -
601 template<typename _H2, typename _P2>
│ │ │ -
602 void
│ │ │ - │ │ │ -
604 {
│ │ │ -
605 using _Merge_helper = _Hash_merge_helper<unordered_set, _H2, _P2>;
│ │ │ -
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>
│ │ │ +
608 __enable_if_t<is_constructible<value_type, _Pair&&>::value, iterator>
│ │ │ +
│ │ │ +
609 insert(const_iterator __hint, _Pair&& __x)
│ │ │ +
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.
│ │ │ +
│ │ │ +
624 insert(_InputIterator __first, _InputIterator __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<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
│ │ │ -
668 const_iterator
│ │ │ -
│ │ │ -
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
│ │ │ -
│ │ │ -
739 equal_range(const _Kt& __k)
│ │ │ -
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>
│ │ │ + │ │ │ +
662 insert_or_assign(const key_type& __k, _Obj&& __obj)
│ │ │ +
663 {
│ │ │ +
664 auto __ret = _M_h.try_emplace(cend(), __k,
│ │ │ +
665 std::forward<_Obj>(__obj));
│ │ │ +
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>
│ │ │ + │ │ │ +
674 insert_or_assign(key_type&& __k, _Obj&& __obj)
│ │ │ +
675 {
│ │ │ +
676 auto __ret = _M_h.try_emplace(cend(), std::move(__k),
│ │ │ +
677 std::forward<_Obj>(__obj));
│ │ │ +
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>
│ │ │ + │ │ │ +
711 insert_or_assign(const_iterator __hint, const key_type& __k,
│ │ │ +
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>
│ │ │ + │ │ │ +
723 insert_or_assign(const_iterator __hint, key_type&& __k, _Obj&& __obj)
│ │ │ +
724 {
│ │ │ +
725 auto __ret = _M_h.try_emplace(__hint, std::move(__k),
│ │ │ +
726 std::forward<_Obj>(__obj));
│ │ │ +
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.
│ │ │ + │ │ │ +
│ │ │ +
753 erase(iterator __position)
│ │ │ +
754 { return _M_h.erase(__position); }
│ │ │
│ │ │ -
754#endif
│ │ │
755 ///@}
│ │ │ -
756
│ │ │ -
757 // bucket interface.
│ │ │ -
758
│ │ │ -
759 /// Returns the number of buckets of the %unordered_set.
│ │ │ - │ │ │ -
│ │ │ -
761 bucket_count() const noexcept
│ │ │ -
762 { return _M_h.bucket_count(); }
│ │ │ -
│ │ │ -
763
│ │ │ -
764 /// Returns the maximum number of buckets of the %unordered_set.
│ │ │ - │ │ │ -
│ │ │ -
766 max_bucket_count() const 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 */
│ │ │ - │ │ │ -
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 */
│ │ │ -
783 size_type
│ │ │ -
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
│ │ │ -
│ │ │ -
831 load_factor() const 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
│ │ │ -
│ │ │ -
837 max_load_factor() const 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
│ │ │ -
│ │ │ - │ │ │ -
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 {
│ │ │ +
824 using _Merge_helper = _Hash_merge_helper<unordered_map, _H2, _P2>;
│ │ │ +
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,
│ │ │ -
891 unordered_set<int>::size_type = {},
│ │ │ -
892 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ - │ │ │ -
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>>
│ │ │ - │ │ │ - │ │ │ -
904 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
│ │ │ - │ │ │ -
906
│ │ │ -
907 template<typename _InputIterator, typename _Allocator,
│ │ │ -
908 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
909 typename = _RequireAllocator<_Allocator>>
│ │ │ -
910 unordered_set(_InputIterator, _InputIterator,
│ │ │ - │ │ │ - │ │ │ -
913 hash<
│ │ │ - │ │ │ -
915 equal_to<
│ │ │ - │ │ │ -
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)
│ │ │ - │ │ │ -
927 _Hash,
│ │ │ -
928 equal_to<
│ │ │ - │ │ │ -
930 _Allocator>;
│ │ │ -
931
│ │ │ -
932 template<typename _Tp, typename _Allocator,
│ │ │ -
933 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
937
│ │ │ -
938 template<typename _Tp, typename _Hash, typename _Allocator,
│ │ │ -
939 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
940 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ -
942 unordered_set<int>::size_type, _Hash, _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 {
│ │ │ -
974 typedef __umset_hashtable<_Value, _Hash, _Pred, _Alloc> _Hashtable;
│ │ │ -
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>
│ │ │ -
│ │ │ -
1040 unordered_multiset(_InputIterator __first, _InputIterator __last,
│ │ │ -
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
│ │ │ +
886 const_iterator
│ │ │ +
│ │ │ +
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 */
│ │ │ + │ │ │ +
│ │ │ +
1004 at(const key_type& __k)
│ │ │ +
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
│ │ │ +
│ │ │ +
1016 bucket_count() const noexcept
│ │ │ +
1017 { return _M_h.bucket_count(); }
│ │ │ +
│ │ │ +
1018
│ │ │ +
1019 /// Returns the maximum number of buckets of the %unordered_map.
│ │ │ +
1020 size_type
│ │ │ +
│ │ │ +
1021 max_bucket_count() const 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 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 */
│ │ │ -
1105 unordered_multiset(unordered_multiset&& __umset,
│ │ │ -
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.
│ │ │ -
1165 allocator_type
│ │ │ -
│ │ │ -
1166 get_allocator() const 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
│ │ │ -
│ │ │ -
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
│ │ │ -
1197 const_iterator
│ │ │ -
│ │ │ -
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
│ │ │ +
│ │ │ +
1098 load_factor() const 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
│ │ │ +
│ │ │ +
1104 max_load_factor() const 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
│ │ │ +
│ │ │ + │ │ │ +
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,
│ │ │ +
1155 typename unordered_map<int, int>::size_type = {},
│ │ │ +
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>>
│ │ │ + │ │ │ + │ │ │ +
1169 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _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)
│ │ │ + │ │ │ +
1178 __iter_val_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)
│ │ │ + │ │ │ +
1188 __iter_val_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)
│ │ │ + │ │ │ +
1201 __iter_val_t<_InputIterator>, _Hash,
│ │ │ + │ │ │ +
1203
│ │ │ +
1204 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ +
1205 typename = _RequireAllocator<_Allocator>>
│ │ │ + │ │ │ + │ │ │ +
1208 _Allocator)
│ │ │ + │ │ │
1210
│ │ │ -
1211 const_iterator
│ │ │ -
│ │ │ -
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 */
│ │ │ -
1220 const_iterator
│ │ │ -
│ │ │ -
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 */
│ │ │ -
1228 const_iterator
│ │ │ -
│ │ │ -
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
│ │ │ -
│ │ │ -
1243 emplace(_Args&&... __args)
│ │ │ -
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
│ │ │ -
│ │ │ -
1265 emplace_hint(const_iterator __pos, _Args&&... __args)
│ │ │ -
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>>
│ │ │ + │ │ │ + │ │ │ +
1215
│ │ │ +
1216 template<typename _Key, typename _Tp, typename _Hash, typename _Allocator,
│ │ │ +
1217 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
1218 typename = _RequireAllocator<_Allocator>>
│ │ │ + │ │ │ + │ │ │ +
1221 _Hash, _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 {
│ │ │ +
1257 typedef __ummap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable;
│ │ │ +
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
│ │ │ -
│ │ │ -
1321 insert(_InputIterator __first, _InputIterator __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<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
│ │ │ -
1338 extract(const_iterator __pos)
│ │ │ -
1339 {
│ │ │ -
1340 __glibcxx_assert(__pos != end());
│ │ │ -
1341 return _M_h.extract(__pos);
│ │ │ -
1342 }
│ │ │ -
1343
│ │ │ -
1344 /// Extract a node.
│ │ │ -
1345 node_type
│ │ │ -
1346 extract(const key_type& __key)
│ │ │ -
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
│ │ │ -
1356 insert(const_iterator __hint, node_type&& __nh)
│ │ │ -
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
│ │ │ -
│ │ │ -
1381 erase(iterator __position)
│ │ │ -
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>
│ │ │ +
│ │ │ +
1324 unordered_multimap(_InputIterator __first, _InputIterator __last,
│ │ │ +
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 */
│ │ │ +
1362 unordered_multimap(unordered_multimap&& __ummap,
│ │ │ +
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
│ │ │ +
1387 unordered_multimap(size_type __n, const allocator_type& __a)
│ │ │ +
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
│ │ │ -
1456 = _Hash_merge_helper<unordered_multiset, _H2, _P2>;
│ │ │ -
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
│ │ │ -
1520 const_iterator
│ │ │ -
│ │ │ -
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
│ │ │ -
│ │ │ -
1606 bucket_count() const noexcept
│ │ │ -
1607 { return _M_h.bucket_count(); }
│ │ │ -
│ │ │ -
1608
│ │ │ -
1609 /// Returns the maximum number of buckets of the %unordered_multiset.
│ │ │ -
1610 size_type
│ │ │ -
│ │ │ -
1611 max_bucket_count() const 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 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.
│ │ │ +
1449 allocator_type
│ │ │ +
│ │ │ +
1450 get_allocator() const 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
│ │ │ +
│ │ │ +
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 */
│ │ │ +
1485 const_iterator
│ │ │ +
│ │ │ +
1486 begin() const noexcept
│ │ │ +
1487 { return _M_h.begin(); }
│ │ │ +
│ │ │ +
1488
│ │ │ +
1489 const_iterator
│ │ │ +
│ │ │ +
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 */
│ │ │ +
1507 const_iterator
│ │ │ +
│ │ │ +
1508 end() const noexcept
│ │ │ +
1509 { return _M_h.end(); }
│ │ │ +
│ │ │ +
1510
│ │ │ +
1511 const_iterator
│ │ │ +
│ │ │ +
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
│ │ │ +
│ │ │ +
1535 emplace(_Args&&... __args)
│ │ │ +
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
│ │ │ +
│ │ │ +
1562 emplace_hint(const_iterator __pos, _Args&&... __args)
│ │ │ +
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>
│ │ │ +
1584 __enable_if_t<is_constructible<value_type, _Pair&&>::value, iterator>
│ │ │ +
│ │ │ +
1585 insert(_Pair&& __x)
│ │ │ +
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>
│ │ │ +
1620 __enable_if_t<is_constructible<value_type, _Pair&&>::value, iterator>
│ │ │ +
│ │ │ +
1621 insert(const_iterator __hint, _Pair&& __x)
│ │ │ +
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
│ │ │ +
│ │ │ +
1636 insert(_InputIterator __first, _InputIterator __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<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
│ │ │ -
│ │ │ -
1676 load_factor() const 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
│ │ │ -
│ │ │ -
1682 max_load_factor() const 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
│ │ │ -
│ │ │ - │ │ │ -
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
│ │ │ +
1654 extract(const_iterator __pos)
│ │ │ +
1655 {
│ │ │ +
1656 __glibcxx_assert(__pos != end());
│ │ │ +
1657 return _M_h.extract(__pos);
│ │ │ +
1658 }
│ │ │ +
1659
│ │ │ +
1660 /// Extract a node.
│ │ │ +
1661 node_type
│ │ │ +
1662 extract(const key_type& __key)
│ │ │ +
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
│ │ │ +
1672 insert(const_iterator __hint, node_type&& __nh)
│ │ │ +
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
│ │ │ +
│ │ │ +
1696 erase(iterator __position)
│ │ │ +
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
│ │ │ +
1768 = _Hash_merge_helper<unordered_multimap, _H2, _P2>;
│ │ │ +
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,
│ │ │ -
1737 unordered_multiset<int>::size_type = {},
│ │ │ -
1738 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ -
1739 _Allocator = _Allocator())
│ │ │ - │ │ │ -
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>>
│ │ │ - │ │ │ - │ │ │ -
1751 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ -
1752 _Allocator = _Allocator())
│ │ │ - │ │ │ -
1754
│ │ │ -
1755 template<typename _InputIterator, typename _Allocator,
│ │ │ -
1756 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
1757 typename = _RequireAllocator<_Allocator>>
│ │ │ -
1758 unordered_multiset(_InputIterator, _InputIterator,
│ │ │ - │ │ │ - │ │ │ -
1761 hash<typename
│ │ │ - │ │ │ -
1763 equal_to<typename
│ │ │ - │ │ │ -
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
│ │ │ - │ │ │ -
1776 _Hash,
│ │ │ -
1777 equal_to<
│ │ │ -
1778 typename
│ │ │ - │ │ │ -
1780 _Allocator>;
│ │ │ -
1781
│ │ │ -
1782 template<typename _Tp, typename _Allocator,
│ │ │ -
1783 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
1787
│ │ │ -
1788 template<typename _Tp, typename _Hash, typename _Allocator,
│ │ │ -
1789 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1790 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ -
1792 unordered_multiset<int>::size_type, _Hash, _Allocator)
│ │ │ - │ │ │ -
1794
│ │ │ -
1795#endif
│ │ │ -
1796
│ │ │ -
1797 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
1798 inline void
│ │ │ - │ │ │ - │ │ │ -
1801 noexcept(noexcept(__x.swap(__y)))
│ │ │ -
1802 { __x.swap(__y); }
│ │ │ -
1803
│ │ │ -
1804 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
1805 inline void
│ │ │ - │ │ │ - │ │ │ -
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,
│ │ │ - │ │ │ -
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,
│ │ │ - │ │ │ -
1822 { return !(__x == __y); }
│ │ │ -
1823#endif
│ │ │ -
1824
│ │ │ -
1825 template<class _Value, class _Hash, class _Pred, class _Alloc>
│ │ │ -
1826 inline bool
│ │ │ - │ │ │ - │ │ │ -
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
│ │ │ - │ │ │ - │ │ │ -
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
│ │ │ -
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:71
│ │ │ +
1831 const_iterator
│ │ │ +
│ │ │ +
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
│ │ │ +
│ │ │ +
1916 bucket_count() const noexcept
│ │ │ +
1917 { return _M_h.bucket_count(); }
│ │ │ +
│ │ │ +
1918
│ │ │ +
1919 /// Returns the maximum number of buckets of the %unordered_multimap.
│ │ │ +
1920 size_type
│ │ │ +
│ │ │ +
1921 max_bucket_count() const 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 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
│ │ │ +
│ │ │ +
1998 load_factor() const 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
│ │ │ +
│ │ │ +
2004 max_load_factor() const 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
│ │ │ +
│ │ │ + │ │ │ +
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>&,
│ │ │ +
2042 const unordered_multimap<_Key1, _Tp1,
│ │ │ +
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,
│ │ │ +
2057 unordered_multimap<int, int>::size_type = {},
│ │ │ +
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>>
│ │ │ + │ │ │ + │ │ │ +
2072 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ +
2073 _Allocator = _Allocator())
│ │ │ + │ │ │ +
2075
│ │ │ +
2076 template<typename _InputIterator, typename _Allocator,
│ │ │ +
2077 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
2078 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2079 unordered_multimap(_InputIterator, _InputIterator,
│ │ │ + │ │ │ + │ │ │ +
2082 __iter_val_t<_InputIterator>,
│ │ │ + │ │ │ + │ │ │ +
2085
│ │ │ +
2086 template<typename _InputIterator, typename _Allocator,
│ │ │ +
2087 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
2088 typename = _RequireAllocator<_Allocator>>
│ │ │ +
2089 unordered_multimap(_InputIterator, _InputIterator, _Allocator)
│ │ │ + │ │ │ +
2091 __iter_val_t<_InputIterator>,
│ │ │ + │ │ │ + │ │ │ +
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)
│ │ │ + │ │ │ +
2103 __iter_val_t<_InputIterator>, _Hash,
│ │ │ + │ │ │ +
2105
│ │ │ +
2106 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ +
2107 typename = _RequireAllocator<_Allocator>>
│ │ │ + │ │ │ + │ │ │ +
2110 _Allocator)
│ │ │ + │ │ │ +
2112
│ │ │ +
2113 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ +
2114 typename = _RequireAllocator<_Allocator>>
│ │ │ + │ │ │ + │ │ │ +
2117
│ │ │ +
2118 template<typename _Key, typename _Tp, typename _Hash, typename _Allocator,
│ │ │ +
2119 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ +
2120 typename = _RequireAllocator<_Allocator>>
│ │ │ + │ │ │ + │ │ │ +
2123 _Hash, _Allocator)
│ │ │ + │ │ │ +
2125
│ │ │ +
2126#endif
│ │ │ +
2127
│ │ │ +
2128 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ +
2129 inline void
│ │ │ + │ │ │ + │ │ │ +
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
│ │ │ + │ │ │ + │ │ │ +
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
│ │ │ + │ │ │ + │ │ │ +
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
│ │ │ + │ │ │ + │ │ │ +
2153 { return !(__x == __y); }
│ │ │ +
2154#endif
│ │ │ +
2155
│ │ │ +
2156 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ +
2157 inline bool
│ │ │ + │ │ │ + │ │ │ +
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
│ │ │ + │ │ │ + │ │ │ +
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 */
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
pair(_T1, _T2) -> pair< _T1, _T2 >
Two pairs of the same type are equal iff their members are equal.
│ │ │ +
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │ +
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:71
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
__detail::_Hashtable_traits< _Cache, true, false > __umset_traits
Base types for unordered_multiset.
│ │ │ -
__detail::_Hashtable_traits< _Cache, true, true > __uset_traits
Base types for unordered_set.
│ │ │ +
__detail::_Hashtable_traits< _Cache, false, false > __ummap_traits
Base types for unordered_multimap.
│ │ │ +
__detail::_Hashtable_traits< _Cache, false, true > __umap_traits
Base types for unordered_map.
│ │ │
initializer_list
│ │ │ -
Primary class template hash.
│ │ │ +
Primary class template hash.
│ │ │ │ │ │ -
The standard allocator, as per C++03 [20.4.1].
Definition allocator.h:129
│ │ │ -
Traits class for iterators.
│ │ │ -
One of the comparison functors.
│ │ │ -
Struct holding two objects of arbitrary type.
Definition stl_pair.h:286
│ │ │ -
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.
│ │ │ - │ │ │ -
void insert(initializer_list< value_type > __l)
Inserts a list of elements into the unordered_multiset.
│ │ │ - │ │ │ -
bool contains(const key_type &__x) const
Finds whether an element with the given key exists.
│ │ │ -
void rehash(size_type __n)
May rehash the unordered_multiset.
│ │ │ -
local_iterator begin(size_type __n)
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ -
size_type bucket_count() const noexcept
Returns the number of buckets of the unordered_multiset.
│ │ │ - │ │ │ -
float max_load_factor() const noexcept
Returns a positive number that the unordered_multiset tries to keep the load factor less than or equa...
│ │ │ -
bool empty() const noexcept
Returns true if the unordered_multiset is empty.
│ │ │ -
const_iterator cend() const noexcept
│ │ │ - │ │ │ -
const_local_iterator begin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ -
iterator emplace(_Args &&... __args)
Builds and insert an element into the unordered_multiset.
│ │ │ -
unordered_multiset(_InputIterator __first, _InputIterator __last, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_multiset from a range.
│ │ │ - │ │ │ -
unordered_multiset(const allocator_type &__a)
Creates an unordered_multiset with no elements.
│ │ │ - │ │ │ -
const_local_iterator end(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ -
iterator find(const key_type &__x)
Tries to locate an element in an unordered_multiset.
│ │ │ - │ │ │ -
unordered_multiset & operator=(unordered_multiset &&)=default
Move assignment operator.
│ │ │ -
float load_factor() const noexcept
Returns the average number of elements per bucket.
│ │ │ -
unordered_multiset()=default
Default constructor.
│ │ │ - │ │ │ -
auto equal_range(const _Kt &__x) -> decltype(_M_h._M_equal_range_tr(__x))
Finds a subsequence matching given key.
│ │ │ - │ │ │ -
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.
│ │ │ - │ │ │ -
iterator end() noexcept
│ │ │ -
iterator emplace_hint(const_iterator __pos, _Args &&... __args)
Inserts an element into the unordered_multiset.
│ │ │ -
void swap(unordered_multiset &__x) noexcept(noexcept(_M_h.swap(__x._M_h)))
Swaps data with another unordered_multiset.
│ │ │ -
const_iterator begin() const noexcept
│ │ │ -
iterator erase(const_iterator __first, const_iterator __last)
Erases a [__first,__last) range of elements from an unordered_multiset.
│ │ │ -
const_iterator cbegin() const noexcept
│ │ │ -
void insert(_InputIterator __first, _InputIterator __last)
A template function that inserts a range of elements.
│ │ │ -
std::pair< const_iterator, const_iterator > equal_range(const key_type &__x) const
Finds a subsequence matching given key.
│ │ │ -
key_equal key_eq() const
Returns the key comparison object with which the unordered_multiset was constructed.
│ │ │ - │ │ │ -
std::pair< iterator, iterator > equal_range(const key_type &__x)
Finds a subsequence matching given key.
│ │ │ -
iterator insert(value_type &&__x)
Inserts an element into the unordered_multiset.
│ │ │ -
iterator insert(const value_type &__x)
Inserts an element into the unordered_multiset.
│ │ │ -
const_iterator end() const noexcept
│ │ │ -
void reserve(size_type __n)
Prepare the unordered_multiset for a specified number of elements.
│ │ │ -
iterator insert(const_iterator __hint, value_type &&__x)
Inserts an element into the unordered_multiset.
│ │ │ - │ │ │ -
iterator erase(iterator __position)
Erases an element from an unordered_multiset.
│ │ │ -
const_local_iterator cend(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ -
size_type max_bucket_count() const noexcept
Returns the maximum number of buckets of the unordered_multiset.
│ │ │ - │ │ │ -
unordered_multiset(size_type __n, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Default constructor creates no elements.
│ │ │ -
unordered_multiset & operator=(initializer_list< value_type > __l)
Unordered_multiset list assignment operator.
│ │ │ -
size_type size() const noexcept
Returns the size of the unordered_multiset.
│ │ │ - │ │ │ -
local_iterator end(size_type __n)
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ -
auto equal_range(const _Kt &__x) const -> decltype(_M_h._M_equal_range_tr(__x))
Finds a subsequence matching given key.
│ │ │ -
size_type max_size() const noexcept
Returns the maximum size of the unordered_multiset.
│ │ │ -
const_local_iterator cbegin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ -
unordered_multiset(const unordered_multiset &)=default
Copy constructor.
│ │ │ - │ │ │ -
size_type erase(const key_type &__x)
Erases elements according to the provided key.
│ │ │ -
const_iterator find(const key_type &__x) const
Tries to locate an element in an unordered_multiset.
│ │ │ -
allocator_type get_allocator() const noexcept
Returns the allocator object used by the unordered_multiset.
│ │ │ - │ │ │ -
void max_load_factor(float __z)
Change the unordered_multiset maximum load factor.
│ │ │ -
A standard container composed of unique keys (containing at most one of each key value) in which the ...
│ │ │ -
std::pair< iterator, bool > insert(const value_type &__x)
Attempts to insert an element into the unordered_set.
│ │ │ - │ │ │ -
unordered_set(initializer_list< value_type > __l, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_set from an initializer_list.
│ │ │ -
void max_load_factor(float __z)
Change the unordered_set maximum load factor.
│ │ │ - │ │ │ -
const_local_iterator end(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ - │ │ │ -
const_iterator cend() const noexcept
│ │ │ -
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.
│ │ │ - │ │ │ -
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
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
const_iterator cbegin() const noexcept
│ │ │ -
bool empty() const noexcept
Returns true if the unordered_set is empty.
│ │ │ -
unordered_set & operator=(initializer_list< value_type > __l)
Unordered_set list assignment operator.
│ │ │ -
iterator erase(iterator __position)
Erases an element from an unordered_set.
│ │ │ -
unordered_set(unordered_set &&)=default
Move constructor.
│ │ │ -
unordered_set(const allocator_type &__a)
Creates an unordered_set with no elements.
│ │ │ -
const_local_iterator cend(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ -
auto contains(const _Kt &__k) const -> decltype(_M_h._M_find_tr(__k), void(), true)
Finds whether an element with the given key exists.
│ │ │ - │ │ │ -
std::pair< const_iterator, const_iterator > equal_range(const key_type &__x) const
Finds a subsequence matching given key.
│ │ │ -
void swap(unordered_set &__x) noexcept(noexcept(_M_h.swap(__x._M_h)))
Swaps data with another unordered_set.
│ │ │ -
iterator insert(const_iterator __hint, const value_type &__x)
Attempts to insert an element into the unordered_set.
│ │ │ -
std::pair< iterator, bool > insert(value_type &&__x)
Attempts to insert an element into the unordered_set.
│ │ │ -
float load_factor() const noexcept
Returns the average number of elements per bucket.
│ │ │ -
void rehash(size_type __n)
May rehash the unordered_set.
│ │ │ -
local_iterator end(size_type __n)
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ - │ │ │ -
size_type size() const noexcept
Returns the size of the unordered_set.
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
hasher hash_function() const
Returns the hash functor object with which the unordered_set was constructed.
│ │ │ -
unordered_set(const unordered_set &)=default
Copy constructor.
│ │ │ -
std::pair< iterator, iterator > equal_range(const key_type &__x)
Finds a subsequence matching given key.
│ │ │ -
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.
│ │ │ - │ │ │ -
iterator insert(const_iterator __hint, value_type &&__x)
Attempts to insert an element into the unordered_set.
│ │ │ -
const_iterator end() const noexcept
│ │ │ -
iterator end() noexcept
│ │ │ -
local_iterator begin(size_type __n)
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ -
unordered_set()=default
Default constructor.
│ │ │ -
unordered_set & operator=(unordered_set &&)=default
Move assignment operator.
│ │ │ -
void insert(_InputIterator __first, _InputIterator __last)
A template function that attempts to insert a range of elements.
│ │ │ -
float max_load_factor() const noexcept
Returns a positive number that the unordered_set tries to keep the load factor less than or equal to.
│ │ │ -
bool contains(const key_type &__x) const
Finds whether an element with the given key exists.
│ │ │ -
std::pair< iterator, bool > emplace(_Args &&... __args)
Attempts to build and insert an element into the unordered_set.
│ │ │ -
unordered_set & operator=(const unordered_set &)=default
Copy assignment operator.
│ │ │ -
size_type erase(const key_type &__x)
Erases elements according to the provided key.
│ │ │ -
unordered_set(size_type __n, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Default constructor creates no elements.
│ │ │ -
iterator erase(const_iterator __first, const_iterator __last)
Erases a [__first,__last) range of elements from an unordered_set.
│ │ │ -
iterator erase(const_iterator __position)
Erases an element from an unordered_set.
│ │ │ -
allocator_type get_allocator() const noexcept
Returns the allocator object used by the unordered_set.
│ │ │ -
auto equal_range(const _Kt &__k) const -> decltype(_M_h._M_equal_range_tr(__k))
Finds a subsequence matching given key.
│ │ │ - │ │ │ -
void clear() noexcept
│ │ │ -
void insert(initializer_list< value_type > __l)
Attempts to insert a list of elements into the unordered_set.
│ │ │ -
unordered_set(_InputIterator __first, _InputIterator __last, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_set from a range.
│ │ │ -
size_type bucket_count() const noexcept
Returns the number of buckets of the unordered_set.
│ │ │ -
void reserve(size_type __n)
Prepare the unordered_set for a specified number of elements.
│ │ │ - │ │ │ -
iterator begin() noexcept
│ │ │ -
iterator find(const key_type &__x)
Tries to locate an element in an unordered_set.
│ │ │ -
size_type max_size() const noexcept
Returns the maximum size of the unordered_set.
│ │ │ -
size_type max_bucket_count() const noexcept
Returns the maximum number of buckets of the unordered_set.
│ │ │ +
The standard allocator, as per C++03 [20.4.1].
Definition allocator.h:129
│ │ │ +
One of the comparison functors.
│ │ │ +
Struct holding two objects of arbitrary type.
Definition stl_pair.h:286
│ │ │ +
_T1 first
The first member.
Definition stl_pair.h:290
│ │ │ +
Common iterator class.
│ │ │ +
A standard container composed of equivalent keys (possibly containing multiple of each key value) tha...
│ │ │ +
float load_factor() const noexcept
Returns the average number of elements per bucket.
│ │ │ + │ │ │ +
iterator erase(iterator __position)
Erases an element from an unordered_multimap.
│ │ │ +
const_iterator end() const noexcept
│ │ │ +
size_type erase(const key_type &__x)
Erases elements according to the provided key.
│ │ │ +
std::pair< iterator, iterator > equal_range(const key_type &__x)
Finds a subsequence matching given key.
│ │ │ +
size_type bucket_count() const noexcept
Returns the number of buckets of the unordered_multimap.
│ │ │ + │ │ │ +
size_type max_bucket_count() const noexcept
Returns the maximum number of buckets of the unordered_multimap.
│ │ │ +
iterator begin() noexcept
│ │ │ +
const_iterator begin() const noexcept
│ │ │ +
hasher hash_function() const
Returns the hash functor object with which the unordered_multimap was constructed.
│ │ │ +
__enable_if_t< is_constructible< value_type, _Pair && >::value, iterator > insert(const_iterator __hint, _Pair &&__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ +
unordered_multimap & operator=(const unordered_multimap &)=default
Copy assignment operator.
│ │ │ +
key_equal key_eq() const
Returns the key comparison object with which the unordered_multimap was constructed.
│ │ │ +
size_type count(const key_type &__x) const
Finds the number of elements.
│ │ │ +
const_iterator find(const key_type &__x) const
Tries to locate an element in an unordered_multimap.
│ │ │ + │ │ │ +
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.
│ │ │ + │ │ │ +
iterator emplace(_Args &&... __args)
Attempts to build and insert a std::pair into the unordered_multimap.
│ │ │ +
bool contains(const key_type &__x) const
Finds whether an element with the given key exists.
│ │ │ + │ │ │ +
iterator erase(const_iterator __position)
Erases an element from an unordered_multimap.
│ │ │ +
iterator end() noexcept
│ │ │ +
local_iterator begin(size_type __n)
Returns a read/write iterator pointing to the first bucket element.
│ │ │ +
float max_load_factor() const noexcept
Returns a positive number that the unordered_multimap tries to keep the load factor less than or equa...
│ │ │ +
unordered_multimap()=default
Default constructor.
│ │ │ +
iterator insert(value_type &&__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ +
iterator insert(const value_type &__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ +
unordered_multimap & operator=(unordered_multimap &&)=default
Move assignment operator.
│ │ │ + │ │ │ + │ │ │ +
void reserve(size_type __n)
Prepare the unordered_multimap for a specified number of elements.
│ │ │ +
std::pair< const_iterator, const_iterator > equal_range(const key_type &__x) const
Finds a subsequence matching given key.
│ │ │ +
unordered_multimap(_InputIterator __first, _InputIterator __last, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_multimap from a range.
│ │ │ + │ │ │ +
iterator find(const key_type &__x)
Tries to locate an element in an unordered_multimap.
│ │ │ +
unordered_multimap(initializer_list< value_type > __l, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_multimap from an initializer_list.
│ │ │ +
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.
│ │ │ + │ │ │ + │ │ │ +
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.
│ │ │ + │ │ │ +
unordered_multimap(unordered_multimap &&)=default
Move constructor.
│ │ │ +
unordered_multimap(const allocator_type &__a)
Creates an unordered_multimap with no elements.
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
__enable_if_t< is_constructible< value_type, _Pair && >::value, iterator > insert(_Pair &&__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ +
auto contains(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__x), void(), true)
Finds whether an element with the given key exists.
│ │ │ +
void swap(unordered_multimap &__x) noexcept(noexcept(_M_h.swap(__x._M_h)))
Swaps data with another unordered_multimap.
│ │ │ +
void rehash(size_type __n)
May rehash the unordered_multimap.
│ │ │ + │ │ │ +
void insert(initializer_list< value_type > __l)
Attempts to insert a list of elements into the unordered_multimap.
│ │ │ +
const_iterator cend() const noexcept
│ │ │ +
size_type max_size() const noexcept
Returns the maximum size of the unordered_multimap.
│ │ │ +
const_local_iterator cbegin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ +
bool empty() const noexcept
Returns true if the unordered_multimap is empty.
│ │ │ +
const_iterator cbegin() const noexcept
│ │ │ + │ │ │ +
const_local_iterator cend(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ +
iterator insert(const_iterator __hint, const value_type &__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ +
size_type size() const noexcept
Returns the size of the unordered_multimap.
│ │ │ +
unordered_multimap(const unordered_multimap &)=default
Copy constructor.
│ │ │ +
iterator emplace_hint(const_iterator __pos, _Args &&... __args)
Attempts to build and insert a std::pair into the unordered_multimap.
│ │ │ +
iterator insert(const_iterator __hint, value_type &&__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ +
auto equal_range(const _Kt &__x) -> decltype(_M_h._M_equal_range_tr(__x))
Finds a subsequence matching given key.
│ │ │ + │ │ │ +
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.
│ │ │ + │ │ │ +
void max_load_factor(float __z)
Change the unordered_map maximum load factor.
│ │ │ +
const mapped_type & at(const key_type &__k) const
Access to unordered_map data.
│ │ │ +
bool contains(const key_type &__x) const
Finds whether an element with the given key exists.
│ │ │ +
void insert(_InputIterator __first, _InputIterator __last)
A template function that attempts to insert a range of elements.
│ │ │ +
allocator_type get_allocator() const noexcept
Returns the allocator object used by the unordered_map.
│ │ │ +
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.
│ │ │ + │ │ │ +
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.
│ │ │ +
std::pair< iterator, bool > insert(const value_type &__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ +
void reserve(size_type __n)
Prepare the unordered_map for a specified number of elements.
│ │ │ +
const_local_iterator cbegin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ +
std::pair< const_iterator, const_iterator > equal_range(const key_type &__x) const
Finds a subsequence matching given key.
│ │ │ + │ │ │ +
iterator insert(const_iterator __hint, const value_type &__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ +
iterator end() noexcept
│ │ │ + │ │ │ +
unordered_map(const unordered_map &)=default
Copy constructor.
│ │ │ +
size_type count(const key_type &__x) const
Finds the number of elements.
│ │ │ +
bool empty() const noexcept
Returns true if the unordered_map is empty.
│ │ │ +
size_type erase(const key_type &__x)
Erases elements according to the provided key.
│ │ │ +
const_iterator find(const key_type &__x) const
Tries to locate an element in an unordered_map.
│ │ │ +
unordered_map(unordered_map &&)=default
Move constructor.
│ │ │ +
const_local_iterator end(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ +
auto 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.
│ │ │ + │ │ │ +
unordered_map & operator=(unordered_map &&)=default
Move assignment operator.
│ │ │ +
const_local_iterator begin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ +
unordered_map(size_type __n, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Default constructor creates no elements.
│ │ │ +
std::pair< iterator, bool > emplace(_Args &&... __args)
Attempts to build and insert a std::pair into the unordered_map.
│ │ │ +
const_local_iterator cend(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ +
size_type size() const noexcept
Returns the size of the unordered_map.
│ │ │ +
__enable_if_t< is_constructible< value_type, _Pair && >::value, pair< iterator, bool > > insert(_Pair &&__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ +
mapped_type & operator[](key_type &&__k)
Subscript ( [] ) access to unordered_map data.
│ │ │ +
std::pair< iterator, bool > insert(value_type &&__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ + │ │ │ +
unordered_map(_InputIterator __first, _InputIterator __last, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_map from a range.
│ │ │ +
void clear() noexcept
│ │ │ +
mapped_type & operator[](const key_type &__k)
Subscript ( [] ) access to unordered_map data.
│ │ │ +
const_iterator begin() const noexcept
│ │ │ +
key_equal key_eq() const
Returns the key comparison object with which the unordered_map was constructed.
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
iterator erase(iterator __position)
Erases an element from an unordered_map.
│ │ │ +
const_iterator cend() const noexcept
│ │ │ +
local_iterator end(size_type __n)
Returns a read/write iterator pointing to one past the last bucket elements.
│ │ │ + │ │ │ +
unordered_map(const allocator_type &__a)
Creates an unordered_map with no elements.
│ │ │ + │ │ │ +
size_type bucket_count() const noexcept
Returns the number of buckets of the unordered_map.
│ │ │ +
iterator begin() noexcept
│ │ │ +
hasher hash_function() const
Returns the hash functor object with which the unordered_map was constructed.
│ │ │ +
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.
│ │ │ + │ │ │ + │ │ │ +
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.
│ │ │ + │ │ │ +
auto count(const _Kt &__x) const -> decltype(_M_h._M_count_tr(__x))
Finds the number of elements.
│ │ │ + │ │ │ +
size_type max_bucket_count() const noexcept
Returns the maximum number of buckets of the unordered_map.
│ │ │ +
iterator emplace_hint(const_iterator __pos, _Args &&... __args)
Attempts to build and insert a std::pair into the unordered_map.
│ │ │ + │ │ │ +
void rehash(size_type __n)
May rehash the unordered_map.
│ │ │ +
const_iterator cbegin() const noexcept
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── 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,2546 +21,2924 @@ │ │ │ │ 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 _Pred = _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 _Tr = _____u_s_e_t___t_r_a_i_t_s_<_____c_a_c_h_e___d_e_f_a_u_l_t_<___V_a_l_u_e_,_ ___H_a_s_h_>_:_:_v_a_l_u_e>> │ │ │ │ -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 │ │ │ │ -_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 _Pred = _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 _Tr = _____u_m_s_e_t___t_r_a_i_t_s_<_____c_a_c_h_e___d_e_f_a_u_l_t_<___V_a_l_u_e_,_ ___H_a_s_h_>_:_:_v_a_l_u_e>> │ │ │ │ -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 │ │ │ │ -75 class _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t; │ │ │ │ +47 template, │ │ │ │ +50 typename _Pred = _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 _Tr = _____u_m_a_p___t_r_a_i_t_s_<_____c_a_c_h_e___d_e_f_a_u_l_t_<___K_e_y_,_ ___H_a_s_h_>_:_:_v_a_l_u_e>> │ │ │ │ +53 using __umap_hashtable = _Hashtable<_Key, std::pair, │ │ │ │ +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 │ │ │ │ +_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 _Pred = _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 _Tr = _____u_m_m_a_p___t_r_a_i_t_s_<_____c_a_c_h_e___d_e_f_a_u_l_t_<___K_e_y_,_ ___H_a_s_h_>_:_:_v_a_l_u_e>> │ │ │ │ +70 using __ummap_hashtable = _Hashtable<_Key, std::pair, │ │ │ │ +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 /** │ │ │ │ -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 _Pred = _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 __uset_hashtable<_Value, _Hash, _Pred, _Alloc> _Hashtable; │ │ │ │ -107 _Hashtable _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& __hf = _h_a_s_h_e_r(), │ │ │ │ -154 const _k_e_y___e_q_u_a_l& __eql = _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, __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 │ │ │ │ -_1_7_3 _u_n_o_r_d_e_r_e_d___s_e_t(_InputIterator __first, _InputIterator __last, │ │ │ │ -174 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -175 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -176 const _k_e_y___e_q_u_a_l& __eql = _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, __hf, __eql, __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 _Pred = _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 __umap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable; │ │ │ │ +112 _Hashtable _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& __hf = _h_a_s_h_e_r(), │ │ │ │ +160 const _k_e_y___e_q_u_a_l& __eql = _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, __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 │ │ │ │ +_1_7_9 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ +180 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ +181 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ +182 const _k_e_y___e_q_u_a_l& __eql = _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, __hf, __eql, __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& __uset, │ │ │ │ -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 */ │ │ │ │ -211 _u_n_o_r_d_e_r_e_d___s_e_t(unordered_set&& __uset, │ │ │ │ -212 const allocator_type& __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& __hf = _h_a_s_h_e_r(), │ │ │ │ -231 const _k_e_y___e_q_u_a_l& __eql = _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, __hf, __eql, __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 allocator_type& __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(size_type __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -241 const allocator_type& __a) │ │ │ │ -242 : unordered_set(__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& __umap, │ │ │ │ +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 */ │ │ │ │ +217 _u_n_o_r_d_e_r_e_d___m_a_p(unordered_map&& __umap, │ │ │ │ +218 const allocator_type& __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& __hf = _h_a_s_h_e_r(), │ │ │ │ +237 const _k_e_y___e_q_u_a_l& __eql = _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, __hf, __eql, __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 allocator_type& __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(size_type __n, const _h_a_s_h_e_r& __hf, │ │ │ │ +247 const allocator_type& __a) │ │ │ │ +248 : unordered_map(__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 allocator_type │ │ │ │ -_2_9_9 _g_e_t___a_l_l_o_c_a_t_o_r() const 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() const 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() const 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() 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 */ │ │ │ │ -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 const_iterator │ │ │ │ -_3_3_1 _b_e_g_i_n() const 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 allocator_type │ │ │ │ +_3_0_5 _g_e_t___a_l_l_o_c_a_t_o_r() const 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() const 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() const 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() 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 */ │ │ │ │ +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 const_iterator │ │ │ │ +_3_4_1 _b_e_g_i_n() const noexcept │ │ │ │ +342 { return _M_h.begin(); } │ │ │ │ 343 │ │ │ │ 344 const_iterator │ │ │ │ -_3_4_5 _e_n_d() const noexcept │ │ │ │ -346 { return _M_h.end(); } │ │ │ │ +_3_4_5 _c_b_e_g_i_n() 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 */ │ │ │ │ -353 const_iterator │ │ │ │ -_3_5_4 _c_b_e_g_i_n() const 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 const_iterator │ │ │ │ -_3_6_2 _c_e_n_d() 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 │ │ │ │ -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(_Args&&... __args) │ │ │ │ -385 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__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/ │ │ │ │ +357 ///@{ │ │ │ │ +358 /** │ │ │ │ +359 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ +360 * element in the %unordered_map. │ │ │ │ +361 */ │ │ │ │ +362 const_iterator │ │ │ │ +_3_6_3 _e_n_d() const noexcept │ │ │ │ +364 { return _M_h.end(); } │ │ │ │ +365 │ │ │ │ +366 const_iterator │ │ │ │ +_3_6_7 _c_e_n_d() 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 │ │ │ │ +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(_Args&&... __args) │ │ │ │ +396 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__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 │ │ │ │ -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 __pos, _Args&&... __args) │ │ │ │ -411 { return _M_h.emplace_hint(__pos, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__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 */ │ │ │ │ -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 __pos, _Args&&... __args) │ │ │ │ +427 { return _M_h.emplace_hint(__pos, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ +428 │ │ │ │ +429#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ +430 /// Extract a node. │ │ │ │ +431 node_type │ │ │ │ +432 extract(const_iterator __pos) │ │ │ │ +433 { │ │ │ │ +434 __glibcxx_assert(__pos != _e_n_d()); │ │ │ │ +435 return _M_h.extract(__pos); │ │ │ │ +436 } │ │ │ │ +437 │ │ │ │ +438 /// Extract a node. │ │ │ │ +439 node_type │ │ │ │ +440 extract(const _k_e_y___t_y_p_e& __key) │ │ │ │ +441 { return _M_h.extract(__key); } │ │ │ │ +442 │ │ │ │ +443 /// Re-insert an extracted node. │ │ │ │ +444 insert_return_type │ │ │ │ +445 _i_n_s_e_r_t(node_type&& __nh) │ │ │ │ +446 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(__nh)); } │ │ │ │ +447 │ │ │ │ +448 /// Re-insert an extracted node. │ │ │ │ +449 _i_t_e_r_a_t_o_r │ │ │ │ +450 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r, node_type&& __nh) │ │ │ │ +451 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(__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 │ │ │ │ +478 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ +479 try_emplace(const _k_e_y___t_y_p_e& __k, _Args&&... __args) │ │ │ │ +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_>(__args)...); │ │ │ │ +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 try_emplace(_k_e_y___t_y_p_e&& __k, _Args&&... __args) │ │ │ │ +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_>(__args)...); │ │ │ │ +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 __hint, const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -458 { return _M_h.insert(__hint, __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 __hint, _v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -462 { return _M_h.insert(__hint, _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(_InputIterator __first, _InputIterator __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 │ │ │ │ -493 extract(const_iterator __pos) │ │ │ │ -494 { │ │ │ │ -495 __glibcxx_assert(__pos != _e_n_d()); │ │ │ │ -496 return _M_h.extract(__pos); │ │ │ │ -497 } │ │ │ │ -498 │ │ │ │ -499 /// Extract a node. │ │ │ │ -500 node_type │ │ │ │ -501 extract(const _k_e_y___t_y_p_e& __key) │ │ │ │ -502 { return _M_h.extract(__key); } │ │ │ │ -503 │ │ │ │ -504 /// Re-insert an extracted node. │ │ │ │ -505 insert_return_type │ │ │ │ -506 _i_n_s_e_r_t(node_type&& __nh) │ │ │ │ -507 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(__nh)); } │ │ │ │ -508 │ │ │ │ -509 /// Re-insert an extracted node. │ │ │ │ -510 _i_t_e_r_a_t_o_r │ │ │ │ -511 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r, node_type&& __nh) │ │ │ │ -512 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(__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 */ │ │ │ │ -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 __position) │ │ │ │ -531 { return _M_h.erase(__position); } │ │ │ │ -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 __position) │ │ │ │ -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 */ │ │ │ │ -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 │ │ │ │ +523 try_emplace(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, const _k_e_y___t_y_p_e& __k, │ │ │ │ +524 _Args&&... __args) │ │ │ │ +525 { │ │ │ │ +526 return _M_h.try_emplace(__hint, __k, │ │ │ │ +527 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...).first; │ │ │ │ +528 } │ │ │ │ +529 │ │ │ │ +530 // move-capable overload │ │ │ │ +531 template │ │ │ │ +532 _i_t_e_r_a_t_o_r │ │ │ │ +533 try_emplace(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, _k_e_y___t_y_p_e&& __k, _Args&&... __args) │ │ │ │ +534 { │ │ │ │ +535 return _M_h.try_emplace(__hint, _s_t_d_:_:_m_o_v_e(__k), │ │ │ │ +536 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__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 */ │ │ │ │ +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 __enable_if_t::value, │ │ │ │ +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(_Pair&& __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 __hint, const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ +599 { return _M_h.insert(__hint, __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_>& __source) │ │ │ │ -604 { │ │ │ │ -605 using _Merge_helper = _Hash_merge_helper; │ │ │ │ -606 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ -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 __hint, _v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ +605 { return _M_h.insert(__hint, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ +606 │ │ │ │ +607 template │ │ │ │ +608 __enable_if_t::value, _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 __hint, _Pair&& __x) │ │ │ │ +610 { return _M_h.emplace_hint(__hint, _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(_InputIterator __first, _InputIterator __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 _Kt& __k) │ │ │ │ -664 -> decltype(_M_h._M_find_tr(__k)) │ │ │ │ -665 { return _M_h._M_find_tr(__k); } │ │ │ │ -666#endif │ │ │ │ -667 │ │ │ │ -668 const_iterator │ │ │ │ -_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 _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 */ │ │ │ │ -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 _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 │ │ │ │ -_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 _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 */ │ │ │ │ -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 _Kt& __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 _Kt& __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_> │ │ │ │ +662 insert_or_assign(const _k_e_y___t_y_p_e& __k, _Obj&& __obj) │ │ │ │ +663 { │ │ │ │ +664 auto __ret = _M_h.try_emplace(_c_e_n_d(), __k, │ │ │ │ +665 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj)); │ │ │ │ +666 if (!__ret.second) │ │ │ │ +667 __ret._f_i_r_s_t->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj); │ │ │ │ +668 return __ret; │ │ │ │ +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 insert_or_assign(_k_e_y___t_y_p_e&& __k, _Obj&& __obj) │ │ │ │ +675 { │ │ │ │ +676 auto __ret = _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_>(__obj)); │ │ │ │ +678 if (!__ret.second) │ │ │ │ +679 __ret.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__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 │ │ │ │ +710 _i_t_e_r_a_t_o_r │ │ │ │ +711 insert_or_assign(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, const _k_e_y___t_y_p_e& __k, │ │ │ │ +712 _Obj&& __obj) │ │ │ │ +713 { │ │ │ │ +714 auto __ret = _M_h.try_emplace(__hint, __k, _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj)); │ │ │ │ +715 if (!__ret.second) │ │ │ │ +716 __ret.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj); │ │ │ │ +717 return __ret.first; │ │ │ │ +718 } │ │ │ │ +719 │ │ │ │ +720 // move-capable overload │ │ │ │ +721 template │ │ │ │ +722 _i_t_e_r_a_t_o_r │ │ │ │ +723 insert_or_assign(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, _k_e_y___t_y_p_e&& __k, _Obj&& __obj) │ │ │ │ +724 { │ │ │ │ +725 auto __ret = _M_h.try_emplace(__hint, _s_t_d_:_:_m_o_v_e(__k), │ │ │ │ +726 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj)); │ │ │ │ +727 if (!__ret.second) │ │ │ │ +728 __ret.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__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 */ │ │ │ │ +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 __position) │ │ │ │ +749 { return _M_h.erase(__position); } │ │ │ │ +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 __position) │ │ │ │ +754 { return _M_h.erase(__position); } │ │ │ │ 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() const 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() const 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 size_type │ │ │ │ -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() const 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() const 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_>& __source) │ │ │ │ +823 { │ │ │ │ +824 using _Merge_helper = _Hash_merge_helper; │ │ │ │ +825 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ +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 unordered_set::size_type = {}, │ │ │ │ -892 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ -893 -> _u_n_o_r_d_e_r_e_d___s_e_t_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ -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 _u_n_o_r_d_e_r_e_d___s_e_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<___T_p_>, │ │ │ │ -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 -> _u_n_o_r_d_e_r_e_d___s_e_t_<___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_a_t_o_r_>; │ │ │ │ -906 │ │ │ │ -907 template, │ │ │ │ -909 typename = _RequireAllocator<_Allocator>> │ │ │ │ -910 _u_n_o_r_d_e_r_e_d___s_e_t(_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 -> _u_n_o_r_d_e_r_e_d___s_e_t_<_t_y_p_e_n_a_m_e_ _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ -913 _h_a_s_h< │ │ │ │ -914 typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_:_v_a_l_u_e___t_y_p_e>, │ │ │ │ -915 _e_q_u_a_l___t_o< │ │ │ │ -916 typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_:_v_a_l_u_e___t_y_p_e>, │ │ │ │ -917 _Allocator>; │ │ │ │ -918 │ │ │ │ -919 template, │ │ │ │ -921 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -922 typename = _RequireAllocator<_Allocator>> │ │ │ │ -923 _u_n_o_r_d_e_r_e_d___s_e_t(_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 -> _u_n_o_r_d_e_r_e_d___s_e_t_<_t_y_p_e_n_a_m_e_ _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ -927 _Hash, │ │ │ │ -928 _e_q_u_a_l___t_o< │ │ │ │ -929 typename _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_:_v_a_l_u_e___t_y_p_e>, │ │ │ │ -930 _Allocator>; │ │ │ │ -931 │ │ │ │ -932 template> │ │ │ │ -934 _u_n_o_r_d_e_r_e_d___s_e_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<___T_p_>, │ │ │ │ -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 -> _u_n_o_r_d_e_r_e_d___s_e_t_<___T_p_,_ _h_a_s_h_<___T_p_>, _e_q_u_a_l___t_o_<___T_p_>, _Allocator>; │ │ │ │ -937 │ │ │ │ -938 template, │ │ │ │ -940 typename = _RequireAllocator<_Allocator>> │ │ │ │ -941 _u_n_o_r_d_e_r_e_d___s_e_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<___T_p_>, │ │ │ │ -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 -> _u_n_o_r_d_e_r_e_d___s_e_t_<___T_p_,_ ___H_a_s_h_,_ _e_q_u_a_l___t_o_<___T_p_>, _Allocator>; │ │ │ │ -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 = _e_q_u_a_l___t_o_<___V_a_l_u_e_>, │ │ │ │ -971 typename _Alloc = _a_l_l_o_c_a_t_o_r_<___V_a_l_u_e_>> │ │ │ │ -_9_7_2 class _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t │ │ │ │ -973 { │ │ │ │ -974 typedef __umset_hashtable<_Value, _Hash, _Pred, _Alloc> _Hashtable; │ │ │ │ -975 _Hashtable _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& __hf = _h_a_s_h_e_r(), │ │ │ │ -1021 const _k_e_y___e_q_u_a_l& __eql = _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, __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 │ │ │ │ -_1_0_4_0 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_InputIterator __first, _InputIterator __last, │ │ │ │ -1041 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -1042 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -1043 const _k_e_y___e_q_u_a_l& __eql = _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, __hf, __eql, __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& __hf = _h_a_s_h_e_r(), │ │ │ │ -1068 const _k_e_y___e_q_u_a_l& __eql = _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, __hf, __eql, __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 _Kt& __x) -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ +883 { return _M_h._M_find_tr(__x); } │ │ │ │ +884#endif │ │ │ │ +885 │ │ │ │ +886 const_iterator │ │ │ │ +_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 _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 */ │ │ │ │ +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 _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 │ │ │ │ +_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 _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 */ │ │ │ │ +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 _Kt& __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 _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 */ │ │ │ │ +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() const 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() const 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 size_type │ │ │ │ +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& __umset, │ │ │ │ -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 */ │ │ │ │ -1105 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(unordered_multiset&& __umset, │ │ │ │ -1106 const allocator_type& __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() const 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() const 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 allocator_type │ │ │ │ -_1_1_6_6 _g_e_t___a_l_l_o_c_a_t_o_r() const 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() const 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() const 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() 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 _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 const_iterator │ │ │ │ -_1_1_9_8 _b_e_g_i_n() 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 _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 unordered_map::size_type = {}, │ │ │ │ +1156 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ +1157 -> _u_n_o_r_d_e_r_e_d___m_a_p<__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 _u_n_o_r_d_e_r_e_d___m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ +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 -> _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_a_t_o_r_>; │ │ │ │ +1171 │ │ │ │ +1172 template, │ │ │ │ +1174 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1175 _u_n_o_r_d_e_r_e_d___m_a_p(_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 -> _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_>, │ │ │ │ +1178 __iter_val_t<_InputIterator>, │ │ │ │ +1179 _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_>>, │ │ │ │ +1180 _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_>>, │ │ │ │ +1181 _Allocator>; │ │ │ │ +1182 │ │ │ │ +1183 template, │ │ │ │ +1185 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1186 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator, _InputIterator, _Allocator) │ │ │ │ +1187 -> _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_>, │ │ │ │ +1188 __iter_val_t<_InputIterator>, │ │ │ │ +1189 _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_>>, │ │ │ │ +1190 _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_>>, │ │ │ │ +1191 _Allocator>; │ │ │ │ +1192 │ │ │ │ +1193 template, │ │ │ │ +1195 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ +1196 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1197 _u_n_o_r_d_e_r_e_d___m_a_p(_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 -> _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_>, │ │ │ │ +1201 __iter_val_t<_InputIterator>, _Hash, │ │ │ │ +1202 _e_q_u_a_l___t_o_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, _Allocator>; │ │ │ │ +1203 │ │ │ │ +1204 template> │ │ │ │ +1206 _u_n_o_r_d_e_r_e_d___m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ +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 -> _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ _h_a_s_h_<___K_e_y_>, _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ 1210 │ │ │ │ -1211 const_iterator │ │ │ │ -_1_2_1_2 _e_n_d() const noexcept │ │ │ │ -1213 { return _M_h.end(); } │ │ │ │ -1214 ///@} │ │ │ │ +1211 template> │ │ │ │ +1213 _u_n_o_r_d_e_r_e_d___m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, _Allocator) │ │ │ │ +1214 -> _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ _h_a_s_h_<___K_e_y_>, _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ 1215 │ │ │ │ -1216 /** │ │ │ │ -1217 * Returns a read-only (constant) iterator that points to the first │ │ │ │ -1218 * element in the %unordered_multiset. │ │ │ │ -1219 */ │ │ │ │ -1220 const_iterator │ │ │ │ -_1_2_2_1 _c_b_e_g_i_n() const noexcept │ │ │ │ -1222 { return _M_h.begin(); } │ │ │ │ +1216 template, │ │ │ │ +1218 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1219 _u_n_o_r_d_e_r_e_d___m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ +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 -> _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ 1223 │ │ │ │ -1224 /** │ │ │ │ -1225 * Returns a read-only (constant) iterator that points one past the last │ │ │ │ -1226 * element in the %unordered_multiset. │ │ │ │ -1227 */ │ │ │ │ -1228 const_iterator │ │ │ │ -_1_2_2_9 _c_e_n_d() 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 │ │ │ │ -1242 _i_t_e_r_a_t_o_r │ │ │ │ -_1_2_4_3 _e_m_p_l_a_c_e(_Args&&... __args) │ │ │ │ -1244 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__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 │ │ │ │ -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 __pos, _Args&&... __args) │ │ │ │ -1266 { return _M_h.emplace_hint(__pos, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__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 _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 = _e_q_u_a_l___t_o_<___K_e_y_>, │ │ │ │ +1254 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_2_5_5 class _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ +1256 { │ │ │ │ +1257 typedef __ummap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable; │ │ │ │ +1258 _Hashtable _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 __hint, const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -1304 { return _M_h.insert(__hint, __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 __hint, _v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -1308 { return _M_h.insert(__hint, _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(_InputIterator __first, _InputIterator __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& __hf = _h_a_s_h_e_r(), │ │ │ │ +1305 const _k_e_y___e_q_u_a_l& __eql = _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, __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 │ │ │ │ +_1_3_2_4 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ +1325 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ +1326 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ +1327 const _k_e_y___e_q_u_a_l& __eql = _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, __hf, __eql, __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 │ │ │ │ -1338 extract(const_iterator __pos) │ │ │ │ -1339 { │ │ │ │ -1340 __glibcxx_assert(__pos != _e_n_d()); │ │ │ │ -1341 return _M_h.extract(__pos); │ │ │ │ -1342 } │ │ │ │ -1343 │ │ │ │ -1344 /// Extract a node. │ │ │ │ -1345 node_type │ │ │ │ -1346 extract(const _k_e_y___t_y_p_e& __key) │ │ │ │ -1347 { return _M_h.extract(__key); } │ │ │ │ -1348 │ │ │ │ -1349 /// Re-insert an extracted node. │ │ │ │ -1350 _i_t_e_r_a_t_o_r │ │ │ │ -1351 _i_n_s_e_r_t(node_type&& __nh) │ │ │ │ -1352 { return _M_h._M_reinsert_node_multi(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(__nh)); } │ │ │ │ -1353 │ │ │ │ -1354 /// Re-insert an extracted node. │ │ │ │ -1355 _i_t_e_r_a_t_o_r │ │ │ │ -1356 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, node_type&& __nh) │ │ │ │ -1357 { return _M_h._M_reinsert_node_multi(__hint, _s_t_d_:_:_m_o_v_e(__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 _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 __position) │ │ │ │ -1377 { return _M_h.erase(__position); } │ │ │ │ -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 __position) │ │ │ │ -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 _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& __ummap, │ │ │ │ +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 */ │ │ │ │ +1362 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(unordered_multimap&& __ummap, │ │ │ │ +1363 const allocator_type& __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& __hf = _h_a_s_h_e_r(), │ │ │ │ +1382 const _k_e_y___e_q_u_a_l& __eql = _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, __hf, __eql, __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 allocator_type& __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(size_type __n, const _h_a_s_h_e_r& __hf, │ │ │ │ +1392 const allocator_type& __a) │ │ │ │ +1393 : unordered_multimap(__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_>& __source) │ │ │ │ -1454 { │ │ │ │ -1455 using _Merge_helper │ │ │ │ -1456 = _Hash_merge_helper; │ │ │ │ -1457 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ -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 allocator_type │ │ │ │ +_1_4_5_0 _g_e_t___a_l_l_o_c_a_t_o_r() const 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() const 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() const 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() 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 _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 const_iterator │ │ │ │ +_1_4_8_6 _b_e_g_i_n() const noexcept │ │ │ │ +1487 { return _M_h.begin(); } │ │ │ │ +1488 │ │ │ │ +1489 const_iterator │ │ │ │ +_1_4_9_0 _c_b_e_g_i_n() const 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 _Kt& __x) │ │ │ │ -1516 -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -1517 { return _M_h._M_find_tr(__x); } │ │ │ │ -1518#endif │ │ │ │ -1519 │ │ │ │ -1520 const_iterator │ │ │ │ -_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 _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 _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 _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 │ │ │ │ -_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 _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 */ │ │ │ │ -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 _Kt& __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 const_iterator │ │ │ │ +_1_5_0_8 _e_n_d() const noexcept │ │ │ │ +1509 { return _M_h.end(); } │ │ │ │ +1510 │ │ │ │ +1511 const_iterator │ │ │ │ +_1_5_1_2 _c_e_n_d() 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 │ │ │ │ +1534 _i_t_e_r_a_t_o_r │ │ │ │ +_1_5_3_5 _e_m_p_l_a_c_e(_Args&&... __args) │ │ │ │ +1536 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__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 │ │ │ │ +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 __pos, _Args&&... __args) │ │ │ │ +1563 { return _M_h.emplace_hint(__pos, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__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 _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 __enable_if_t::value, _i_t_e_r_a_t_o_r> │ │ │ │ +_1_5_8_5 _i_n_s_e_r_t(_Pair&& __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 _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 _s_i_z_e___t_y_p_e │ │ │ │ -_1_6_0_6 _b_u_c_k_e_t___c_o_u_n_t() const 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() const 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 size_type │ │ │ │ -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() const 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() const 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 __hint, const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ +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 _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 __hint, _v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ +1617 { return _M_h.insert(__hint, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ +1618 │ │ │ │ +1619 template │ │ │ │ +1620 __enable_if_t::value, _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 __hint, _Pair&& __x) │ │ │ │ +1622 { return _M_h.emplace_hint(__hint, _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(_InputIterator __first, _InputIterator __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 │ │ │ │ +1654 extract(const_iterator __pos) │ │ │ │ +1655 { │ │ │ │ +1656 __glibcxx_assert(__pos != _e_n_d()); │ │ │ │ +1657 return _M_h.extract(__pos); │ │ │ │ +1658 } │ │ │ │ +1659 │ │ │ │ +1660 /// Extract a node. │ │ │ │ +1661 node_type │ │ │ │ +1662 extract(const _k_e_y___t_y_p_e& __key) │ │ │ │ +1663 { return _M_h.extract(__key); } │ │ │ │ +1664 │ │ │ │ +1665 /// Re-insert an extracted node. │ │ │ │ +1666 _i_t_e_r_a_t_o_r │ │ │ │ +1667 _i_n_s_e_r_t(node_type&& __nh) │ │ │ │ +1668 { return _M_h._M_reinsert_node_multi(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(__nh)); } │ │ │ │ +1669 │ │ │ │ +1670 /// Re-insert an extracted node. │ │ │ │ +1671 _i_t_e_r_a_t_o_r │ │ │ │ +1672 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, node_type&& __nh) │ │ │ │ +1673 { return _M_h._M_reinsert_node_multi(__hint, _s_t_d_:_:_m_o_v_e(__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 _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 __position) │ │ │ │ +1692 { return _M_h.erase(__position); } │ │ │ │ +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 __position) │ │ │ │ +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 │ │ │ │ -_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 unordered_multiset::size_type = {}, │ │ │ │ -1738 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ -1739 _Allocator = _Allocator()) │ │ │ │ -1740 -> _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, │ │ │ │ -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 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<___T_p_>, │ │ │ │ -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 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_a_t_o_r_>; │ │ │ │ -1754 │ │ │ │ -1755 template, │ │ │ │ -1757 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1758 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_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 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<_t_y_p_e_n_a_m_e_ _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_: │ │ │ │ -_v_a_l_u_e___t_y_p_e, │ │ │ │ -1761 _h_a_s_h_:_:_v_a_l_u_e___t_y_p_e>, │ │ │ │ -1763 _e_q_u_a_l___t_o_:_:_v_a_l_u_e___t_y_p_e>, │ │ │ │ -1765 _Allocator>; │ │ │ │ -1766 │ │ │ │ -1767 template, │ │ │ │ -1769 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -1770 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1771 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_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 -> _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, │ │ │ │ -1776 _Hash, │ │ │ │ -1777 _e_q_u_a_l___t_o< │ │ │ │ -1778 typename │ │ │ │ -1779 _i_t_e_r_a_t_o_r___t_r_a_i_t_s_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>_:_:_v_a_l_u_e___t_y_p_e>, │ │ │ │ -1780 _Allocator>; │ │ │ │ -1781 │ │ │ │ -1782 template> │ │ │ │ -1784 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<___T_p_>, │ │ │ │ -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 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___T_p_,_ _h_a_s_h_<___T_p_>, _e_q_u_a_l___t_o_<___T_p_>, _Allocator>; │ │ │ │ -1787 │ │ │ │ -1788 template, │ │ │ │ -1790 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1791 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<___T_p_>, │ │ │ │ -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 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___T_p_,_ ___H_a_s_h_,_ _e_q_u_a_l___t_o_<___T_p_>, _Allocator>; │ │ │ │ -1794 │ │ │ │ -1795#endif │ │ │ │ -1796 │ │ │ │ -1797 template │ │ │ │ -1798 inline void │ │ │ │ -1799 swap(_u_n_o_r_d_e_r_e_d___s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -1800 _u_n_o_r_d_e_r_e_d___s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -1801 noexcept(noexcept(__x.swap(__y))) │ │ │ │ -1802 { __x.swap(__y); } │ │ │ │ -1803 │ │ │ │ -1804 template │ │ │ │ -1805 inline void │ │ │ │ -1806 swap(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -1807 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -1808 noexcept(noexcept(__x.swap(__y))) │ │ │ │ -1809 { __x.swap(__y); } │ │ │ │ -1810 │ │ │ │ -1811 template │ │ │ │ -1812 inline bool │ │ │ │ -1813 operator==(const _u_n_o_r_d_e_r_e_d___s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -1814 const _u_n_o_r_d_e_r_e_d___s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -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 _u_n_o_r_d_e_r_e_d___s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -1821 const _u_n_o_r_d_e_r_e_d___s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -1822 { return !(__x == __y); } │ │ │ │ -1823#endif │ │ │ │ -1824 │ │ │ │ -1825 template │ │ │ │ -1826 inline bool │ │ │ │ -1827 operator==(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -1828 const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -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_>& __source) │ │ │ │ +1766 { │ │ │ │ +1767 using _Merge_helper │ │ │ │ +1768 = _Hash_merge_helper; │ │ │ │ +1769 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ +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 _Kt& __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 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -1835 const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t_<___V_a_l_u_e_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -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::_u_n_o_r_d_e_r_e_d___s_e_t<_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::_u_n_o_r_d_e_r_e_d___m_u_l_t_i_s_e_t<_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 const_iterator │ │ │ │ +_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 _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 _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 _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 │ │ │ │ +_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 _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 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 _Kt& __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 _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 _s_i_z_e___t_y_p_e │ │ │ │ +_1_9_1_6 _b_u_c_k_e_t___c_o_u_n_t() const 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() const 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 size_type │ │ │ │ +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() const 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() const 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<_Key1, _Tp1, │ │ │ │ +2041 _Hash1, _Pred1, _Alloc1>&, │ │ │ │ +2042 const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p<_Key1, _Tp1, │ │ │ │ +2043 _Hash1, _Pred1, _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 unordered_multimap::size_type = {}, │ │ │ │ +2058 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ +2059 _Allocator = _Allocator()) │ │ │ │ +2060 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p<__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 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ +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 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_a_t_o_r_>; │ │ │ │ +2075 │ │ │ │ +2076 template, │ │ │ │ +2078 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2079 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_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 -> _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_>, │ │ │ │ +2082 __iter_val_t<_InputIterator>, │ │ │ │ +2083 _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_>>, │ │ │ │ +2084 _e_q_u_a_l___t_o_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, _Allocator>; │ │ │ │ +2085 │ │ │ │ +2086 template, │ │ │ │ +2088 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2089 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator, _InputIterator, _Allocator) │ │ │ │ +2090 -> _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_>, │ │ │ │ +2091 __iter_val_t<_InputIterator>, │ │ │ │ +2092 _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_>>, │ │ │ │ +2093 _e_q_u_a_l___t_o_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, _Allocator>; │ │ │ │ +2094 │ │ │ │ +2095 template, │ │ │ │ +2097 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ +2098 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2099 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_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 -> _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_>, │ │ │ │ +2103 __iter_val_t<_InputIterator>, _Hash, │ │ │ │ +2104 _e_q_u_a_l___t_o_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, _Allocator>; │ │ │ │ +2105 │ │ │ │ +2106 template> │ │ │ │ +2108 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ +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 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ _h_a_s_h_<___K_e_y_>, _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ +2112 │ │ │ │ +2113 template> │ │ │ │ +2115 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, _Allocator) │ │ │ │ +2116 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ _h_a_s_h_<___K_e_y_>, _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ +2117 │ │ │ │ +2118 template, │ │ │ │ +2120 typename = _RequireAllocator<_Allocator>> │ │ │ │ +2121 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ +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 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ +2125 │ │ │ │ +2126#endif │ │ │ │ +2127 │ │ │ │ +2128 template │ │ │ │ +2129 inline void │ │ │ │ +2130 swap(_u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ +2131 _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ +2132 noexcept(noexcept(__x.swap(__y))) │ │ │ │ +2133 { __x.swap(__y); } │ │ │ │ +2134 │ │ │ │ +2135 template │ │ │ │ +2136 inline void │ │ │ │ +2137 swap(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ +2138 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ +2139 noexcept(noexcept(__x.swap(__y))) │ │ │ │ +2140 { __x.swap(__y); } │ │ │ │ +2141 │ │ │ │ +2142 template │ │ │ │ +2143 inline bool │ │ │ │ +2144 operator==(const _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ +2145 const _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ +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 _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ +2152 const _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ +2153 { return !(__x == __y); } │ │ │ │ +2154#endif │ │ │ │ +2155 │ │ │ │ +2156 template │ │ │ │ +2157 inline bool │ │ │ │ +2158 operator==(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ +2159 const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ +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 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ +2166 const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ +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::_u_n_o_r_d_e_r_e_d___m_a_p<_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::_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p<_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_:_:_p_a_i_r_:_:_p_a_i_r │ │ │ │ +pair(_T1, _T2) -> pair< _T1, _T2 > │ │ │ │ +Two pairs of the same type are equal iff their members are equal. │ │ │ │ _s_t_d_:_:_m_o_v_e │ │ │ │ constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept │ │ │ │ Convert a value to an rvalue. │ │ │ │ DDeeffiinniittiioonn _m_o_v_e_._h_:_1_3_7 │ │ │ │ _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 │ │ │ │ ISO C++ entities toplevel namespace is std. │ │ │ │ -_s_t_d_:_:_____u_m_s_e_t___t_r_a_i_t_s │ │ │ │ -__detail::_Hashtable_traits< _Cache, true, false > __umset_traits │ │ │ │ -Base types for unordered_multiset. │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_6_0 │ │ │ │ -_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_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_n_i_t_i_a_l_i_z_e_r___l_i_s_t │ │ │ │ initializer_list │ │ │ │ DDeeffiinniittiioonn _i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_:_4_6 │ │ │ │ _s_t_d_:_:_h_a_s_h │ │ │ │ Primary class template hash. │ │ │ │ DDeeffiinniittiioonn _f_u_n_c_t_i_o_n_a_l___h_a_s_h_._h_:_1_0_3 │ │ │ │ _s_t_d_:_:_s_i_z_e___t_y_p_e │ │ │ │ _s_t_d_:_:_a_l_l_o_c_a_t_o_r │ │ │ │ The standard allocator, as per C++03 [20.4.1]. │ │ │ │ DDeeffiinniittiioonn _a_l_l_o_c_a_t_o_r_._h_:_1_2_9 │ │ │ │ -_s_t_d_:_:_i_t_e_r_a_t_o_r___t_r_a_i_t_s │ │ │ │ -Traits class for iterators. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h_:_1_7_8 │ │ │ │ _s_t_d_:_:_e_q_u_a_l___t_o │ │ │ │ One of the comparison functors. │ │ │ │ DDeeffiinniittiioonn _s_t_l___f_u_n_c_t_i_o_n_._h_:_3_7_1 │ │ │ │ _s_t_d_:_:_p_a_i_r │ │ │ │ Struct holding two objects of arbitrary type. │ │ │ │ DDeeffiinniittiioonn _s_t_l___p_a_i_r_._h_:_2_8_6 │ │ │ │ +_s_t_d_:_:_p_a_i_r_:_:_f_i_r_s_t │ │ │ │ +_T1 first │ │ │ │ +The first member. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___p_a_i_r_._h_:_2_9_0 │ │ │ │ _s_t_d_:_:_i_t_e_r_a_t_o_r │ │ │ │ Common iterator class. │ │ │ │ DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h_:_1_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 │ │ │ │ +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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_r_e_f_e_r_e_n_c_e │ │ │ │ +_Hashtable::reference reference │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_i_t_e_r_a_t_o_r │ │ │ │ +_Hashtable::iterator iterator │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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___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 │ │ │ │ +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 │ │ │ │ +__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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_m_a_p_p_e_d___t_y_p_e │ │ │ │ +_Hashtable::mapped_type mapped_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_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_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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ -_Hashtable::difference_type difference_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_p_o_i_n_t_e_r │ │ │ │ -_Hashtable::pointer pointer │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_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 │ │ │ │ +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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ +_Hashtable::value_type value_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_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_:_:_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___r_e_f_e_r_e_n_c_e │ │ │ │ +_Hashtable::const_reference const_reference │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_7_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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_h_a_s_h_e_r │ │ │ │ +_Hashtable::hasher hasher │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_6_7 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ _Hashtable::local_iterator local_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___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_:_:_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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::const_iterator const_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ -_Hashtable::allocator_type allocator_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_v_a_l_u_e___t_y_p_e │ │ │ │ -_Hashtable::value_type value_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_s_i_z_e___t_y_p_e │ │ │ │ +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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_p_o_i_n_t_e_r │ │ │ │ +_Hashtable::pointer pointer │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_7_4 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ +_Hashtable::allocator_type allocator_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_Hashtable::const_local_iterator const_local_iterator │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ +_Hashtable::difference_type difference_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_8_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_s_i_z_e___t_y_p_e │ │ │ │ _Hashtable::size_type size_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_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_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_k_e_y___t_y_p_e │ │ │ │ -_Hashtable::key_type key_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ +_Hashtable::const_pointer const_pointer │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::reference reference │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_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_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_Hashtable::const_iterator const_iterator │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ -_Hashtable::const_pointer const_pointer │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_c_o_n_s_t___r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::const_reference const_reference │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_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_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_k_e_y___t_y_p_e │ │ │ │ +_Hashtable::key_type key_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_6_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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_h_a_s_h_e_r │ │ │ │ -_Hashtable::hasher hasher │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::iterator iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_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_:_:_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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::const_local_iterator const_local_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_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_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_k_e_y___e_q_u_a_l │ │ │ │ +_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_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ +_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_k_e_y___e_q_u_a_l │ │ │ │ _Hashtable::key_equal key_equal │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_i_t_e_r_a_t_o_r │ │ │ │ +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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_i_t_e_r_a_t_o_r │ │ │ │ _Hashtable::iterator iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::reference reference │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_2_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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_v_a_l_u_e___t_y_p_e │ │ │ │ -_Hashtable::value_type value_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_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_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_k_e_y___t_y_p_e │ │ │ │ -_Hashtable::key_type key_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_3 │ │ │ │ -_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)) │ │ │ │ +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_:_:_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ +_Hashtable::const_pointer const_pointer │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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_:_:_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)) │ │ │ │ +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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_r_e_f_e_r_e_n_c_e │ │ │ │ +_Hashtable::reference reference │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ +_Hashtable::allocator_type allocator_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_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___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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_:_h_a_s_h_e_r │ │ │ │ -_Hashtable::hasher hasher │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_5 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::local_iterator local_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_2_8 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_s_i_z_e___t_y_p_e │ │ │ │ -_Hashtable::size_type size_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_3_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_:_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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ -_Hashtable::const_pointer const_pointer │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_2_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_m_a_p_p_e_d___t_y_p_e │ │ │ │ +_Hashtable::mapped_type mapped_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_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_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_k_e_y___e_q_u_a_l │ │ │ │ -_Hashtable::key_equal key_equal │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::const_iterator const_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_2_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ -_Hashtable::difference_type difference_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_3_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___s_e_t_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_c_o_n_s_t___r_e_f_e_r_e_n_c_e │ │ │ │ +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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_h_a_s_h_e_r │ │ │ │ +_Hashtable::hasher hasher │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_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(_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_:_:_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___r_e_f_e_r_e_n_c_e │ │ │ │ _Hashtable::const_reference const_reference │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___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_3_1 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_k_e_y___e_q_u_a_l │ │ │ │ +_Hashtable::key_equal key_equal │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_2 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_Hashtable::local_iterator local_iterator │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_p_o_i_n_t_e_r │ │ │ │ +_Hashtable::pointer pointer │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_8 │ │ │ │ +_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_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_k_e_y___t_y_p_e │ │ │ │ +_Hashtable::key_type key_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ -_Hashtable::allocator_type allocator_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_1_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_:_:_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +_Hashtable::const_iterator const_iterator │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_3 │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_s_i_z_e___t_y_p_e │ │ │ │ +_Hashtable::size_type size_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ +_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ +_Hashtable::difference_type difference_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ _Hashtable::const_local_iterator const_local_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___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_<_ ___K_e_y_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ ___K_e_y_ _>_ _>_:_: │ │ │ │ -_p_o_i_n_t_e_r │ │ │ │ -_Hashtable::pointer pointer │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___s_e_t_._h_:_1_2_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ +___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ +_Hashtable::value_type value_type │ │ │ │ +DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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 │ │ │ │ _h_a_s_h_t_a_b_l_e_._h │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00383.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: unordered_map.h File Reference │ │ │ +libstdc++: forward_list.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,115 +48,78 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
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 >
class  std::unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc >
struct  std::_Fwd_list_base< _Tp, _Alloc >
struct  std::_Fwd_list_const_iterator< _Tp >
struct  std::_Fwd_list_iterator< _Tp >
struct  std::_Fwd_list_node< _Tp >
struct  std::_Fwd_list_node_base
class  std::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
template<bool _Cache>
using std::__umap_traits
template<typename _Key, typename _Tp, typename _Hash = hash<_Key>, typename _Pred = std::equal_to<_Key>, typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >, typename _Tr = __ummap_traits<__cache_default<_Key, _Hash>::value>>
using std::__ummap_hashtable
template<bool _Cache>
using std::__ummap_traits
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ Functions

template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
bool std::operator== (const unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__x, const unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__y)
template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
bool std::operator== (const unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc > &__x, const unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc > &__y)
template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
void std::swap (unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__x, unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__y) noexcept(noexcept(__x.swap(__y)))
template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
void std::swap (unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc > &__x, unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc > &__y) noexcept(noexcept(__x.swap(__y)))
│ │ │ -template<typename _InputIterator, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (_InputIterator, _InputIterator, _Allocator) -> unordered_map< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, hash< __iter_key_t< _InputIterator > >, equal_to< __iter_key_t< _InputIterator > >, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (_InputIterator, _InputIterator, typename unordered_map< int, int >::size_type, _Allocator) -> unordered_map< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, hash< __iter_key_t< _InputIterator > >, equal_to< __iter_key_t< _InputIterator > >, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Hash, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (_InputIterator, _InputIterator, typename unordered_map< int, int >::size_type, _Hash, _Allocator) -> unordered_map< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, _Hash, equal_to< __iter_key_t< _InputIterator > >, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Hash = hash<__iter_key_t<_InputIterator>>, typename _Pred = equal_to<__iter_key_t<_InputIterator>>, typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (_InputIterator, _InputIterator, typename unordered_map< int, int >::size_type={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) -> unordered_map< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, _Hash, _Pred, _Allocator >
│ │ │ -template<typename _Key, typename _Tp, typename _Allocator, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (initializer_list< pair< _Key, _Tp > >, _Allocator) -> unordered_map< _Key, _Tp, hash< _Key >, equal_to< _Key >, _Allocator >
│ │ │ -template<typename _Key, typename _Tp, typename _Allocator, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (initializer_list< pair< _Key, _Tp > >, typename unordered_map< int, int >::size_type, _Allocator) -> unordered_map< _Key, _Tp, hash< _Key >, equal_to< _Key >, _Allocator >
│ │ │ -template<typename _Key, typename _Tp, typename _Hash, typename _Allocator, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (initializer_list< pair< _Key, _Tp > >, typename unordered_map< int, int >::size_type, _Hash, _Allocator) -> unordered_map< _Key, _Tp, _Hash, equal_to< _Key >, _Allocator >
│ │ │ -template<typename _Key, typename _Tp, typename _Hash = hash<_Key>, typename _Pred = equal_to<_Key>, typename _Allocator = allocator<pair<const _Key, _Tp>>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>>
 std::unordered_map (initializer_list< pair< _Key, _Tp > >, typename unordered_map< int, int >::size_type={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) -> unordered_map< _Key, _Tp, _Hash, _Pred, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (_InputIterator, _InputIterator, _Allocator) -> unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, hash< __iter_key_t< _InputIterator > >, equal_to< __iter_key_t< _InputIterator > >, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (_InputIterator, _InputIterator, unordered_multimap< int, int >::size_type, _Allocator) -> unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, hash< __iter_key_t< _InputIterator > >, equal_to< __iter_key_t< _InputIterator > >, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Hash, typename _Allocator, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (_InputIterator, _InputIterator, unordered_multimap< int, int >::size_type, _Hash, _Allocator) -> unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, _Hash, equal_to< __iter_key_t< _InputIterator > >, _Allocator >
│ │ │ -template<typename _InputIterator, typename _Hash = hash<__iter_key_t<_InputIterator>>, typename _Pred = equal_to<__iter_key_t<_InputIterator>>, typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>, typename = _RequireInputIter<_InputIterator>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (_InputIterator, _InputIterator, unordered_multimap< int, int >::size_type={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) -> unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, _Hash, _Pred, _Allocator >
│ │ │ -template<typename _Key, typename _Tp, typename _Allocator, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (initializer_list< pair< _Key, _Tp > >, _Allocator) -> unordered_multimap< _Key, _Tp, hash< _Key >, equal_to< _Key >, _Allocator >
│ │ │ -template<typename _Key, typename _Tp, typename _Allocator, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (initializer_list< pair< _Key, _Tp > >, unordered_multimap< int, int >::size_type, _Allocator) -> unordered_multimap< _Key, _Tp, hash< _Key >, equal_to< _Key >, _Allocator >
│ │ │ -template<typename _Key, typename _Tp, typename _Hash, typename _Allocator, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (initializer_list< pair< _Key, _Tp > >, unordered_multimap< int, int >::size_type, _Hash, _Allocator) -> unordered_multimap< _Key, _Tp, _Hash, equal_to< _Key >, _Allocator >
│ │ │ -template<typename _Key, typename _Tp, typename _Hash = hash<_Key>, typename _Pred = equal_to<_Key>, typename _Allocator = allocator<pair<const _Key, _Tp>>, typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>>
 std::unordered_multimap (initializer_list< pair< _Key, _Tp > >, unordered_multimap< int, int >::size_type={}, _Hash=_Hash(), _Pred=_Pred(), _Allocator=_Allocator()) -> unordered_multimap< _Key, _Tp, _Hash, _Pred, _Allocator >
│ │ │ +template<typename _InputIterator, typename _ValT = typename iterator_traits<_InputIterator>::value_type, typename _Allocator = allocator<_ValT>, typename = _RequireInputIter<_InputIterator>, typename = _RequireAllocator<_Allocator>>
 std::forward_list (_InputIterator, _InputIterator, _Allocator=_Allocator()) -> forward_list< _ValT, _Allocator >
template<typename _Tp, typename _Alloc>
__detail::__synth3way_t< _Tp > std::operator<=> (const forward_list< _Tp, _Alloc > &__x, const forward_list< _Tp, _Alloc > &__y)
template<typename _Tp, typename _Alloc>
bool std::operator== (const forward_list< _Tp, _Alloc > &__lx, const forward_list< _Tp, _Alloc > &__ly)
template<typename _Tp, typename _Alloc>
void std::swap (forward_list< _Tp, _Alloc > &__lx, forward_list< _Tp, _Alloc > &__ly) noexcept(noexcept(__lx.swap(__ly)))
│ │ │

Detailed Description

│ │ │ -

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

│ │ │ +

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

│ │ │ + │ │ │ +

Definition in file forward_list.h.

│ │ │ +

Macro Definition Documentation

│ │ │ + │ │ │ +

◆ _GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG

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

Definition in file unordered_map.h.

│ │ │ -
│ │ │ +

Definition at line 1192 of file forward_list.h.

│ │ │ + │ │ │ +
│ │ │ +
│ │ │ +
│ │ │
│ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,161 +1,43 @@ │ │ │ │ libstdc++ │ │ │ │ -unordered_map.h File Reference │ │ │ │ +forward_list.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ CCllaasssseess │ │ │ │ -class   _s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_ _> │ │ │ │ -class   _s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_ _> │ │ │ │ +struct   _s_t_d_:_:___F_w_d___l_i_s_t___b_a_s_e_<_ ___T_p_,_ ___A_l_l_o_c_ _> │ │ │ │ +struct   _s_t_d_:_:___F_w_d___l_i_s_t___c_o_n_s_t___i_t_e_r_a_t_o_r_<_ ___T_p_ _> │ │ │ │ +struct   _s_t_d_:_:___F_w_d___l_i_s_t___i_t_e_r_a_t_o_r_<_ ___T_p_ _> │ │ │ │ +struct   _s_t_d_:_:___F_w_d___l_i_s_t___n_o_d_e_<_ ___T_p_ _> │ │ │ │ +struct   _s_t_d_:_:___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e │ │ │ │ + class   _s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_<_ ___T_p_,_ ___A_l_l_o_c_ _> │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ -TTyyppeeddeeffss │ │ │ │ -template, typename │ │ │ │ -_Pred = std::equal_to<_Key>, typename _Alloc = std::allocator >, typename _Tr = __umap_traits<__cache_default<_Key, _Hash>:: │ │ │ │ -value>> │ │ │ │ -using  _s_t_d_:_:_____u_m_a_p___h_a_s_h_t_a_b_l_e │ │ │ │ -template │ │ │ │ -using  _s_t_d_:_:_____u_m_a_p___t_r_a_i_t_s │ │ │ │ -template, typename │ │ │ │ -_Pred = std::equal_to<_Key>, typename _Alloc = std::allocator >, typename _Tr = __ummap_traits<__cache_default<_Key, _Hash>:: │ │ │ │ -value>> │ │ │ │ -using  _s_t_d_:_:_____u_m_m_a_p___h_a_s_h_t_a_b_l_e │ │ │ │ -template │ │ │ │ -using  _s_t_d_:_:_____u_m_m_a_p___t_r_a_i_t_s │ │ │ │ FFuunnccttiioonnss │ │ │ │ -template │ │ │ │ -bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > │ │ │ │ - &__x, const unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__y) │ │ │ │ -template │ │ │ │ -bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const unordered_multimap< _Key, _Tp, _Hash, _Pred, │ │ │ │ - _Alloc > &__x, const unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc │ │ │ │ - > &__y) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_s_w_a_p (unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__x, │ │ │ │ - unordered_map< _Key, _Tp, _Hash, _Pred, _Alloc > &__y) noexcept(noexcept │ │ │ │ - (__x.swap(__y))) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_s_w_a_p (unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc > &__x, │ │ │ │ - unordered_multimap< _Key, _Tp, _Hash, _Pred, _Alloc > &__y) noexcept │ │ │ │ - (noexcept(__x.swap(__y))) │ │ │ │ -template, typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (_InputIterator, _InputIterator, _Allocator) - │ │ │ │ - > unordered_map< __iter_key_t< _InputIterator >, __iter_val_t< │ │ │ │ - _InputIterator >, _h_a_s_h< __iter_key_t< _InputIterator > >, _e_q_u_a_l___t_o< │ │ │ │ - __iter_key_t< _InputIterator > >, _Allocator > │ │ │ │ -template, typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (_InputIterator, _InputIterator, typename │ │ │ │ - unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e, _Allocator) -> unordered_map< │ │ │ │ - __iter_key_t< _InputIterator >, __iter_val_t< _InputIterator >, _h_a_s_h< │ │ │ │ - __iter_key_t< _InputIterator > >, _e_q_u_a_l___t_o< __iter_key_t< _InputIterator │ │ │ │ - > >, _Allocator > │ │ │ │ -template, typename = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, typename = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (_InputIterator, _InputIterator, typename │ │ │ │ - unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) - │ │ │ │ - > unordered_map< __iter_key_t< _InputIterator >, __iter_val_t< │ │ │ │ - _InputIterator >, _Hash, _e_q_u_a_l___t_o< __iter_key_t< _InputIterator > >, │ │ │ │ - _Allocator > │ │ │ │ -template>, typename _Pred = │ │ │ │ -equal_to<__iter_key_t<_InputIterator>>, typename _Allocator = │ │ │ │ -allocator<__iter_to_alloc_t<_InputIterator>>, typename = │ │ │ │ -_RequireInputIter<_InputIterator>, typename = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, │ │ │ │ -typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (_InputIterator, _InputIterator, typename │ │ │ │ - unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred(), │ │ │ │ - _Allocator=_Allocator()) -> unordered_map< __iter_key_t< _InputIterator │ │ │ │ - >, __iter_val_t< _InputIterator >, _Hash, _Pred, _Allocator > │ │ │ │ -template> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, _Allocator) - │ │ │ │ - > unordered_map< _Key, _Tp, _h_a_s_h< _Key >, _e_q_u_a_l___t_o< _Key >, _Allocator > │ │ │ │ -template> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, typename │ │ │ │ - unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e, _Allocator) -> unordered_map< _Key, │ │ │ │ - _Tp, _h_a_s_h< _Key >, _e_q_u_a_l___t_o< _Key >, _Allocator > │ │ │ │ -template, typename = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, typename │ │ │ │ - unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) - │ │ │ │ - > unordered_map< _Key, _Tp, _Hash, _e_q_u_a_l___t_o< _Key >, _Allocator > │ │ │ │ -template, typename │ │ │ │ -_Pred = equal_to<_Key>, typename _Allocator = allocator>, │ │ │ │ -typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = │ │ │ │ -_RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, typename │ │ │ │ - unordered_map< int, int >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred(), │ │ │ │ - _Allocator=_Allocator()) -> unordered_map< _Key, _Tp, _Hash, _Pred, │ │ │ │ - _Allocator > │ │ │ │ -template, typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_InputIterator, _InputIterator, _Allocator) - │ │ │ │ - > unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< │ │ │ │ - _InputIterator >, _h_a_s_h< __iter_key_t< _InputIterator > >, _e_q_u_a_l___t_o< │ │ │ │ - __iter_key_t< _InputIterator > >, _Allocator > │ │ │ │ -template, typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_InputIterator, _InputIterator, │ │ │ │ - unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e, _Allocator) - │ │ │ │ - > unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< │ │ │ │ - _InputIterator >, _h_a_s_h< __iter_key_t< _InputIterator > >, _e_q_u_a_l___t_o< │ │ │ │ - __iter_key_t< _InputIterator > >, _Allocator > │ │ │ │ -template, typename = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, typename = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_InputIterator, _InputIterator, │ │ │ │ - unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) - │ │ │ │ - > unordered_multimap< __iter_key_t< _InputIterator >, __iter_val_t< │ │ │ │ - _InputIterator >, _Hash, _e_q_u_a_l___t_o< __iter_key_t< _InputIterator > >, │ │ │ │ - _Allocator > │ │ │ │ -template>, typename _Pred = │ │ │ │ -equal_to<__iter_key_t<_InputIterator>>, typename _Allocator = │ │ │ │ -allocator<__iter_to_alloc_t<_InputIterator>>, typename = │ │ │ │ -_RequireInputIter<_InputIterator>, typename = │ │ │ │ -_RequireNotAllocatorOrIntegral<_Hash>, typename = _RequireNotAllocator<_Pred>, │ │ │ │ -typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_InputIterator, _InputIterator, │ │ │ │ - unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred │ │ │ │ - (), _Allocator=_Allocator()) -> unordered_multimap< __iter_key_t< │ │ │ │ - _InputIterator >, __iter_val_t< _InputIterator >, _Hash, _Pred, │ │ │ │ - _Allocator > │ │ │ │ -template> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, │ │ │ │ - _Allocator) -> unordered_multimap< _Key, _Tp, _h_a_s_h< _Key >, _e_q_u_a_l___t_o< │ │ │ │ - _Key >, _Allocator > │ │ │ │ -template> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, │ │ │ │ - unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e, _Allocator) - │ │ │ │ - > unordered_multimap< _Key, _Tp, _h_a_s_h< _Key >, _e_q_u_a_l___t_o< _Key >, │ │ │ │ - _Allocator > │ │ │ │ -template, typename = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, │ │ │ │ - unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e, _Hash, _Allocator) - │ │ │ │ - > unordered_multimap< _Key, _Tp, _Hash, _e_q_u_a_l___t_o< _Key >, _Allocator > │ │ │ │ -template, typename │ │ │ │ -_Pred = equal_to<_Key>, typename _Allocator = allocator>, │ │ │ │ -typename = _RequireNotAllocatorOrIntegral<_Hash>, typename = │ │ │ │ -_RequireNotAllocator<_Pred>, typename = _RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::uunnoorrddeerreedd__mmuullttiimmaapp (_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t< _p_a_i_r< _Key, _Tp > >, │ │ │ │ - unordered_multimap< int, int >_:_:_s_i_z_e___t_y_p_e={}, _Hash=_Hash(), _Pred=_Pred │ │ │ │ - (), _Allocator=_Allocator()) -> unordered_multimap< _Key, _Tp, _Hash, │ │ │ │ - _Pred, _Allocator > │ │ │ │ +template::value_type, typename _Allocator = │ │ │ │ +allocator<_ValT>, typename = _RequireInputIter<_InputIterator>, typename = │ │ │ │ +_RequireAllocator<_Allocator>> │ │ │ │ +   ssttdd::::ffoorrwwaarrdd__lliisstt (_InputIterator, │ │ │ │ + _InputIterator, _Allocator=_Allocator()) - │ │ │ │ + > forward_list< _ValT, _Allocator > │ │ │ │ +template │ │ │ │ +__detail::__synth3way_t< _Tp >  _s_t_d_:_:_o_p_e_r_a_t_o_r_<_=_> (const forward_list< _Tp, │ │ │ │ + _Alloc > &__x, const forward_list< _Tp, _Alloc │ │ │ │ + > &__y) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const forward_list< _Tp, │ │ │ │ + _Alloc > &__lx, const forward_list< _Tp, _Alloc │ │ │ │ + > &__ly) │ │ │ │ +template │ │ │ │ + void  _s_t_d_:_:_s_w_a_p (forward_list< _Tp, _Alloc > &__lx, │ │ │ │ + forward_list< _Tp, _Alloc > &__ly) noexcept │ │ │ │ + (noexcept(__lx.swap(__ly))) │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _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_9_2 of file _f_o_r_w_a_r_d___l_i_s_t_._h. │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00383.js │ │ │ ├── js-beautify {} │ │ │ │ @@ -1,4 +1,10 @@ │ │ │ │ var a00383 = [ │ │ │ │ - ["std::__umap_traits", "a01700.html#a858e438953c4498106d3b52bf4504862", null], │ │ │ │ - ["std::__ummap_traits", "a01700.html#a2d36f5176cc8aa4fca78e79b3e6a8cb6", null] │ │ │ │ + ["std::_Fwd_list_base< _Tp, _Alloc >", "a04684.html", null], │ │ │ │ + ["std::_Fwd_list_const_iterator< _Tp >", "a04680.html", "a04680"], │ │ │ │ + ["std::_Fwd_list_iterator< _Tp >", "a04676.html", "a04676"], │ │ │ │ + ["std::_Fwd_list_node< _Tp >", "a04672.html", null], │ │ │ │ + ["std::_Fwd_list_node_base", "a04668.html", null], │ │ │ │ + ["std::operator<=>", "a01700.html#af2fde05a4b1c8436bb83bd8921460639", null], │ │ │ │ + ["std::operator==", "a01700.html#ada41d3682184f0d0d8525907fdfcbea8", null], │ │ │ │ + ["std::swap", "a01700.html#aeb866eb47db586b6058b597e97d8b909", null] │ │ │ │ ]; │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00383_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: unordered_map.h Source File │ │ │ +libstdc++: forward_list.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,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
│ │ │ @@ -75,2646 +75,1751 @@ │ │ │
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>,
│ │ │ - │ │ │ - │ │ │ -
53 using __umap_hashtable = _Hashtable<_Key, std::pair<const _Key, _Tp>,
│ │ │ -
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>,
│ │ │ - │ │ │ - │ │ │ -
70 using __ummap_hashtable = _Hashtable<_Key, std::pair<const _Key, _Tp>,
│ │ │ -
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 {
│ │ │ -
111 typedef __umap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable;
│ │ │ -
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>
│ │ │ -
│ │ │ -
179 unordered_map(_InputIterator __first, _InputIterator __last,
│ │ │ -
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 */
│ │ │ -
207 unordered_map(const unordered_map& __umap,
│ │ │ -
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 */
│ │ │ -
217 unordered_map(unordered_map&& __umap,
│ │ │ -
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 */
│ │ │ +
│ │ │ +
55 struct _Fwd_list_node_base
│ │ │ +
56 {
│ │ │ +
57 _Fwd_list_node_base() = default;
│ │ │ +
58 _Fwd_list_node_base(_Fwd_list_node_base&& __x) noexcept
│ │ │ +
59 : _M_next(__x._M_next)
│ │ │ +
60 { __x._M_next = nullptr; }
│ │ │ +
61
│ │ │ +
62 _Fwd_list_node_base(const _Fwd_list_node_base&) = delete;
│ │ │ +
63 _Fwd_list_node_base& operator=(const _Fwd_list_node_base&) = delete;
│ │ │ +
64
│ │ │ +
65 _Fwd_list_node_base&
│ │ │ +
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
│ │ │ +
75 _Fwd_list_node_base*
│ │ │ +
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>
│ │ │ +
│ │ │ +
114 struct _Fwd_list_node
│ │ │ +
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>
│ │ │ +
│ │ │ +
136 struct _Fwd_list_iterator
│ │ │ +
137 {
│ │ │ +
138 typedef _Fwd_list_iterator<_Tp> _Self;
│ │ │ +
139 typedef _Fwd_list_node<_Tp> _Node;
│ │ │ +
140
│ │ │ +
141 typedef _Tp value_type;
│ │ │ +
142 typedef _Tp* pointer;
│ │ │ +
143 typedef _Tp& reference;
│ │ │ +
144 typedef ptrdiff_t difference_type;
│ │ │ +
145 typedef std::forward_iterator_tag iterator_category;
│ │ │ +
146
│ │ │ +
147 _Fwd_list_iterator() noexcept
│ │ │ +
148 : _M_node() { }
│ │ │ +
149
│ │ │ +
150 explicit
│ │ │ +
151 _Fwd_list_iterator(_Fwd_list_node_base* __n) noexcept
│ │ │ +
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>
│ │ │ +
│ │ │ +
215 struct _Fwd_list_const_iterator
│ │ │ +
216 {
│ │ │ +
217 typedef _Fwd_list_const_iterator<_Tp> _Self;
│ │ │ +
218 typedef const _Fwd_list_node<_Tp> _Node;
│ │ │ +
219 typedef _Fwd_list_iterator<_Tp> iterator;
│ │ │ +
220
│ │ │ +
221 typedef _Tp value_type;
│ │ │ +
222 typedef const _Tp* pointer;
│ │ │ +
223 typedef const _Tp& reference;
│ │ │ +
224 typedef ptrdiff_t difference_type;
│ │ │ +
225 typedef std::forward_iterator_tag iterator_category;
│ │ │ +
226
│ │ │ +
227 _Fwd_list_const_iterator() noexcept
│ │ │ +
228 : _M_node() { }
│ │ │ +
229
│ │ │ +
230 explicit
│ │ │ +
231 _Fwd_list_const_iterator(const _Fwd_list_node_base* __n) noexcept
│ │ │ +
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.
│ │ │ -
304 allocator_type
│ │ │ -
│ │ │ -
305 get_allocator() const 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
│ │ │ -
│ │ │ -
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>
│ │ │ +
│ │ │ +
296 struct _Fwd_list_base
│ │ │ +
297 {
│ │ │ +
298 protected:
│ │ │ +
299 typedef __alloc_rebind<_Alloc, _Fwd_list_node<_Tp>> _Node_alloc_type;
│ │ │ +
300 typedef __gnu_cxx::__alloc_traits<_Node_alloc_type> _Node_alloc_traits;
│ │ │ +
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 */
│ │ │ -
340 const_iterator
│ │ │ -
│ │ │ -
341 begin() const noexcept
│ │ │ -
342 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
343
│ │ │ -
344 const_iterator
│ │ │ -
│ │ │ -
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 */
│ │ │ -
362 const_iterator
│ │ │ -
│ │ │ -
363 end() const noexcept
│ │ │ -
364 { return _M_h.end(); }
│ │ │ -
│ │ │ -
365
│ │ │ -
366 const_iterator
│ │ │ -
│ │ │ -
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>
│ │ │ - │ │ │ -
│ │ │ -
395 emplace(_Args&&... __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>
│ │ │ - │ │ │ -
│ │ │ -
426 emplace_hint(const_iterator __pos, _Args&&... __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
│ │ │ -
432 extract(const_iterator __pos)
│ │ │ -
433 {
│ │ │ -
434 __glibcxx_assert(__pos != end());
│ │ │ -
435 return _M_h.extract(__pos);
│ │ │ -
436 }
│ │ │ -
437
│ │ │ -
438 /// Extract a node.
│ │ │ -
439 node_type
│ │ │ -
440 extract(const key_type& __key)
│ │ │ -
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.
│ │ │ - │ │ │ -
450 insert(const_iterator, node_type&& __nh)
│ │ │ -
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>
│ │ │ - │ │ │ -
479 try_emplace(const key_type& __k, _Args&&... __args)
│ │ │ -
480 {
│ │ │ -
481 return _M_h.try_emplace(cend(), __k, std::forward<_Args>(__args)...);
│ │ │ -
482 }
│ │ │ -
483
│ │ │ -
484 // move-capable overload
│ │ │ -
485 template <typename... _Args>
│ │ │ - │ │ │ -
487 try_emplace(key_type&& __k, _Args&&... __args)
│ │ │ -
488 {
│ │ │ -
489 return _M_h.try_emplace(cend(), std::move(__k),
│ │ │ -
490 std::forward<_Args>(__args)...);
│ │ │ -
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>
│ │ │ - │ │ │ -
523 try_emplace(const_iterator __hint, const key_type& __k,
│ │ │ -
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>
│ │ │ - │ │ │ -
533 try_emplace(const_iterator __hint, key_type&& __k, _Args&&... __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>
│ │ │ -
569 __enable_if_t<is_constructible<value_type, _Pair&&>::value,
│ │ │ - │ │ │ +
325 public:
│ │ │ +
326 typedef _Fwd_list_iterator<_Tp> iterator;
│ │ │ +
327 typedef _Fwd_list_const_iterator<_Tp> const_iterator;
│ │ │ +
328 typedef _Fwd_list_node<_Tp> _Node;
│ │ │ +
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
│ │ │ +
354 ~_Fwd_list_base()
│ │ │ +
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(),
│ │ │ +
375 std::forward<_Args>(__args)...);
│ │ │ +
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;
│ │ │ +
393 auto __ptr = std::pointer_traits<_Ptr>::pointer_to(*__p);
│ │ │ +
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:
│ │ │ +
444 typedef _Fwd_list_base<_Tp, _Alloc> _Base;
│ │ │ +
445 typedef _Fwd_list_node_base _Node_base;
│ │ │ +
446 typedef typename _Base::_Node _Node;
│ │ │ +
447 typedef typename _Base::_Node_alloc_type _Node_alloc_type;
│ │ │ +
448 typedef typename _Base::_Node_alloc_traits _Node_alloc_traits;
│ │ │ + │ │ │ +
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;
│ │ │ +
462 typedef std::ptrdiff_t difference_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
│ │ │ +
478 : _Base(_Node_alloc_type(__al))
│ │ │ +
479 { }
│ │ │ +
│ │ │ +
480
│ │ │ +
481 /**
│ │ │ +
482 * @brief Copy constructor with allocator argument.
│ │ │ +
483 * @param __list Input list to copy.
│ │ │ +
484 * @param __al An allocator object.
│ │ │ +
485 */
│ │ │ +
│ │ │ + │ │ │ +
487 const __type_identity_t<_Alloc>& __al)
│ │ │ +
488 : _Base(_Node_alloc_type(__al))
│ │ │ +
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 */
│ │ │ +
│ │ │ + │ │ │ +
516 const __type_identity_t<_Alloc>& __al)
│ │ │ +
517 noexcept(_Node_alloc_traits::_S_always_equal())
│ │ │ +
518 : forward_list(std::move(__list), _Node_alloc_type(__al),
│ │ │ +
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())
│ │ │ +
532 : _Base(_Node_alloc_type(__al))
│ │ │ +
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())
│ │ │ +
546 : _Base(_Node_alloc_type(__al))
│ │ │ +
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,
│ │ │ +
560 typename = std::_RequireInputIter<_InputIterator>>
│ │ │ +
│ │ │ +
561 forward_list(_InputIterator __first, _InputIterator __last,
│ │ │ +
562 const _Alloc& __al = _Alloc())
│ │ │ +
563 : _Base(_Node_alloc_type(__al))
│ │ │ +
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 */
│ │ │
│ │ │ -
571 insert(_Pair&& __x)
│ │ │ -
572 { return _M_h.emplace(std::forward<_Pair>(__x)); }
│ │ │ + │ │ │ +
572 : _Base(_Node_alloc_traits::_S_select_on_copy(
│ │ │ +
573 __list._M_get_Node_allocator()))
│ │ │ +
574 { _M_range_initialize(__list.begin(), __list.end()); }
│ │ │
│ │ │ -
573 ///@}
│ │ │ -
574
│ │ │ -
575 ///@{
│ │ │ +
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 */
│ │ │ - │ │ │ -
│ │ │ -
598 insert(const_iterator __hint, const value_type& __x)
│ │ │ -
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>
│ │ │ -
608 __enable_if_t<is_constructible<value_type, _Pair&&>::value, iterator>
│ │ │ -
│ │ │ -
609 insert(const_iterator __hint, _Pair&& __x)
│ │ │ -
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 insert(_InputIterator __first, _InputIterator __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<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>
│ │ │ - │ │ │ -
662 insert_or_assign(const key_type& __k, _Obj&& __obj)
│ │ │ -
663 {
│ │ │ -
664 auto __ret = _M_h.try_emplace(cend(), __k,
│ │ │ -
665 std::forward<_Obj>(__obj));
│ │ │ -
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>
│ │ │ - │ │ │ -
674 insert_or_assign(key_type&& __k, _Obj&& __obj)
│ │ │ -
675 {
│ │ │ -
676 auto __ret = _M_h.try_emplace(cend(), std::move(__k),
│ │ │ -
677 std::forward<_Obj>(__obj));
│ │ │ -
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>
│ │ │ - │ │ │ -
711 insert_or_assign(const_iterator __hint, const key_type& __k,
│ │ │ -
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>
│ │ │ - │ │ │ -
723 insert_or_assign(const_iterator __hint, key_type&& __k, _Obj&& __obj)
│ │ │ -
724 {
│ │ │ -
725 auto __ret = _M_h.try_emplace(__hint, std::move(__k),
│ │ │ -
726 std::forward<_Obj>(__obj));
│ │ │ -
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.
│ │ │ - │ │ │ -
│ │ │ -
753 erase(iterator __position)
│ │ │ -
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
│ │ │ +
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())
│ │ │ +
597 : _Base(_Node_alloc_type(__al))
│ │ │ +
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 */
│ │ │ + │ │ │ +
616 operator=(const forward_list& __list);
│ │ │ +
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();
│ │ │ +
637 _M_move_assign(std::move(__list), __bool_constant<__move_storage>());
│ │ │ +
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,
│ │ │ +
669 typename = std::_RequireInputIter<_InputIterator>>
│ │ │ +
670 void
│ │ │ +
│ │ │ +
671 assign(_InputIterator __first, _InputIterator __last)
│ │ │ +
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
│ │ │ +
│ │ │ +
705 get_allocator() const 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 [[__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
│ │ │ +
│ │ │ +
726 before_begin() const noexcept
│ │ │ +
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
│ │ │ +
│ │ │ +
785 cbefore_begin() const noexcept
│ │ │ +
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__]]
│ │ │ + │ │ │
│ │ │ - │ │ │ -
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 {
│ │ │ -
824 using _Merge_helper = _Hash_merge_helper<unordered_map, _H2, _P2>;
│ │ │ -
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
│ │ │ +
│ │ │ +
862 emplace_front(_Args&&... __args)
│ │ │ +
863 {
│ │ │ +
864 this->_M_insert_after(cbefore_begin(),
│ │ │ +
865 std::forward<_Args>(__args)...);
│ │ │ +
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
│ │ │ -
886 const_iterator
│ │ │ -
│ │ │ -
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 */
│ │ │ - │ │ │ -
│ │ │ -
1004 at(const key_type& __k)
│ │ │ -
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
│ │ │ -
│ │ │ -
1016 bucket_count() const noexcept
│ │ │ -
1017 { return _M_h.bucket_count(); }
│ │ │ -
│ │ │ -
1018
│ │ │ -
1019 /// Returns the maximum number of buckets of the %unordered_map.
│ │ │ -
1020 size_type
│ │ │ -
│ │ │ -
1021 max_bucket_count() const 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 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>
│ │ │ + │ │ │ +
│ │ │ +
923 emplace_after(const_iterator __pos, _Args&&... __args)
│ │ │ +
924 { return iterator(this->_M_insert_after(__pos,
│ │ │ +
925 std::forward<_Args>(__args)...)); }
│ │ │ +
│ │ │ +
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 */
│ │ │ + │ │ │ +
│ │ │ +
940 insert_after(const_iterator __pos, const _Tp& __val)
│ │ │ +
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,
│ │ │ +
984 typename = std::_RequireInputIter<_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
│ │ │ +
│ │ │ +
1005 insert_after(const_iterator __pos, std::initializer_list<_Tp> __il)
│ │ │ +
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
│ │ │ +
│ │ │ +
1026 erase_after(const_iterator __pos)
│ │ │ +
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
│ │ │ -
│ │ │ -
1098 load_factor() const 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
│ │ │ -
│ │ │ -
1104 max_load_factor() const 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
│ │ │ -
│ │ │ - │ │ │ -
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); }
│ │ │ +
1049 erase_after(const_iterator __pos, const_iterator __last)
│ │ │ +
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
│ │ │ +
│ │ │ +
1068 swap(forward_list& __list) noexcept
│ │ │ +
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
│ │ │ +
│ │ │ +
1131 splice_after(const_iterator __pos, forward_list&& __list) noexcept
│ │ │ +
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,
│ │ │ -
1155 typename unordered_map<int, int>::size_type = {},
│ │ │ -
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>>
│ │ │ - │ │ │ - │ │ │ -
1169 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _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)
│ │ │ - │ │ │ -
1178 __iter_val_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)
│ │ │ - │ │ │ -
1188 __iter_val_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)
│ │ │ - │ │ │ -
1201 __iter_val_t<_InputIterator>, _Hash,
│ │ │ - │ │ │ -
1203
│ │ │ -
1204 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ -
1205 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ -
1208 _Allocator)
│ │ │ - │ │ │ -
1210
│ │ │ -
1211 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ -
1212 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ -
1215
│ │ │ -
1216 template<typename _Key, typename _Tp, typename _Hash, typename _Allocator,
│ │ │ -
1217 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
1218 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ -
1221 _Hash, _Allocator)
│ │ │ - │ │ │ -
1223
│ │ │ -
1224#endif
│ │ │ +
1137 void
│ │ │ +
1138 splice_after(const_iterator __pos, forward_list& __list) noexcept
│ │ │ +
1139 { splice_after(__pos, std::move(__list)); }
│ │ │ +
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
│ │ │ +
│ │ │ +
1175 splice_after(const_iterator __pos, forward_list&&,
│ │ │ +
1176 const_iterator __before, const_iterator __last) noexcept
│ │ │ +
1177 { _M_splice_after(__pos, __before, __last); }
│ │ │ +
│ │ │ +
1178
│ │ │ +
1179 void
│ │ │ +
│ │ │ +
1180 splice_after(const_iterator __pos, forward_list&,
│ │ │ +
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
│ │ │ +
1224 remove_if(_Pred __pred);
│ │ │
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 {
│ │ │ -
1257 typedef __ummap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable;
│ │ │ -
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
│ │ │ +
1257 unique(_BinPred __binary_pred);
│ │ │ +
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
│ │ │ +
│ │ │ + │ │ │ +
1270 { merge(std::move(__list), std::less<_Tp>()); }
│ │ │ +
│ │ │ +
1271
│ │ │ +
1272 void
│ │ │ +
1273 merge(forward_list& __list)
│ │ │ +
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>
│ │ │ -
│ │ │ -
1324 unordered_multimap(_InputIterator __first, _InputIterator __last,
│ │ │ -
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 */
│ │ │ -
1362 unordered_multimap(unordered_multimap&& __ummap,
│ │ │ -
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
│ │ │ -
1387 unordered_multimap(size_type __n, const allocator_type& __a)
│ │ │ -
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.
│ │ │ -
1449 allocator_type
│ │ │ -
│ │ │ -
1450 get_allocator() const 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
│ │ │ +
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
│ │ │ + │ │ │ +
1437 typename _Allocator = allocator<_ValT>,
│ │ │ +
1438 typename = _RequireInputIter<_InputIterator>,
│ │ │ +
1439 typename = _RequireAllocator<_Allocator>>
│ │ │ +
1440 forward_list(_InputIterator, _InputIterator, _Allocator = _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 */
│ │ │ -
1485 const_iterator
│ │ │ -
│ │ │ -
1486 begin() const noexcept
│ │ │ -
1487 { return _M_h.begin(); }
│ │ │ -
│ │ │ -
1488
│ │ │ -
1489 const_iterator
│ │ │ -
│ │ │ -
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 */
│ │ │ -
1507 const_iterator
│ │ │ -
│ │ │ -
1508 end() const noexcept
│ │ │ -
1509 { return _M_h.end(); }
│ │ │ -
│ │ │ -
1510
│ │ │ -
1511 const_iterator
│ │ │ -
│ │ │ -
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
│ │ │ -
│ │ │ -
1535 emplace(_Args&&... __args)
│ │ │ -
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
│ │ │ -
│ │ │ -
1562 emplace_hint(const_iterator __pos, _Args&&... __args)
│ │ │ -
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>
│ │ │ -
1584 __enable_if_t<is_constructible<value_type, _Pair&&>::value, iterator>
│ │ │ -
│ │ │ -
1585 insert(_Pair&& __x)
│ │ │ -
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>
│ │ │ -
1620 __enable_if_t<is_constructible<value_type, _Pair&&>::value, iterator>
│ │ │ -
│ │ │ -
1621 insert(const_iterator __hint, _Pair&& __x)
│ │ │ -
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
│ │ │ -
│ │ │ -
1636 insert(_InputIterator __first, _InputIterator __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<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
│ │ │ -
1654 extract(const_iterator __pos)
│ │ │ -
1655 {
│ │ │ -
1656 __glibcxx_assert(__pos != end());
│ │ │ -
1657 return _M_h.extract(__pos);
│ │ │ -
1658 }
│ │ │ -
1659
│ │ │ -
1660 /// Extract a node.
│ │ │ -
1661 node_type
│ │ │ -
1662 extract(const key_type& __key)
│ │ │ -
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
│ │ │ -
1672 insert(const_iterator __hint, node_type&& __nh)
│ │ │ -
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
│ │ │ -
│ │ │ -
1696 erase(iterator __position)
│ │ │ -
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
│ │ │ -
1768 = _Hash_merge_helper<unordered_multimap, _H2, _P2>;
│ │ │ -
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
│ │ │ -
1831 const_iterator
│ │ │ -
│ │ │ -
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
│ │ │ -
│ │ │ -
1916 bucket_count() const noexcept
│ │ │ -
1917 { return _M_h.bucket_count(); }
│ │ │ -
│ │ │ -
1918
│ │ │ -
1919 /// Returns the maximum number of buckets of the %unordered_multimap.
│ │ │ -
1920 size_type
│ │ │ -
│ │ │ -
1921 max_bucket_count() const 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 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
│ │ │ -
│ │ │ -
1998 load_factor() const 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
│ │ │ -
│ │ │ -
2004 max_load_factor() const 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
│ │ │ -
│ │ │ - │ │ │ -
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>&,
│ │ │ -
2042 const unordered_multimap<_Key1, _Tp1,
│ │ │ -
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,
│ │ │ -
2057 unordered_multimap<int, int>::size_type = {},
│ │ │ -
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>>
│ │ │ - │ │ │ - │ │ │ -
2072 _Hash = _Hash(), _Pred = _Pred(),
│ │ │ -
2073 _Allocator = _Allocator())
│ │ │ - │ │ │ -
2075
│ │ │ -
2076 template<typename _InputIterator, typename _Allocator,
│ │ │ -
2077 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
2078 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2079 unordered_multimap(_InputIterator, _InputIterator,
│ │ │ - │ │ │ - │ │ │ -
2082 __iter_val_t<_InputIterator>,
│ │ │ - │ │ │ - │ │ │ -
2085
│ │ │ -
2086 template<typename _InputIterator, typename _Allocator,
│ │ │ -
2087 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
2088 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2089 unordered_multimap(_InputIterator, _InputIterator, _Allocator)
│ │ │ - │ │ │ -
2091 __iter_val_t<_InputIterator>,
│ │ │ - │ │ │ - │ │ │ -
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)
│ │ │ - │ │ │ -
2103 __iter_val_t<_InputIterator>, _Hash,
│ │ │ - │ │ │ -
2105
│ │ │ -
2106 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ -
2107 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ -
2110 _Allocator)
│ │ │ - │ │ │ -
2112
│ │ │ -
2113 template<typename _Key, typename _Tp, typename _Allocator,
│ │ │ -
2114 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ -
2117
│ │ │ -
2118 template<typename _Key, typename _Tp, typename _Hash, typename _Allocator,
│ │ │ -
2119 typename = _RequireNotAllocatorOrIntegral<_Hash>,
│ │ │ -
2120 typename = _RequireAllocator<_Allocator>>
│ │ │ - │ │ │ - │ │ │ -
2123 _Hash, _Allocator)
│ │ │ - │ │ │ -
2125
│ │ │ -
2126#endif
│ │ │ -
2127
│ │ │ -
2128 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2129 inline void
│ │ │ - │ │ │ - │ │ │ -
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
│ │ │ - │ │ │ - │ │ │ -
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
│ │ │ - │ │ │ - │ │ │ -
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
│ │ │ - │ │ │ - │ │ │ -
2153 { return !(__x == __y); }
│ │ │ -
2154#endif
│ │ │ -
2155
│ │ │ -
2156 template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
│ │ │ -
2157 inline bool
│ │ │ - │ │ │ - │ │ │ -
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
│ │ │ - │ │ │ - │ │ │ -
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 */
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
pair(_T1, _T2) -> pair< _T1, _T2 >
Two pairs of the same type are equal iff their members are equal.
│ │ │ -
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
Definition move.h:137
│ │ │ -
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:71
│ │ │ +
1457 operator==(const forward_list<_Tp, _Alloc>& __lx,
│ │ │ +
1458 const forward_list<_Tp, _Alloc>& __ly);
│ │ │ +
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 {
│ │ │ + │ │ │ +
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
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
__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 && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
Definition move.h:71
│ │ │ +
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.
│ │ │
initializer_list
│ │ │ -
Primary class template hash.
│ │ │ - │ │ │ -
The standard allocator, as per C++03 [20.4.1].
Definition allocator.h:129
│ │ │ -
One of the comparison functors.
│ │ │ -
Struct holding two objects of arbitrary type.
Definition stl_pair.h:286
│ │ │ -
_T1 first
The first member.
Definition stl_pair.h:290
│ │ │ -
Common iterator class.
│ │ │ -
A standard container composed of equivalent keys (possibly containing multiple of each key value) tha...
│ │ │ -
float load_factor() const noexcept
Returns the average number of elements per bucket.
│ │ │ - │ │ │ -
iterator erase(iterator __position)
Erases an element from an unordered_multimap.
│ │ │ -
const_iterator end() const noexcept
│ │ │ -
size_type erase(const key_type &__x)
Erases elements according to the provided key.
│ │ │ -
std::pair< iterator, iterator > equal_range(const key_type &__x)
Finds a subsequence matching given key.
│ │ │ -
size_type bucket_count() const noexcept
Returns the number of buckets of the unordered_multimap.
│ │ │ - │ │ │ -
size_type max_bucket_count() const noexcept
Returns the maximum number of buckets of the unordered_multimap.
│ │ │ -
iterator begin() noexcept
│ │ │ -
const_iterator begin() const noexcept
│ │ │ -
hasher hash_function() const
Returns the hash functor object with which the unordered_multimap was constructed.
│ │ │ -
__enable_if_t< is_constructible< value_type, _Pair && >::value, iterator > insert(const_iterator __hint, _Pair &&__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ -
unordered_multimap & operator=(const unordered_multimap &)=default
Copy assignment operator.
│ │ │ -
key_equal key_eq() const
Returns the key comparison object with which the unordered_multimap was constructed.
│ │ │ -
size_type count(const key_type &__x) const
Finds the number of elements.
│ │ │ -
const_iterator find(const key_type &__x) const
Tries to locate an element in an unordered_multimap.
│ │ │ - │ │ │ -
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.
│ │ │ - │ │ │ -
iterator emplace(_Args &&... __args)
Attempts to build and insert a std::pair into the unordered_multimap.
│ │ │ -
bool contains(const key_type &__x) const
Finds whether an element with the given key exists.
│ │ │ - │ │ │ -
iterator erase(const_iterator __position)
Erases an element from an unordered_multimap.
│ │ │ -
iterator end() noexcept
│ │ │ -
local_iterator begin(size_type __n)
Returns a read/write iterator pointing to the first bucket element.
│ │ │ -
float max_load_factor() const noexcept
Returns a positive number that the unordered_multimap tries to keep the load factor less than or equa...
│ │ │ -
unordered_multimap()=default
Default constructor.
│ │ │ -
iterator insert(value_type &&__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ -
iterator insert(const value_type &__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ -
unordered_multimap & operator=(unordered_multimap &&)=default
Move assignment operator.
│ │ │ - │ │ │ - │ │ │ -
void reserve(size_type __n)
Prepare the unordered_multimap for a specified number of elements.
│ │ │ -
std::pair< const_iterator, const_iterator > equal_range(const key_type &__x) const
Finds a subsequence matching given key.
│ │ │ -
unordered_multimap(_InputIterator __first, _InputIterator __last, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_multimap from a range.
│ │ │ - │ │ │ -
iterator find(const key_type &__x)
Tries to locate an element in an unordered_multimap.
│ │ │ -
unordered_multimap(initializer_list< value_type > __l, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_multimap from an initializer_list.
│ │ │ -
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.
│ │ │ - │ │ │ - │ │ │ -
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.
│ │ │ - │ │ │ -
unordered_multimap(unordered_multimap &&)=default
Move constructor.
│ │ │ -
unordered_multimap(const allocator_type &__a)
Creates an unordered_multimap with no elements.
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
__enable_if_t< is_constructible< value_type, _Pair && >::value, iterator > insert(_Pair &&__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ -
auto contains(const _Kt &__x) const -> decltype(_M_h._M_find_tr(__x), void(), true)
Finds whether an element with the given key exists.
│ │ │ -
void swap(unordered_multimap &__x) noexcept(noexcept(_M_h.swap(__x._M_h)))
Swaps data with another unordered_multimap.
│ │ │ -
void rehash(size_type __n)
May rehash the unordered_multimap.
│ │ │ - │ │ │ -
void insert(initializer_list< value_type > __l)
Attempts to insert a list of elements into the unordered_multimap.
│ │ │ -
const_iterator cend() const noexcept
│ │ │ -
size_type max_size() const noexcept
Returns the maximum size of the unordered_multimap.
│ │ │ -
const_local_iterator cbegin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ -
bool empty() const noexcept
Returns true if the unordered_multimap is empty.
│ │ │ -
const_iterator cbegin() const noexcept
│ │ │ - │ │ │ -
const_local_iterator cend(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ -
iterator insert(const_iterator __hint, const value_type &__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ -
size_type size() const noexcept
Returns the size of the unordered_multimap.
│ │ │ -
unordered_multimap(const unordered_multimap &)=default
Copy constructor.
│ │ │ -
iterator emplace_hint(const_iterator __pos, _Args &&... __args)
Attempts to build and insert a std::pair into the unordered_multimap.
│ │ │ -
iterator insert(const_iterator __hint, value_type &&__x)
Inserts a std::pair into the unordered_multimap.
│ │ │ -
auto equal_range(const _Kt &__x) -> decltype(_M_h._M_equal_range_tr(__x))
Finds a subsequence matching given key.
│ │ │ - │ │ │ -
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.
│ │ │ - │ │ │ -
void max_load_factor(float __z)
Change the unordered_map maximum load factor.
│ │ │ -
const mapped_type & at(const key_type &__k) const
Access to unordered_map data.
│ │ │ -
bool contains(const key_type &__x) const
Finds whether an element with the given key exists.
│ │ │ -
void insert(_InputIterator __first, _InputIterator __last)
A template function that attempts to insert a range of elements.
│ │ │ -
allocator_type get_allocator() const noexcept
Returns the allocator object used by the unordered_map.
│ │ │ -
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.
│ │ │ - │ │ │ -
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.
│ │ │ -
std::pair< iterator, bool > insert(const value_type &__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ -
void reserve(size_type __n)
Prepare the unordered_map for a specified number of elements.
│ │ │ -
const_local_iterator cbegin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ -
std::pair< const_iterator, const_iterator > equal_range(const key_type &__x) const
Finds a subsequence matching given key.
│ │ │ - │ │ │ -
iterator insert(const_iterator __hint, const value_type &__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ -
iterator end() noexcept
│ │ │ - │ │ │ -
unordered_map(const unordered_map &)=default
Copy constructor.
│ │ │ -
size_type count(const key_type &__x) const
Finds the number of elements.
│ │ │ -
bool empty() const noexcept
Returns true if the unordered_map is empty.
│ │ │ -
size_type erase(const key_type &__x)
Erases elements according to the provided key.
│ │ │ -
const_iterator find(const key_type &__x) const
Tries to locate an element in an unordered_map.
│ │ │ -
unordered_map(unordered_map &&)=default
Move constructor.
│ │ │ -
const_local_iterator end(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ -
auto 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.
│ │ │ - │ │ │ -
unordered_map & operator=(unordered_map &&)=default
Move assignment operator.
│ │ │ -
const_local_iterator begin(size_type __n) const
Returns a read-only (constant) iterator pointing to the first bucket element.
│ │ │ -
unordered_map(size_type __n, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Default constructor creates no elements.
│ │ │ -
std::pair< iterator, bool > emplace(_Args &&... __args)
Attempts to build and insert a std::pair into the unordered_map.
│ │ │ -
const_local_iterator cend(size_type __n) const
Returns a read-only (constant) iterator pointing to one past the last bucket elements.
│ │ │ -
size_type size() const noexcept
Returns the size of the unordered_map.
│ │ │ -
__enable_if_t< is_constructible< value_type, _Pair && >::value, pair< iterator, bool > > insert(_Pair &&__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ -
mapped_type & operator[](key_type &&__k)
Subscript ( [] ) access to unordered_map data.
│ │ │ -
std::pair< iterator, bool > insert(value_type &&__x)
Attempts to insert a std::pair into the unordered_map.
│ │ │ - │ │ │ -
unordered_map(_InputIterator __first, _InputIterator __last, size_type __n=0, const hasher &__hf=hasher(), const key_equal &__eql=key_equal(), const allocator_type &__a=allocator_type())
Builds an unordered_map from a range.
│ │ │ -
void clear() noexcept
│ │ │ -
mapped_type & operator[](const key_type &__k)
Subscript ( [] ) access to unordered_map data.
│ │ │ -
const_iterator begin() const noexcept
│ │ │ -
key_equal key_eq() const
Returns the key comparison object with which the unordered_map was constructed.
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
iterator erase(iterator __position)
Erases an element from an unordered_map.
│ │ │ -
const_iterator cend() const noexcept
│ │ │ -
local_iterator end(size_type __n)
Returns a read/write iterator pointing to one past the last bucket elements.
│ │ │ - │ │ │ -
unordered_map(const allocator_type &__a)
Creates an unordered_map with no elements.
│ │ │ - │ │ │ -
size_type bucket_count() const noexcept
Returns the number of buckets of the unordered_map.
│ │ │ -
iterator begin() noexcept
│ │ │ -
hasher hash_function() const
Returns the hash functor object with which the unordered_map was constructed.
│ │ │ -
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.
│ │ │ - │ │ │ - │ │ │ -
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.
│ │ │ - │ │ │ -
auto count(const _Kt &__x) const -> decltype(_M_h._M_count_tr(__x))
Finds the number of elements.
│ │ │ - │ │ │ -
size_type max_bucket_count() const noexcept
Returns the maximum number of buckets of the unordered_map.
│ │ │ -
iterator emplace_hint(const_iterator __pos, _Args &&... __args)
Attempts to build and insert a std::pair into the unordered_map.
│ │ │ - │ │ │ -
void rehash(size_type __n)
May rehash the unordered_map.
│ │ │ -
const_iterator cbegin() const noexcept
│ │ │ - │ │ │ + │ │ │ +
is_nothrow_default_constructible
Definition type_traits:1193
│ │ │ +
is_assignable
Definition type_traits:1225
│ │ │ +
is_copy_assignable
Definition type_traits:1235
│ │ │ +
Uniform interface to all allocator types.
│ │ │ +
__detected_or_t< value_type *, __pointer, _Alloc > pointer
│ │ │ +
typename _Ptr< __c_pointer, const value_type >::type const_pointer
│ │ │ +
The standard allocator, as per C++03 [20.4.1].
Definition allocator.h:129
│ │ │ + │ │ │ +
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.
│ │ │ +
A standard container with linear time access to elements, and fixed time insertion/deletion at any po...
│ │ │ +
iterator insert_after(const_iterator __pos, _InputIterator __first, _InputIterator __last)
Inserts a range into the forward_list.
│ │ │ +
__remove_return_type unique(_BinPred __binary_pred)
Remove consecutive elements satisfying a predicate.
│ │ │ +
void merge(forward_list &&__list, _Comp __comp)
Merge sorted lists according to comparison function.
│ │ │ +
iterator begin() noexcept
│ │ │ +
const_iterator before_begin() const noexcept
│ │ │ +
void reverse() noexcept
Reverse the elements in list.
│ │ │ +
forward_list()=default
Creates a forward_list with no elements.
│ │ │ +
~forward_list() noexcept
The forward_list dtor.
│ │ │ +
iterator erase_after(const_iterator __pos)
Removes the element pointed to by the iterator following pos.
│ │ │ +
void swap(forward_list &__list) noexcept
Swaps data with another forward_list.
│ │ │ +
void sort(_Comp __comp)
Sort the forward_list using a comparison function.
│ │ │ +
const_reference front() const
│ │ │ +
void merge(forward_list &&__list)
Merge sorted lists.
│ │ │ +
forward_list(const _Alloc &__al) noexcept
Creates a forward_list with no elements.
│ │ │ +
iterator insert_after(const_iterator __pos, size_type __n, const _Tp &__val)
Inserts a number of copies of given data into the forward_list.
│ │ │ +
__remove_return_type remove(const _Tp &__val)
Remove all elements equal to value.
│ │ │ +
void sort()
Sort the elements of the list.
│ │ │ +
iterator before_begin() noexcept
│ │ │ +
forward_list(const forward_list &__list, const __type_identity_t< _Alloc > &__al)
Copy constructor with allocator argument.
│ │ │ +
iterator emplace_after(const_iterator __pos, _Args &&... __args)
Constructs object in forward_list after the specified iterator.
│ │ │ +
forward_list(const forward_list &__list)
The forward_list copy constructor.
│ │ │ +
iterator insert_after(const_iterator __pos, const _Tp &__val)
Inserts given value into forward_list after specified iterator.
│ │ │ +
forward_list & operator=(forward_list &&__list) noexcept(_Node_alloc_traits::_S_nothrow_move())
The forward_list move assignment operator.
│ │ │ +
void resize(size_type __sz)
Resizes the forward_list to the specified number of elements.
│ │ │ +
forward_list & operator=(const forward_list &__list)
The forward_list assignment operator.
│ │ │ +
__remove_return_type remove_if(_Pred __pred)
Remove all elements satisfying a predicate.
│ │ │ +
iterator end() noexcept
│ │ │ +
forward_list(size_type __n, const _Tp &__value, const _Alloc &__al=_Alloc())
Creates a forward_list with copies of an exemplar element.
│ │ │ +
void assign(size_type __n, const _Tp &__val)
Assigns a given value to a forward_list.
│ │ │ +
const_iterator begin() const noexcept
│ │ │ +
void splice_after(const_iterator __pos, forward_list &&__list) noexcept
Insert contents of another forward_list.
│ │ │ +
const_iterator cbefore_begin() const noexcept
│ │ │ +
forward_list & operator=(std::initializer_list< _Tp > __il)
The forward_list initializer list assignment operator.
│ │ │ +
forward_list(std::initializer_list< _Tp > __il, const _Alloc &__al=_Alloc())
Builds a forward_list from an initializer_list.
│ │ │ +
reference emplace_front(_Args &&... __args)
Constructs object in forward_list at the front of the list.
│ │ │ +
forward_list(size_type __n, const _Alloc &__al=_Alloc())
Creates a forward_list with default constructed elements.
│ │ │ +
iterator insert_after(const_iterator __pos, std::initializer_list< _Tp > __il)
Inserts 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.
│ │ │ +
void splice_after(const_iterator __pos, forward_list &&__list, const_iterator __i) noexcept
Insert element from another forward_list.
│ │ │ +
iterator erase_after(const_iterator __pos, const_iterator __last)
Remove a range of elements.
│ │ │ +
__remove_return_type unique()
Remove consecutive duplicate elements.
│ │ │ +
void clear() noexcept
Erases all the elements.
│ │ │ +
const_iterator cend() const noexcept
│ │ │ +
void assign(_InputIterator __first, _InputIterator __last)
Assigns a range to a forward_list.
│ │ │ +
bool empty() const noexcept
│ │ │ +
allocator_type get_allocator() const noexcept
Get a copy of the memory allocation object.
│ │ │ +
void resize(size_type __sz, const value_type &__val)
Resizes the forward_list to the specified number of elements.
│ │ │ +
void push_front(const _Tp &__val)
Add data to the front of the forward_list.
│ │ │ +
forward_list(forward_list &&)=default
The forward_list move constructor.
│ │ │ +
forward_list(_InputIterator __first, _InputIterator __last, const _Alloc &__al=_Alloc())
Builds a forward_list from a range.
│ │ │ +
void splice_after(const_iterator __pos, forward_list &, const_iterator __before, const_iterator __last) noexcept
Insert range from another forward_list.
│ │ │ +
const_iterator cbegin() const noexcept
│ │ │ +
void pop_front()
Removes first element.
│ │ │ +
void assign(std::initializer_list< _Tp > __il)
Assigns an initializer_list to a forward_list.
│ │ │ +
size_type max_size() const noexcept
│ │ │ +
One of the comparison functors.
│ │ │ +
One of the comparison functors.
│ │ │ +
Forward iterators support a superset of input iterator operations.
│ │ │ +
Common iterator class.
│ │ │ +
Uniform interface to C++98 and C++11 allocators.
│ │ │ +
static constexpr pointer allocate(_Node_alloc_type &__a, size_type __n)
│ │ │ +
static constexpr void deallocate(_Node_alloc_type &__a, pointer __p, size_type __n)
│ │ │ +
static constexpr size_type max_size(const _Node_alloc_type &__a) noexcept
│ │ │ + │ │ │ + │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── 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,2924 +21,1867 @@ │ │ │ │ 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 _Pred = _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 _Tr = _____u_m_a_p___t_r_a_i_t_s_<_____c_a_c_h_e___d_e_f_a_u_l_t_<___K_e_y_,_ ___H_a_s_h_>_:_:_v_a_l_u_e>> │ │ │ │ -53 using __umap_hashtable = _Hashtable<_Key, std::pair, │ │ │ │ -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 │ │ │ │ -_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 _Pred = _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 _Tr = _____u_m_m_a_p___t_r_a_i_t_s_<_____c_a_c_h_e___d_e_f_a_u_l_t_<___K_e_y_,_ ___H_a_s_h_>_:_:_v_a_l_u_e>> │ │ │ │ -70 using __ummap_hashtable = _Hashtable<_Key, std::pair, │ │ │ │ -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 │ │ │ │ -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 _Pred = _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 __umap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable; │ │ │ │ -112 _Hashtable _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 _Fwd_list_node_base │ │ │ │ +56 { │ │ │ │ +57 _Fwd_list_node_base() = default; │ │ │ │ +58 _Fwd_list_node_base(_Fwd_list_node_base&& __x) noexcept │ │ │ │ +59 : _M_next(__x._M_next) │ │ │ │ +60 { __x._M_next = nullptr; } │ │ │ │ +61 │ │ │ │ +62 _Fwd_list_node_base(const _Fwd_list_node_base&) = delete; │ │ │ │ +63 _Fwd_list_node_base& operator=(const _Fwd_list_node_base&) = delete; │ │ │ │ +64 │ │ │ │ +65 _Fwd_list_node_base& │ │ │ │ +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 │ │ │ │ +75 _Fwd_list_node_base* │ │ │ │ +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 │ │ │ │ +_1_1_4 struct _Fwd_list_node │ │ │ │ +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 │ │ │ │ +_1_3_6 struct _Fwd_list_iterator │ │ │ │ +137 { │ │ │ │ +138 typedef _Fwd_list_iterator<_Tp> _Self; │ │ │ │ +139 typedef ___F_w_d___l_i_s_t___n_o_d_e_<___T_p_> _Node; │ │ │ │ +140 │ │ │ │ +141 typedef _Tp value_type; │ │ │ │ +142 typedef _Tp* pointer; │ │ │ │ +143 typedef _Tp& reference; │ │ │ │ +144 typedef ptrdiff_t difference_type; │ │ │ │ +145 typedef _s_t_d_:_:_f_o_r_w_a_r_d___i_t_e_r_a_t_o_r___t_a_g iterator_category; │ │ │ │ 146 │ │ │ │ -147 /// Default constructor. │ │ │ │ -_1_4_8 _u_n_o_r_d_e_r_e_d___m_a_p() = default; │ │ │ │ +147 _Fwd_list_iterator() 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& __hf = _h_a_s_h_e_r(), │ │ │ │ -160 const _k_e_y___e_q_u_a_l& __eql = _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, __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 │ │ │ │ -_1_7_9 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ -180 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -181 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -182 const _k_e_y___e_q_u_a_l& __eql = _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, __hf, __eql, __a) │ │ │ │ -185 { } │ │ │ │ +150 explicit │ │ │ │ +151 _Fwd_list_iterator(___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* __n) noexcept │ │ │ │ +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 │ │ │ │ +_1_8_4 _o_p_e_r_a_t_o_r_=_=(const _Self& __x, const _Self& __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& __umap, │ │ │ │ -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 */ │ │ │ │ -217 _u_n_o_r_d_e_r_e_d___m_a_p(unordered_map&& __umap, │ │ │ │ -218 const allocator_type& __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& __hf = _h_a_s_h_e_r(), │ │ │ │ -237 const _k_e_y___e_q_u_a_l& __eql = _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, __hf, __eql, __a) │ │ │ │ -240 { } │ │ │ │ +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 │ │ │ │ +_2_1_5 struct _Fwd_list_const_iterator │ │ │ │ +216 { │ │ │ │ +217 typedef _Fwd_list_const_iterator<_Tp> _Self; │ │ │ │ +218 typedef const ___F_w_d___l_i_s_t___n_o_d_e_<___T_p_> _Node; │ │ │ │ +219 typedef ___F_w_d___l_i_s_t___i_t_e_r_a_t_o_r_<___T_p_> iterator; │ │ │ │ +220 │ │ │ │ +221 typedef _Tp value_type; │ │ │ │ +222 typedef const _Tp* pointer; │ │ │ │ +223 typedef const _Tp& reference; │ │ │ │ +224 typedef ptrdiff_t difference_type; │ │ │ │ +225 typedef _s_t_d_:_:_f_o_r_w_a_r_d___i_t_e_r_a_t_o_r___t_a_g iterator_category; │ │ │ │ +226 │ │ │ │ +227 _Fwd_list_const_iterator() noexcept │ │ │ │ +228 : _M_node() { } │ │ │ │ +229 │ │ │ │ +230 explicit │ │ │ │ +231 _Fwd_list_const_iterator(const ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* __n) noexcept │ │ │ │ +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 _u_n_o_r_d_e_r_e_d___m_a_p(_s_i_z_e___t_y_p_e __n, const allocator_type& __a) │ │ │ │ -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(size_type __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -247 const allocator_type& __a) │ │ │ │ -248 : unordered_map(__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 allocator_type │ │ │ │ -_3_0_5 _g_e_t___a_l_l_o_c_a_t_o_r() const 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() const 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() const 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() 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 │ │ │ │ +_2_6_7 _o_p_e_r_a_t_o_r_=_=(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 │ │ │ │ +_2_9_6 struct _Fwd_list_base │ │ │ │ +297 { │ │ │ │ +298 protected: │ │ │ │ +299 typedef __alloc_rebind<_Alloc, _Fwd_list_node<_Tp>> _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_> _Node_alloc_traits; │ │ │ │ +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&& __fl, _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(__fl._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 const_iterator │ │ │ │ -_3_4_1 _b_e_g_i_n() const noexcept │ │ │ │ -342 { return _M_h.begin(); } │ │ │ │ -343 │ │ │ │ -344 const_iterator │ │ │ │ -_3_4_5 _c_b_e_g_i_n() const 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_> iterator; │ │ │ │ +327 typedef ___F_w_d___l_i_s_t___c_o_n_s_t___i_t_e_r_a_t_o_r_<___T_p_> const_iterator; │ │ │ │ +328 typedef ___F_w_d___l_i_s_t___n_o_d_e_<___T_p_> _Node; │ │ │ │ +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(_s_t_d_:_:_m_o_v_e(__a)) { } │ │ │ │ +342 │ │ │ │ +343 // When allocators are always equal. │ │ │ │ +344 _Fwd_list_base(_Fwd_list_base&& __lst, _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(__lst._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 _Fwd_list_base(_Fwd_list_base&& __lst, _Node_alloc_type&& __a); │ │ │ │ +351 │ │ │ │ +352 _Fwd_list_base(_Fwd_list_base&&) = default; │ │ │ │ +353 │ │ │ │ +354 ~_Fwd_list_base() │ │ │ │ +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 const_iterator │ │ │ │ -_3_6_3 _e_n_d() const noexcept │ │ │ │ -364 { return _M_h.end(); } │ │ │ │ -365 │ │ │ │ -366 const_iterator │ │ │ │ -_3_6_7 _c_e_n_d() 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 │ │ │ │ -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(_Args&&... __args) │ │ │ │ -396 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__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 │ │ │ │ -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 __pos, _Args&&... __args) │ │ │ │ -427 { return _M_h.emplace_hint(__pos, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); } │ │ │ │ -428 │ │ │ │ -429#ifdef __glibcxx_node_extract // >= C++17 && HOSTED │ │ │ │ -430 /// Extract a node. │ │ │ │ -431 node_type │ │ │ │ -432 extract(const_iterator __pos) │ │ │ │ -433 { │ │ │ │ -434 __glibcxx_assert(__pos != _e_n_d()); │ │ │ │ -435 return _M_h.extract(__pos); │ │ │ │ -436 } │ │ │ │ -437 │ │ │ │ -438 /// Extract a node. │ │ │ │ -439 node_type │ │ │ │ -440 extract(const _k_e_y___t_y_p_e& __key) │ │ │ │ -441 { return _M_h.extract(__key); } │ │ │ │ +357 protected: │ │ │ │ +358 _Node* │ │ │ │ +359 _M_get_node() │ │ │ │ +360 { │ │ │ │ +361 auto __ptr = ___N_o_d_e___a_l_l_o_c___t_r_a_i_t_s_:_:_a_l_l_o_c_a_t_e(_M_get_Node_allocator(), 1); │ │ │ │ +362 return std::__to_address(__ptr); │ │ │ │ +363 } │ │ │ │ +364 │ │ │ │ +365 template │ │ │ │ +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(), │ │ │ │ +375 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...); │ │ │ │ +376 } │ │ │ │ +377 __catch(...) │ │ │ │ +378 { │ │ │ │ +379 this->_M_put_node(__node); │ │ │ │ +380 __throw_exception_again; │ │ │ │ +381 } │ │ │ │ +382 return __node; │ │ │ │ +383 } │ │ │ │ +384 │ │ │ │ +385 template │ │ │ │ +386 ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e* │ │ │ │ +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; │ │ │ │ +393 auto __ptr = std::pointer_traits<_Ptr>::pointer_to(*__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(), __ptr, 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* __pos); │ │ │ │ +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* __pos, │ │ │ │ +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 _Fwd_list_base<_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 │ │ │ │ -445 _i_n_s_e_r_t(node_type&& __nh) │ │ │ │ -446 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(__nh)); } │ │ │ │ -447 │ │ │ │ -448 /// Re-insert an extracted node. │ │ │ │ -449 _i_t_e_r_a_t_o_r │ │ │ │ -450 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r, node_type&& __nh) │ │ │ │ -451 { return _M_h._M_reinsert_node(_s_t_d_:_:_m_o_v_e(__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 │ │ │ │ -478 _p_a_i_r_<_i_t_e_r_a_t_o_r_,_ _b_o_o_l_> │ │ │ │ -479 try_emplace(const _k_e_y___t_y_p_e& __k, _Args&&... __args) │ │ │ │ -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_>(__args)...); │ │ │ │ -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 try_emplace(_k_e_y___t_y_p_e&& __k, _Args&&... __args) │ │ │ │ -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_>(__args)...); │ │ │ │ -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 │ │ │ │ -523 try_emplace(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, const _k_e_y___t_y_p_e& __k, │ │ │ │ -524 _Args&&... __args) │ │ │ │ -525 { │ │ │ │ -526 return _M_h.try_emplace(__hint, __k, │ │ │ │ -527 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...).first; │ │ │ │ -528 } │ │ │ │ -529 │ │ │ │ -530 // move-capable overload │ │ │ │ -531 template │ │ │ │ -532 _i_t_e_r_a_t_o_r │ │ │ │ -533 try_emplace(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, _k_e_y___t_y_p_e&& __k, _Args&&... __args) │ │ │ │ -534 { │ │ │ │ -535 return _M_h.try_emplace(__hint, _s_t_d_:_:_m_o_v_e(__k), │ │ │ │ -536 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__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 */ │ │ │ │ -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 __enable_if_t::value, │ │ │ │ -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(_Pair&& __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 _Fwd_list_base<_Tp, _Alloc> _Base; │ │ │ │ +445 typedef ___F_w_d___l_i_s_t___n_o_d_e___b_a_s_e _Node_base; │ │ │ │ +446 typedef typename _Base::_Node _Node; │ │ │ │ +447 typedef typename _Base::_Node_alloc_type _Node_alloc_type; │ │ │ │ +448 typedef typename _Base::_Node_alloc_traits _Node_alloc_traits; │ │ │ │ +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_>> _Alloc_traits; │ │ │ │ +450 │ │ │ │ +451 public: │ │ │ │ +452 // types: │ │ │ │ +453 typedef _Tp value_type; │ │ │ │ +454 typedef typename ___A_l_l_o_c___t_r_a_i_t_s_:_:_p_o_i_n_t_e_r pointer; │ │ │ │ +455 typedef typename ___A_l_l_o_c___t_r_a_i_t_s_:_:_c_o_n_s_t___p_o_i_n_t_e_r const_pointer; │ │ │ │ +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; │ │ │ │ +462 typedef std::ptrdiff_t difference_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 */ │ │ │ │ +_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& __al) noexcept │ │ │ │ +478 : _Base(_Node_alloc_type(__al)) │ │ │ │ +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& __list, │ │ │ │ +487 const __type_identity_t<_Alloc>& __al) │ │ │ │ +488 : _Base(_Node_alloc_type(__al)) │ │ │ │ +489 { _M_range_initialize(__list._b_e_g_i_n(), __list._e_n_d()); } │ │ │ │ +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&& __list, _Node_alloc_type&& __al, │ │ │ │ +493 _f_a_l_s_e___t_y_p_e) │ │ │ │ +494 : _Base(_s_t_d::_m_o_v_e(__list), _s_t_d::_m_o_v_e(__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. │ │ │ │ +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(__list.begin()), │ │ │ │ +500 std::__make_move_if_noexcept_iterator(__list.end())); │ │ │ │ +501 } │ │ │ │ +502 │ │ │ │ +503 _f_o_r_w_a_r_d___l_i_s_t(forward_list&& __list, _Node_alloc_type&& __al, │ │ │ │ +504 true_type) │ │ │ │ +505 noexcept │ │ │ │ +506 : _Base(_s_t_d_:_:_m_o_v_e(__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 */ │ │ │ │ +_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&& __list, │ │ │ │ +516 const __type_identity_t<_Alloc>& __al) │ │ │ │ +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(__list), _Node_alloc_type(__al), │ │ │ │ +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 │ │ │ │ +_5_3_1 _f_o_r_w_a_r_d___l_i_s_t(size_type __n, const _Alloc& __al = _Alloc()) │ │ │ │ +532 : _Base(_Node_alloc_type(__al)) │ │ │ │ +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& __al = _Alloc()) │ │ │ │ +546 : _Base(_Node_alloc_type(__al)) │ │ │ │ +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(_InputIterator __first, _InputIterator __last, │ │ │ │ +562 const _Alloc& __al = _Alloc()) │ │ │ │ +563 : _Base(_Node_alloc_type(__al)) │ │ │ │ +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& __list) │ │ │ │ +572 : _Base(_Node_alloc_traits::_S_select_on_copy( │ │ │ │ +573 __list._M_get_Node_allocator())) │ │ │ │ +574 { _M_range_initialize(__list._b_e_g_i_n(), __list._e_n_d()); } │ │ │ │ +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 __hint, const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -599 { return _M_h.insert(__hint, __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 __hint, _v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -605 { return _M_h.insert(__hint, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -606 │ │ │ │ -607 template │ │ │ │ -608 __enable_if_t::value, _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 __hint, _Pair&& __x) │ │ │ │ -610 { return _M_h.emplace_hint(__hint, _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(_InputIterator __first, _InputIterator __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_> │ │ │ │ -662 insert_or_assign(const _k_e_y___t_y_p_e& __k, _Obj&& __obj) │ │ │ │ -663 { │ │ │ │ -664 auto __ret = _M_h.try_emplace(_c_e_n_d(), __k, │ │ │ │ -665 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj)); │ │ │ │ -666 if (!__ret.second) │ │ │ │ -667 __ret._f_i_r_s_t->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj); │ │ │ │ -668 return __ret; │ │ │ │ -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 insert_or_assign(_k_e_y___t_y_p_e&& __k, _Obj&& __obj) │ │ │ │ -675 { │ │ │ │ -676 auto __ret = _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_>(__obj)); │ │ │ │ -678 if (!__ret.second) │ │ │ │ -679 __ret.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__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 │ │ │ │ -710 _i_t_e_r_a_t_o_r │ │ │ │ -711 insert_or_assign(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, const _k_e_y___t_y_p_e& __k, │ │ │ │ -712 _Obj&& __obj) │ │ │ │ -713 { │ │ │ │ -714 auto __ret = _M_h.try_emplace(__hint, __k, _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj)); │ │ │ │ -715 if (!__ret.second) │ │ │ │ -716 __ret.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj); │ │ │ │ -717 return __ret.first; │ │ │ │ -718 } │ │ │ │ -719 │ │ │ │ -720 // move-capable overload │ │ │ │ -721 template │ │ │ │ -722 _i_t_e_r_a_t_o_r │ │ │ │ -723 insert_or_assign(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, _k_e_y___t_y_p_e&& __k, _Obj&& __obj) │ │ │ │ -724 { │ │ │ │ -725 auto __ret = _M_h.try_emplace(__hint, _s_t_d_:_:_m_o_v_e(__k), │ │ │ │ -726 _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__obj)); │ │ │ │ -727 if (!__ret.second) │ │ │ │ -728 __ret.first->second = _s_t_d_:_:_f_o_r_w_a_r_d_<___O_b_j_>(__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 */ │ │ │ │ -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 __position) │ │ │ │ -749 { return _M_h.erase(__position); } │ │ │ │ -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 __position) │ │ │ │ -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 */ │ │ │ │ -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_>& __source) │ │ │ │ -823 { │ │ │ │ -824 using _Merge_helper = _Hash_merge_helper; │ │ │ │ -825 _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source)); │ │ │ │ -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 _Kt& __x) -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -883 { return _M_h._M_find_tr(__x); } │ │ │ │ -884#endif │ │ │ │ -885 │ │ │ │ -886 const_iterator │ │ │ │ -_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 _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 */ │ │ │ │ -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 _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 │ │ │ │ -_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 _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 */ │ │ │ │ -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 _Kt& __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 _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 */ │ │ │ │ -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() const 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() const 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 size_type │ │ │ │ -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_> __il, │ │ │ │ +596 const _Alloc& __al = _Alloc()) │ │ │ │ +597 : _Base(_Node_alloc_type(__al)) │ │ │ │ +598 { _M_range_initialize(__il.begin(), __il.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& │ │ │ │ +_6_1_6 _o_p_e_r_a_t_o_r_=(const _f_o_r_w_a_r_d___l_i_s_t& __list); │ │ │ │ +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&& __list) │ │ │ │ +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(); │ │ │ │ +637 _M_move_assign(_s_t_d_:_:_m_o_v_e(__list), __bool_constant<__move_storage>()); │ │ │ │ +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_> __il) │ │ │ │ +651 { │ │ │ │ +652 _a_s_s_i_g_n(__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> │ │ │ │ +670 void │ │ │ │ +_6_7_1 _a_s_s_i_g_n(_InputIterator __first, _InputIterator __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_> __il) │ │ │ │ +701 { _a_s_s_i_g_n(__il.begin(), __il.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() const 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 [[__nodiscard__]] │ │ │ │ +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 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 │ │ │ │ +_7_2_6 _b_e_f_o_r_e___b_e_g_i_n() const noexcept │ │ │ │ +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__]] │ │ │ │ +734 _i_t_e_r_a_t_o_r │ │ │ │ +_7_3_5 _b_e_g_i_n() 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 │ │ │ │ +_7_4_5 _b_e_g_i_n() 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__]] │ │ │ │ +754 _i_t_e_r_a_t_o_r │ │ │ │ +_7_5_5 _e_n_d() 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 │ │ │ │ +_7_6_5 _e_n_d() 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 │ │ │ │ +_7_7_5 _c_b_e_g_i_n() 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 │ │ │ │ +_7_8_5 _c_b_e_f_o_r_e___b_e_g_i_n() const noexcept │ │ │ │ +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 │ │ │ │ +_7_9_5 _c_e_n_d() 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 │ │ │ │ +_8_0_4 _e_m_p_t_y() 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 _s_i_z_e___t_y_p_e │ │ │ │ +_8_1_2 _m_a_x___s_i_z_e() const 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 [[__nodiscard__]] │ │ │ │ +822 reference │ │ │ │ +_8_2_3 _f_r_o_n_t() │ │ │ │ +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 │ │ │ │ +_8_3_6 _f_r_o_n_t() 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)...) 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(_Args&&... __args) │ │ │ │ +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_>(__args)...); │ │ │ │ +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(const_iterator __pos, _Args&&... __args) │ │ │ │ +924 { return iterator(this->_M_insert_after(__pos, │ │ │ │ +925 _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__args)...)); } │ │ │ │ +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(const_iterator __pos, const _Tp& __val) │ │ │ │ +941 { return iterator(this->_M_insert_after(__pos, __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 __pos, _Tp&& __val) │ │ │ │ +948 { return _i_t_e_r_a_t_o_r(this->_M_insert_after(__pos, _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 │ │ │ │ +_9_6_6 _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 │ │ │ │ +_9_8_6 _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(const_iterator __pos, _s_t_d_:_:_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_<___T_p_> __il) │ │ │ │ +1006 { return _i_n_s_e_r_t___a_f_t_e_r(__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 _i_t_e_r_a_t_o_r │ │ │ │ +_1_0_2_6 _e_r_a_s_e___a_f_t_e_r(const_iterator __pos) │ │ │ │ +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 _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() const 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() const 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(const_iterator __pos, const_iterator __last) │ │ │ │ +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 │ │ │ │ +_1_0_6_8 _s_w_a_p(_f_o_r_w_a_r_d___l_i_s_t& __list) noexcept │ │ │ │ +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 │ │ │ │ +_1_0_8_8 _r_e_s_i_z_e(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 │ │ │ │ +_1_1_0_3 _r_e_s_i_z_e(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 │ │ │ │ +_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(const_iterator __pos, _f_o_r_w_a_r_d___l_i_s_t&& __list) noexcept │ │ │ │ +1132 { │ │ │ │ +1133 if (!__list.empty()) │ │ │ │ +1134 _M_splice_after(__pos, __list.before_begin(), __list.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 unordered_map::size_type = {}, │ │ │ │ -1156 _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator()) │ │ │ │ -1157 -> _u_n_o_r_d_e_r_e_d___m_a_p<__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 _u_n_o_r_d_e_r_e_d___m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ -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 -> _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_a_t_o_r_>; │ │ │ │ -1171 │ │ │ │ -1172 template, │ │ │ │ -1174 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1175 _u_n_o_r_d_e_r_e_d___m_a_p(_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 -> _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_>, │ │ │ │ -1178 __iter_val_t<_InputIterator>, │ │ │ │ -1179 _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_>>, │ │ │ │ -1180 _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_>>, │ │ │ │ -1181 _Allocator>; │ │ │ │ -1182 │ │ │ │ -1183 template, │ │ │ │ -1185 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1186 _u_n_o_r_d_e_r_e_d___m_a_p(_InputIterator, _InputIterator, _Allocator) │ │ │ │ -1187 -> _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_>, │ │ │ │ -1188 __iter_val_t<_InputIterator>, │ │ │ │ -1189 _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_>>, │ │ │ │ -1190 _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_>>, │ │ │ │ -1191 _Allocator>; │ │ │ │ -1192 │ │ │ │ -1193 template, │ │ │ │ -1195 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -1196 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1197 _u_n_o_r_d_e_r_e_d___m_a_p(_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 -> _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_>, │ │ │ │ -1201 __iter_val_t<_InputIterator>, _Hash, │ │ │ │ -1202 _e_q_u_a_l___t_o_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, _Allocator>; │ │ │ │ -1203 │ │ │ │ -1204 template> │ │ │ │ -1206 _u_n_o_r_d_e_r_e_d___m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ -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 -> _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ _h_a_s_h_<___K_e_y_>, _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ +1137 void │ │ │ │ +1138 _s_p_l_i_c_e___a_f_t_e_r(const_iterator __pos, _f_o_r_w_a_r_d___l_i_s_t& __list) noexcept │ │ │ │ +1139 { _s_p_l_i_c_e___a_f_t_e_r(__pos, _s_t_d_:_:_m_o_v_e(__list)); } │ │ │ │ +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 │ │ │ │ +_1_1_5_2 _s_p_l_i_c_e___a_f_t_e_r(const_iterator __pos, _f_o_r_w_a_r_d___l_i_s_t&& __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(const_iterator __pos, _f_o_r_w_a_r_d___l_i_s_t&&, │ │ │ │ +1176 const_iterator __before, const_iterator __last) noexcept │ │ │ │ +1177 { _M_splice_after(__pos, __before, __last); } │ │ │ │ +1178 │ │ │ │ +1179 void │ │ │ │ +_1_1_8_0 _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&, │ │ │ │ +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 = _s_i_z_e___t_y_p_e; │ │ │ │ +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 │ │ │ │ +_1_2_0_9 _r_e_m_o_v_e(const _Tp& __val); │ │ │ │ 1210 │ │ │ │ -1211 template> │ │ │ │ -1213 _u_n_o_r_d_e_r_e_d___m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, _Allocator) │ │ │ │ -1214 -> _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ _h_a_s_h_<___K_e_y_>, _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ -1215 │ │ │ │ -1216 template, │ │ │ │ -1218 typename = _RequireAllocator<_Allocator>> │ │ │ │ -1219 _u_n_o_r_d_e_r_e_d___m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ -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 -> _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ -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(_Pred __pred); │ │ │ │ 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 = _e_q_u_a_l___t_o_<___K_e_y_>, │ │ │ │ -1254 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_2_5_5 class _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p │ │ │ │ -1256 { │ │ │ │ -1257 typedef __ummap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable; │ │ │ │ -1258 _Hashtable _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(_BinPred __binary_pred); │ │ │ │ +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&& __list) │ │ │ │ +1270 { _m_e_r_g_e(_s_t_d_:_:_m_o_v_e(__list), _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& __list) │ │ │ │ +1274 { _m_e_r_g_e(_s_t_d_:_:_m_o_v_e(__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 │ │ │ │ +1288 void │ │ │ │ +_1_2_8_9 _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& __hf = _h_a_s_h_e_r(), │ │ │ │ -1305 const _k_e_y___e_q_u_a_l& __eql = _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, __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. │ │ │ │ +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 │ │ │ │ +_1_3_1_4 _s_o_r_t(_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 │ │ │ │ -_1_3_2_4 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator __first, _InputIterator __last, │ │ │ │ -1325 _s_i_z_e___t_y_p_e __n = 0, │ │ │ │ -1326 const _h_a_s_h_e_r& __hf = _h_a_s_h_e_r(), │ │ │ │ -1327 const _k_e_y___e_q_u_a_l& __eql = _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, __hf, __eql, __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& __ummap, │ │ │ │ -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 */ │ │ │ │ -1362 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(unordered_multimap&& __ummap, │ │ │ │ -1363 const allocator_type& __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& __hf = _h_a_s_h_e_r(), │ │ │ │ -1382 const _k_e_y___e_q_u_a_l& __eql = _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, __hf, __eql, __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 allocator_type& __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(size_type __n, const _h_a_s_h_e_r& __hf, │ │ │ │ -1392 const allocator_type& __a) │ │ │ │ -1393 : unordered_multimap(__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 allocator_type │ │ │ │ -_1_4_5_0 _g_e_t___a_l_l_o_c_a_t_o_r() const 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() const 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(_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(_s_i_z_e___t_y_p_e __n, const _v_a_l_u_e___t_y_p_e& __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 __pos, const_iterator __before, │ │ │ │ +1339 const_iterator __last); │ │ │ │ +1340 │ │ │ │ +1341 // Called by forward_list(n). │ │ │ │ +1342 void │ │ │ │ +1343 _M_default_initialize(_s_i_z_e___t_y_p_e __n); │ │ │ │ +1344 │ │ │ │ +1345 // Called by resize(sz). │ │ │ │ +1346 void │ │ │ │ +1347 _M_default_insert_after(const_iterator __pos, _s_i_z_e___t_y_p_e __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&& __list, _t_r_u_e___t_y_p_e) noexcept │ │ │ │ +1352 { │ │ │ │ +1353 _c_l_e_a_r(); │ │ │ │ +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(_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._b_e_g_i_n()), │ │ │ │ +1370 std::make_move_iterator(__list._e_n_d())); │ │ │ │ +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_:_:_v_a_l_u_e___t_y_p_e, │ │ │ │ +1437 typename _Allocator = _a_l_l_o_c_a_t_o_r_<___V_a_l_T_>, │ │ │ │ +1438 typename = _RequireInputIter<_InputIterator>, │ │ │ │ +1439 typename = _RequireAllocator<_Allocator>> │ │ │ │ +1440 _f_o_r_w_a_r_d___l_i_s_t(_InputIterator, _InputIterator, _Allocator = _Allocator()) │ │ │ │ +1441 -> _f_o_r_w_a_r_d___l_i_s_t_<___V_a_l_T_,_ ___A_l_l_o_c_a_t_o_r_>; │ │ │ │ +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_>& __lx, │ │ │ │ +1458 const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __ly); │ │ │ │ 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() const 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() 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 _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 const_iterator │ │ │ │ -_1_4_8_6 _b_e_g_i_n() const noexcept │ │ │ │ -1487 { return _M_h.begin(); } │ │ │ │ -1488 │ │ │ │ -1489 const_iterator │ │ │ │ -_1_4_9_0 _c_b_e_g_i_n() 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 _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 const_iterator │ │ │ │ -_1_5_0_8 _e_n_d() const 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 [[nodiscard]] │ │ │ │ +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._b_e_g_i_n(), __x._e_n_d(), │ │ │ │ +1479 __y._b_e_g_i_n(), __y._e_n_d(), │ │ │ │ +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 _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __lx, │ │ │ │ +1508 const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __ly) │ │ │ │ +1509 { return !(__lx == __ly); } │ │ │ │ 1510 │ │ │ │ -1511 const_iterator │ │ │ │ -_1_5_1_2 _c_e_n_d() 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 │ │ │ │ -1534 _i_t_e_r_a_t_o_r │ │ │ │ -_1_5_3_5 _e_m_p_l_a_c_e(_Args&&... __args) │ │ │ │ -1536 { return _M_h.emplace(_s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__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 │ │ │ │ -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 __pos, _Args&&... __args) │ │ │ │ -1563 { return _M_h.emplace_hint(__pos, _s_t_d_:_:_f_o_r_w_a_r_d_<___A_r_g_s_>(__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 _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 __enable_if_t::value, _i_t_e_r_a_t_o_r> │ │ │ │ -_1_5_8_5 _i_n_s_e_r_t(_Pair&& __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 __hint, const _v_a_l_u_e___t_y_p_e& __x) │ │ │ │ -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 _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 __hint, _v_a_l_u_e___t_y_p_e&& __x) │ │ │ │ -1617 { return _M_h.insert(__hint, _s_t_d_:_:_m_o_v_e(__x)); } │ │ │ │ -1618 │ │ │ │ -1619 template │ │ │ │ -1620 __enable_if_t::value, _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 __hint, _Pair&& __x) │ │ │ │ -1622 { return _M_h.emplace_hint(__hint, _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(_InputIterator __first, _InputIterator __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 │ │ │ │ -1654 extract(const_iterator __pos) │ │ │ │ -1655 { │ │ │ │ -1656 __glibcxx_assert(__pos != _e_n_d()); │ │ │ │ -1657 return _M_h.extract(__pos); │ │ │ │ -1658 } │ │ │ │ -1659 │ │ │ │ -1660 /// Extract a node. │ │ │ │ -1661 node_type │ │ │ │ -1662 extract(const _k_e_y___t_y_p_e& __key) │ │ │ │ -1663 { return _M_h.extract(__key); } │ │ │ │ -1664 │ │ │ │ -1665 /// Re-insert an extracted node. │ │ │ │ -1666 _i_t_e_r_a_t_o_r │ │ │ │ -1667 _i_n_s_e_r_t(node_type&& __nh) │ │ │ │ -1668 { return _M_h._M_reinsert_node_multi(_c_e_n_d(), _s_t_d_:_:_m_o_v_e(__nh)); } │ │ │ │ -1669 │ │ │ │ -1670 /// Re-insert an extracted node. │ │ │ │ -1671 _i_t_e_r_a_t_o_r │ │ │ │ -1672 _i_n_s_e_r_t(_c_o_n_s_t___i_t_e_r_a_t_o_r __hint, node_type&& __nh) │ │ │ │ -1673 { return _M_h._M_reinsert_node_multi(__hint, _s_t_d_:_:_m_o_v_e(__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 _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 __position) │ │ │ │ -1692 { return _M_h.erase(__position); } │ │ │ │ -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 __position) │ │ │ │ -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 _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_>& __source) │ │ │ │ -1766 { │ │ │ │ -1767 using _Merge_helper │ │ │ │ -1768 = _Hash_merge_helper; │ │ │ │ -1769 _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source)); │ │ │ │ -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 _Kt& __x) -> decltype(_M_h._M_find_tr(__x)) │ │ │ │ -1828 { return _M_h._M_find_tr(__x); } │ │ │ │ -1829#endif │ │ │ │ -1830 │ │ │ │ -1831 const_iterator │ │ │ │ -_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 _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 _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 _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 │ │ │ │ -_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 _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 */ │ │ │ │ -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 _Kt& __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 _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 _s_i_z_e___t_y_p_e │ │ │ │ -_1_9_1_6 _b_u_c_k_e_t___c_o_u_n_t() const 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() const 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 size_type │ │ │ │ -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() const 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() const 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<_Key1, _Tp1, │ │ │ │ -2041 _Hash1, _Pred1, _Alloc1>&, │ │ │ │ -2042 const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p<_Key1, _Tp1, │ │ │ │ -2043 _Hash1, _Pred1, _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 unordered_multimap::size_type = {}, │ │ │ │ -2058 _Hash = _Hash(), _Pred = _Pred(), │ │ │ │ -2059 _Allocator = _Allocator()) │ │ │ │ -2060 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p<__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 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ -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 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_a_t_o_r_>; │ │ │ │ -2075 │ │ │ │ -2076 template, │ │ │ │ -2078 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2079 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_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 -> _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_>, │ │ │ │ -2082 __iter_val_t<_InputIterator>, │ │ │ │ -2083 _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_>>, │ │ │ │ -2084 _e_q_u_a_l___t_o_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, _Allocator>; │ │ │ │ -2085 │ │ │ │ -2086 template, │ │ │ │ -2088 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2089 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_InputIterator, _InputIterator, _Allocator) │ │ │ │ -2090 -> _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_>, │ │ │ │ -2091 __iter_val_t<_InputIterator>, │ │ │ │ -2092 _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_>>, │ │ │ │ -2093 _e_q_u_a_l___t_o_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, _Allocator>; │ │ │ │ -2094 │ │ │ │ -2095 template, │ │ │ │ -2097 typename = _RequireNotAllocatorOrIntegral<_Hash>, │ │ │ │ -2098 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2099 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_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 -> _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_>, │ │ │ │ -2103 __iter_val_t<_InputIterator>, _Hash, │ │ │ │ -2104 _e_q_u_a_l___t_o_<_____i_t_e_r___k_e_y___t_<___I_n_p_u_t_I_t_e_r_a_t_o_r_>>, _Allocator>; │ │ │ │ -2105 │ │ │ │ -2106 template> │ │ │ │ -2108 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ -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 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ _h_a_s_h_<___K_e_y_>, _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ -2112 │ │ │ │ -2113 template> │ │ │ │ -2115 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, _Allocator) │ │ │ │ -2116 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ _h_a_s_h_<___K_e_y_>, _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ -2117 │ │ │ │ -2118 template, │ │ │ │ -2120 typename = _RequireAllocator<_Allocator>> │ │ │ │ -2121 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p(_i_n_i_t_i_a_l_i_z_e_r___l_i_s_t<_p_a_i_r_<___K_e_y_,_ ___T_p_>>, │ │ │ │ -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 -> _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ _e_q_u_a_l___t_o_<___K_e_y_>, _Allocator>; │ │ │ │ -2125 │ │ │ │ -2126#endif │ │ │ │ -2127 │ │ │ │ -2128 template │ │ │ │ -2129 inline void │ │ │ │ -2130 swap(_u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -2131 _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -2132 noexcept(noexcept(__x.swap(__y))) │ │ │ │ -2133 { __x.swap(__y); } │ │ │ │ -2134 │ │ │ │ -2135 template │ │ │ │ -2136 inline void │ │ │ │ -2137 swap(_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -2138 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -2139 noexcept(noexcept(__x.swap(__y))) │ │ │ │ -2140 { __x.swap(__y); } │ │ │ │ -2141 │ │ │ │ -2142 template │ │ │ │ -2143 inline bool │ │ │ │ -2144 operator==(const _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -2145 const _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -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 _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -2152 const _u_n_o_r_d_e_r_e_d___m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -2153 { return !(__x == __y); } │ │ │ │ -2154#endif │ │ │ │ -2155 │ │ │ │ -2156 template │ │ │ │ -2157 inline bool │ │ │ │ -2158 operator==(const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -2159 const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -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 _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __x, │ │ │ │ -2166 const _u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ ___A_l_l_o_c_>& __y) │ │ │ │ -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::_u_n_o_r_d_e_r_e_d___m_a_p<_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::_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p<_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 operator>(const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __lx, │ │ │ │ +1516 const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __ly) │ │ │ │ +1517 { return (__ly < __lx); } │ │ │ │ +1518 │ │ │ │ +1519 /// Based on operator< │ │ │ │ +1520 template │ │ │ │ +1521 [[__nodiscard__]] │ │ │ │ +1522 inline bool │ │ │ │ +1523 operator>=(const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __lx, │ │ │ │ +1524 const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __ly) │ │ │ │ +1525 { return !(__lx < __ly); } │ │ │ │ +1526 │ │ │ │ +1527 /// Based on operator< │ │ │ │ +1528 template │ │ │ │ +1529 [[__nodiscard__]] │ │ │ │ +1530 inline bool │ │ │ │ +1531 operator<=(const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __lx, │ │ │ │ +1532 const _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __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_>& __lx, │ │ │ │ +1540 _f_o_r_w_a_r_d___l_i_s_t_<___T_p_,_ ___A_l_l_o_c_>& __ly) │ │ │ │ +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 │ │ │ │ +_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_d_:_:_p_a_i_r_:_:_p_a_i_r │ │ │ │ -pair(_T1, _T2) -> pair< _T1, _T2 > │ │ │ │ -Two pairs of the same type are equal iff their members are equal. │ │ │ │ +_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_:_:_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_:_:_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_:_:_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_n_i_t_i_a_l_i_z_e_r___l_i_s_t │ │ │ │ initializer_list │ │ │ │ DDeeffiinniittiioonn _i_n_i_t_i_a_l_i_z_e_r___l_i_s_t_:_4_6 │ │ │ │ -_s_t_d_:_:_h_a_s_h │ │ │ │ -Primary class template hash. │ │ │ │ -DDeeffiinniittiioonn _f_u_n_c_t_i_o_n_a_l___h_a_s_h_._h_:_1_0_3 │ │ │ │ -_s_t_d_:_:_s_i_z_e___t_y_p_e │ │ │ │ +_s_t_d_:_:_i_s___s_a_m_e │ │ │ │ +is_same │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_4_7_6 │ │ │ │ +_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_3 │ │ │ │ +_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_5 │ │ │ │ +_s_t_d_:_:_i_s___c_o_p_y___a_s_s_i_g_n_a_b_l_e │ │ │ │ +is_copy_assignable │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_2_3_5 │ │ │ │ +_s_t_d_:_:_a_l_l_o_c_a_t_o_r___t_r_a_i_t_s │ │ │ │ +Uniform interface to all allocator types. │ │ │ │ +DDeeffiinniittiioonn _b_i_t_s_/_a_l_l_o_c___t_r_a_i_t_s_._h_:_1_4_5 │ │ │ │ +_s_t_d_:_:_a_l_l_o_c_a_t_o_r___t_r_a_i_t_s_<_ _____a_l_l_o_c___r_e_b_i_n_d_<_ ___A_l_l_o_c_,_ ___T_p_ _>_ _>_:_:_p_o_i_n_t_e_r │ │ │ │ +__detected_or_t< value_type *, __pointer, _Alloc > pointer │ │ │ │ +DDeeffiinniittiioonn _b_i_t_s_/_a_l_l_o_c___t_r_a_i_t_s_._h_:_1_5_6 │ │ │ │ +_s_t_d_:_:_a_l_l_o_c_a_t_o_r___t_r_a_i_t_s_<_ _____a_l_l_o_c___r_e_b_i_n_d_<_ ___A_l_l_o_c_,_ ___T_p_ _>_ _>_:_:_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ +typename _Ptr< __c_pointer, const value_type >::type const_pointer │ │ │ │ +DDeeffiinniittiioonn _b_i_t_s_/_a_l_l_o_c___t_r_a_i_t_s_._h_:_1_9_6 │ │ │ │ _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_:_:_e_q_u_a_l___t_o │ │ │ │ -One of the comparison functors. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___f_u_n_c_t_i_o_n_._h_:_3_7_1 │ │ │ │ -_s_t_d_:_:_p_a_i_r │ │ │ │ -Struct holding two objects of arbitrary type. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___p_a_i_r_._h_:_2_8_6 │ │ │ │ -_s_t_d_:_:_p_a_i_r_:_:_f_i_r_s_t │ │ │ │ -_T1 first │ │ │ │ -The first member. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___p_a_i_r_._h_:_2_9_0 │ │ │ │ -_s_t_d_:_:_i_t_e_r_a_t_o_r │ │ │ │ -Common iterator class. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h_:_1_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::reference reference │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::iterator iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ +_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_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_:_:_i_n_s_e_r_t___a_f_t_e_r │ │ │ │ +iterator insert_after(const_iterator __pos, _InputIterator __first, │ │ │ │ +_InputIterator __last) │ │ │ │ +Inserts a range into the forward_list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._t_c_c_:_2_7_1 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_u_n_i_q_u_e │ │ │ │ +__remove_return_type unique(_BinPred __binary_pred) │ │ │ │ +Remove consecutive elements satisfying a predicate. │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_m_e_r_g_e │ │ │ │ +void merge(forward_list &&__list, _Comp __comp) │ │ │ │ +Merge sorted lists according to comparison function. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._t_c_c_:_3_6_8 │ │ │ │ +_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 │ │ │ │ -__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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_m_a_p_p_e_d___t_y_p_e │ │ │ │ -_Hashtable::mapped_type mapped_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ -_Hashtable::value_type value_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_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_:_:_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::const_reference const_reference │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_7_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_:_:_s_o_r_t │ │ │ │ +void sort(_Comp __comp) │ │ │ │ +Sort the forward_list using a comparison function. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._t_c_c_:_4_1_7 │ │ │ │ +_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_:_:_i_n_s_e_r_t___a_f_t_e_r │ │ │ │ +iterator insert_after(const_iterator __pos, size_type __n, const _Tp &__val) │ │ │ │ +Inserts a number of copies of given data into the forward_list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._t_c_c_:_2_5_6 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_r_e_m_o_v_e │ │ │ │ +__remove_return_type remove(const _Tp &__val) │ │ │ │ +Remove all elements equal to value. │ │ │ │ +_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_h_a_s_h_e_r │ │ │ │ -_Hashtable::hasher hasher │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_6_7 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::local_iterator local_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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_:_:_s_p_l_i_c_e___a_f_t_e_r │ │ │ │ +void splice_after(const_iterator __pos, forward_list &&__list, const_iterator │ │ │ │ +__i) noexcept │ │ │ │ +Insert element from another forward_list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._t_c_c_:_2_3_9 │ │ │ │ +_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_p_o_i_n_t_e_r │ │ │ │ -_Hashtable::pointer pointer │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_7_4 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ -_Hashtable::allocator_type allocator_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::const_local_iterator const_local_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ -_Hashtable::difference_type difference_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_8_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_s_i_z_e___t_y_p_e │ │ │ │ -_Hashtable::size_type size_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_8_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_u_l_t_i_m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ -_Hashtable::const_pointer const_pointer │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::const_iterator const_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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_:_:_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_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_k_e_y___t_y_p_e │ │ │ │ -_Hashtable::key_type key_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_6_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_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_< │ │ │ │ -_c_o_n_s_t_ ___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_k_e_y___e_q_u_a_l │ │ │ │ -_Hashtable::key_equal key_equal │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::iterator iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_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_:_:_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ -_Hashtable::const_pointer const_pointer │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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_:_:_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::reference reference │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ -_Hashtable::allocator_type allocator_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_m_a_p_p_e_d___t_y_p_e │ │ │ │ -_Hashtable::mapped_type mapped_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_h_a_s_h_e_r │ │ │ │ -_Hashtable::hasher hasher │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_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(_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_:_:_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___r_e_f_e_r_e_n_c_e │ │ │ │ -_Hashtable::const_reference const_reference │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_1 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_k_e_y___e_q_u_a_l │ │ │ │ -_Hashtable::key_equal key_equal │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_2 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::local_iterator local_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_p_o_i_n_t_e_r │ │ │ │ -_Hashtable::pointer pointer │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_2_8 │ │ │ │ -_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_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_k_e_y___t_y_p_e │ │ │ │ -_Hashtable::key_type key_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::const_iterator const_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_3 │ │ │ │ -_s_t_d_:_:_u_n_o_r_d_e_r_e_d___m_a_p_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_s_i_z_e___t_y_p_e │ │ │ │ -_Hashtable::size_type size_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ -_Hashtable::difference_type difference_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_c_o_n_s_t___l_o_c_a_l___i_t_e_r_a_t_o_r │ │ │ │ -_Hashtable::const_local_iterator const_local_iterator │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_3_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_<_ ___K_e_y_,_ ___T_p_,_ ___H_a_s_h_,_ ___P_r_e_d_,_ _p_o_l_y_m_o_r_p_h_i_c___a_l_l_o_c_a_t_o_r_<_ _p_a_i_r_<_ _c_o_n_s_t │ │ │ │ -___K_e_y_,_ ___T_p_ _>_ _>_ _>_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ -_Hashtable::value_type value_type │ │ │ │ -DDeeffiinniittiioonn _u_n_o_r_d_e_r_e_d___m_a_p_._h_:_1_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_:_:_r_e_s_i_z_e │ │ │ │ +void resize(size_type __sz, const value_type &__val) │ │ │ │ +Resizes the forward_list to the specified number of elements. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._t_c_c_:_2_0_1 │ │ │ │ +_s_t_d_:_:_f_o_r_w_a_r_d___l_i_s_t_:_:_p_u_s_h___f_r_o_n_t │ │ │ │ +void push_front(const _Tp &__val) │ │ │ │ +Add data to the front of the forward_list. │ │ │ │ +DDeeffiinniittiioonn _f_o_r_w_a_r_d___l_i_s_t_._h_:_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 │ │ │ │ -_h_a_s_h_t_a_b_l_e_._h │ │ │ │ +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_:_:_e_q_u_a_l___t_o │ │ │ │ +One of the comparison functors. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___f_u_n_c_t_i_o_n_._h_:_3_7_1 │ │ │ │ +_s_t_d_:_:_l_e_s_s │ │ │ │ +One of the comparison functors. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___f_u_n_c_t_i_o_n_._h_:_4_0_1 │ │ │ │ +_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 │ │ │ │ +_____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_<_ ___N_o_d_e___a_l_l_o_c___t_y_p_e_ _>_:_:_a_l_l_o_c_a_t_e │ │ │ │ +static constexpr pointer allocate(_Node_alloc_type &__a, size_type __n) │ │ │ │ +_____g_n_u___c_x_x_:_:_____a_l_l_o_c___t_r_a_i_t_s_<_ ___N_o_d_e___a_l_l_o_c___t_y_p_e_ _>_:_:_d_e_a_l_l_o_c_a_t_e │ │ │ │ +static constexpr void deallocate(_Node_alloc_type &__a, pointer __p, size_type │ │ │ │ +__n) │ │ │ │ +_____g_n_u___c_x_x_:_:_____a_l_l_o_c___t_r_a_i_t_s_<_ ___N_o_d_e___a_l_l_o_c___t_y_p_e_ _>_:_:_m_a_x___s_i_z_e │ │ │ │ +static constexpr size_type max_size(const _Node_alloc_type &__a) noexcept │ │ │ │ +_a_l_l_o_c___t_r_a_i_t_s_._h │ │ │ │ +_s_t_l___i_t_e_r_a_t_o_r_._h │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00386.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: unique_lock.h File Reference │ │ │ +libstdc++: gslice_array.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,44 +48,44 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
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,14 +1,14 @@ │ │ │ │ libstdc++ │ │ │ │ -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. │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00386_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: unique_lock.h Source File │ │ │ +libstdc++: gslice_array.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,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
│ │ │ @@ -75,269 +75,246 @@ │ │ │
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>
│ │ │
│ │ │ -
60 class unique_lock
│ │ │ + │ │ │
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
│ │ │ -
69 [[__nodiscard__]]
│ │ │ -
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
│ │ │ -
81 [[__nodiscard__]]
│ │ │ -
82 unique_lock(mutex_type& __m, try_to_lock_t)
│ │ │ -
83 : _M_device(std::__addressof(__m)), _M_owns(_M_device->try_lock())
│ │ │ -
84 { }
│ │ │ -
85
│ │ │ -
86 [[__nodiscard__]]
│ │ │ -
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>
│ │ │ -
94 [[__nodiscard__]]
│ │ │ -
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,
│ │ │ -
104 const chrono::duration<_Rep, _Period>& __rtime)
│ │ │ -
105 : _M_device(std::__addressof(__m)),
│ │ │ -
106 _M_owns(_M_device->try_lock_for(__rtime))
│ │ │ -
107 { }
│ │ │ -
108
│ │ │ -
109 ~unique_lock()
│ │ │ -
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
│ │ │ -
170 try_lock_until(const chrono::time_point<_Clock, _Duration>& __atime)
│ │ │ -
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
│ │ │ +
129 gslice_array(_Array<_Tp>, const valarray<size_t>&);
│ │ │ +
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
│ │ │ -
│ │ │ -
249 swap(unique_lock<_Mutex>& __x, unique_lock<_Mutex>& __y) noexcept
│ │ │ -
250 { __x.swap(__y); }
│ │ │ +
139
│ │ │ +
140 template<typename _Tp>
│ │ │ +
141 inline
│ │ │ +
142 gslice_array<_Tp>::gslice_array(_Array<_Tp> __a,
│ │ │ +
143 const valarray<size_t>& __i)
│ │ │ +
144 : _M_array(__a), _M_index(__i) {}
│ │ │ +
145
│ │ │ +
146 template<typename _Tp>
│ │ │ +
147 inline
│ │ │ +
│ │ │ + │ │ │ +
149 : _M_array(__a._M_array), _M_index(__a._M_index) {}
│ │ │
│ │ │ -
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
│ │ │ +
150
│ │ │ +
151 template<typename _Tp>
│ │ │ +
152 inline gslice_array<_Tp>&
│ │ │ +
│ │ │ + │ │ │ +
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 }
│ │ │ +
│ │ │ +
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
│ │ │ +
180 gslice_array<_Tp>::operator=(const _Expr<_Dom, _Tp>& __e) const
│ │ │ +
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 */
│ │ │ +
size_t size() const
Return the number of elements in array.
Definition valarray:947
│ │ │ +
gslice_array(const gslice_array &)
Copy constructor. Both slices refer to the same underlying array.
│ │ │ +
gslice_array & operator=(const gslice_array &)
Assignment operator. Assigns slice elements to corresponding elements of a.
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
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
│ │ │ -
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.
│ │ │ +
void operator%=(const valarray< _Tp > &) const
Modulo slice elements by corresponding elements of v.
│ │ │ +
void operator>>=(const valarray< _Tp > &) const
Right shift slice elements by corresponding elements of v.
│ │ │ +
void operator*=(const valarray< _Tp > &) const
Multiply slice elements by corresponding elements of v.
│ │ │ +
void operator|=(const valarray< _Tp > &) const
Logical or slice elements with corresponding elements of v.
│ │ │ +
void operator^=(const valarray< _Tp > &) const
Logical xor slice elements with corresponding elements of v.
│ │ │ +
void operator-=(const valarray< _Tp > &) const
Subtract corresponding elements of v from slice elements.
│ │ │ +
void operator+=(const valarray< _Tp > &) const
Add corresponding elements of v to slice elements.
│ │ │ +
void operator&=(const valarray< _Tp > &) const
Logical and slice elements with corresponding elements of v.
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,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,276 +21,261 @@ │ │ │ │ 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 unique_lock │ │ │ │ +59 template │ │ │ │ +_6_0 class _g_s_l_i_c_e___a_r_r_a_y │ │ │ │ 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 │ │ │ │ -69 [[__nodiscard__]] │ │ │ │ -70 explicit unique_lock(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 unique_lock(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 [[__nodiscard__]] │ │ │ │ -82 unique_lock(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 [[__nodiscard__]] │ │ │ │ -87 unique_lock(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 [[__nodiscard__]] │ │ │ │ -95 unique_lock(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_>& __atime) │ │ │ │ -97 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__m)), │ │ │ │ -98 _M_owns(_M_device->try_lock_until(__atime)) │ │ │ │ -99 { } │ │ │ │ -100 │ │ │ │ -101 template │ │ │ │ -102 [[__nodiscard__]] │ │ │ │ -103 unique_lock(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_>& __rtime) │ │ │ │ -105 : _M_device(_s_t_d_:_:_____a_d_d_r_e_s_s_o_f(__m)), │ │ │ │ -106 _M_owns(_M_device->try_lock_for(__rtime)) │ │ │ │ -107 { } │ │ │ │ -108 │ │ │ │ -109 ~unique_lock() │ │ │ │ -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(_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_>& __atime) │ │ │ │ -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 │ │ │ │ -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_>& __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 }; │ │ │ │ -244 │ │ │ │ -245 /// Swap overload for unique_lock objects. │ │ │ │ -246 /// @relates unique_lock │ │ │ │ -247 template │ │ │ │ -248 inline void │ │ │ │ -_2_4_9 _s_w_a_p(unique_lock<_Mutex>& __x, unique_lock<_Mutex>& __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. │ │ │ │ +69 _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. │ │ │ │ +73 _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 _Expr<_Dom, _Tp>&) const; │ │ │ │ +102 template │ │ │ │ +103 void _o_p_e_r_a_t_o_r_*_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +104 template │ │ │ │ +105 void _o_p_e_r_a_t_o_r_/_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +106 template │ │ │ │ +107 void _o_p_e_r_a_t_o_r_%_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +108 template │ │ │ │ +109 void _o_p_e_r_a_t_o_r_+_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +110 template │ │ │ │ +111 void _o_p_e_r_a_t_o_r_-_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +112 template │ │ │ │ +113 void _o_p_e_r_a_t_o_r_^_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +114 template │ │ │ │ +115 void _o_p_e_r_a_t_o_r_&_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +116 template │ │ │ │ +117 void _o_p_e_r_a_t_o_r_|_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +118 template │ │ │ │ +119 void _o_p_e_r_a_t_o_r_<_<_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +120 template │ │ │ │ +121 void _o_p_e_r_a_t_o_r_>_>_=(const _Expr<_Dom, _Tp>&) const; │ │ │ │ +122 │ │ │ │ +123 private: │ │ │ │ +124 _Array<_Tp> _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(_Array<_Tp>, 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(_Array<_Tp> __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 │ │ │ │ +_1_4_8 _g_s_l_i_c_e___a_r_r_a_y_<___T_p_>_:_:_g_s_l_i_c_e___a_r_r_a_y(const _g_s_l_i_c_e___a_r_r_a_y_<___T_p_>& __a) │ │ │ │ +149 : _M_array(__a._M_array), _M_index(__a._M_index) {} │ │ │ │ +150 │ │ │ │ +151 template │ │ │ │ +152 inline _g_s_l_i_c_e___a_r_r_a_y_<___T_p_>& │ │ │ │ +_1_5_3 _g_s_l_i_c_e___a_r_r_a_y_<___T_p_>_:_:_o_p_e_r_a_t_o_r_=(const _g_s_l_i_c_e___a_r_r_a_y_<___T_p_>& __a) │ │ │ │ +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, _Array(_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(_Array<_Tp>(__v), __v._s_i_z_e(), │ │ │ │ +174 _M_array, _Array(_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 _Expr<_Dom, _Tp>& __e) const │ │ │ │ +181 { │ │ │ │ +182 std::__valarray_copy (__e, _M_index.size(), _M_array, │ │ │ │ +183 _Array(_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_:_:_v_a_l_a_r_r_a_y_:_:_s_i_z_e │ │ │ │ +size_t size() const │ │ │ │ +Return the number of elements in array. │ │ │ │ +DDeeffiinniittiioonn _v_a_l_a_r_r_a_y_:_9_4_7 │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_g_s_l_i_c_e___a_r_r_a_y │ │ │ │ +gslice_array(const gslice_array &) │ │ │ │ +Copy constructor. Both slices refer to the same underlying array. │ │ │ │ +DDeeffiinniittiioonn _g_s_l_i_c_e___a_r_r_a_y_._h_:_1_4_8 │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ +gslice_array & operator=(const gslice_array &) │ │ │ │ +Assignment operator. Assigns slice elements to corresponding elements of a. │ │ │ │ +DDeeffiinniittiioonn _g_s_l_i_c_e___a_r_r_a_y_._h_:_1_5_3 │ │ │ │ _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_:_:_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_:_:_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_%_= │ │ │ │ +void operator%=(const valarray< _Tp > &) const │ │ │ │ +Modulo slice elements by corresponding elements of v. │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_o_p_e_r_a_t_o_r_>_>_= │ │ │ │ +void operator>>=(const valarray< _Tp > &) const │ │ │ │ +Right shift slice elements by corresponding elements of v. │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_o_p_e_r_a_t_o_r_*_= │ │ │ │ +void operator*=(const valarray< _Tp > &) const │ │ │ │ +Multiply slice elements by corresponding elements of v. │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_o_p_e_r_a_t_o_r_|_= │ │ │ │ +void operator|=(const valarray< _Tp > &) const │ │ │ │ +Logical or slice elements with corresponding elements of v. │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_o_p_e_r_a_t_o_r_^_= │ │ │ │ +void operator^=(const valarray< _Tp > &) const │ │ │ │ +Logical xor slice elements with corresponding elements of v. │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_o_p_e_r_a_t_o_r_-_= │ │ │ │ +void operator-=(const valarray< _Tp > &) const │ │ │ │ +Subtract corresponding elements of v from slice elements. │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_o_p_e_r_a_t_o_r_+_= │ │ │ │ +void operator+=(const valarray< _Tp > &) const │ │ │ │ +Add corresponding elements of v to slice elements. │ │ │ │ +_s_t_d_:_:_g_s_l_i_c_e___a_r_r_a_y_:_:_o_p_e_r_a_t_o_r_&_= │ │ │ │ +void operator&=(const valarray< _Tp > &) const │ │ │ │ +Logical and slice elements with corresponding elements of v. │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00389.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: this_thread_sleep.h File Reference │ │ │ +libstdc++: stream_iterator.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,48 +48,45 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
this_thread_sleep.h File Reference
│ │ │ +
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,20 +1,15 @@ │ │ │ │ libstdc++ │ │ │ │ -this_thread_sleep.h File Reference │ │ │ │ +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_. │ │ │ │ +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_ _> │ │ │ │ +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_ _> │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _s_t_d │ │ │ │ -namespace   _s_t_d_:_:_t_h_i_s___t_h_r_e_a_d │ │ │ │ -FFuunnccttiioonnss │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_t_h_i_s___t_h_r_e_a_d_:_:_s_l_e_e_p___f_o_r (const _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n< _Rep, _Period > │ │ │ │ - &__rtime) │ │ │ │ -template │ │ │ │ -void  _s_t_d_:_:_t_h_i_s___t_h_r_e_a_d_:_:_s_l_e_e_p___u_n_t_i_l (const _c_h_r_o_n_o_:_:_t_i_m_e___p_o_i_n_t< _Clock, │ │ │ │ - _Duration > &__atime) │ │ │ │ ********** 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. │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00389_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: this_thread_sleep.h Source File │ │ │ +libstdc++: stream_iterator.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,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
│ │ │ @@ -75,127 +75,313 @@ │ │ │
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;
│ │ │ - │ │ │ -
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
│ │ │ -
83 __sleep_for(__s, __ns);
│ │ │ -
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)
│ │ │ -
99 sleep_for(__atime - __now);
│ │ │ -
100 return;
│ │ │ -
101 }
│ │ │ -
102 while (__now < __atime)
│ │ │ -
103 {
│ │ │ -
104 sleep_for(__atime - __now);
│ │ │ -
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;
│ │ │ +
62 typedef basic_istream<_CharT, _Traits> istream_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.
│ │ │ +
│ │ │ +
74 _GLIBCXX_CONSTEXPR istream_iterator()
│ │ │ +
75 _GLIBCXX_NOEXCEPT_IF(is_nothrow_default_constructible<_Tp>::value)
│ │ │ +
76 : _M_stream(0), _M_value(), _M_ok(false) {}
│ │ │ +
│ │ │ +
77
│ │ │ +
78 /// Construct start of input stream iterator.
│ │ │ +
│ │ │ +
79 istream_iterator(istream_type& __s)
│ │ │ +
80 : _M_stream(std::__addressof(__s)), _M_ok(true)
│ │ │ +
81 { _M_read(); }
│ │ │ +
│ │ │ +
82
│ │ │ +
83 _GLIBCXX_CONSTEXPR
│ │ │ + │ │ │ + │ │ │ +
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, nano > nanoseconds
nanoseconds
Definition chrono.h:888
│ │ │ -
duration< int64_t > seconds
seconds
Definition chrono.h:897
│ │ │ -
constexpr __enable_if_is_duration< _ToDur > duration_cast(const duration< _Rep, _Period > &__d)
Definition chrono.h:275
│ │ │ + │ │ │ +
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
│ │ │ +
│ │ │ + │ │ │ +
162 _GLIBCXX_NOEXCEPT
│ │ │ +
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)
│ │ │ +
171 _GLIBCXX_NOEXCEPT
│ │ │ +
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
│ │ │ +
203 using difference_type = ptrdiff_t;
│ │ │ +
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.
│ │ │ +
│ │ │ +
216 ostream_iterator(ostream_type& __s) _GLIBCXX_NOEXCEPT
│ │ │ +
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 */
│ │ │ +
│ │ │ +
229 ostream_iterator(ostream_type& __s, const _CharT* __c) _GLIBCXX_NOEXCEPT
│ │ │ +
230 : _M_stream(std::__addressof(__s)), _M_string(__c) { }
│ │ │ +
│ │ │ +
231
│ │ │ +
232 /// Copy constructor.
│ │ │ +
│ │ │ +
233 ostream_iterator(const ostream_iterator& __obj) _GLIBCXX_NOEXCEPT
│ │ │ +
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
│ │ │ + │ │ │ +
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 complex< _Tp > operator*(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x times y.
Definition complex:400
│ │ │ +
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:51
│ │ │
ISO C++ entities toplevel namespace is std.
│ │ │ -
ISO C++ 2011 namespace for interacting with the current thread.
Definition std_thread.h:356
│ │ │ -
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
│ │ │ +
Template class basic_istream.
Definition istream:61
│ │ │ +
Template class basic_ostream.
Definition ostream:67
│ │ │ +
is_nothrow_default_constructible
Definition type_traits:1193
│ │ │ +
is_nothrow_copy_constructible
Definition type_traits:1202
│ │ │ +
Basis for explicit traits specializations.
│ │ │ +
Common iterator class.
│ │ │ +
Provides input iterator semantics for streams.
│ │ │ +
istream_iterator(istream_type &__s)
Construct start of input stream iterator.
│ │ │ +
constexpr istream_iterator() noexcept(/*conditional */)
Construct end of input stream iterator.
│ │ │ +
friend bool operator==(const istream_iterator &__x, const istream_iterator &__y) noexcept
Return true if the iterators refer to the same stream, or are both at end-of-stream.
│ │ │ +
Provides output iterator semantics for streams.
│ │ │ +
_CharT char_type
Public typedef.
│ │ │ +
ostream_iterator(ostream_type &__s) noexcept
Construct from an ostream.
│ │ │ +
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,...
│ │ │ +
ptrdiff_t difference_type
Public typedef.
│ │ │ +
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,136 +21,345 @@ │ │ │ │ 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 _t_h_i_s___t_h_r_e_a_d │ │ │ │ -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_>& __rtime) │ │ │ │ -69 { │ │ │ │ -70 if (__rtime <= __rtime.zero()) │ │ │ │ -71 return; │ │ │ │ -72 auto __s = _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n___c_a_s_t_<_c_h_r_o_n_o_:_:_s_e_c_o_n_d_s_>(__rtime); │ │ │ │ -73 auto __ns = _c_h_r_o_n_o_:_:_d_u_r_a_t_i_o_n___c_a_s_t_<_c_h_r_o_n_o_:_:_n_a_n_o_s_e_c_o_n_d_s_>(__rtime - __s); │ │ │ │ -74#ifdef _GLIBCXX_USE_NANOSLEEP │ │ │ │ -75 struct ::timespec __ts = │ │ │ │ -76 { │ │ │ │ -77 static_cast(__s.count()), │ │ │ │ -78 static_cast(__ns.count()) │ │ │ │ -79 }; │ │ │ │ -80 while (::nanosleep(&__ts, &__ts) == -1 && errno == EINTR) │ │ │ │ -81 { } │ │ │ │ -82#else │ │ │ │ -83 __sleep_for(__s, __ns); │ │ │ │ -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_>& __atime) │ │ │ │ -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) │ │ │ │ -99 _s_l_e_e_p___f_o_r(__atime - __now); │ │ │ │ -100 return; │ │ │ │ -101 } │ │ │ │ -102 while (__now < __atime) │ │ │ │ -103 { │ │ │ │ -104 _s_l_e_e_p___f_o_r(__atime - __now); │ │ │ │ -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 <_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_> istream_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. │ │ │ │ +_7_4 _GLIBCXX_CONSTEXPR _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r() │ │ │ │ +75 _GLIBCXX_NOEXCEPT_IF(_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(false) {} │ │ │ │ +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(istream_type& __s) │ │ │ │ +80 : _M_stream(_s_t_d::_____a_d_d_r_e_s_s_o_f(__s)), _M_ok(true) │ │ │ │ +81 { _M_read(); } │ │ │ │ +82 │ │ │ │ +83 _GLIBCXX_CONSTEXPR │ │ │ │ +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& __obj) │ │ │ │ +85 _GLIBCXX_NOEXCEPT_IF(_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(__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 _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 _~_i_s_t_r_e_a_m___i_t_e_r_a_t_o_r() = 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_:_:_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 │ │ │ │ -_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_:_:_d_u_r_a_t_i_o_n___c_a_s_t │ │ │ │ -constexpr __enable_if_is_duration< _ToDur > duration_cast(const duration< _Rep, │ │ │ │ -_Period > &__d) │ │ │ │ -DDeeffiinniittiioonn _c_h_r_o_n_o_._h_:_2_7_5 │ │ │ │ +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 _GLIBCXX_NOEXCEPT │ │ │ │ +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 _GLIBCXX_NOEXCEPT │ │ │ │ +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 = ptrdiff_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) _GLIBCXX_NOEXCEPT │ │ │ │ +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) _GLIBCXX_NOEXCEPT │ │ │ │ +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& __obj) _GLIBCXX_NOEXCEPT │ │ │ │ +234 : _M_stream(__obj._M_stream), _M_string(__obj._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 _o_p_e_r_a_t_o_r_*() _GLIBCXX_NOEXCEPT │ │ │ │ +257 { return *this; } │ │ │ │ +258 │ │ │ │ +259 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r& │ │ │ │ +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_:_:_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_:_:_____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 │ │ │ │ -ISO C++ 2011 namespace for interacting with the current thread. │ │ │ │ -DDeeffiinniittiioonn _s_t_d___t_h_r_e_a_d_._h_:_3_5_6 │ │ │ │ -_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_:_:_b_a_s_i_c___i_s_t_r_e_a_m │ │ │ │ +Template class basic_istream. │ │ │ │ +DDeeffiinniittiioonn _i_s_t_r_e_a_m_:_6_1 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___o_s_t_r_e_a_m │ │ │ │ +Template class basic_ostream. │ │ │ │ +DDeeffiinniittiioonn _o_s_t_r_e_a_m_:_6_7 │ │ │ │ +_s_t_d_:_:_i_s___n_o_t_h_r_o_w___d_e_f_a_u_l_t___c_o_n_s_t_r_u_c_t_i_b_l_e │ │ │ │ +is_nothrow_default_constructible │ │ │ │ +DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_1_9_3 │ │ │ │ +_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_2 │ │ │ │ +_s_t_d_:_:_c_h_a_r___t_r_a_i_t_s │ │ │ │ +Basis for explicit traits specializations. │ │ │ │ +DDeeffiinniittiioonn _c_h_a_r___t_r_a_i_t_s_._h_:_3_2_4 │ │ │ │ +_s_t_d_:_:_i_t_e_r_a_t_o_r │ │ │ │ +Common iterator class. │ │ │ │ +DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h_:_1_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_:_:_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ +ptrdiff_t difference_type │ │ │ │ +Public typedef. │ │ │ │ +DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_2_0_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 │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00392.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stringfwd.h File Reference │ │ │ +libstdc++: std_mutex.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,47 +48,54 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
stringfwd.h File Reference
│ │ │ +
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_t > std::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,17 +1,22 @@ │ │ │ │ libstdc++ │ │ │ │ -stringfwd.h File Reference │ │ │ │ +std_mutex.h File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ +CCllaasssseess │ │ │ │ +struct   _s_t_d_:_:_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 │ │ │ │ - typedef _b_a_s_i_c___s_t_r_i_n_g< char >  _s_t_d_:_:_s_t_r_i_n_g │ │ │ │ -typedef _b_a_s_i_c___s_t_r_i_n_g< char16_t >  _s_t_d_:_:_u_1_6_s_t_r_i_n_g │ │ │ │ -typedef _b_a_s_i_c___s_t_r_i_n_g< char32_t >  _s_t_d_:_:_u_3_2_s_t_r_i_n_g │ │ │ │ - typedef _b_a_s_i_c___s_t_r_i_n_g< wchar_t >  _s_t_d_:_:_w_s_t_r_i_n_g │ │ │ │ +VVaarriiaabblleess │ │ │ │ + constexpr _a_d_o_p_t___l_o_c_k___t  _s_t_d_:_:_a_d_o_p_t___l_o_c_k │ │ │ │ + constexpr _d_e_f_e_r___l_o_c_k___t  _s_t_d_:_:_d_e_f_e_r___l_o_c_k │ │ │ │ +constexpr _t_r_y___t_o___l_o_c_k___t  _s_t_d_:_:_t_r_y___t_o___l_o_c_k │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ This is an internal header file, included by other library headers. Do not │ │ │ │ -attempt to use it directly. Instead, include . │ │ │ │ -Definition in file _s_t_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. │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00392.js │ │ │ ├── js-beautify {} │ │ │ │ @@ -1,6 +1,5 @@ │ │ │ │ var a00392 = [ │ │ │ │ - ["std::string", "a01661.html#ga32db3d9898c44d3b3a578b560f7758cc", null], │ │ │ │ - ["std::u16string", "a01661.html#ga957ec6dee9435a81e37f7f70e711bf09", null], │ │ │ │ - ["std::u32string", "a01661.html#ga83ce9bd7fd0896013d6ef39113119bf5", null], │ │ │ │ - ["std::wstring", "a01661.html#gacc5a707e71ec50089cb9f653282f22f7", null] │ │ │ │ + ["std::adopt_lock", "a01649.html#gad21e19f3b9b1166718c228219723e130", null], │ │ │ │ + ["std::defer_lock", "a01649.html#gaef1e52b34e2d2d6e3850bbd28ff7546a", null], │ │ │ │ + ["std::try_to_lock", "a01649.html#ga845da3c3459b8dc4c6f690039b797dfc", null] │ │ │ │ ]; │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00392_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stringfwd.h Source File │ │ │ +libstdc++: std_mutex.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,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
│ │ │ @@ -75,104 +75,278 @@ │ │ │
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:
│ │ │ +
99 typedef __native_type* native_handle_type;
│ │ │ +
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
│ │ │ +
135 native_handle_type
│ │ │ +
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
│ │ │ +
151 __GTHREAD_COND_INIT_FUNCTION(&_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.
│ │ │ +
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.
│ │ │ +
226 _GLIBCXX17_INLINE constexpr defer_lock_t defer_lock { };
│ │ │ +
227
│ │ │ +
228 /// Tag used to prevent a scoped lock from blocking if a mutex is locked.
│ │ │ +
229 _GLIBCXX17_INLINE constexpr try_to_lock_t try_to_lock { };
│ │ │ +
230
│ │ │ +
231 /// Tag used to make a scoped lock take ownership of a locked mutex.
│ │ │ +
232 _GLIBCXX17_INLINE constexpr adopt_lock_t adopt_lock { };
│ │ │ +
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>
│ │ │ +
│ │ │ +
243 class lock_guard
│ │ │ +
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
│ │ │ +
256 ~lock_guard()
│ │ │ +
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.
│ │ │ -
Managing sequences of characters and character-like objects.
│ │ │ -
Basis for explicit traits specializations.
│ │ │ +
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
│ │ │
│ │ │
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── 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,112 +21,281 @@ │ │ │ │ 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 _c_h_a_r___t_r_a_i_t_s; │ │ │ │ +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 _c_h_a_r___t_r_a_i_t_s; │ │ │ │ -56 │ │ │ │ -57 template<> struct _c_h_a_r___t_r_a_i_t_s; │ │ │ │ -58 │ │ │ │ -59#ifdef _GLIBCXX_USE_CHAR8_T │ │ │ │ -60 template<> struct _c_h_a_r___t_r_a_i_t_s; │ │ │ │ -61#endif │ │ │ │ -62 │ │ │ │ -63#if __cplusplus >= 201103L │ │ │ │ -64 template<> struct _c_h_a_r___t_r_a_i_t_s; │ │ │ │ -65 template<> struct _c_h_a_r___t_r_a_i_t_s; │ │ │ │ -66#endif │ │ │ │ -67 │ │ │ │ -68_GLIBCXX_BEGIN_NAMESPACE_CXX11 │ │ │ │ -69 │ │ │ │ -70 template, │ │ │ │ -71 typename _Alloc = allocator<_CharT> > │ │ │ │ -72 class _b_a_s_i_c___s_t_r_i_n_g; │ │ │ │ -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 mutex : private __mutex_base │ │ │ │ +97 { │ │ │ │ +98 public: │ │ │ │ +99 typedef __native_type* native_handle_type; │ │ │ │ +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 │ │ │ │ +135 native_handle_type │ │ │ │ +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 │ │ │ │ +151 __GTHREAD_COND_INIT_FUNCTION(&_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 defer_lock_t { explicit defer_lock_t() = default; }; │ │ │ │ +217 │ │ │ │ +218 /// Try to acquire ownership of the mutex without blocking. │ │ │ │ +_2_1_9 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. │ │ │ │ +_2_2_3 struct adopt_lock_t { explicit adopt_lock_t() = default; }; │ │ │ │ +224 │ │ │ │ +225 /// Tag used to prevent a scoped lock from acquiring ownership of a mutex. │ │ │ │ +_2_2_6 _GLIBCXX17_INLINE 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 _GLIBCXX17_INLINE 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 _GLIBCXX17_INLINE 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 lock_guard │ │ │ │ +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, _a_d_o_p_t___l_o_c_k___t) noexcept : _M_device(__m) │ │ │ │ +254 { } // calling thread owns mutex │ │ │ │ +255 │ │ │ │ +256 ~lock_guard() │ │ │ │ +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 │ │ │ │ +_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_:_:_b_a_s_i_c___s_t_r_i_n_g │ │ │ │ -Managing sequences of characters and character-like objects. │ │ │ │ -DDeeffiinniittiioonn _b_a_s_i_c___s_t_r_i_n_g_._h_:_8_7 │ │ │ │ -_s_t_d_:_:_c_h_a_r___t_r_a_i_t_s │ │ │ │ -Basis for explicit traits specializations. │ │ │ │ -DDeeffiinniittiioonn _c_h_a_r___t_r_a_i_t_s_._h_:_3_2_4 │ │ │ │ +_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 │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00395.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: streambuf.tcc File Reference │ │ │ +libstdc++: fstream.tcc File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,53 +48,46 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
streambuf.tcc File Reference
│ │ │ +
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 > *__sbin, basic_streambuf< _CharT, _Traits > *__sbout, bool &__ineof)
#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,26 +1,18 @@ │ │ │ │ libstdc++ │ │ │ │ -streambuf.tcc File Reference │ │ │ │ +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 │ │ │ │ -_s_t_r_e_a_m_s_i_z_e  _s_t_d_:_:_____c_o_p_y___s_t_r_e_a_m_b_u_f_s (_b_a_s_i_c___s_t_r_e_a_m_b_u_f< _CharT, _Traits > *__sbin, │ │ │ │ - _b_a_s_i_c___s_t_r_e_a_m_b_u_f< _CharT, _Traits > *__sbout) │ │ │ │ -template │ │ │ │ -_s_t_r_e_a_m_s_i_z_e  _s_t_d_:_:_____c_o_p_y___s_t_r_e_a_m_b_u_f_s___e_o_f (_b_a_s_i_c___s_t_r_e_a_m_b_u_f< _CharT, _Traits > │ │ │ │ - *__sbin, _b_a_s_i_c___s_t_r_e_a_m_b_u_f< _CharT, _Traits > *__sbout, bool │ │ │ │ - &__ineof) │ │ │ │ +#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. │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00395_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: streambuf.tcc Source File │ │ │ +libstdc++: fstream.tcc Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,18 +48,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)
│ │ │ @@ -75,185 +75,1213 @@ │ │ │
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;
│ │ │ -
55 const streamsize __len = std::min(__buf_len, __remaining);
│ │ │ -
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>
│ │ │ - │ │ │ -
│ │ │ - │ │ │ -
80 xsputn(const char_type* __s, streamsize __n)
│ │ │ -
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;
│ │ │ -
89 const streamsize __len = std::min(__buf_len, __remaining);
│ │ │ -
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,
│ │ │ - │ │ │ -
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>*,
│ │ │ - │ │ │ -
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>*,
│ │ │ - │ │ │ -
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
│ │ │ + │ │ │ + │ │ │ +
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
│ │ │ + │ │ │ + │ │ │ +
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(),
│ │ │ + │ │ │ +
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 = std::__try_use_facet<__codecvt_type>(this->_M_buf_locale);
│ │ │ +
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
│ │ │ + │ │ │ +
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 {
│ │ │ +
181 __filebuf_type *__ret = 0;
│ │ │ +
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>
│ │ │ +
247 typename basic_filebuf<_CharT, _Traits>::__filebuf_type*
│ │ │ +
│ │ │ + │ │ │ +
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 {
│ │ │ +
259 basic_filebuf *__fb;
│ │ │ +
260 __close_sentry (basic_filebuf *__fbi): __fb(__fbi) { }
│ │ │ +
261 ~__close_sentry ()
│ │ │ +
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...
│ │ │ + │ │ │ +
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)
│ │ │ +
367 __blen = __rlen = __buflen * __enc;
│ │ │ +
368 else
│ │ │ +
369 {
│ │ │ +
370 __blen = __buflen + _M_codecvt->max_length() - 1;
│ │ │ +
│ │ │ +
371 __rlen = __buflen;
│ │ │ +
372 }
│ │ │ +
373 const streamsize __remainder = _M_ext_end - _M_ext_next;
│ │ │ +
374 __rlen = __rlen > __remainder ? __rlen - __remainder : 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() && __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;
│ │ │ +
430 __ilen = std::min(__avail, __buflen);
│ │ │ +
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);
│ │ │ +
│ │ │ + │ │ │ +
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 {
│ │ │ + │ │ │ +
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
│ │ │ + │ │ │ +
547 if (__testout)
│ │ │ +
548 {
│ │ │ +
549 if (_M_reading)
│ │ │ +
550 {
│ │ │ + │ │ │ +
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
│ │ │ + │ │ │ +
606 _M_convert_to_external(_CharT* __ibuf, streamsize __ilen)
│ │ │ +
607 {
│ │ │ +
608 // Sizes of external and pending output.
│ │ │ +
609 streamsize __elen;
│ │ │ +
610 streamsize __plen;
│ │ │ +
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 }
│ │ │ + │ │ │ +
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).
│ │ │ +
714 streamsize __len;
│ │ │ +
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
│ │ │ + │ │ │ +
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>
│ │ │ +
798 typename basic_filebuf<_CharT, _Traits>::__streambuf_type*
│ │ │ +
│ │ │ + │ │ │ +
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)
│ │ │ + │ │ │ +
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 {
│ │ │ +
874 __ret = __file_off + __computed_off;
│ │ │ +
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.
│ │ │ + │ │ │ +
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;
│ │ │ +
917 __ret = __file_off;
│ │ │ +
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>
│ │ │ + │ │ │ +
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
│ │ │ + │ │ │ + │ │ │ +
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
│ │ │ +
1031 = __try_use_facet<__codecvt_type>(__loc);
│ │ │ +
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().
│ │ │ + │ │ │ +
1054 + _M_codecvt->length(_M_state_last, _M_ext_buf,
│ │ │ + │ │ │ +
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
│ │ │ + │ │ │ +
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
│ │ │ -
The actual work of input and output (interface).
Definition streambuf:125
│ │ │ -
traits_type::int_type int_type
Definition streambuf:135
│ │ │ +
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
│ │ │ +
char_type _M_pback
Definition fstream:174
│ │ │ +
virtual streamsize showmanyc()
Investigating the data available.
Definition fstream.tcc:297
│ │ │ +
ios_base::openmode _M_mode
Place to stash in || out || in | out settings for current filebuf.
Definition fstream:131
│ │ │ +
streamsize _M_ext_buf_size
Definition fstream:193
│ │ │ +
char_type * _M_pback_cur_save
Definition fstream:175
│ │ │ +
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
│ │ │ +
bool is_open() const
Returns true if the external file is open.
Definition fstream:275
│ │ │ +
size_t _M_buf_size
Definition fstream:153
│ │ │ +
__filebuf_type * close()
Closes the currently associated file.
Definition fstream.tcc:249
│ │ │ +
char_type * _M_pback_end_save
Definition fstream:176
│ │ │ +
char * _M_ext_buf
Definition fstream:188
│ │ │ +
void _M_destroy_pback()
Definition fstream:226
│ │ │ +
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
│ │ │ +
char_type * _M_buf
Pointer to the beginning of internal buffer.
Definition fstream:146
│ │ │ +
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
│ │ │ +
void _M_create_pback()
Definition fstream:209
│ │ │ + │ │ │ +
__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
│ │ │ +
void _M_set_buffer(streamsize __off)
Definition fstream:499
│ │ │ +
virtual int sync()
Synchronizes the buffer arrays with the controlled sequences.
Definition fstream.tcc:1009
│ │ │ +
const char * _M_ext_next
Definition fstream:200
│ │ │ +
virtual __streambuf_type * setbuf(char_type *__s, streamsize __n)
Manipulates the buffer.
Definition fstream.tcc:800
│ │ │ +
Controlling input for files.
Definition fstream:533
│ │ │ +
Controlling output for files.
Definition fstream:803
│ │ │ +
Controlling input and output for files.
Definition fstream:1075
│ │ │
char_type * epptr() const
Access to the put area.
Definition streambuf:542
│ │ │ -
virtual int_type overflow(int_type __c=traits_type::eof())
Consumes data from the buffer; writes to the controlled sequence.
Definition streambuf:775
│ │ │ -
virtual streamsize xsputn(const char_type *__s, streamsize __n)
Multiple character insertion.
Definition streambuf.tcc:80
│ │ │ +
virtual streamsize xsputn(const char_type *__s, streamsize __n)
│ │ │
char_type * pptr() const
Access to the put area.
Definition streambuf:539
│ │ │ - │ │ │ -
virtual int_type uflow()
Fetches more data from the controlled sequence.
Definition streambuf:707
│ │ │ +
void setg(char_type *__gbeg, char_type *__gnext, char_type *__gend)
Setting the three read area pointers.
Definition streambuf:516
│ │ │ +
char_type * eback() const
Access to the get area.
Definition streambuf:489
│ │ │
char_type * egptr() const
Access to the get area.
Definition streambuf:495
│ │ │
char_type * gptr() const
Access to the get area.
Definition streambuf:492
│ │ │ -
virtual streamsize xsgetn(char_type *__s, streamsize __n)
Multiple character extraction.
Definition streambuf.tcc:46
│ │ │ -
int_type snextc()
Getting the next character.
Definition streambuf:305
│ │ │ -
int_type sgetc()
Getting the next character.
Definition streambuf:345
│ │ │ -
int_type sputc(char_type __c)
Entry point for all single-character output functions.
Definition streambuf:431
│ │ │ +
virtual streamsize xsgetn(char_type *__s, streamsize __n)
│ │ │ +
void gbump(int __n)
Moving the read position.
Definition streambuf:505
│ │ │ +
void pbump(int __n)
Moving the write position.
Definition streambuf:552
│ │ │ +
char_type * pbase() const
Access to the put area.
Definition streambuf:536
│ │ │ +
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
│ │ │ +
_Ios_Seekdir seekdir
This is an enumerated type.
Definition ios_base.h:512
│ │ │ +
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,218 +21,1310 @@ │ │ │ │ 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 __ret = 0; │ │ │ │ -49 while (__ret < __n) │ │ │ │ -50 { │ │ │ │ -51 const _s_t_r_e_a_m_s_i_z_e __buf_len = this->_e_g_p_t_r() - this->_g_p_t_r(); │ │ │ │ -52 if (__buf_len) │ │ │ │ -53 { │ │ │ │ -54 const _s_t_r_e_a_m_s_i_z_e __remaining = __n - __ret; │ │ │ │ -55 const _s_t_r_e_a_m_s_i_z_e __len = _s_t_d_:_:_m_i_n(__buf_len, __remaining); │ │ │ │ -56 traits_type::copy(__s, this->_g_p_t_r(), __len); │ │ │ │ -57 __ret += __len; │ │ │ │ -58 __s += __len; │ │ │ │ -59 this->__safe_gbump(__len); │ │ │ │ -60 } │ │ │ │ -61 │ │ │ │ -62 if (__ret < __n) │ │ │ │ -63 { │ │ │ │ -64 const _i_n_t___t_y_p_e __c = this->_u_f_l_o_w(); │ │ │ │ -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 │ │ │ │ -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 __ret = 0; │ │ │ │ -83 while (__ret < __n) │ │ │ │ -84 { │ │ │ │ -85 const _s_t_r_e_a_m_s_i_z_e __buf_len = this->_e_p_p_t_r() - this->_p_p_t_r(); │ │ │ │ -86 if (__buf_len) │ │ │ │ -87 { │ │ │ │ -88 const _s_t_r_e_a_m_s_i_z_e __remaining = __n - __ret; │ │ │ │ -89 const _s_t_r_e_a_m_s_i_z_e __len = _s_t_d_:_:_m_i_n(__buf_len, __remaining); │ │ │ │ -90 traits_type::copy(this->_p_p_t_r(), __s, __len); │ │ │ │ -91 __ret += __len; │ │ │ │ -92 __s += __len; │ │ │ │ -93 this->__safe_pbump(__len); │ │ │ │ -94 } │ │ │ │ -95 │ │ │ │ -96 if (__ret < __n) │ │ │ │ -97 { │ │ │ │ -98 _i_n_t___t_y_p_e __c = this->_o_v_e_r_f_l_o_w(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 │ │ │ │ -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_>* __sbin, │ │ │ │ -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_>* __sbout, │ │ │ │ -118 bool& __ineof) │ │ │ │ -119 { │ │ │ │ -120 _s_t_r_e_a_m_s_i_z_e __ret = 0; │ │ │ │ -121 __ineof = true; │ │ │ │ -122 typename _Traits::int_type __c = __sbin->_s_g_e_t_c(); │ │ │ │ -123 while (!_Traits::eq_int_type(__c, _Traits::eof())) │ │ │ │ -124 { │ │ │ │ -125 __c = __sbout->_s_p_u_t_c(_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->_s_n_e_x_t_c(); │ │ │ │ -133 } │ │ │ │ -134 return __ret; │ │ │ │ -135 } │ │ │ │ -136 │ │ │ │ -137 template │ │ │ │ -138 inline _s_t_r_e_a_m_s_i_z_e │ │ │ │ -139 __copy_streambufs(_b_a_s_i_c___s_t_r_e_a_m_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>* __sbin, │ │ │ │ -140 _b_a_s_i_c___s_t_r_e_a_m_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>* __sbout) │ │ │ │ -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 _b_a_s_i_c___s_t_r_e_a_m_b_u_f_<_c_h_a_r_>; │ │ │ │ -150 │ │ │ │ -151 extern template │ │ │ │ -152 _s_t_r_e_a_m_s_i_z_e │ │ │ │ -153 __copy_streambufs(_b_a_s_i_c___s_t_r_e_a_m_b_u_f_<_c_h_a_r_>*, │ │ │ │ -154 _b_a_s_i_c___s_t_r_e_a_m_b_u_f_<_c_h_a_r_>*); │ │ │ │ -155 │ │ │ │ -156#ifdef _GLIBCXX_USE_WCHAR_T │ │ │ │ -157 extern template class _b_a_s_i_c___s_t_r_e_a_m_b_u_f_<_w_c_h_a_r___t_>; │ │ │ │ -158 │ │ │ │ -159 extern template │ │ │ │ -160 _s_t_r_e_a_m_s_i_z_e │ │ │ │ -161 __copy_streambufs(_b_a_s_i_c___s_t_r_e_a_m_b_u_f_<_w_c_h_a_r___t_>*, │ │ │ │ -162 _b_a_s_i_c___s_t_r_e_a_m_b_u_f_<_w_c_h_a_r___t_>*); │ │ │ │ -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 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +50_ ___M___a_l_l_o_c_a_t_e___i_n_t_e_r_n_a_l___b_u_f_f_e_r() │ │ │ │ +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 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +64_ ___M___d_e_s_t_r_o_y___i_n_t_e_r_n_a_l___b_u_f_f_e_r() 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() : __streambuf_type(), _M_lock(), _M_file(&_M_lock), │ │ │ │ +82 ___M___m_o_d_e(ios_base::openmode(0)), _M_state_beg(), _M_state_cur(), │ │ │ │ +83 _M_state_last(), ___M___b_u_f(0), ___M___b_u_f___s_i_z_e(_GLIBCXX_BUFSIZ), │ │ │ │ +84 _M_buf_allocated(false), ___M___r_e_a_d_i_n_g(false), _M_writing(false), ___M___p_b_a_c_k(), │ │ │ │ +85 ___M___p_b_a_c_k___c_u_r___s_a_v_e(0), ___M___p_b_a_c_k___e_n_d___s_a_v_e(0), ___M___p_b_a_c_k___i_n_i_t(false), │ │ │ │ +86 _M_codecvt(0), ___M___e_x_t___b_u_f(0), ___M___e_x_t___b_u_f___s_i_z_e(0), ___M___e_x_t___n_e_x_t(0), │ │ │ │ +87 _M_ext_end(0) │ │ │ │ +88 { │ │ │ │ +89 _M_codecvt = std::__try_use_facet<__codecvt_type>(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&& __rhs) │ │ │ │ +96 : __streambuf_type(__rhs), │ │ │ │ +97 _M_lock(), _M_file(_s_t_d::_m_o_v_e(__rhs._M_file), &_M_lock), │ │ │ │ +98 _M_mode(_s_t_d::__exchange(__rhs._M_mode, _i_o_s___b_a_s_e::openmode(0))), │ │ │ │ +99 _M_state_beg(_s_t_d::_m_o_v_e(__rhs._M_state_beg)), │ │ │ │ +100 _M_state_cur(_s_t_d::_m_o_v_e(__rhs._M_state_cur)), │ │ │ │ +101 _M_state_last(_s_t_d::_m_o_v_e(__rhs._M_state_last)), │ │ │ │ +102 _M_buf(_s_t_d::__exchange(__rhs._M_buf, nullptr)), │ │ │ │ +103 _M_buf_size(_s_t_d::__exchange(__rhs._M_buf_size, 1)), │ │ │ │ +104 _M_buf_allocated(_s_t_d::__exchange(__rhs._M_buf_allocated, false)), │ │ │ │ +105 _M_reading(_s_t_d::__exchange(__rhs._M_reading, false)), │ │ │ │ +106 _M_writing(_s_t_d::__exchange(__rhs._M_writing, false)), │ │ │ │ +107 _M_pback(__rhs._M_pback), │ │ │ │ +108 _M_pback_cur_save(_s_t_d::__exchange(__rhs._M_pback_cur_save, nullptr)), │ │ │ │ +109 _M_pback_end_save(_s_t_d::__exchange(__rhs._M_pback_end_save, nullptr)), │ │ │ │ +110 _M_pback_init(_s_t_d::__exchange(__rhs._M_pback_init, false)), │ │ │ │ +111 _M_codecvt(__rhs._M_codecvt), │ │ │ │ +112 _M_ext_buf(_s_t_d::__exchange(__rhs._M_ext_buf, nullptr)), │ │ │ │ +113 _M_ext_buf_size(_s_t_d::__exchange(__rhs._M_ext_buf_size, 0)), │ │ │ │ +114 _M_ext_next(_s_t_d::__exchange(__rhs._M_ext_next, nullptr)), │ │ │ │ +115 _M_ext_end(_s_t_d::__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 │ │ │ │ +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 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +153_ _s_w_a_p(_b_a_s_i_c___f_i_l_e_b_u_f& __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, _i_o_s___b_a_s_e_:_:_o_p_e_n_m_o_d_e __mode) │ │ │ │ +180 { │ │ │ │ +181 __filebuf_type *__ret = 0; │ │ │ │ +182 if (!this->_i_s___o_p_e_n()) │ │ │ │ +183 { │ │ │ │ +184 _M_file.open(__s, __mode); │ │ │ │ +185 if (this->_i_s___o_p_e_n()) │ │ │ │ +186 { │ │ │ │ +187 _M_allocate_internal_buffer(); │ │ │ │ +188 ___M___m_o_d_e = __mode; │ │ │ │ +189 │ │ │ │ +190 // Setup initial buffer to 'uncommitted' mode. │ │ │ │ +191 ___M___r_e_a_d_i_n_g = false; │ │ │ │ +192 _M_writing = false; │ │ │ │ +193 ___M___s_e_t___b_u_f_f_e_r(-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 & _i_o_s___b_a_s_e_:_:_a_t_e) │ │ │ │ +200 && this->_s_e_e_k_o_f_f(0, _i_o_s___b_a_s_e_:_:_e_n_d, __mode) │ │ │ │ +201 == pos_type(off_type(-1))) │ │ │ │ +202 this->_c_l_o_s_e(); │ │ │ │ +203 else │ │ │ │ +204 __ret = this; │ │ │ │ +205 } │ │ │ │ +206 } │ │ │ │ +207 return __ret; │ │ │ │ +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, _i_o_s___b_a_s_e_:_:_o_p_e_n_m_o_d_e __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 & _i_o_s___b_a_s_e_:_:_a_t_e) │ │ │ │ +235 && this->seekoff(0, _i_o_s___b_a_s_e_:_:_e_n_d, __mode) │ │ │ │ +236 == _p_o_s___t_y_p_e(_o_f_f___t_y_p_e(-1))) │ │ │ │ +237 this->close(); │ │ │ │ +238 else │ │ │ │ +239 __ret = this; │ │ │ │ +240 } │ │ │ │ +241 } │ │ │ │ +242 return __ret; │ │ │ │ +243 } │ │ │ │ +244#endif // HAVE__WFOPEN && USE_WCHAR_T │ │ │ │ +_2_4_5 │ │ │ │ +246 template │ │ │ │ +247 typename basic_filebuf<_CharT, _Traits>::__filebuf_type* │ │ │ │ +_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->_i_s___o_p_e_n()) │ │ │ │ +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 { │ │ │ │ +259 _b_a_s_i_c___f_i_l_e_b_u_f *__fb; │ │ │ │ +260 __close_sentry (_b_a_s_i_c___f_i_l_e_b_u_f *__fbi): __fb(__fbi) { } │ │ │ │ +261 ~__close_sentry () │ │ │ │ +262 { │ │ │ │ +263 __fb->___M___m_o_d_e = _i_o_s___b_a_s_e_:_:_o_p_e_n_m_o_d_e(0); │ │ │ │ +264 __fb->___M___p_b_a_c_k___i_n_i_t = false; │ │ │ │ +265 __fb->_M_destroy_internal_buffer(); │ │ │ │ +266 __fb->___M___r_e_a_d_i_n_g = false; │ │ │ │ +267 __fb->_M_writing = false; │ │ │ │ +268 __fb->___M___s_e_t___b_u_f_f_e_r(-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 │ │ │ │ +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 __ret = -1; │ │ │ │ +300 const bool __testin = ___M___m_o_d_e & _i_o_s___b_a_s_e_:_:_i_n; │ │ │ │ +301 if (__testin && this->_i_s___o_p_e_n()) │ │ │ │ +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->_e_g_p_t_r() - this->_g_p_t_r(); │ │ │ │ +306 │ │ │ │ +307#if _GLIBCXX_HAVE_DOS_BASED_FILESYSTEM │ │ │ │ +308 // About this workaround, see libstdc++/20806. │ │ │ │ +309 const bool __testbinary = ___M___m_o_d_e & _i_o_s___b_a_s_e_:_:_b_i_n_a_r_y; │ │ │ │ +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 │ │ │ │ +_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 __ret = traits_type::eof(); │ │ │ │ +326 const bool __testin = ___M___m_o_d_e & _i_o_s___b_a_s_e_:_:_i_n; │ │ │ │ +327 if (__testin) │ │ │ │ +328 { │ │ │ │ +329 if (_M_writing) │ │ │ │ +330 { │ │ │ │ +331 if (_o_v_e_r_f_l_o_w() == traits_type::eof()) │ │ │ │ +332 return __ret; │ │ │ │ +333 ___M___s_e_t___b_u_f_f_e_r(-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___d_e_s_t_r_o_y___p_b_a_c_k(); │ │ │ │ +340 │ │ │ │ +341 if (this->_g_p_t_r() < this->_e_g_p_t_r()) │ │ │ │ +342 return traits_type::to_int_type(*this->_g_p_t_r()); │ │ │ │ +343 │ │ │ │ +344 // Get and convert input sequence. │ │ │ │ +345 const size_t __buflen = ___M___b_u_f___s_i_z_e > 1 ? ___M___b_u_f___s_i_z_e - 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 _s_t_r_e_a_m_s_i_z_e __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(this->_e_b_a_c_k()), │ │ │ │ +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 _s_t_r_e_a_m_s_i_z_e __blen; // Minimum buffer size. │ │ │ │ +365 _s_t_r_e_a_m_s_i_z_e __rlen; // Number of chars to read. │ │ │ │ +366 if (__enc > 0) │ │ │ │ +367 __blen = __rlen = __buflen * __enc; │ │ │ │ +368 else │ │ │ │ +369 { │ │ │ │ +370 __blen = __buflen + _M_codecvt->max_length() - 1; │ │ │ │ +_3_7_1 __rlen = __buflen; │ │ │ │ +372 } │ │ │ │ +373 const _s_t_r_e_a_m_s_i_z_e __remainder = _M_ext_end - _M_ext_next; │ │ │ │ +374 __rlen = __rlen > __remainder ? __rlen - __remainder : 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() && __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")); │ │ │ │ +_4_1_2 } │ │ │ │ +413 _s_t_r_e_a_m_s_i_z_e __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 } │ │ │ │ +_4_2_0 │ │ │ │ +421 char_type* __iend = this->_e_b_a_c_k(); │ │ │ │ +422 if (___M___e_x_t___n_e_x_t < _M_ext_end) │ │ │ │ +_4_2_3 __r = _M_codecvt->in(_M_state_cur, ___M___e_x_t___n_e_x_t, │ │ │ │ +424 _M_ext_end, ___M___e_x_t___n_e_x_t, │ │ │ │ +425 this->_e_b_a_c_k(), │ │ │ │ +426 this->_e_b_a_c_k() + __buflen, __iend); │ │ │ │ +427 if (__r == codecvt_base::noconv) │ │ │ │ +428 { │ │ │ │ +429 size_t __avail = _M_ext_end - ___M___e_x_t___b_u_f; │ │ │ │ +430 __ilen = _s_t_d_:_:_m_i_n(__avail, __buflen); │ │ │ │ +431 traits_type::copy(this->_e_b_a_c_k(), │ │ │ │ +432 reinterpret_cast │ │ │ │ +_4_3_3 (___M___e_x_t___b_u_f), __ilen); │ │ │ │ +434 ___M___e_x_t___n_e_x_t = ___M___e_x_t___b_u_f + __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); │ │ │ │ +_4_5_3 ___M___r_e_a_d_i_n_g = true; │ │ │ │ +454 __ret = traits_type::to_int_type(*this->_g_p_t_r()); │ │ │ │ +455 } │ │ │ │ +_4_5_6 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 │ │ │ │ +_4_6_0 // intervening seek. │ │ │ │ +461 ___M___s_e_t___b_u_f_f_e_r(-1); │ │ │ │ +462 ___M___r_e_a_d_i_n_g = 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 __ret; │ │ │ │ +_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 __ret = traits_type::eof(); │ │ │ │ +485 const bool __testin = ___M___m_o_d_e & _i_o_s___b_a_s_e_:_:_i_n; │ │ │ │ +486 if (__testin) │ │ │ │ +487 { │ │ │ │ +488 if (_M_writing) │ │ │ │ +489 { │ │ │ │ +490 if (_o_v_e_r_f_l_o_w() == traits_type::eof()) │ │ │ │ +491 return __ret; │ │ │ │ +492 ___M___s_e_t___b_u_f_f_e_r(-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___p_b_a_c_k___i_n_i_t; │ │ │ │ +498 const bool __testeof = traits_type::eq_int_type(__i, __ret); │ │ │ │ +499 int_type __tmp; │ │ │ │ +500 if (this->_e_b_a_c_k() < this->_g_p_t_r()) │ │ │ │ +501 { │ │ │ │ +502 this->_g_b_u_m_p(-1); │ │ │ │ +503 __tmp = traits_type::to_int_type(*this->_g_p_t_r()); │ │ │ │ +504 } │ │ │ │ +505 else if (this->_s_e_e_k_o_f_f(-1, _i_o_s___b_a_s_e_:_:_c_u_r) != pos_type(off_type(-1))) │ │ │ │ +506 { │ │ │ │ +507 __tmp = this->_u_n_d_e_r_f_l_o_w(); │ │ │ │ +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___c_r_e_a_t_e___p_b_a_c_k(); │ │ │ │ +530 ___M___r_e_a_d_i_n_g = true; │ │ │ │ +531 *this->_g_p_t_r() = traits_type::to_char_type(__i); │ │ │ │ +532 __ret = __i; │ │ │ │ +533 } │ │ │ │ +534 } │ │ │ │ +535 return __ret; │ │ │ │ +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 __ret = traits_type::eof(); │ │ │ │ +544 const bool __testeof = traits_type::eq_int_type(__c, __ret); │ │ │ │ +545 const bool __testout = (___M___m_o_d_e & _i_o_s___b_a_s_e_:_:_o_u_t │ │ │ │ +546 || ___M___m_o_d_e & _i_o_s___b_a_s_e_:_:_a_p_p); │ │ │ │ +547 if (__testout) │ │ │ │ +548 { │ │ │ │ +549 if (___M___r_e_a_d_i_n_g) │ │ │ │ +550 { │ │ │ │ +551 ___M___d_e_s_t_r_o_y___p_b_a_c_k(); │ │ │ │ +552 const int __gptr_off = _M_get_ext_pos(_M_state_last); │ │ │ │ +553 if (_M_seek(__gptr_off, _i_o_s___b_a_s_e_:_:_c_u_r, _M_state_last) │ │ │ │ +554 == pos_type(off_type(-1))) │ │ │ │ +555 return __ret; │ │ │ │ +556 } │ │ │ │ +557 if (this->_p_b_a_s_e() < this->_p_p_t_r()) │ │ │ │ +558 { │ │ │ │ +559 // If appropriate, append the overflow char. │ │ │ │ +560 if (!__testeof) │ │ │ │ +561 { │ │ │ │ +562 *this->_p_p_t_r() = traits_type::to_char_type(__c); │ │ │ │ +563 this->_p_b_u_m_p(1); │ │ │ │ +564 } │ │ │ │ +565 │ │ │ │ +566 // Convert pending sequence to external representation, │ │ │ │ +567 // and output. │ │ │ │ +568 if (_M_convert_to_external(this->_p_b_a_s_e(), │ │ │ │ +569 this->_p_p_t_r() - this->_p_b_a_s_e())) │ │ │ │ +570 { │ │ │ │ +571 ___M___s_e_t___b_u_f_f_e_r(0); │ │ │ │ +572 __ret = traits_type::not_eof(__c); │ │ │ │ +573 } │ │ │ │ +574 } │ │ │ │ +575 else if (___M___b_u_f___s_i_z_e > 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___s_e_t___b_u_f_f_e_r(0); │ │ │ │ +581 _M_writing = true; │ │ │ │ +582 if (!__testeof) │ │ │ │ +583 { │ │ │ │ +584 *this->_p_p_t_r() = traits_type::to_char_type(__c); │ │ │ │ +585 this->_p_b_u_m_p(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 │ │ │ │ +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* __ibuf, _s_t_r_e_a_m_s_i_z_e __ilen) │ │ │ │ +607 { │ │ │ │ +608 // Sizes of external and pending output. │ │ │ │ +609 _s_t_r_e_a_m_s_i_z_e __elen; │ │ │ │ +610 _s_t_r_e_a_m_s_i_z_e __plen; │ │ │ │ +611 if (__check_facet(_M_codecvt).always_noconv()) │ │ │ │ +612 { │ │ │ │ +613 __elen = _M_file.xsputn(reinterpret_cast(__ibuf), __ilen); │ │ │ │ +614 __plen = __ilen; │ │ │ │ +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 __ret = 0; │ │ │ │ +673 if (___M___p_b_a_c_k___i_n_i_t) │ │ │ │ +674 { │ │ │ │ +675 if (__n > 0 && this->_g_p_t_r() == this->_e_b_a_c_k()) │ │ │ │ +676 { │ │ │ │ +677 *__s++ = *this->_g_p_t_r(); // emulate non-underflowing sbumpc │ │ │ │ +678 this->_g_b_u_m_p(1); │ │ │ │ +679 __ret = 1; │ │ │ │ +680 --__n; │ │ │ │ +681 } │ │ │ │ +682 ___M___d_e_s_t_r_o_y___p_b_a_c_k(); │ │ │ │ +683 } │ │ │ │ +684 else if (_M_writing) │ │ │ │ +685 { │ │ │ │ +686 if (_o_v_e_r_f_l_o_w() == traits_type::eof()) │ │ │ │ +687 return __ret; │ │ │ │ +688 ___M___s_e_t___b_u_f_f_e_r(-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___m_o_d_e & _i_o_s___b_a_s_e_:_:_i_n; │ │ │ │ +696 const _s_t_r_e_a_m_s_i_z_e __buflen = ___M___b_u_f___s_i_z_e > 1 ? ___M___b_u_f___s_i_z_e - 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 _s_t_r_e_a_m_s_i_z_e __avail = this->_e_g_p_t_r() - this->_g_p_t_r(); │ │ │ │ +703 if (__avail != 0) │ │ │ │ +704 { │ │ │ │ +705 traits_type::copy(__s, this->_g_p_t_r(), __avail); │ │ │ │ +706 __s += __avail; │ │ │ │ +707 this->_s_e_t_g(this->_e_b_a_c_k(), this->_g_p_t_r() + __avail, this->_e_g_p_t_r()); │ │ │ │ +708 __ret += __avail; │ │ │ │ +709 __n -= __avail; │ │ │ │ +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 __len; │ │ │ │ +715 for (;;) │ │ │ │ +716 { │ │ │ │ +717 __len = _M_file.xsgetn(reinterpret_cast(__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___r_e_a_d_i_n_g = 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___s_e_t___b_u_f_f_e_r(-1); │ │ │ │ +743 ___M___r_e_a_d_i_n_g = false; │ │ │ │ +744 } │ │ │ │ +745 } │ │ │ │ +746 else │ │ │ │ +747 __ret += _____s_t_r_e_a_m_b_u_f___t_y_p_e_:_:_x_s_g_e_t_n(__s, __n); │ │ │ │ +748 │ │ │ │ +749 return __ret; │ │ │ │ +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 __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___m_o_d_e & _i_o_s___b_a_s_e_:_:_o_u_t │ │ │ │ +762 || ___M___m_o_d_e & _i_o_s___b_a_s_e_:_:_a_p_p); │ │ │ │ +763 if (__check_facet(_M_codecvt).always_noconv() │ │ │ │ +764 && __testout && !___M___r_e_a_d_i_n_g) │ │ │ │ +765 { │ │ │ │ +766 _s_t_r_e_a_m_s_i_z_e __bufavail = this->_e_p_p_t_r() - this->_p_p_t_r(); │ │ │ │ +767 │ │ │ │ +768 // Don't mistake 'uncommitted' mode buffered with unbuffered. │ │ │ │ +769 if (!_M_writing && ___M___b_u_f___s_i_z_e > 1) │ │ │ │ +770 __bufavail = ___M___b_u_f___s_i_z_e - 1; │ │ │ │ +771 │ │ │ │ +772 if (__n >= __bufavail) │ │ │ │ +773 { │ │ │ │ +774 const _s_t_r_e_a_m_s_i_z_e __buffill = this->_p_p_t_r() - this->_p_b_a_s_e(); │ │ │ │ +775 const char* __buf = reinterpret_cast(this->_p_b_a_s_e()); │ │ │ │ +776 __ret = _M_file.xsputn_2(__buf, __buffill, │ │ │ │ +777 reinterpret_cast(__s), │ │ │ │ +778 __n); │ │ │ │ +779 if (__ret == __buffill + __n) │ │ │ │ +780 { │ │ │ │ +781 ___M___s_e_t___b_u_f_f_e_r(0); │ │ │ │ +782 _M_writing = true; │ │ │ │ +783 } │ │ │ │ +784 if (__ret > __buffill) │ │ │ │ +785 __ret -= __buffill; │ │ │ │ +786 else │ │ │ │ +787 __ret = 0; │ │ │ │ +788 } │ │ │ │ +789 else │ │ │ │ +790 __ret = _____s_t_r_e_a_m_b_u_f___t_y_p_e_:_:_x_s_p_u_t_n(__s, __n); │ │ │ │ +791 } │ │ │ │ +792 else │ │ │ │ +793 __ret = _____s_t_r_e_a_m_b_u_f___t_y_p_e_:_:_x_s_p_u_t_n(__s, __n); │ │ │ │ +794 return __ret; │ │ │ │ +795 } │ │ │ │ +796 │ │ │ │ +797 template │ │ │ │ +798 typename basic_filebuf<_CharT, _Traits>::__streambuf_type* │ │ │ │ +_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->_i_s___o_p_e_n()) │ │ │ │ +803 { │ │ │ │ +804 if (__s == 0 && __n == 0) │ │ │ │ +805 ___M___b_u_f___s_i_z_e = 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___b_u_f = __s; │ │ │ │ +817 ___M___b_u_f___s_i_z_e = __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 __off, _i_o_s___b_a_s_e_:_:_s_e_e_k_d_i_r __way, _i_o_s___b_a_s_e_:_:_o_p_e_n_m_o_d_e) │ │ │ │ +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->_i_s___o_p_e_n() && !__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 == _i_o_s___b_a_s_e_:_:_c_u_r && __off == 0 │ │ │ │ +846 && (!_M_writing || _M_codecvt->always_noconv()); │ │ │ │ +847 │ │ │ │ +848 // Ditch any pback buffers to avoid confusion. │ │ │ │ +849 if (!__no_movement) │ │ │ │ +850 ___M___d_e_s_t_r_o_y___p_b_a_c_k(); │ │ │ │ +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___r_e_a_d_i_n_g && __way == _i_o_s___b_a_s_e_:_:_c_u_r) │ │ │ │ +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->_p_p_t_r() - this->_p_b_a_s_e(); │ │ │ │ +870 │ │ │ │ +871 off_type __file_off = _M_file.seekoff(0, _i_o_s___b_a_s_e_:_:_c_u_r); │ │ │ │ +872 if (__file_off != off_type(-1)) │ │ │ │ +873 { │ │ │ │ +874 __ret = __file_off + __computed_off; │ │ │ │ +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 │ │ │ │ +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 __pos, _i_o_s___b_a_s_e_:_:_o_p_e_n_m_o_d_e) │ │ │ │ +890 { │ │ │ │ +891 pos_type __ret = pos_type(off_type(-1)); │ │ │ │ +892 if (this->_i_s___o_p_e_n()) │ │ │ │ +893 { │ │ │ │ +894 // Ditch any pback buffers to avoid confusion. │ │ │ │ +895 ___M___d_e_s_t_r_o_y___p_b_a_c_k(); │ │ │ │ +896 __ret = _M_seek(off_type(__pos), _i_o_s___b_a_s_e_:_:_b_e_g, __pos.state()); │ │ │ │ +897 } │ │ │ │ +898 return __ret; │ │ │ │ +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(_o_f_f___t_y_p_e __off, _i_o_s___b_a_s_e_:_:_s_e_e_k_d_i_r __way, __state_type __state) │ │ │ │ +905 { │ │ │ │ +906 _p_o_s___t_y_p_e __ret = _p_o_s___t_y_p_e(_o_f_f___t_y_p_e(-1)); │ │ │ │ +907 if (_M_terminate_output()) │ │ │ │ +908 { │ │ │ │ +909 _o_f_f___t_y_p_e __file_off = _M_file.seekoff(__off, __way); │ │ │ │ +910 if (__file_off != _o_f_f___t_y_p_e(-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; │ │ │ │ +917 __ret = __file_off; │ │ │ │ +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 │ │ │ │ +928 int _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +929_ ___M___g_e_t___e_x_t___p_o_s(__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 _b_a_s_i_c___f_i_l_e_b_u_f_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>_:_: │ │ │ │ +948_ ___M___t_e_r_m_i_n_a_t_e___o_u_t_p_u_t() │ │ │ │ +949 { │ │ │ │ +950 // Part one: update the output sequence. │ │ │ │ +951 bool __testvalid = true; │ │ │ │ +952 if (this->pbase() < this->pptr()) │ │ │ │ +953 { │ │ │ │ +954 const _i_n_t___t_y_p_e __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 _i_n_t___t_y_p_e __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 __ret = 0; │ │ │ │ +1014 if (this->_p_b_a_s_e() < this->_p_p_t_r()) │ │ │ │ +1015 { │ │ │ │ +1016 const int_type __tmp = this->_o_v_e_r_f_l_o_w(); │ │ │ │ +1017 if (traits_type::eq_int_type(__tmp, traits_type::eof())) │ │ │ │ +1018 __ret = -1; │ │ │ │ +1019 } │ │ │ │ +1020 return __ret; │ │ │ │ +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& __loc) │ │ │ │ +1027 { │ │ │ │ +1028 bool __testvalid = true; │ │ │ │ +1029 │ │ │ │ +1030 const __codecvt_type* const _M_codecvt_tmp │ │ │ │ +1031 = __try_use_facet<__codecvt_type>(__loc); │ │ │ │ +1032 │ │ │ │ +1033 if (this->_i_s___o_p_e_n()) │ │ │ │ +1034 { │ │ │ │ +1035 // encoding() == -1 is ok only at the beginning. │ │ │ │ +1036 if ((___M___r_e_a_d_i_n_g || _M_writing) │ │ │ │ +1037 && __check_facet(_M_codecvt).encoding() == -1) │ │ │ │ +1038 __testvalid = false; │ │ │ │ +1039 else │ │ │ │ +1040 { │ │ │ │ +1041 if (___M___r_e_a_d_i_n_g) │ │ │ │ +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->_s_e_e_k_o_f_f(0, _i_o_s___b_a_s_e_:_:_c_u_r, ___M___m_o_d_e) │ │ │ │ +1048 != pos_type(off_type(-1)); │ │ │ │ +1049 } │ │ │ │ +1050 else │ │ │ │ +1051 { │ │ │ │ +1052 // External position corresponding to gptr(). │ │ │ │ +1053 ___M___e_x_t___n_e_x_t = ___M___e_x_t___b_u_f │ │ │ │ +1054 + _M_codecvt->length(_M_state_last, ___M___e_x_t___b_u_f, │ │ │ │ +1055 ___M___e_x_t___n_e_x_t, │ │ │ │ +1056 this->_g_p_t_r() - this->_e_b_a_c_k()); │ │ │ │ +1057 const _s_t_r_e_a_m_s_i_z_e __remainder = _M_ext_end - ___M___e_x_t___n_e_x_t; │ │ │ │ +1058 if (__remainder) │ │ │ │ +1059 __builtin_memmove(___M___e_x_t___b_u_f, ___M___e_x_t___n_e_x_t, __remainder); │ │ │ │ +1060 │ │ │ │ +1061 ___M___e_x_t___n_e_x_t = ___M___e_x_t___b_u_f; │ │ │ │ +1062 _M_ext_end = ___M___e_x_t___b_u_f + __remainder; │ │ │ │ +1063 ___M___s_e_t___b_u_f_f_e_r(-1); │ │ │ │ +1064 _M_state_last = _M_state_cur = _M_state_beg; │ │ │ │ +1065 } │ │ │ │ +1066 } │ │ │ │ +1067 else if (_M_writing && (__testvalid = _M_terminate_output())) │ │ │ │ +1068 ___M___s_e_t___b_u_f_f_e_r(-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 _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 │ │ │ │ -The actual work of input and output (interface). │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_1_2_5 │ │ │ │ -_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___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_:_:___M___p_b_a_c_k │ │ │ │ +char_type _M_pback │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_:_1_7_4 │ │ │ │ +_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_:_:___M___m_o_d_e │ │ │ │ +ios_base::openmode _M_mode │ │ │ │ +Place to stash in || out || in | out settings for current filebuf. │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_:_1_3_1 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_b_u_f_:_:___M___e_x_t___b_u_f___s_i_z_e │ │ │ │ +streamsize _M_ext_buf_size │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_:_1_9_3 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_b_u_f_:_:___M___p_b_a_c_k___c_u_r___s_a_v_e │ │ │ │ +char_type * _M_pback_cur_save │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_:_1_7_5 │ │ │ │ +_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 _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_:_:_i_s___o_p_e_n │ │ │ │ +bool is_open() const │ │ │ │ +Returns true if the external file is open. │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_:_2_7_5 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_b_u_f_:_:___M___b_u_f___s_i_z_e │ │ │ │ +size_t _M_buf_size │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_:_1_5_3 │ │ │ │ +_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_:_:___M___p_b_a_c_k___e_n_d___s_a_v_e │ │ │ │ +char_type * _M_pback_end_save │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_:_1_7_6 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_b_u_f_:_:___M___e_x_t___b_u_f │ │ │ │ +char * _M_ext_buf │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_:_1_8_8 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_b_u_f_:_:___M___d_e_s_t_r_o_y___p_b_a_c_k │ │ │ │ +void _M_destroy_pback() │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_:_2_2_6 │ │ │ │ +_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_:_:___M___b_u_f │ │ │ │ +char_type * _M_buf │ │ │ │ +Pointer to the beginning of internal buffer. │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_:_1_4_6 │ │ │ │ +_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_:_:___M___p_b_a_c_k___i_n_i_t │ │ │ │ +bool _M_pback_init │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_:_1_7_7 │ │ │ │ +_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_:_:___M___c_r_e_a_t_e___p_b_a_c_k │ │ │ │ +void _M_create_pback() │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_:_2_0_9 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_i_l_e_b_u_f_:_:___M___r_e_a_d_i_n_g │ │ │ │ +bool _M_reading │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_:_1_6_5 │ │ │ │ +_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_:_:___M___s_e_t___b_u_f_f_e_r │ │ │ │ +void _M_set_buffer(streamsize __off) │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_:_4_9_9 │ │ │ │ +_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_:_:___M___e_x_t___n_e_x_t │ │ │ │ +const char * _M_ext_next │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_:_2_0_0 │ │ │ │ +_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___i_f_s_t_r_e_a_m │ │ │ │ +Controlling input for files. │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_:_5_3_3 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___o_f_s_t_r_e_a_m │ │ │ │ +Controlling output for files. │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_:_8_0_3 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___f_s_t_r_e_a_m │ │ │ │ +Controlling input and output for files. │ │ │ │ +DDeeffiinniittiioonn _f_s_t_r_e_a_m_:_1_0_7_5 │ │ │ │ _s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_e_p_p_t_r │ │ │ │ char_type * epptr() const │ │ │ │ Access to the put area. │ │ │ │ DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_5_4_2 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_o_v_e_r_f_l_o_w │ │ │ │ -virtual int_type overflow(int_type __c=traits_type::eof()) │ │ │ │ -Consumes data from the buffer; writes to the controlled sequence. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_7_7_5 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_x_s_p_u_t_n │ │ │ │ +_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_ _>_:_:_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_:_:_p_p_t_r │ │ │ │ char_type * pptr() const │ │ │ │ Access to the put area. │ │ │ │ DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_5_3_9 │ │ │ │ -_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_:_:_u_f_l_o_w │ │ │ │ -virtual int_type uflow() │ │ │ │ -Fetches more data from the controlled sequence. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_7_0_7 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_s_e_t_g │ │ │ │ +void setg(char_type *__gbeg, char_type *__gnext, char_type *__gend) │ │ │ │ +Setting the three read area pointers. │ │ │ │ +DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_5_1_6 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_e_b_a_c_k │ │ │ │ +char_type * eback() const │ │ │ │ +Access to the get area. │ │ │ │ +DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_4_8_9 │ │ │ │ _s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_e_g_p_t_r │ │ │ │ char_type * egptr() const │ │ │ │ Access to the get area. │ │ │ │ DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_4_9_5 │ │ │ │ _s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_g_p_t_r │ │ │ │ char_type * gptr() const │ │ │ │ Access to the get area. │ │ │ │ DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_4_9_2 │ │ │ │ -_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___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_ _>_:_:_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 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_s_n_e_x_t_c │ │ │ │ -int_type snextc() │ │ │ │ -Getting the next character. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_3_0_5 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_s_g_e_t_c │ │ │ │ -int_type sgetc() │ │ │ │ -Getting the next character. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_3_4_5 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_s_p_u_t_c │ │ │ │ -int_type sputc(char_type __c) │ │ │ │ -Entry point for all single-character output functions. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_4_3_1 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_g_b_u_m_p │ │ │ │ +void gbump(int __n) │ │ │ │ +Moving the read position. │ │ │ │ +DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_5_0_5 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_p_b_u_m_p │ │ │ │ +void pbump(int __n) │ │ │ │ +Moving the write position. │ │ │ │ +DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_5_5_2 │ │ │ │ +_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_p_b_a_s_e │ │ │ │ +char_type * pbase() const │ │ │ │ +Access to the put area. │ │ │ │ +DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_5_3_6 │ │ │ │ +_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_:_:_p_o_s___t_y_p_e │ │ │ │ +_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_:_:_s_e_e_k_d_i_r │ │ │ │ +_Ios_Seekdir seekdir │ │ │ │ +This is an enumerated type. │ │ │ │ +DDeeffiinniittiioonn _i_o_s___b_a_s_e_._h_:_5_1_2 │ │ │ │ +_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 │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00398.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: streambuf_iterator.h File Reference │ │ │ +libstdc++: text_encoding-data.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,64 +48,57 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
streambuf_iterator.h File Reference
│ │ │ +
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,50 +1,16 @@ │ │ │ │ libstdc++ │ │ │ │ -streambuf_iterator.h File Reference │ │ │ │ +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 (const _CharT │ │ │ │ -_CharT >::__value, _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< *__first, const _CharT *__last, │ │ │ │ - _CharT > >::__type  _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< _CharT > __result) │ │ │ │ -template │ │ │ │ - __gnu_cxx::__enable_if< __is_char< _s_t_d_:_:_____c_o_p_y___m_o_v_e___a_2 │ │ │ │ - _CharT >::__value, _CharT * >::__type  (_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< _CharT > __first, │ │ │ │ - _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< _CharT > __last, │ │ │ │ - _CharT *__result) │ │ │ │ -template │ │ │ │ - __gnu_cxx::__enable_if< __is_char< _s_t_d_:_:_____c_o_p_y___n___a (_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< │ │ │ │ - _CharT >::__value, _CharT * >::__type  _CharT > __it, _Size __n, _CharT │ │ │ │ - *__result, bool __strict) │ │ │ │ -template │ │ │ │ - __gnu_cxx::__enable_if< __is_char< _s_t_d_:_:_a_d_v_a_n_c_e (_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< │ │ │ │ - _CharT >::__value, void >::__type  _CharT > &__i, _Distance __n) │ │ │ │ -template │ │ │ │ - __gnu_cxx::__enable_if< __is_char< _s_t_d_:_:_c_o_p_y (_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< _CharT │ │ │ │ -_CharT >::__value, _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< > __first, _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< _CharT │ │ │ │ - _CharT > >::__type  > __last, _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< _CharT > │ │ │ │ - __result) │ │ │ │ -template │ │ │ │ - __gnu_cxx::__enable_if< __is_char< _s_t_d_:_:_f_i_n_d (_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< _CharT │ │ │ │ -_CharT >::__value, _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< > __first, _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< _CharT │ │ │ │ - _CharT > >::__type  > __last, const _CharT &__val) │ │ │ │ -template │ │ │ │ - bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const │ │ │ │ - _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< _CharT, _Traits > │ │ │ │ - &__a, const _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r< │ │ │ │ - _CharT, _Traits > &__b) │ │ │ │ +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. │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00398_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: streambuf_iterator.h Source File │ │ │ +libstdc++: text_encoding-data.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,616 +48,953 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
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
│ │ │ -
103 advance(istreambuf_iterator<_CharT2>&, _Distance);
│ │ │ -
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.
│ │ │ -
│ │ │ -
118 _GLIBCXX_CONSTEXPR istreambuf_iterator() _GLIBCXX_USE_NOEXCEPT
│ │ │ -
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.
│ │ │ -
│ │ │ -
133 istreambuf_iterator(istream_type& __s) _GLIBCXX_USE_NOEXCEPT
│ │ │ -
134 : _M_sbuf(__s.rdbuf()), _M_c(traits_type::eof()) { }
│ │ │ -
│ │ │ -
135
│ │ │ -
136 /// Construct start of streambuf iterator.
│ │ │ -
│ │ │ -
137 istreambuf_iterator(streambuf_type* __s) _GLIBCXX_USE_NOEXCEPT
│ │ │ -
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
│ │ │ -
149 char_type
│ │ │ -
│ │ │ -
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
│ │ │ -
187 istreambuf_iterator __old = *this;
│ │ │ -
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,
│ │ │ - │ │ │ -
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,
│ │ │ - │ │ │ -
244 { return !__a.equal(__b); }
│ │ │ -
245#endif
│ │ │ -
246
│ │ │ -
247 /// Provides output iterator semantics for streambufs.
│ │ │ -
248 template<typename _CharT, typename _Traits>
│ │ │ -
│ │ │ -
249 class ostreambuf_iterator
│ │ │ -
250 : public iterator<output_iterator_tag, void, void, void, void>
│ │ │ -
251 {
│ │ │ -
252 public:
│ │ │ -
253 // Types:
│ │ │ -
254 ///@{
│ │ │ -
255 /// Public typedefs
│ │ │ -
256#if __cplusplus > 201703L
│ │ │ -
257 using difference_type = ptrdiff_t;
│ │ │ -
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,
│ │ │ -
267 ostreambuf_iterator<_CharT2> >::__type
│ │ │ - │ │ │ -
269 ostreambuf_iterator<_CharT2>);
│ │ │ -
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.
│ │ │ -
│ │ │ -
284 ostreambuf_iterator(ostream_type& __s) _GLIBCXX_USE_NOEXCEPT
│ │ │ -
285 : _M_sbuf(__s.rdbuf()), _M_failed(!_M_sbuf) { }
│ │ │ -
│ │ │ -
286
│ │ │ -
287 /// Construct output iterator from streambuf.
│ │ │ -
│ │ │ -
288 ostreambuf_iterator(streambuf_type* __s) _GLIBCXX_USE_NOEXCEPT
│ │ │ -
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
│ │ │ -
│ │ │ -
320 failed() const _GLIBCXX_USE_NOEXCEPT
│ │ │ -
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,
│ │ │ - │ │ │ -
339 copy(istreambuf_iterator<_CharT> __first,
│ │ │ - │ │ │ - │ │ │ -
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,
│ │ │ - │ │ │ -
356 __copy_move_a2(_CharT* __first, _CharT* __last,
│ │ │ - │ │ │ -
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,
│ │ │ - │ │ │ -
368 __copy_move_a2(const _CharT* __first, const _CharT* __last,
│ │ │ - │ │ │ -
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,
│ │ │ - │ │ │ -
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.
│ │ │ -
The actual work of input and output (interface).
Definition streambuf:125
│ │ │ -
streamsize sputn(const char_type *__s, streamsize __n)
Entry point for all single-character output functions.
Definition streambuf:457
│ │ │ -
int_type sgetc()
Getting the next character.
Definition streambuf:345
│ │ │ -
Template class basic_istream.
Definition istream:61
│ │ │ -
Template class basic_ostream.
Definition ostream:67
│ │ │ -
Provides input iterator semantics for streambufs.
│ │ │ -
basic_streambuf< _CharT, _Traits > streambuf_type
Public typedefs.
│ │ │ -
void pointer
Public typedefs.
│ │ │ -
constexpr istreambuf_iterator() noexcept
Construct end of input stream iterator.
│ │ │ -
basic_istream< _CharT, _Traits > istream_type
Public typedefs.
│ │ │ -
char_type operator*() const
Return the current character pointed to by iterator. This returns streambuf.sgetc()....
│ │ │ -
bool equal(const istreambuf_iterator &__b) const
Return true both iterators are end or both are not end.
│ │ │ -
istreambuf_iterator & operator++()
Advance the iterator. Calls streambuf.sbumpc().
│ │ │ -
_Traits traits_type
Public typedefs.
│ │ │ -
istreambuf_iterator(istream_type &__s) noexcept
Construct start of input stream iterator.
│ │ │ -
istreambuf_iterator operator++(int)
Advance the iterator. Calls streambuf.sbumpc().
│ │ │ -
_CharT char_type
Public typedefs.
│ │ │ -
istreambuf_iterator(streambuf_type *__s) noexcept
Construct start of streambuf iterator.
│ │ │ -
_Traits::int_type int_type
Public typedefs.
│ │ │ -
Provides output iterator semantics for streambufs.
│ │ │ -
ostreambuf_iterator & operator++(int)
Return *this.
│ │ │ -
ptrdiff_t difference_type
Public typedefs.
│ │ │ -
ostreambuf_iterator & operator++()
Return *this.
│ │ │ -
bool failed() const noexcept
Return true if previous operator=() failed.
│ │ │ -
_Traits traits_type
Public typedefs.
│ │ │ -
ostreambuf_iterator & operator=(_CharT __c)
Write character to streambuf. Calls streambuf.sputc().
│ │ │ -
ostreambuf_iterator & operator*()
Return *this.
│ │ │ -
basic_ostream< _CharT, _Traits > ostream_type
Public typedefs.
│ │ │ -
basic_streambuf< _CharT, _Traits > streambuf_type
Public typedefs.
│ │ │ -
ostreambuf_iterator(ostream_type &__s) noexcept
Construct output iterator from ostream.
│ │ │ -
_CharT char_type
Public typedefs.
│ │ │ -
ostreambuf_iterator(streambuf_type *__s) noexcept
Construct output iterator from streambuf.
│ │ │ - │ │ │ - │ │ │ -
Common iterator class.
│ │ │ - │ │ │ +
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,673 +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 = void; │ │ │ │ -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 _CharT2*>::__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_>, _CharT2*); │ │ │ │ -88 │ │ │ │ -89 template │ │ │ │ -90 friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, │ │ │ │ -91 _CharT2*>::__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, _CharT2*, 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 _CharT2&); │ │ │ │ -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_>&, _Distance); │ │ │ │ -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 _GLIBCXX_CONSTEXPR _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r() _GLIBCXX_USE_NOEXCEPT │ │ │ │ -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) _GLIBCXX_USE_NOEXCEPT │ │ │ │ -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) _GLIBCXX_USE_NOEXCEPT │ │ │ │ -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 char_type │ │ │ │ -_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 __old = *this; │ │ │ │ -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 │ │ │ │ -_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 __ret = _M_c; │ │ │ │ -207 if (_M_sbuf && _S_is_eof(__ret) && _S_is_eof(__ret = _M_sbuf->_s_g_e_t_c())) │ │ │ │ -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(_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 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>& __a, │ │ │ │ -235 const _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>& __b) │ │ │ │ -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 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>& __a, │ │ │ │ -243 const _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_,_ ___T_r_a_i_t_s_>& __b) │ │ │ │ -244 { return !__a.equal(__b); } │ │ │ │ -245#endif │ │ │ │ -246 │ │ │ │ -247 /// Provides output iterator semantics for streambufs. │ │ │ │ -248 template │ │ │ │ -_2_4_9 class ostreambuf_iterator │ │ │ │ -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 = ptrdiff_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 ostreambuf_iterator<_CharT2> >::__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 ostreambuf_iterator<_CharT2>); │ │ │ │ -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 ostreambuf_iterator() noexcept │ │ │ │ -280 : _M_sbuf(nullptr), _M_failed(true) { } │ │ │ │ -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) _GLIBCXX_USE_NOEXCEPT │ │ │ │ -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) _GLIBCXX_USE_NOEXCEPT │ │ │ │ -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() const _GLIBCXX_USE_NOEXCEPT │ │ │ │ -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* __ws, _s_t_r_e_a_m_s_i_z_e __len) │ │ │ │ -325 { │ │ │ │ -326 if (__builtin_expect(!_M_failed, true) │ │ │ │ -327 && __builtin_expect(this->_M_sbuf->_s_p_u_t_n(__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 │ │ │ │ -337 typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, │ │ │ │ -338 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> >::__type │ │ │ │ -339 copy(_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __first, │ │ │ │ -340 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __last, │ │ │ │ -341 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __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 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> >::__type │ │ │ │ -356 __copy_move_a2(_CharT* __first, _CharT* __last, │ │ │ │ -357 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __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 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> >::__type │ │ │ │ -368 __copy_move_a2(const _CharT* __first, const _CharT* __last, │ │ │ │ -369 _o_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __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(_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __first, │ │ │ │ -381 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __last, _CharT* __result) │ │ │ │ -382 { │ │ │ │ -383 typedef _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __is_iterator_type; │ │ │ │ -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 _i_n_t___t_y_p_e; │ │ │ │ -387 │ │ │ │ -388 if (__first._M_sbuf && !__last._M_sbuf) │ │ │ │ -389 { │ │ │ │ -390 streambuf_type* __sb = __first._M_sbuf; │ │ │ │ -391 _i_n_t___t_y_p_e __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(_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __it, _Size __n, _CharT* __result, │ │ │ │ -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 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> >::__type │ │ │ │ -435 find(_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __first, │ │ │ │ -436 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __last, const _CharT& __val) │ │ │ │ -437 { │ │ │ │ -438 typedef _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __is_iterator_type; │ │ │ │ -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 _i_n_t___t_y_p_e; │ │ │ │ -442 const _i_n_t___t_y_p_e __eof = traits_type::eof(); │ │ │ │ -443 │ │ │ │ -444 if (__first._M_sbuf && !__last._M_sbuf) │ │ │ │ -445 { │ │ │ │ -446 const _i_n_t___t_y_p_e __ival = traits_type::to_int_type(__val); │ │ │ │ -447 streambuf_type* __sb = __first._M_sbuf; │ │ │ │ -448 _i_n_t___t_y_p_e __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(_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_>& __i, _Distance __n) │ │ │ │ -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 _i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_<___C_h_a_r_T_> __is_iterator_type; │ │ │ │ -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 _i_n_t___t_y_p_e; │ │ │ │ -489 const _i_n_t___t_y_p_e __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_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f │ │ │ │ -The actual work of input and output (interface). │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_1_2_5 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_s_p_u_t_n │ │ │ │ -streamsize sputn(const char_type *__s, streamsize __n) │ │ │ │ -Entry point for all single-character output functions. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_4_5_7 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___s_t_r_e_a_m_b_u_f_:_:_s_g_e_t_c │ │ │ │ -int_type sgetc() │ │ │ │ -Getting the next character. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f_:_3_4_5 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___i_s_t_r_e_a_m │ │ │ │ -Template class basic_istream. │ │ │ │ -DDeeffiinniittiioonn _i_s_t_r_e_a_m_:_6_1 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___o_s_t_r_e_a_m │ │ │ │ -Template class basic_ostream. │ │ │ │ -DDeeffiinniittiioonn _o_s_t_r_e_a_m_:_6_7 │ │ │ │ -_s_t_d_:_:_i_s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r │ │ │ │ -Provides input iterator semantics for streambufs. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_5_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_:_:_p_o_i_n_t_e_r │ │ │ │ -void pointer │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_6_7 │ │ │ │ -_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_:_:_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ -ptrdiff_t difference_type │ │ │ │ -Public typedefs. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m_b_u_f___i_t_e_r_a_t_o_r_._h_:_2_5_7 │ │ │ │ -_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_:_:_i_n_t___t_y_p_e │ │ │ │ -_s_t_d_:_:_d_e_f_a_u_l_t___s_e_n_t_i_n_e_l___t │ │ │ │ -DDeeffiinniittiioonn _i_t_e_r_a_t_o_r___c_o_n_c_e_p_t_s_._h_:_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 │ │ │ │ -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 │ │ │ │ +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 │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00401.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stream_iterator.h File Reference │ │ │ +libstdc++: atomic_lockfree_defines.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,45 +48,49 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
stream_iterator.h File Reference
│ │ │ +
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,15 +1,21 @@ │ │ │ │ libstdc++ │ │ │ │ -stream_iterator.h File Reference │ │ │ │ +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_ _> │ │ │ │ -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_ _> │ │ │ │ -NNaammeessppaacceess │ │ │ │ -namespace   _s_t_d │ │ │ │ +MMaaccrrooss │ │ │ │ +#define  _A_T_O_M_I_C___B_O_O_L___L_O_C_K___F_R_E_E │ │ │ │ +#define  _A_T_O_M_I_C___C_H_A_R_1_6___T___L_O_C_K___F_R_E_E │ │ │ │ +#define  _A_T_O_M_I_C___C_H_A_R_3_2___T___L_O_C_K___F_R_E_E │ │ │ │ +#define  _A_T_O_M_I_C___C_H_A_R___L_O_C_K___F_R_E_E │ │ │ │ +#define  _A_T_O_M_I_C___I_N_T___L_O_C_K___F_R_E_E │ │ │ │ +#define  _A_T_O_M_I_C___L_L_O_N_G___L_O_C_K___F_R_E_E │ │ │ │ +#define  _A_T_O_M_I_C___L_O_N_G___L_O_C_K___F_R_E_E │ │ │ │ +#define  _A_T_O_M_I_C___P_O_I_N_T_E_R___L_O_C_K___F_R_E_E │ │ │ │ +#define  _A_T_O_M_I_C___S_H_O_R_T___L_O_C_K___F_R_E_E │ │ │ │ +#define  _A_T_O_M_I_C___W_C_H_A_R___T___L_O_C_K___F_R_E_E │ │ │ │ ********** 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. │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00401_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stream_iterator.h Source File │ │ │ +libstdc++: atomic_lockfree_defines.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,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
│ │ │ @@ -75,313 +75,61 @@ │ │ │
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;
│ │ │ -
62 typedef basic_istream<_CharT, _Traits> istream_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.
│ │ │ -
│ │ │ -
74 _GLIBCXX_CONSTEXPR istream_iterator()
│ │ │ -
75 _GLIBCXX_NOEXCEPT_IF(is_nothrow_default_constructible<_Tp>::value)
│ │ │ -
76 : _M_stream(0), _M_value(), _M_ok(false) {}
│ │ │ -
│ │ │ -
77
│ │ │ -
78 /// Construct start of input stream iterator.
│ │ │ -
│ │ │ -
79 istream_iterator(istream_type& __s)
│ │ │ -
80 : _M_stream(std::__addressof(__s)), _M_ok(true)
│ │ │ -
81 { _M_read(); }
│ │ │ -
│ │ │ -
82
│ │ │ -
83 _GLIBCXX_CONSTEXPR
│ │ │ - │ │ │ - │ │ │ -
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
│ │ │ -
│ │ │ - │ │ │ -
162 _GLIBCXX_NOEXCEPT
│ │ │ -
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)
│ │ │ -
171 _GLIBCXX_NOEXCEPT
│ │ │ -
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
│ │ │ -
203 using difference_type = ptrdiff_t;
│ │ │ -
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.
│ │ │ -
│ │ │ -
216 ostream_iterator(ostream_type& __s) _GLIBCXX_NOEXCEPT
│ │ │ -
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 */
│ │ │ -
│ │ │ -
229 ostream_iterator(ostream_type& __s, const _CharT* __c) _GLIBCXX_NOEXCEPT
│ │ │ -
230 : _M_stream(std::__addressof(__s)), _M_string(__c) { }
│ │ │ -
│ │ │ -
231
│ │ │ -
232 /// Copy constructor.
│ │ │ -
│ │ │ -
233 ostream_iterator(const ostream_iterator& __obj) _GLIBCXX_NOEXCEPT
│ │ │ -
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
│ │ │ - │ │ │ -
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 complex< _Tp > operator*(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x times y.
Definition complex:400
│ │ │ -
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Definition move.h:51
│ │ │ -
ISO C++ entities toplevel namespace is std.
│ │ │ -
Template class basic_istream.
Definition istream:61
│ │ │ -
Template class basic_ostream.
Definition ostream:67
│ │ │ -
is_nothrow_default_constructible
Definition type_traits:1193
│ │ │ -
is_nothrow_copy_constructible
Definition type_traits:1202
│ │ │ -
Basis for explicit traits specializations.
│ │ │ -
Common iterator class.
│ │ │ -
Provides input iterator semantics for streams.
│ │ │ -
istream_iterator(istream_type &__s)
Construct start of input stream iterator.
│ │ │ -
constexpr istream_iterator() noexcept(/*conditional */)
Construct end of input stream iterator.
│ │ │ -
friend bool operator==(const istream_iterator &__x, const istream_iterator &__y) noexcept
Return true if the iterators refer to the same stream, or are both at end-of-stream.
│ │ │ -
Provides output iterator semantics for streams.
│ │ │ -
_CharT char_type
Public typedef.
│ │ │ -
ostream_iterator(ostream_type &__s) noexcept
Construct from an ostream.
│ │ │ -
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,...
│ │ │ -
ptrdiff_t difference_type
Public typedef.
│ │ │ -
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,345 +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_> istream_type; │ │ │ │ +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 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. │ │ │ │ -_7_4 _GLIBCXX_CONSTEXPR _i_s_t_r_e_a_m___i_t_e_r_a_t_o_r() │ │ │ │ -75 _GLIBCXX_NOEXCEPT_IF(_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(false) {} │ │ │ │ -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(istream_type& __s) │ │ │ │ -80 : _M_stream(_s_t_d::_____a_d_d_r_e_s_s_o_f(__s)), _M_ok(true) │ │ │ │ -81 { _M_read(); } │ │ │ │ -82 │ │ │ │ -83 _GLIBCXX_CONSTEXPR │ │ │ │ -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& __obj) │ │ │ │ -85 _GLIBCXX_NOEXCEPT_IF(_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(__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 _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 _~_i_s_t_r_e_a_m___i_t_e_r_a_t_o_r() = 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 _GLIBCXX_NOEXCEPT │ │ │ │ -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 _GLIBCXX_NOEXCEPT │ │ │ │ -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 = ptrdiff_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) _GLIBCXX_NOEXCEPT │ │ │ │ -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) _GLIBCXX_NOEXCEPT │ │ │ │ -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& __obj) _GLIBCXX_NOEXCEPT │ │ │ │ -234 : _M_stream(__obj._M_stream), _M_string(__obj._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 _o_p_e_r_a_t_o_r_*() _GLIBCXX_NOEXCEPT │ │ │ │ -257 { return *this; } │ │ │ │ -258 │ │ │ │ -259 _o_s_t_r_e_a_m___i_t_e_r_a_t_o_r& │ │ │ │ -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_:_:_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_:_:_____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_:_:_b_a_s_i_c___i_s_t_r_e_a_m │ │ │ │ -Template class basic_istream. │ │ │ │ -DDeeffiinniittiioonn _i_s_t_r_e_a_m_:_6_1 │ │ │ │ -_s_t_d_:_:_b_a_s_i_c___o_s_t_r_e_a_m │ │ │ │ -Template class basic_ostream. │ │ │ │ -DDeeffiinniittiioonn _o_s_t_r_e_a_m_:_6_7 │ │ │ │ -_s_t_d_:_:_i_s___n_o_t_h_r_o_w___d_e_f_a_u_l_t___c_o_n_s_t_r_u_c_t_i_b_l_e │ │ │ │ -is_nothrow_default_constructible │ │ │ │ -DDeeffiinniittiioonn _t_y_p_e___t_r_a_i_t_s_:_1_1_9_3 │ │ │ │ -_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_2 │ │ │ │ -_s_t_d_:_:_c_h_a_r___t_r_a_i_t_s │ │ │ │ -Basis for explicit traits specializations. │ │ │ │ -DDeeffiinniittiioonn _c_h_a_r___t_r_a_i_t_s_._h_:_3_2_4 │ │ │ │ -_s_t_d_:_:_i_t_e_r_a_t_o_r │ │ │ │ -Common iterator class. │ │ │ │ -DDeeffiinniittiioonn _s_t_l___i_t_e_r_a_t_o_r___b_a_s_e___t_y_p_e_s_._h_:_1_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_:_:_d_i_f_f_e_r_e_n_c_e___t_y_p_e │ │ │ │ -ptrdiff_t difference_type │ │ │ │ -Public typedef. │ │ │ │ -DDeeffiinniittiioonn _s_t_r_e_a_m___i_t_e_r_a_t_o_r_._h_:_2_0_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 │ │ │ │ +64/// @} group atomics │ │ │ │ +65 │ │ │ │ +66#endif │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00404.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stl_vector.h File Reference │ │ │ +libstdc++: shared_ptr_atomic.h File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,141 +48,241 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -
stl_vector.h File Reference
│ │ │ +
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, _Lp > std::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, _Lp > std::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, _Lp > std::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, _Lp > std::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,58 +1,122 @@ │ │ │ │ libstdc++ │ │ │ │ -stl_vector.h File Reference │ │ │ │ +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___A_S_A_N___A_N_N_O_T_A_T_E___G_R_E_W(n) │ │ │ │ -#define  ___G_L_I_B_C_X_X___A_S_A_N___A_N_N_O_T_A_T_E___G_R_O_W(n) │ │ │ │ -#define  ___G_L_I_B_C_X_X___A_S_A_N___A_N_N_O_T_A_T_E___R_E_I_N_I_T │ │ │ │ -#define  ___G_L_I_B_C_X_X___A_S_A_N___A_N_N_O_T_A_T_E___S_H_R_I_N_K(n) │ │ │ │ +#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___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___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___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___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 │ │ │ │ -constexpr __detail::__synth3way_t< _Tp _s_t_d_:_:_o_p_e_r_a_t_o_r_<_=_> (const vector< _Tp, │ │ │ │ - >  _Alloc > &__x, const vector< _Tp, _Alloc │ │ │ │ - > &__y) │ │ │ │ -template │ │ │ │ - constexpr bool  _s_t_d_:_:_o_p_e_r_a_t_o_r_=_= (const vector< _Tp, │ │ │ │ - _Alloc > &__x, const vector< _Tp, _Alloc │ │ │ │ - > &__y) │ │ │ │ -template │ │ │ │ - constexpr void  _s_t_d_:_:_s_w_a_p (vector< _Tp, _Alloc > &__x, │ │ │ │ - vector< _Tp, _Alloc > &__y) noexcept(/ │ │ │ │ - *_c_o_n_d_i_t_i_o_n_a_l */) │ │ │ │ -template::value_type, typename _Allocator = │ │ │ │ -allocator<_ValT>, typename = _RequireInputIter<_InputIterator>, typename = │ │ │ │ -_RequireAllocator<_Allocator>> │ │ │ │ -   ssttdd::::vveeccttoorr (_InputIterator, │ │ │ │ - _InputIterator, _Allocator=_Allocator()) │ │ │ │ - -> vector< _ValT, _Allocator > │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_a_t_o_m_i_c___i_s___l_o_c_k___f_r_e_e (const __shared_ptr< _Tp, │ │ │ │ + _Lp > *) │ │ │ │ +template │ │ │ │ + bool  _s_t_d_:_:_a_t_o_m_i_c___i_s___l_o_c_k___f_r_e_e (const _s_h_a_r_e_d___p_t_r< _Tp > │ │ │ │ + *__p) │ │ │ │ +template │ │ │ │ +__shared_ptr< _Tp, _Lp >  _s_t_d_:_:_a_t_o_m_i_c___l_o_a_d (const __shared_ptr< _Tp, _Lp > │ │ │ │ + *__p) │ │ │ │ +template │ │ │ │ + _s_h_a_r_e_d___p_t_r< _Tp >  _s_t_d_:_:_a_t_o_m_i_c___l_o_a_d (const _s_h_a_r_e_d___p_t_r< _Tp > *__p) │ │ │ │ +template │ │ │ │ +__shared_ptr< _Tp, _Lp >  _s_t_d_:_:_a_t_o_m_i_c___l_o_a_d___e_x_p_l_i_c_i_t (const __shared_ptr< _Tp, │ │ │ │ + _Lp > *__p, _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +template │ │ │ │ + _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 (const _s_h_a_r_e_d___p_t_r< _Tp > │ │ │ │ + *__p, _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +template │ │ │ │ + void  _s_t_d_:_:_a_t_o_m_i_c___s_t_o_r_e (__shared_ptr< _Tp, _Lp > *__p, │ │ │ │ + __shared_ptr< _Tp, _Lp > __r) │ │ │ │ +template │ │ │ │ + void  _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 │ │ │ │ + void  _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, _Lp > │ │ │ │ + *__p, __shared_ptr< _Tp, _Lp > __r, _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +template │ │ │ │ + void  _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 │ │ │ │ +__shared_ptr< _Tp, _Lp >  _s_t_d_:_:_a_t_o_m_i_c___e_x_c_h_a_n_g_e (__shared_ptr< _Tp, _Lp > *__p, │ │ │ │ + __shared_ptr< _Tp, _Lp > __r) │ │ │ │ +template │ │ │ │ + _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 │ │ │ │ +__shared_ptr< _Tp, _Lp >  _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, _Lp │ │ │ │ + > *__p, __shared_ptr< _Tp, _Lp > __r, _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +template │ │ │ │ + _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 │ │ │ │ + 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, _Lp > *__p, __shared_ptr< _Tp, _Lp > *__v, │ │ │ │ + __shared_ptr< _Tp, _Lp > __w) │ │ │ │ +template │ │ │ │ + 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 │ │ │ │ + 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, _Lp > *__p, __shared_ptr< _Tp, │ │ │ │ + _Lp > *__v, __shared_ptr< _Tp, _Lp > __w, │ │ │ │ + _m_e_m_o_r_y___o_r_d_e_r, _m_e_m_o_r_y___o_r_d_e_r) │ │ │ │ +template │ │ │ │ + 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 │ │ │ │ + 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, │ │ │ │ + _Lp > *__p, __shared_ptr< _Tp, _Lp > *__v, │ │ │ │ + __shared_ptr< _Tp, _Lp > __w) │ │ │ │ +template │ │ │ │ + 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 │ │ │ │ + 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, _Lp > *__p, __shared_ptr< _Tp, │ │ │ │ + _Lp > *__v, __shared_ptr< _Tp, _Lp > __w, │ │ │ │ + _m_e_m_o_r_y___o_r_d_e_r __success, _m_e_m_o_r_y___o_r_d_e_r __failure) │ │ │ │ +template │ │ │ │ + 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 __success, │ │ │ │ + _m_e_m_o_r_y___o_r_d_e_r __failure) │ │ │ │ ********** 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 ( nn ) │ │ │ │ -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 ( nn ) │ │ │ │ -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 ( nn ) │ │ │ │ -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 ( XX ) │ │ │ │ +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 ( XX ) │ │ │ │ +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 ( XX ) │ │ │ │ +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 ( XX ) │ │ │ │ +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 ( XX ) │ │ │ │ +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 ( XX ) │ │ │ │ +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 ( XX ) │ │ │ │ +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 ( XX ) │ │ │ │ +Definition at line _5_4 of file _s_h_a_r_e_d___p_t_r___a_t_o_m_i_c_._h. │ │ │ │ * bbiittss │ │ │ │ - * _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.15.0 │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00404.js │ │ │ ├── js-beautify {} │ │ │ │ @@ -1,6 +1,24 @@ │ │ │ │ var a00404 = [ │ │ │ │ - ["std::_Vector_base< _Tp, _Alloc >", "a07296.html", null], │ │ │ │ - ["std::operator<=>", "a01700.html#a50f293a0e40b9059a7e4379b63a10737", null], │ │ │ │ - ["std::operator==", "a01700.html#a00026fa9234350d37423e7f059da985f", null], │ │ │ │ - ["std::swap", "a01700.html#ad420ada7eccdee66b60c11f6c84fce2f", null] │ │ │ │ + ["std::atomic_compare_exchange_strong", "a01625.html#ga7f9e658275d4a2cdbf1b6a00d02adcc7", null], │ │ │ │ + ["std::atomic_compare_exchange_strong", "a01625.html#ga8b4c27092fe0543d16aa24679ab64f35", null], │ │ │ │ + ["std::atomic_compare_exchange_strong_explicit", "a01625.html#ga8ac0b3f7aae34919ebc25fc54ff6b9c8", null], │ │ │ │ + ["std::atomic_compare_exchange_strong_explicit", "a01625.html#ga7b812df2cdd0c01f09d65168d22418c9", null], │ │ │ │ + ["std::atomic_compare_exchange_weak", "a01625.html#ga6860aafd01c4daf71cca0efe5193437f", null], │ │ │ │ + ["std::atomic_compare_exchange_weak", "a01625.html#ga6aa9828191cf7749c72581e719dde0b0", null], │ │ │ │ + ["std::atomic_compare_exchange_weak_explicit", "a01625.html#ga31df9efdf79235d0f8e112d245deb431", null], │ │ │ │ + ["std::atomic_compare_exchange_weak_explicit", "a01625.html#ga8ddc9b0002afbe0001718de9c8ca931e", null], │ │ │ │ + ["std::atomic_exchange", "a01625.html#ga781c3166a763da6704a757e45235d36f", null], │ │ │ │ + ["std::atomic_exchange", "a01625.html#ga2030e82e43a4017cbaa802974790bb25", null], │ │ │ │ + ["std::atomic_exchange_explicit", "a01625.html#ga94196a5199df82a0b4a6add046eb8579", null], │ │ │ │ + ["std::atomic_exchange_explicit", "a01625.html#ga0e5af6dda768cd829095adcd266e1f68", null], │ │ │ │ + ["std::atomic_is_lock_free", "a01625.html#ga005c6e4068fe3f26d09f5e24eaa87e92", null], │ │ │ │ + ["std::atomic_is_lock_free", "a01625.html#ga5fe925503fa03a8132ab6ac8c3d05017", null], │ │ │ │ + ["std::atomic_load", "a01625.html#gaa0e8444bce044d4c703faa284d5be31b", null], │ │ │ │ + ["std::atomic_load", "a01625.html#ga862acb9abfac21160395d3892d0fcda4", null], │ │ │ │ + ["std::atomic_load_explicit", "a01625.html#ga63bd95c47d868e1749c1934fe0f16283", null], │ │ │ │ + ["std::atomic_load_explicit", "a01625.html#ga15d2346b1ab42f5bd88978eb4f2eb5d5", null], │ │ │ │ + ["std::atomic_store", "a01625.html#gaf607a58027ea400e7688daa2832c67ef", null], │ │ │ │ + ["std::atomic_store", "a01625.html#gaad7c9077082544dc2454ef66eb252cad", null], │ │ │ │ + ["std::atomic_store_explicit", "a01625.html#ga4fb42f2c743388ba4dcf24abf0cc2701", null], │ │ │ │ + ["std::atomic_store_explicit", "a01625.html#gac459811f24dfa61ca04dff98c59b0433", null] │ │ │ │ ]; │ │ ├── ./usr/share/doc/gcc-14-base/libstdc++/user/a00404_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -libstdc++: stl_vector.h Source File │ │ │ +libstdc++: shared_ptr_atomic.h Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -48,20 +48,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
│ │ │ @@ -74,2378 +74,920 @@ │ │ │
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>
│ │ │ +
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#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>
│ │ │ -
│ │ │ -
87 struct _Vector_base
│ │ │ -
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
│ │ │ -
100 _GLIBCXX20_CONSTEXPR
│ │ │ -
101 _Vector_impl_data() _GLIBCXX_NOEXCEPT
│ │ │ -
102 : _M_start(), _M_finish(), _M_end_of_storage()
│ │ │ -
103 { }
│ │ │ -
104
│ │ │ -
105#if __cplusplus >= 201103L
│ │ │ -
106 _GLIBCXX20_CONSTEXPR
│ │ │ -
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
│ │ │ +
74 struct _Sp_locker
│ │ │ +
75 {
│ │ │ +
76 _Sp_locker(const _Sp_locker&) = delete;
│ │ │ +
77 _Sp_locker& operator=(const _Sp_locker&) = delete;
│ │ │ +
78
│ │ │ +
79#ifdef __GTHREADS
│ │ │ +
80 explicit
│ │ │ +
81 _Sp_locker(const void*) noexcept;
│ │ │ +
82 _Sp_locker(const void*, const void*) noexcept;
│ │ │ +
83 ~_Sp_locker();
│ │ │ +
84
│ │ │ +
85 private:
│ │ │ +
86 unsigned char _M_key1;
│ │ │ +
87 unsigned char _M_key2;
│ │ │ +
88#else
│ │ │ +
89 explicit _Sp_locker(const void*, const void* = nullptr) { }
│ │ │ +
90#endif
│ │ │ +
91 };
│ │ │ +
92
│ │ │ +
93 /// @endcond
│ │ │ +
94
│ │ │ +
95 /**
│ │ │ +
96 * @brief Report whether shared_ptr atomic operations are lock-free.
│ │ │ +
97 * @param __p A non-null pointer to a shared_ptr object.
│ │ │ +
98 * @return True if atomic access to @c *__p is lock-free, false otherwise.
│ │ │ +
99 * @{
│ │ │ +
100 */
│ │ │ +
101 template<typename _Tp, _Lock_policy _Lp>
│ │ │ +
102 _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
│ │ │ +
103 inline bool
│ │ │ +
│ │ │ +
104 atomic_is_lock_free(const __shared_ptr<_Tp, _Lp>*)
│ │ │ +
105 {
│ │ │ +
106#ifdef __GTHREADS
│ │ │ +
107 return __gthread_active_p() == 0;
│ │ │ +
108#else
│ │ │ +
109 return true;
│ │ │ +
110#endif
│ │ │ +
111 }
│ │ │ +
│ │ │
112
│ │ │ -
113 _GLIBCXX20_CONSTEXPR
│ │ │ -
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
│ │ │ -
122 _GLIBCXX20_CONSTEXPR
│ │ │ -
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 {
│ │ │ -
138 _GLIBCXX20_CONSTEXPR
│ │ │ -
139 _Vector_impl() _GLIBCXX_NOEXCEPT_IF(
│ │ │ - │ │ │ -
141#if __cpp_lib_concepts
│ │ │ -
142 requires is_default_constructible_v<_Tp_alloc_type>
│ │ │ -
143#endif
│ │ │ -
144 : _Tp_alloc_type()
│ │ │ -
145 { }
│ │ │ -
146
│ │ │ -
147 _GLIBCXX20_CONSTEXPR
│ │ │ -
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>.
│ │ │ -
155 _GLIBCXX20_CONSTEXPR
│ │ │ -
156 _Vector_impl(_Vector_impl&& __x) noexcept
│ │ │ -
157 : _Tp_alloc_type(std::move(__x)), _Vector_impl_data(std::move(__x))
│ │ │ -
158 { }
│ │ │ -
159
│ │ │ -
160 _GLIBCXX20_CONSTEXPR
│ │ │ -
161 _Vector_impl(_Tp_alloc_type&& __a) noexcept
│ │ │ -
162 : _Tp_alloc_type(std::move(__a))
│ │ │ -
163 { }
│ │ │ -
164
│ │ │ -
165 _GLIBCXX20_CONSTEXPR
│ │ │ -
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 {
│ │ │ - │ │ │ - │ │ │ -
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 {
│ │ │ - │ │ │ - │ │ │ -
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
│ │ │ -
205 if (std::is_constant_evaluated())
│ │ │ -
206 return;
│ │ │ -
207#endif
│ │ │ -
208 __sanitizer_annotate_contiguous_container(__impl._M_start,
│ │ │ -
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
│ │ │ -
237 _GLIBCXX20_CONSTEXPR
│ │ │ -
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 {
│ │ │ -
257 _GLIBCXX20_CONSTEXPR
│ │ │ -
258 _Grow(_Vector_impl& __impl, size_type __n)
│ │ │ -
259 : _M_impl(__impl), _M_n(__n)
│ │ │ -
260 { _S_grow(_M_impl, __n); }
│ │ │ -
261
│ │ │ -
262 _GLIBCXX20_CONSTEXPR
│ │ │ -
263 ~_Grow() { if (_M_n) _S_shrink(_M_impl, _M_n); }
│ │ │ -
264
│ │ │ -
265 _GLIBCXX20_CONSTEXPR
│ │ │ -
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
│ │ │ -
301 _GLIBCXX20_CONSTEXPR
│ │ │ -
302 _Tp_alloc_type&
│ │ │ -
303 _M_get_Tp_allocator() _GLIBCXX_NOEXCEPT
│ │ │ -
304 { return this->_M_impl; }
│ │ │ -
305
│ │ │ -
306 _GLIBCXX20_CONSTEXPR
│ │ │ -
307 const _Tp_alloc_type&
│ │ │ -
308 _M_get_Tp_allocator() const _GLIBCXX_NOEXCEPT
│ │ │ -
309 { return this->_M_impl; }
│ │ │ -
310
│ │ │ -
311 _GLIBCXX20_CONSTEXPR
│ │ │ -
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)
│ │ │ +
117 { return std::atomic_is_lock_free<_Tp, __default_lock_policy>(__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,
│ │ │ +
303 memory_order __success,
│ │ │ +
304 memory_order __failure)
│ │ │ +
305 {
│ │ │ +
306 return std::atomic_compare_exchange_strong_explicit(__p, __v,
│ │ │ +
307 std::move(__w), __success, __failure);
│ │ │ +
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 {
│ │ │ -
382 typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _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 __gnu_cxx::__alloc_traits<_Tp_alloc_type> _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 <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,
│ │ │ +
360 memory_order __success,
│ │ │ +
361 memory_order __failure)
│ │ │ +
362 {
│ │ │ +
363 return std::atomic_compare_exchange_strong_explicit(__p, __v,
│ │ │ +
364 std::move(__w), __success, __failure);
│ │ │ +
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
│ │ │ -
451 typedef _Vector_base<_Tp, _Alloc> _Base;
│ │ │ -
452 typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
│ │ │ -
453 typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Alloc_traits;
│ │ │ +
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;
│ │ │ -
464 typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
│ │ │ -
465 typedef std::reverse_iterator<iterator> reverse_iterator;
│ │ │ -
466 typedef size_t size_type;
│ │ │ -
467 typedef ptrdiff_t difference_type;
│ │ │ -
468 typedef _Alloc allocator_type;
│ │ │ -
469
│ │ │ -
470 private:
│ │ │ -
471#if __cplusplus >= 201103L
│ │ │ -
472 static constexpr bool
│ │ │ -
473 _S_nothrow_relocate(true_type)
│ │ │ -
474 {
│ │ │ -
475 return noexcept(std::__relocate_a(std::declval<pointer>(),
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
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
│ │ │ -
544 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ -
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
│ │ │ -
558 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ -
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 */
│ │ │ -
571 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ -
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 =
│ │ │ -
609 std::__uninitialized_copy_a(__x.begin(), __x.end(),
│ │ │ -
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
│ │ │ -
626 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ -
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:
│ │ │ -
637 _GLIBCXX20_CONSTEXPR
│ │ │ -
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
│ │ │ -
│ │ │ -
662 vector(vector&& __rv, const __type_identity_t<allocator_type>& __m)
│ │ │ -
663 noexcept( noexcept(
│ │ │ - │ │ │ - │ │ │ -
666 : vector(std::move(__rv), __m, typename _Alloc_traits::is_always_equal{})
│ │ │ -
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,
│ │ │ -
707 typename = std::_RequireInputIter<_InputIterator>>
│ │ │ -
708 _GLIBCXX20_CONSTEXPR
│ │ │ -
│ │ │ -
709 vector(_InputIterator __first, _InputIterator __last,
│ │ │ -
710 const allocator_type& __a = allocator_type())
│ │ │ -
711 : _Base(__a)
│ │ │ -
712 {
│ │ │ -
713#if __glibcxx_concepts // C++ >= C++20
│ │ │ -
714 if constexpr (sized_sentinel_for<_InputIterator, _InputIterator>
│ │ │ -
715 || forward_iterator<_InputIterator>)
│ │ │ -
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
│ │ │ -
│ │ │ -
746 ~vector() _GLIBCXX_NOEXCEPT
│ │ │ -
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 */
│ │ │ -
762 _GLIBCXX20_CONSTEXPR
│ │ │ -
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 */
│ │ │ -
777 _GLIBCXX20_CONSTEXPR
│ │ │ -
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 */
│ │ │ -
799 _GLIBCXX20_CONSTEXPR
│ │ │ -
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 */
│ │ │ -
819 _GLIBCXX20_CONSTEXPR
│ │ │ -
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,
│ │ │ -
838 typename = std::_RequireInputIter<_InputIterator>>
│ │ │ -
839 _GLIBCXX20_CONSTEXPR
│ │ │ -
840 void
│ │ │ -
│ │ │ -
841 assign(_InputIterator __first, _InputIterator __last)
│ │ │ -
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
│ │ │ - │ │ │ -
│ │ │ -
886 begin() _GLIBCXX_NOEXCEPT
│ │ │ -
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
│ │ │ -
│ │ │ -
896 begin() const _GLIBCXX_NOEXCEPT
│ │ │ -
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
│ │ │ - │ │ │ -
│ │ │ -
906 end() _GLIBCXX_NOEXCEPT
│ │ │ -
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
│ │ │ -
│ │ │ -
916 end() const _GLIBCXX_NOEXCEPT
│ │ │ -
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
│ │ │ - │ │ │ -
│ │ │ -
926 rbegin() _GLIBCXX_NOEXCEPT
│ │ │ -
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
│ │ │ -
│ │ │ -
936 rbegin() const _GLIBCXX_NOEXCEPT
│ │ │ -
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
│ │ │ - │ │ │ -
│ │ │ -
946 rend() _GLIBCXX_NOEXCEPT
│ │ │ -
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
│ │ │ -
│ │ │ -
956 rend() const _GLIBCXX_NOEXCEPT
│ │ │ -
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 */
│ │ │ -
965 [[__nodiscard__]] _GLIBCXX20_CONSTEXPR
│ │ │ -
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 */
│ │ │ -
975 [[__nodiscard__]] _GLIBCXX20_CONSTEXPR
│ │ │ -
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 */
│ │ │ -
985 [[__nodiscard__]] _GLIBCXX20_CONSTEXPR
│ │ │ -
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 */
│ │ │ -
995 [[__nodiscard__]] _GLIBCXX20_CONSTEXPR
│ │ │ -
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
│ │ │ -
│ │ │ -
1005 size() const _GLIBCXX_NOEXCEPT
│ │ │ -
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
│ │ │ -
│ │ │ -
1011 max_size() const _GLIBCXX_NOEXCEPT
│ │ │ -
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 _GLIBCXX20_CONSTEXPR
│ │ │ -
1025 void
│ │ │ -
│ │ │ -
1026 resize(size_type __new_size)
│ │ │ -
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 */
│ │ │ -
1045 _GLIBCXX20_CONSTEXPR
│ │ │ -
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 */
│ │ │ -
1066 _GLIBCXX20_CONSTEXPR
│ │ │ -
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
│ │ │ -
│ │ │ -
1091 capacity() const _GLIBCXX_NOEXCEPT
│ │ │ -
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
│ │ │ -
│ │ │ -
1103 empty() const _GLIBCXX_NOEXCEPT
│ │ │ -
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 */
│ │ │ -
1123 _GLIBCXX20_CONSTEXPR
│ │ │ -
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
│ │ │ -
│ │ │ -
1141 operator[](size_type __n) _GLIBCXX_NOEXCEPT
│ │ │ -
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().
│ │ │ -
1168 _GLIBCXX20_CONSTEXPR
│ │ │ -
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
│ │ │ -
│ │ │ -
1224 front() _GLIBCXX_NOEXCEPT
│ │ │ -
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
│ │ │ -
│ │ │ -
1236 front() const _GLIBCXX_NOEXCEPT
│ │ │ -
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
│ │ │ -
│ │ │ -
1248 back() _GLIBCXX_NOEXCEPT
│ │ │ -
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
│ │ │ -
│ │ │ -
1260 back() const _GLIBCXX_NOEXCEPT
│ │ │ -
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*
│ │ │ -
│ │ │ -
1275 data() _GLIBCXX_NOEXCEPT
│ │ │ -
1276 { return _M_data_ptr(this->_M_impl._M_start); }
│ │ │ -
│ │ │ -
1277
│ │ │ -
1278 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
│ │ │ -
1279 const _Tp*
│ │ │ -
1280 data() const _GLIBCXX_NOEXCEPT
│ │ │ -
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
│ │ │ -
1311 _GLIBCXX20_CONSTEXPR
│ │ │ -
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
│ │ │ -
│ │ │ -
1337 pop_back() _GLIBCXX_NOEXCEPT
│ │ │ -
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>
│ │ │ -
1359 _GLIBCXX20_CONSTEXPR
│ │ │ -
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 */
│ │ │ -
1375 _GLIBCXX20_CONSTEXPR
│ │ │ -
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 */
│ │ │ -
1406 _GLIBCXX20_CONSTEXPR
│ │ │ -
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 */
│ │ │ -
1424 _GLIBCXX20_CONSTEXPR
│ │ │ -
1425 iterator
│ │ │ -
│ │ │ -
1426 insert(const_iterator __position, initializer_list<value_type> __l)
│ │ │ -
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 */
│ │ │ -
1450 _GLIBCXX20_CONSTEXPR
│ │ │ -
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,
│ │ │ -
1494 typename = std::_RequireInputIter<_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
│ │ │ -
1522 insert(iterator __position, _InputIterator __first,
│ │ │ -
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
│ │ │ -
1552 erase(iterator __position)
│ │ │ -
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
│ │ │ -
│ │ │ -
1601 swap(vector& __x) _GLIBCXX_NOEXCEPT
│ │ │ -
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 _GLIBCXX20_CONSTEXPR
│ │ │ -
1619 void
│ │ │ -
│ │ │ -
1620 clear() _GLIBCXX_NOEXCEPT
│ │ │ -
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>
│ │ │ -
1629 _GLIBCXX20_CONSTEXPR
│ │ │ -
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,
│ │ │ -
1683 std::input_iterator_tag)
│ │ │ -
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,
│ │ │ -
1703 std::forward_iterator_tag)
│ │ │ -
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,
│ │ │ -
1772 std::input_iterator_tag);
│ │ │ -
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,
│ │ │ -
1779 std::forward_iterator_tag);
│ │ │ -
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()),
│ │ │ -
2012 std::random_access_iterator_tag());
│ │ │ -
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
│ │ │ -
2027 typename std::pointer_traits<_Ptr>::element_type*
│ │ │ -
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
│ │ │ - │ │ │ -
2051 typename _Allocator = allocator<_ValT>,
│ │ │ -
2052 typename = _RequireInputIter<_InputIterator>,
│ │ │ -
2053 typename = _RequireAllocator<_Allocator>>
│ │ │ -
2054 vector(_InputIterator, _InputIterator, _Allocator = _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 {
│ │ │ - │ │ │ -
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 TRUNCATED DUE TO SIZE LIMIT: 10485760 bytes